From fe7381d6e8ec1f427408de0297ac7f41533202f6 Mon Sep 17 00:00:00 2001
From: 胡仁荣 <897853850@qq.com>
Date: 星期一, 31 十月 2022 10:29:02 +0800
Subject: [PATCH] 初始项目

---
 src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java                                        |  457 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java                              |  169 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemScore.java                  |   77 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccountRe.java                        |   41 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java                             |  236 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java      |   73 
 src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java                                   |  187 
 src/main/java/com/qxueyou/scc/user/model/UserRole.java                                                |  253 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamItemType.java                                |  206 
 src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java                                 |  467 
 src/main/java/com/qxueyou/scc/controller/ClassRoomController.java                                     |  194 
 src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java                                    |  229 
 src/main/java/com/qxueyou/scc/exam/service/impl/ExamBatchService.java                                 |  150 
 src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java                      |   92 
 src/main/resources/static/images/res1.png                                                             |    0 
 src/main/java/com/qxueyou/scc/school/model/InteractResultData.java                                    |   61 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchClassRe.java                       |   76 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java                               |  184 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateCategory.java                  |   61 
 target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroupUserRe.java                          |   55 
 src/main/java/com/qxueyou/scc/school/service/impl/SchoolSubjectService.java                           |   36 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java                 |  183 
 src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java                            |   55 
 src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java                          |  104 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemVideo.java                      |   79 
 src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java                               |  172 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudyReport.java                       |   95 
 src/main/resources/static/images/paper.png                                                            |    0 
 src/main/java/com/qxueyou/scc/school/service/impl/SignService.java                                    | 1389 
 src/main/java/com/qxueyou/scc/base/util/QBeanUtils.java                                               |  200 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveOrder.java              |   59 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java                             |  553 
 target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectLecture.java             |   69 
 target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeVId.java  |   39 
 src/main/java/com/qxueyou/scc/base/model/ExcelExportParam.java                                        |  116 
 src/main/resources/static/images/eval1.png                                                            |    0 
 src/main/java/com/qxueyou/scc/admin/classes/dao/ClassDAO.java                                         |   56 
 src/main/java/com/qxueyou/scc/user/model/UserOperate.java                                             |  334 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java                        |   41 
 src/main/java/com/qxueyou/scc/media/model/VideoInf.java                                               |   92 
 src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java                                    |  301 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchReClassUser.java                       |   41 
 src/main/java/com/qxueyou/scc/exam/model/ExamResultVId.java                                           |   91 
 target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreVId.java           |   39 
 target/classes/static/images/topic1.png                                                               |    0 
 src/main/java/com/qxueyou/scc/base/util/RequestClientUtils.java                                       |  183 
 src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java                                      |  197 
 target/classes/static/images/exam1.png                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankHis.java                           |   67 
 target/classes/static/images/room1.png                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentImg.java                 |   57 
 src/main/java/com/qxueyou/scc/school/model/SchChapter.java                                            |  308 
 target/classes/static/images/paper.png                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppMenu.java                              |   71 
 src/main/java/com/qxueyou/scc/base/model/Result.java                                                  |  146 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemArticle.java                    |   59 
 src/main/java/com/qxueyou/scc/sys/service/impl/SysLogService.java                                     |   33 
 src/main/java/com/qxueyou/scc/msg/service/IChatroomMsgService.java                                    |   14 
 src/main/java/com/qxueyou/scc/base/util/SpringUtil.java                                               |   61 
 src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java                                               |   64 
 src/main/java/com/qxueyou/scc/exam/action/ExamPaperController.java                                    |  211 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java                               |  174 
 src/main/java/com/qxueyou/scc/base/model/UserInfoWrapper.java                                         |  421 
 D_/logOns/qxueyouOns.log                                                                              |    0 
 src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java                                        |   62 
 src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java                                     |  156 
 target/classes/static/index.html                                                                      |   11 
 src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java                                        |  193 
 src/main/java/com/qxueyou/scc/base/util/CommonUtils.java                                              |  291 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgTeacher.java                              |   86 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java                                  |  287 
 src/main/resources/static/images/room1.png                                                            |    0 
 src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java                                     |   93 
 src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java                                        |   98 
 src/main/java/com/qxueyou/scc/school/model/SchFile.java                                               |  213 
 src/main/resources/static/images/camera1.png                                                          |    0 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplayReClip.java       |   65 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignOrder.java                         |   61 
 src/main/java/com/qxueyou/scc/controller/IndexController.java                                         |   65 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgMarketPrivilege.java                      |   61 
 src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java                                       |  301 
 src/main/java/com/qxueyou/scc/notice/model/Notice.java                                                |  542 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVisitor.java                         |   55 
 target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java                    |   73 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java                               |  139 
 src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java                                                |  108 
 src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java                                        |  294 
 src/main/resources/static/images/teacher1.png                                                         |    0 
 src/main/java/com/qxueyou/scc/admin/notice/service/INoticeService.java                                |  133 
 src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java                                           |  194 
 target/classes/static/images/schedule1.png                                                            |    0 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseObjectImg.java                  |   59 
 src/main/java/com/qxueyou/scc/controller/NoticeController.java                                        |  272 
 src/main/java/com/qxueyou/scc/base/service/impl/DictionaryService.java                                |   33 
 src/main/java/com/qxueyou/scc/base/util/QFileUtils.java                                               |   27 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCategoryLevel.java                        |   78 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswerU.java                |   80 
 src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java                                           |  258 
 target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeV.java    |   61 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemVId.java                            |   39 
 src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java                                        |  366 
 src/main/resources/static/redirect.html                                                               |   10 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureDocV.java                               |   62 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QOpenSubjectV.java             |   51 
 src/main/java/com/qxueyou/scc/school/service/IRankService.java                                        |  120 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java            |   37 
 src/main/java/com/qxueyou/scc/sms/model/SmsContants.java                                              |  224 
 src/main/java/com/qxueyou/scc/base/util/PhoneNOUtils.java                                             |   43 
 src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperService.java                                 |  202 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBank.java                                 |   45 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserStudent.java                            |   61 
 src/main/java/com/qxueyou/scc/base/service/impl/ONSExceptionLogService.java                           |   60 
 src/main/java/com/qxueyou/scc/exam/model/ExamResultV.java                                             |  339 
 src/main/java/com/qxueyou/scc/controller/SubjectController.java                                       |  309 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java                            |   43 
 src/main/java/com/qxueyou/scc/base/util/UUIDUtils.java                                                |   76 
 D_/log/qxueyou.log                                                                                    | 1204 
 src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java                                                |  180 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java                            |  238 
 src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java                            |  118 
 target/classes/static/images/eval1.png                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchVideoFile.java                         |   57 
 src/main/java/com/qxueyou/scc/school/model/SchHandoutPageFavor.java                                   |  173 
 src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java                              |  802 
 src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java                          |  853 
 src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java                              |  223 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistrationCustom.java                 |   63 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java             |   93 
 src/main/java/com/qxueyou/scc/org/model/OrgClassVideoPrivilege.java                                   |  126 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemSet.java                    |   81 
 src/main/java/com/qxueyou/scc/exam/dao/ExamDao.java                                                   |   16 
 src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java                                   |  132 
 src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java                                        |  319 
 src/main/java/com/qxueyou/scc/exam/service/IExamPaperService.java                                     |   92 
 src/main/resources/static/images/study1.png                                                           |    0 
 src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java                             |   63 
 src/main/resources/log4j2.xml                                                                         |   85 
 src/main/resources/static/images/1.jpg                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysFileUploadTrace.java                      |   65 
 src/main/java/com/qxueyou/scc/base/model/WbCacheKey.java                                              |  122 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java                                |  201 
 target/classes/static/images/camera1.png                                                              |    0 
 src/main/java/com/qxueyou/scc/school/dao/RankDAO.java                                                 |   58 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegePublic.java                        |   71 
 src/main/java/com/qxueyou/scc/org/model/OrgStudent.java                                               |  204 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureVideoV.java            |   41 
 src/main/java/com/qxueyou/scc/sys/service/impl/AuthorizeService.java                                  |   19 
 src/main/java/com/qxueyou/scc/courseware/service/impl/CourseService.java                              |  326 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java                                |  445 
 target/classes/static/images/ca.jpg                                                                   |    0 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java                       |  270 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java                                 |  298 
 target/generated-sources/java/com/qxueyou/scc/base/model/QUserCipher.java                             |   59 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchFile.java                              |   67 
 src/main/java/com/qxueyou/scc/school/service/ISchoolSubjectService.java                               |   10 
 src/main/java/com/qxueyou/scc/sys/model/SysAttachment.java                                            |  193 
 src/main/java/com/qxueyou/scc/sys/service/impl/Listener.java                                          |   18 
 target/classes/public/index.html                                                                      |   11 
 src/main/java/com/qxueyou/scc/controller/VideoLiveController.java                                     |  336 
 src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java                                 |  193 
 src/main/java/com/qxueyou/scc/exam/model/ExamInfo.java                                                |  455 
 src/main/resources/static/images/class2.png                                                           |    0 
 src/main/java/com/qxueyou/scc/msg/model/MsgUser.java                                                  |  312 
 src/main/java/com/qxueyou/scc/base/service/impl/LicenseService.java                                   |   75 
 src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java                                   |  201 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemData.java                                    |   87 
 src/main/java/com/qxueyou/scc/org/model/OrgBank.java                                                  |   87 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectExtend.java                     |   81 
 mvnw.cmd                                                                                              |  143 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchTerm.java                              |   77 
 src/main/java/com/qxueyou/scc/base/model/WxTemplateMsg.java                                           |  110 
 src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java                            |   28 
 src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java                                 |   15 
 src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java                          |  393 
 src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java                              |   73 
 src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java                                  |   24 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfig.java                               |   41 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java                                |  318 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureVideoV.java                             |   52 
 src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java                                    |  409 
 src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java                            |   15 
 target/scc-0.0.1-SNAPSHOT.jar.original                                                                |    0 
 src/main/java/com/qxueyou/scc/base/service/impl/FileUploadService.java                                |  179 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java                              |  320 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java                                 |  211 
 src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java                                               |  265 
 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst            |    0 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java            |   37 
 src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java                             |  439 
 src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java                                       |  292 
 src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateService.java                              | 1108 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java                         |  815 
 target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoReCourse.java                    |   59 
 src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java                               |  231 
 src/main/java/com/qxueyou/scc/admin/classroom/service/IClassRoomService.java                          |   93 
 src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeVId.java                   |   70 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaRecordRe.java                       |   45 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSign.java                              |  102 
 src/main/java/com/qxueyou/scc/org/model/OrgClass.java                                                 |  954 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressVId.java                      |  103 
 target/classes/static/images/subject.png                                                              |    0 
 src/main/java/com/qxueyou/scc/school/model/SchStudentScore.java                                       |  161 
 src/main/java/com/qxueyou/scc/base/util/ReisUtils.java                                                |   67 
 src/main/java/com/qxueyou/scc/school/service/IClassCardService.java                                   |   76 
 src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java                                       |   52 
 src/main/java/com/qxueyou/scc/school/model/SchSignCode.java                                           |   62 
 target/generated-sources/java/com/qxueyou/scc/media/model/QVideoConverTask.java                       |   53 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressV.java       |   59 
 src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarket.java                                         |  196 
 src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java                             |  375 
 src/main/java/com/qxueyou/scc/school/model/SchClassCard.java                                          |  259 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperInfo.java                          |   68 
 src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java                      |   70 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultBook.java                  |   88 
 src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java                                          |  190 
 src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java                                |  320 
 src/main/resources/templates/redirect.html                                                            |   10 
 src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreV.java                                  |  109 
 src/main/java/com/qxueyou/scc/base/util/ImageUtils.java                                               |  162 
 src/main/java/com/qxueyou/scc/user/service/impl/UserRegistrationService.java                          | 2944 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamInfo.java                               |   99 
 target/classes/static/images/cb.jpg                                                                   |    0 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupItemRe.java                                 |  100 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseCompleteController.java                         |  143 
 src/main/java/com/qxueyou/scc/school/model/SchSign.java                                               |  475 
 src/main/java/com/qxueyou/scc/school/model/SchTerm.java                                               |  240 
 src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java                                    |  324 
 src/main/java/com/qxueyou/scc/base/util/WordProcessUtils.java                                         |   79 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java                                 |  272 
 src/main/java/com/qxueyou/scc/admin/classroom/model/ClassRoom.java                                    |  185 
 src/main/java/com/qxueyou/scc/org/model/OrgClassVisitor.java                                          |  154 
 src/main/java/com/qxueyou/scc/base/util/DateUtils.java                                                |  440 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemOption.java                 |   73 
 target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentVId.java                |   39 
 src/main/java/com/qxueyou/scc/user/model/User.java                                                    |  337 
 src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java                                    |   36 
 src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java                                |   28 
 target/generated-sources/java/com/qxueyou/scc/org/model/QDiscoverBanner.java                          |   61 
 src/main/java/com/qxueyou/scc/admin/notice/service/impl/NoticeService.java                            |  198 
 src/main/java/com/qxueyou/scc/base/model/MsgTypeConstants.java                                        |   22 
 src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java                                        |  369 
 src/main/java/com/qxueyou/scc/sys/service/IOssService.java                                            |   84 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java                                     |  233 
 src/main/java/com/qxueyou/scc/base/handler/QXueyouExceptionHandler.java                               |   41 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsPraiseToMe.java              |   65 
 src/main/java/com/qxueyou/scc/school/model/SchEvaluateQuota.java                                      |  208 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectLecture.java                |   67 
 src/main/resources/static/images/org1.png                                                             |    0 
 src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java                                     |   64 
 src/main/java/com/qxueyou/scc/school/action/ArticleController.java                                    |  318 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReClass.java                |   71 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentPraise.java              |   63 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecordDetail.java               |   59 
 src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgProducerService.java                                |    7 
 src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectLecture.java                              |  259 
 target/generated-sources/java/com/qxueyou/scc/statistic/model/QSchFlowStatisticDetail.java            |   79 
 src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java                                          |  170 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegeCourse.java                        |  106 
 src/main/java/com/qxueyou/scc/base/model/FlowPrice.java                                               |   43 
 src/main/java/com/qxueyou/scc/base/util/NumRandomUtils.java                                           |   15 
 src/main/java/com/qxueyou/scc/base/model/TransactException.java                                       |   32 
 src/main/java/com/qxueyou/scc/org/model/OrgBankAccountRe.java                                         |   65 
 src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java                                       |  146 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java                                        |  372 
 target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClass.java                      |  158 
 target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentV.java                  |   67 
 target/generated-sources/java/com/qxueyou/scc/msg/model/QMessage.java                                 |   79 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java                                       |   57 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java                                 |   73 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java                   |  149 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java                                |  191 
 src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java                                      |  209 
 target/classes/static/images/cc.jpg                                                                   |    0 
 target/classes/static/images/class2.png                                                               |    0 
 src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java                                  |   45 
 src/main/java/com/qxueyou/scc/teach/student/dao/StudentDAO.java                                       |   16 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java                                  |   96 
 src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java                                        |  250 
 src/main/java/com/qxueyou/scc/base/util/JacobUtil.java                                                |  165 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonLiveVideo.java                 |   55 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveRecord.java             |   81 
 src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java                                  |   21 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswer.java                 |   53 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserSign.java                               |   87 
 src/main/java/com/qxueyou/scc/base/model/WeixinContants.java                                          |   19 
 src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java                                            |  203 
 target/classes/static/images/study1.png                                                               |    0 
 src/main/java/com/qxueyou/scc/base/util/RSAUtils.java                                                 |   85 
 src/main/java/com/qxueyou/scc/base/service/ICacheService.java                                         |  183 
 target/classes/static/images/homeword.png                                                             |    0 
 src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java                                           |  192 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemArticleService.java               |   59 
 scripts/修改个人课程视图_20181128_ddl.sql                                                                     |   68 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java                                  |   60 
 src/main/java/com/qxueyou/scc/user/service/impl/UserSignService.java                                  |   43 
 target/generated-sources/java/com/qxueyou/scc/sms/model/QSms.java                                     |   73 
 target/classes/static/images/1.jpg                                                                    |    0 
 src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java                                       |  130 
 src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java                                          |  167 
 src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java                                      |   59 
 src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java                                                |  150 
 src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java                                             |  205 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java                            |  264 
 src/main/java/com/qxueyou/scc/school/model/SchNote.java                                               |  232 
 src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java                                       |  377 
 src/main/java/com/qxueyou/scc/school/model/SchLessonPeriod.java                                       |  185 
 src/main/java/com/qxueyou/scc/evaluate/action/EvaluateTemplateController.java                         |  135 
 src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java                                         |  106 
 src/main/java/com/qxueyou/scc/org/service/ITeacherService.java                                        |   19 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchRank.java                              |   61 
 src/main/resources/static/images/exerciselib1.png                                                     |    0 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStringExtend.java                         |   59 
 src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java                               |  175 
 src/main/java/com/qxueyou/scc/teach/subject/model/SubjectChapter.java                                 |  190 
 src/main/java/com/qxueyou/scc/exam/action/ExamController.java                                         |  685 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDay.java                         |   57 
 scripts/修改个人课件视图_20181213_ddl.sql                                                                     |   67 
 src/main/resources/static/images/role1.png                                                            |    0 
 target/classes/static/images/homeword1.png                                                            |    0 
 src/main/java/com/qxueyou/scc/base/util/StringMapUtils.java                                           |  125 
 src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateService.java                                  |  122 
 src/main/resources/static/images/ca.jpg                                                               |    0 
 target/classes/static/images/exerciselib.png                                                          |    0 
 target/classes/log4j2.xml                                                                             |   85 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateDetail.java                    |   63 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResFile.java                           |   65 
 src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java                  |   28 
 src/main/java/com/qxueyou/scc/base/util/MyJsCssVersionUtils.java                                      |  349 
 src/main/java/com/qxueyou/scc/school/model/SchCourseware.java                                         |  341 
 D_/log/qxueyou-20200429-1.log                                                                         |    2 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java                               |  742 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java                                    |  185 
 src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java                                        |   80 
 src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java                                       |  273 
 src/main/java/com/qxueyou/scc/config/Swagger2.java                                                    |   49 
 src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java                                 |   54 
 target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicClassRe.java                |   55 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClip.java               |   63 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java                             |  170 
 src/main/java/com/qxueyou/scc/controller/FileController.java                                          |   85 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java                          |   88 
 src/main/java/com/qxueyou/scc/teach/res/model/ResFile.java                                            |  224 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java                      |  195 
 src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectChapter.java                              |  243 
 src/main/java/com/qxueyou/scc/exam/dao/ExamPaperSectionDAO.java                                       |   59 
 target/classes/templates/index.html                                                                   |   11 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java                 |  138 
 src/main/java/com/qxueyou/scc/base/handler/QLog.java                                                  |   29 
 src/main/java/com/qxueyou/scc/controller/MsgChatroomMsgCtrl.java                                      |   61 
 src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java                                 |  729 
 D_/log/qxueyou-20200505-1.log                                                                         |  805 
 src/main/java/com/qxueyou/scc/base/util/MD5Utils.java                                                 |   75 
 src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java              |  279 
 src/main/java/com/qxueyou/scc/admin/classes/service/IClassLectureService.java                         |  334 
 target/classes/static/images/teacher1.png                                                             |    0 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectChapter.java                |   61 
 src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java                                  |  140 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QComment.java                    |   83 
 src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java                                        |   71 
 src/main/resources/static/index.html                                                                  |   11 
 src/main/java/com/qxueyou/scc/stucontroller/StuResController.java                                     |   82 
 src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java                                   |  127 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java                              |  214 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLive.java                   |  143 
 src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java                                    |  325 
 scripts/课程表脚本_20181122_ddl.sql                                                                        |   98 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCourseware.java                   |   59 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultV.java                    |  107 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchNote.java                              |   65 
 src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java                              |  155 
 src/main/java/com/qxueyou/scc/exercise/service/impl/node/ItemType.java                                |   55 
 src/main/java/com/qxueyou/scc/web/OpenEntityManagerFilter.java                                        |   39 
 src/main/java/com/qxueyou/scc/exam/service/IExamPaperSectionService.java                              |  109 
 src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java                      |   24 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankVer.java                           |   63 
 src/main/java/com/qxueyou/scc/sys/model/SysDictionary.java                                            |   80 
 src/main/java/com/qxueyou/scc/base/model/Constants.java                                               |  396 
 src/main/resources/static/images/schedule1.png                                                        |    0 
 src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java                              |  221 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisi.java                |   77 
 src/main/java/com/qxueyou/scc/controller/EvaluateController.java                                      |  294 
 src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java                                        |  178 
 target/classes/static/images/exerciselib1.png                                                         |    0 
 target/classes/static/images/res1.png                                                                 |    0 
 src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java                                  |  137 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java                           | 3158 +
 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst              |    1 
 src/main/resources/static/images/cb.jpg                                                               |    0 
 src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java                                                 |  261 
 target/generated-sources/java/com/qxueyou/scc/sms/model/QSmsConfig.java                               |   43 
 target/classes/static/images/live1.png                                                                |    0 
 src/main/java/com/qxueyou/scc/admin/classes/service/IClassService.java                                |  148 
 src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java                                        |  389 
 src/main/java/com/qxueyou/scc/school/model/SchRank.java                                               |  234 
 target/generated-sources/java/com/qxueyou/scc/base/model/QWbCacheKey.java                             |   49 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java                        |   62 
 target/classes/static/images/org.png                                                                  |    0 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java                            |   36 
 src/main/java/com/qxueyou/scc/school/action/HandoutController.java                                    | 1602 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseInfo.java                       |   97 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluate.java                          |   87 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserRole.java                               |   66 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java                              |  343 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java                          | 1265 
 target/classes/static/images/ca1.jpg                                                                  |    0 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassBanner.java                          |   75 
 src/main/java/com/qxueyou/scc/base/dao/ReidsSharedPoolWrapper.java                                    |   18 
 D_/log/qxueyou_err.log                                                                                |    0 
 src/main/java/com/qxueyou/scc/base/service/IBaseJpaRepository.java                                    |   17 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchLessonPeriod.java                      |   61 
 src/main/java/com/qxueyou/scc/base/handler/QCacheMonitor.java                                         |  421 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClipVer.java            |   57 
 src/main/java/com/qxueyou/scc/controller/ClsLectureController.java                                    |  324 
 src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java                                                  |  187 
 src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java                                  |   37 
 src/main/java/com/qxueyou/scc/sys/model/SysConfig.java                                                |   56 
 src/main/java/com/qxueyou/scc/org/model/OrgCollege.java                                               |  274 
 src/main/java/com/qxueyou/scc/base/service/ILicenseService.java                                       |   15 
 src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java                                      |   20 
 src/main/resources/static/images/room.png                                                             |    0 
 src/main/resources/static/images/subject.png                                                          |    0 
 src/main/java/com/qxueyou/scc/sys/action/LoginController.java                                         |  699 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/OpenSubjectV.java                              |  128 
 src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java                       |  210 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClass.java                                |  169 
 src/main/resources/static/images/live1.png                                                            |    0 
 src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java                              |  197 
 src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java                                     |  200 
 src/main/java/com/qxueyou/scc/courseware/service/ICourceCategoryService.java                          |   59 
 target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreV.java             |   61 
 src/main/java/com/qxueyou/scc/user/util/ExcelReader.java                                              |  211 
 target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgInfo.java                                 |   59 
 src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java                                                   |  810 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java                                  |  214 
 src/main/java/com/qxueyou/scc/user/model/ExportUserScore.java                                         |   76 
 target/generated-sources/java/com/qxueyou/scc/school/model/QHandoutConverTask.java                    |   49 
 src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java                                         |  236 
 src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java                                          |  193 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateTemplate.java                  |   69 
 src/main/java/com/qxueyou/scc/admin/teacher/dao/TeacherDAO.java                                       |   21 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java                                       |  554 
 src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java                                  |  163 
 src/main/java/com/qxueyou/scc/exam/model/ExamBatchClassRe.java                                        |  203 
 target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoTrans.java                       |   85 
 src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java                                   |   95 
 target/generated-sources/java/com/qxueyou/scc/admin/score/model/QScore.java                           |   69 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUser.java                                   |   78 
 src/main/resources/static/images/cc.jpg                                                               |    0 
 src/main/resources/static/images/exam1.png                                                            |    0 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserTeacher.java                            |   61 
 src/main/java/com/qxueyou/scc/courseware/action/CourceCategoryController.java                         |  863 
 src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java                                            |  105 
 src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java                                         |  247 
 src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java                                     |   81 
 src/main/java/com/qxueyou/scc/sys/model/SysCondition.java                                             |  183 
 target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreV.java                 |   61 
 src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java                                 |  155 
 src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java                                   |  195 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemAudio.java                      |   73 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisiU.java               |   61 
 src/main/java/com/qxueyou/scc/base/service/impl/CommonAppService.java                                 |  391 
 src/main/java/com/qxueyou/scc/base/StsCtrl.java                                                       |  283 
 src/main/java/com/qxueyou/scc/sys/service/ITestService.java                                           |   18 
 src/main/resources/public/redirect.html                                                               |   10 
 src/main/java/com/qxueyou/scc/sys/model/SysButton.java                                                |  237 
 src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java                                    |  136 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignStatistics.java                    |   91 
 src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java                                |  151 
 src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java                                   |   53 
 target/classes/templates/redirect.html                                                                |   10 
 src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java                                 |  146 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java                                   |  343 
 src/main/java/com/qxueyou/scc/school/model/SchSignItem.java                                           |  282 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchInfo.java                          |   83 
 target/classes/static/images/score.png                                                                |    0 
 src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java                                  |  207 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgSalesman.java                             |   76 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgText.java                                 |   57 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysAttachment.java                           |   63 
 src/main/java/com/qxueyou/scc/exam/action/ExamBatchController.java                                    |  159 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java                            |  299 
 src/main/resources/static/images/res.png                                                              |    0 
 src/main/java/com/qxueyou/scc/exercise/service/impl/node/Option.java                                  |   66 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserExtend.java                             |   85 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java              |   38 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java                                |  176 
 src/main/java/com/qxueyou/scc/teach/subject/model/SubjectLecture.java                                 |  239 
 target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoRecord.java                      |   79 
 target/classes/static/images/eval.png                                                                 |    0 
 src/main/java/com/qxueyou/scc/sys/service/impl/TestService.java                                       |   52 
 src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java                                             |  188 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCompleteInfo.java               |   85 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java                              |  365 
 src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java                              |  103 
 src/main/java/com/qxueyou/scc/base/util/ExcelExportUtils.java                                         |  310 
 src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java                                          |  859 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPrivilege.java                            |   59 
 src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java                                          |  177 
 src/main/java/com/qxueyou/scc/school/service/impl/RankService.java                                    |  700 
 target/classes/static/images/exam.png                                                                 |    0 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java                              |  298 
 src/main/java/com/qxueyou/scc/school/service/ISignService.java                                        |  279 
 src/main/java/com/qxueyou/scc/sys/service/IOssVideoService.java                                       |   29 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QRes.java                               |   73 
 src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java                            |   14 
 src/main/resources/static/images/topic1.png                                                           |    0 
 src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java                                     |  588 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java                               |  142 
 target/classes/static/images/study.png                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgFriend.java                               |   55 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupShareInfo.java             |   63 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentScore.java                      |   59 
 src/main/java/com/qxueyou/scc/teach/res/service/IResService.java                                      |  239 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassQueryCm.java                         |  155 
 src/main/java/com/qxueyou/scc/controller/MsgInfoController.java                                       |  143 
 src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java                                            |   39 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyPraise.java                |   65 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFault.java                                       |  229 
 target/maven-archiver/pom.properties                                                                  |    5 
 src/main/java/com/qxueyou/scc/base/util/UserCodeUtils.java                                            |   64 
 src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java                        |   75 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemSet.java                                     |  241 
 src/main/java/com/qxueyou/scc/base/handler/QCacheRedis.java                                           |   86 
 src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java                                       |  149 
 src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java                                           |  448 
 src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java                                      |  310 
 target/classes/static/images/topic.png                                                                |    0 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrection.java                 |   75 
 target/classes/static/images/class.png                                                                |    0 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java                           | 1141 
 src/main/java/com/qxueyou/scc/sys/msg/CustomMsgConsumerService.java                                   |   23 
 src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java                                    |  174 
 src/main/java/com/qxueyou/scc/school/service/IInteractService.java                                    |   77 
 src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java                                       |   24 
 src/main/java/com/qxueyou/scc/base/service/impl/BaseRepository.java                                   |   31 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchQRUrl.java                             |   59 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemScore.java                                   |  207 
 src/main/java/com/qxueyou/scc/base/util/TraceUtils.java                                               |  154 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteBook.java               |   88 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecord.java                     |  119 
 src/main/java/com/qxueyou/scc/school/model/SchImg.java                                                |  231 
 src/main/java/com/qxueyou/scc/admin/classes/model/ClsClassReSubject.java                              |  165 
 src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java                         |  429 
 src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java                  |  183 
 src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java                                          |  163 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java                              |  280 
 src/main/java/com/qxueyou/scc/sys/service/ISysLogService.java                                         |   28 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteHis.java                                 |  213 
 src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java                                       |  323 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamReExamPaper.java                        |   76 
 src/main/java/com/qxueyou/scc/config/AliOssConfig.java                                                |   60 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultHis.java                   |   77 
 src/main/resources/Transaction.xml                                                                    |   89 
 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst                      |  951 
 target/classes/static/images/subject1.png                                                             |    0 
 src/main/java/com/qxueyou/scc/admin/notice/dao/NoticeDAO.java                                         |   75 
 target/classes/static/images/score1.png                                                               |    0 
 src/main/java/com/qxueyou/scc/exam/dao/ExamDaoImpl.java                                               |   31 
 src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java                               |  288 
 src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java                                     |   77 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVideoPrivilege.java                  |   57 
 src/main/java/com/qxueyou/scc/org/model/OrgText.java                                                  |  175 
 src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java                   |  398 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutStatistic.java                  |   63 
 src/main/java/com/qxueyou/scc/base/util/docConverterUtil.java                                         |  137 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonPeriod.java                    |   55 
 src/main/java/com/qxueyou/scc/admin/examroom/model/ExamRoom.java                                      |  195 
 src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java                               |  212 
 target/classes/static/images/camera.png                                                               |    0 
 src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java                         |   44 
 src/main/java/com/qxueyou/scc/admin/teacher/service/impl/TeacherService.java                          |  237 
 src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java                                    |  184 
 src/main/resources/static/images/teacher.png                                                          |    0 
 src/main/java/com/qxueyou/scc/school/dao/SignDAO.java                                                 |  202 
 target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectChapter.java             |   65 
 src/main/java/com/qxueyou/scc/msg/model/Message.java                                                  |  380 
 src/main/java/com/qxueyou/scc/config/MySqlDataSourceConfig.java                                       |  187 
 src/main/java/com/qxueyou/scc/teach/res/model/ResLib.java                                             |  193 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticle.java                           |   79 
 src/main/resources/static/images/study.png                                                            |    0 
 target/generated-sources/java/com/qxueyou/scc/org/model/QExternelTeacherInfo.java                     |   63 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupItemRe.java                |   47 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPageFavor.java                  |   59 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressVId.java     |   43 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignCode.java                          |   41 
 src/main/java/com/qxueyou/scc/base/model/ApiResult.java                                               |  106 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupExtend.java                |   75 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java                                |   44 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplay.java             |   81 
 pom.xml                                                                                               |  362 
 src/main/java/com/qxueyou/scc/base/util/DESUtils.java                                                 | 1065 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureVId.java                              |   67 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysPrivilege.java                            |   73 
 src/main/java/com/qxueyou/scc/exam/action/ExamPaperSectionController.java                             |  228 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircleMsg.java                    |   69 
 src/main/java/com/qxueyou/scc/base/util/CollectionUtils.java                                          |   91 
 src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java                                        |   62 
 src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java                                      |   66 
 target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseSchedule.java                 |  110 
 src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java                              |  383 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollege.java                              |   75 
 src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java                                    |  136 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavorite.java                                    |  218 
 src/main/resources/static/images/live.png                                                             |    0 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchCourseware.java                        |   87 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java                     |  178 
 src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java                                      |   34 
 src/main/resources/static/Transaction.xml                                                             |   94 
 src/main/java/com/qxueyou/scc/controller/ExamRoomController.java                                      |  186 
 target/classes/static/images/paper1.png                                                               |    0 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultRecord.java                |   91 
 src/main/java/com/qxueyou/scc/sms/model/Sms.java                                                      |  288 
 src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java                             |  299 
 src/main/java/com/qxueyou/scc/courseware/action/CourceController.java                                 |  262 
 src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeV.java                     |  105 
 src/main/java/com/qxueyou/scc/exercise/service/impl/Parser.java                                       |   15 
 src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java                              |  105 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationUnion.java                       |   55 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultStatistics.java            |   69 
 src/main/java/com/qxueyou/scc/sys/service/impl/SysConfigService.java                                  |   63 
 src/main/java/com/qxueyou/scc/exam/model/ExamReExamPaper.java                                         |  192 
 src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java                                  |   31 
 src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java                                  |   22 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java                             |   79 
 src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java                                              |  113 
 src/main/java/com/qxueyou/scc/user/service/IUserSignService.java                                      |   29 
 src/main/java/com/qxueyou/scc/org/model/Organization.java.bak                                         |  554 
 src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java                                      |  167 
 src/main/java/com/qxueyou/scc/school/model/SchEvaluateCategory.java                                   |  185 
 src/main/java/com/qxueyou/scc/school/model/SchHandout.java                                            |  598 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemDoc.java                        |   63 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItem.java                       |   83 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java                                   |  182 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionData.java                                  |   46 
 target/generated-sources/java/com/qxueyou/scc/school/model/QClassCardTemplet.java                     |   57 
 src/main/resources/static/images/paper1.png                                                           |    0 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysMenu.java                                 |   91 
 src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java                              |   46 
 src/main/java/com/qxueyou/scc/school/model/ExportSchSignItem.java                                     |  118 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignItem.java                          |   75 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCardTemplet.java                  |   59 
 src/main/java/com/qxueyou/scc/exam/model/ExamBatchInfo.java                                           |  270 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReClass.java                                 |  188 
 target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicInfo.java                   |   77 
 src/main/java/com/qxueyou/scc/SccApplication.java                                                     |   55 
 src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java                                   |  211 
 src/main/resources/license.lic                                                                        |   26 
 target/classes/application.properties                                                                 |   81 
 src/main/java/com/qxueyou/scc/base/util/ParamsUtils.java                                              |   59 
 src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java                             |   38 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysDictionary.java                           |   45 
 target/classes/static/images/teacher.png                                                              |    0 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java                                  |  376 
 D_/log/qxueyou-20200506-1.log                                                                         | 2723 
 target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreVId.java               |   39 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureAudioProgressService.java    |   42 
 src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java                                  |   37 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReUser.java                          |   65 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java                                  |   41 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectVId.java             |   41 
 src/main/java/com/qxueyou/scc/controller/TeacherController.java                                       |  128 
 src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java                                         |  201 
 src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleReCls.java                             |  191 
 src/main/java/com/qxueyou/scc/user/model/UserSign.java                                                |  413 
 src/main/resources/static/images/camera.png                                                           |    0 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java                                |  342 
 src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java                                   |   22 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureAudioV.java            |   43 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java                |   55 
 src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateTemplateService.java                          |   41 
 src/main/java/com/qxueyou/scc/base/service/IONSExceptionLogService.java                               |   25 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveExtend.java             |   75 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubject.java                       |   90 
 src/main/java/com/qxueyou/scc/config/AliOnsConfig.java                                                |   32 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java   |  137 
 src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java                                         |  205 
 src/main/java/com/qxueyou/scc/base/dao/CommonRedisCache.java                                          |   53 
 src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java                                 |  346 
 target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoStatistic.java                   |   65 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseChapter.java                    |   77 
 src/main/java/com/qxueyou/scc/admin/score/dao/ExamScoreVDAO.java                                      |   24 
 src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarketQuery.java                                    |  261 
 mvnw                                                                                                  |  225 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyComment.java               |   67 
 src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java                                           |  151 
 src/main/java/com/qxueyou/scc/base/util/WordExportUtils.java                                          |   37 
 src/main/java/com/qxueyou/scc/user/service/IUserService.java                                          |  120 
 target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QProgress.java                     |   71 
 src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java                                |   85 
 src/main/java/com/qxueyou/scc/admin/score/model/Score.java                                            |  242 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecord.java                     |   81 
 src/main/resources/static/images/org.png                                                              |    0 
 src/main/java/com/qxueyou/scc/base/dao/AbstractRedisTemplate.java                                     |  472 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgReCollegePublic.java                      |   55 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultHis.java                                    |  213 
 src/main/java/com/qxueyou/scc/user/service/impl/UserService.java                                      |  245 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutReCourse.java                   |   59 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java                           |   15 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java    |   72 
 src/main/java/com/qxueyou/scc/base/util/QueryDslOptionBuilder.java                                    |  112 
 src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java                                      |  263 
 src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java                                               |  160 
 target/classes/static/images/schedule.png                                                             |    0 
 src/main/java/com/qxueyou/scc/base/model/PaginationData.java                                          |  129 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCharger.java                              |   76 
 src/main/java/com/qxueyou/scc/controller/UserController.java                                          |  178 
 src/main/resources/static/images/topic.png                                                            |    0 
 src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java                                        |  166 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectVId.java                              |   92 
 src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java                                 |  242 
 src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java                           |  366 
 src/main/java/com/qxueyou/scc/user/model/UserStudent.java                                             |  193 
 target/generated-sources/java/com/qxueyou/scc/admin/examroom/model/QExamRoom.java                     |   61 
 src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreVId.java                            |   67 
 src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java                                  |   37 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBanner.java                               |   85 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentSchedule.java                   |  108 
 target/generated-sources/java/com/qxueyou/scc/school/model/QLessionSignStatistics.java                |   89 
 src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreV.java                              |  105 
 src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java                                           |  219 
 src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java                                 |   26 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSchedule.java                     |  114 
 src/main/java/com/qxueyou/scc/org/model/Organization.java                                             |  415 
 src/main/java/com/qxueyou/scc/media/model/MediaVideo.java                                             |  767 
 src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java                                    |  186 
 target/classes/static/images/org1.png                                                                 |    0 
 target/classes/static/images/role.png                                                                 |    0 
 src/main/java/com/qxueyou/scc/config/SccConfig.java                                                   |  101 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysCondition.java                            |   59 
 src/main/java/com/qxueyou/scc/teach/res/model/ResItemExercise.java                                    |  185 
 src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java                                  |  895 
 src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java                               |  193 
 src/main/java/com/qxueyou/scc/base/service/IFileUploadService.java                                    |   67 
 target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideo.java                            |  137 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfigFile.java                           |   47 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureVId.java             |   39 
 src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java                                |   23 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourseCategory.java                       |   85 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrectionImg.java              |   43 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java                                        |  533 
 src/main/java/com/qxueyou/scc/org/model/OrgAdmin.java                                                 |  182 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectV.java               |   73 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultV.java                            |  101 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourse.java                               |   81 
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysLog.java                                  |   69 
 target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgUser.java                                 |   76 
 src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java                                   |  490 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchTermReDay.java                         |   55 
 target/classes/META-INF/spring-configuration-metadata.json                                            |  214 
 src/main/java/com/qxueyou/scc/school/model/SchInteract.java                                           |  235 
 src/main/java/com/qxueyou/scc/teach/res/model/Res.java                                                |  292 
 target/classes/static/images/role1.png                                                                |    0 
 src/main/resources/static/images/score.png                                                            |    0 
 src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java                          |   66 
 src/main/resources/static/images/subject1.png                                                         |    0 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java                        |  137 
 src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateTemplateService.java                      |  156 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDayItem.java                     |   61 
 src/main/java/com/qxueyou/scc/exam/service/IExamService.java                                          |  199 
 src/main/java/com/qxueyou/scc/base/model/Param.java                                                   |   52 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPage.java                       |   71 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppInfo.java                              |   69 
 src/main/java/com/qxueyou/scc/web/WebServletTest.java                                                 |   29 
 src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java                                           |  668 
 src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java                     |  779 
 src/main/java/com/qxueyou/scc/base/util/ClassCardDoc.ftl                                              |  465 
 target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleReCls.java            |   72 
 src/main/java/com/qxueyou/scc/base/handler/QCacheReader.java                                          |   33 
 src/main/resources/static/images/class.png                                                            |    0 
 src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java                                     |  155 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java                          |  117 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemExerciseService.java              |   54 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationExtend.java                      |   53 
 src/main/java/com/qxueyou/scc/exercise/service/impl/Node.java                                         |   76 
 src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java                          |  329 
 src/main/java/com/qxueyou/scc/base/util/SHA1.java                                                     |   25 
 src/main/java/com/qxueyou/scc/media/model/VideoPlay.java                                              |   86 
 src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java                                        |  225 
 src/main/java/com/qxueyou/scc/base/model/ResultJson.java                                              |   90 
 src/main/java/com/qxueyou/scc/school/model/SchClassCircleMsg.java                                     |  326 
 src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java                                    |  156 
 src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java                                                 |  100 
 src/main/java/com/qxueyou/scc/base/util/PageUtils.java                                                |   34 
 target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarketQuery.java                   |   79 
 src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleDetail.java                            |  185 
 src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java                        |   61 
 src/main/java/com/qxueyou/scc/base/handler/QxueyouMysqlDialect.java                                   |   13 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSubject.java                      |   80 
 src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java                               |  133 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsCommentToMe.java             |   67 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResLib.java                            |   59 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultVId.java                          |   41 
 src/main/java/com/qxueyou/scc/base/service/IDictionaryService.java                                    |   22 
 src/main/java/com/qxueyou/scc/admin/teacher/service/ITeacherService.java                              |   80 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisi.java                                 |  222 
 src/main/java/com/qxueyou/scc/org/model/OrganizationUnion.java                                        |  140 
 src/main/java/com/qxueyou/scc/sys/model/MsgTypeConstants.java                                         |   20 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java                                 |  295 
 src/main/java/com/qxueyou/scc/web/WebListenerTest.java                                                |   19 
 src/main/java/com/qxueyou/scc/school/model/SignResult.java                                            |   51 
 src/main/java/com/qxueyou/scc/base/handler/JgwOracleDialect.java                                      |   21 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java                                    |  727 
 src/main/resources/hanlp.properties                                                                   |   27 
 src/main/java/com/qxueyou/scc/sys/model/SysPrivilege.java                                             |  189 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReClass.java                       |   55 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAdmin.java                                |   74 
 target/classes/static/redirect.html                                                                   |   10 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchScheduleAddress.java                   |   83 
 src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java                          | 1548 
 target/classes/Transaction.xml                                                                        |   89 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java                                  |  243 
 src/main/java/com/qxueyou/scc/admin/classes/model/ClsClass.java                                       |  965 
 src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java                                        |   25 
 src/main/java/com/qxueyou/scc/courseware/service/impl/OrgCourseService.java                           |  268 
 src/main/java/com/qxueyou/scc/courseware/service/impl/CourceCategoryAppService.java                   |  477 
 src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java                                 |  370 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecentRecord.java               |   65 
 src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java            |   66 
 src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java                              |  178 
 src/main/java/com/qxueyou/scc/admin/score/dao/HomeworkScoreVDAO.java                                  |   44 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java                              | 3685 +
 target/generated-sources/java/com/qxueyou/scc/sys/model/QSysButton.java                               |   69 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureDocV.java              |   43 
 src/main/java/com/qxueyou/scc/exercise/action/ExerciseController.java                                 | 2345 
 src/main/java/com/qxueyou/scc/base/util/Base64Utils.java                                              |   33 
 src/main/java/com/qxueyou/scc/org/model/OrgCourse.java                                                |  271 
 src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java                             |  441 
 src/main/java/com/qxueyou/scc/user/model/UserTeacher.java                                             |  174 
 src/main/java/com/qxueyou/scc/base/util/QrCodeUtils.java                                              |  160 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultVId.java                  |   41 
 src/main/java/com/qxueyou/scc/teach/res/model/ResDir.java                                             |  188 
 src/main/java/com/qxueyou/scc/controller/ClassController.java                                         |  632 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java            |   77 
 src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java                                         |  419 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureAudioV.java                             |   62 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrganization.java                            |   84 
 src/main/java/com/qxueyou/scc/admin/classes/dao/ClassRepository.java                                  |   17 
 src/main/java/com/qxueyou/scc/sys/service/impl/TestKafkaService.java                                  |   26 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java                        |  210 
 src/main/resources/static/images/schedule.png                                                         |    0 
 src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java                                 |  434 
 target/classes/static/images/live.png                                                                 |    0 
 src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java                                     |  404 
 target/classes/static/Transaction.xml                                                                 |   94 
 src/main/java/com/qxueyou/scc/user/model/ExportUserRegistration.java                                  |  145 
 target/generated-sources/java/com/qxueyou/scc/media/model/QVideoLiveChatroom.java                     |   83 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java                    |  143 
 src/main/java/com/qxueyou/scc/sys/model/SysFileUploadTrace.java                                       |  290 
 target/classes/public/redirect.html                                                                   |   10 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandout.java                           |   92 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroup.java                      |   94 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java                                |  171 
 src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java                                |    9 
 src/main/java/com/qxueyou/scc/courseware/service/IOrgCourseService.java                               |   63 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswer.java                                  |  143 
 src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java                                       |  319 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleReCourse.java                   |   59 
 src/main/java/com/qxueyou/scc/base/model/Pager.java                                                   |   96 
 src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java                           |   77 
 src/main/java/com/qxueyou/scc/teach/res/model/ResItemArticle.java                                     |  182 
 src/main/resources/static/images/eval.png                                                             |    0 
 src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java                          |  122 
 src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java                                  |  176 
 src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java                               |  156 
 src/main/java/com/qxueyou/scc/admin/examroom/service/impl/ExamRoomService.java                        |  143 
 src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java                                   |   24 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserOperate.java                            |   89 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDataSubmitLog.java              |   53 
 src/main/java/com/qxueyou/scc/base/dao/CommonRedisTemplate.java                                       |   51 
 src/main/java/com/qxueyou/scc/base/util/AESUtil.java                                                  |  131 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStudent.java                              |   73 
 target/generated-sources/java/com/qxueyou/scc/admin/classroom/model/QClassRoom.java                   |   59 
 src/main/java/com/qxueyou/scc/base/util/HttpClient.java                                               |  623 
 target/generated-sources/java/com/qxueyou/scc/media/model/QSchLiveReVideo.java                        |   73 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java                                      |  469 
 src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java                                           |  184 
 src/main/java/com/qxueyou/scc/org/service/impl/OrgClassService.java                                   |  148 
 src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java                                     |  182 
 src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java                                 |   86 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperSectionInfo.java                   |   79 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSpreadFootprint.java                   |   73 
 src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java                                        |  650 
 src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java                             |   20 
 src/main/java/com/qxueyou/scc/admin/classroom/service/impl/ClassRoomService.java                      |  142 
 src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java                              |  255 
 src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java                               |   67 
 src/main/java/com/qxueyou/scc/admin/course/service/impl/CourseScheduleService.java                    |  445 
 src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java                                              |  167 
 src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java                                     |   39 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchImg.java                               |   65 
 src/test/java/com/qxueyou/scc/SccApplicationTests.java                                                |   16 
 scripts/学校APP服务器地址_20181122_ddl.sql                                                                   |    1 
 src/main/java/com/qxueyou/scc/exam/model/ExamPaperInfo.java                                           |  333 
 src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressV.java                        |   95 
 src/main/java/com/qxueyou/scc/base/model/CacheConstants.java                                          |  206 
 src/main/java/com/qxueyou/scc/admin/course/service/ICourseScheduleService.java                        |  134 
 src/main/java/com/qxueyou/scc/base/util/ClientUtils.java                                              |  230 
 src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java                   |   68 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java                            |  206 
 src/main/resources/static/images/role.png                                                             |    0 
 src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java                                   |  192 
 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst                    |  989 
 src/main/java/com/qxueyou/scc/web/DruidWebFilter.java                                                 |   15 
 src/main/java/com/qxueyou/scc/exam/service/impl/ExamService.java                                      | 1064 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java                                  |  521 
 src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java                                 |   91 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java                              |  202 
 src/main/java/com/qxueyou/scc/base/util/XmlUtils.java                                                 |  101 
 src/main/resources/static/images/exam.png                                                             |    0 
 src/main/java/com/qxueyou/scc/user/model/UserExtend.java                                              |  323 
 src/main/resources/static/images/ca1.jpg                                                              |    0 
 src/main/java/com/qxueyou/scc/base/util/DateTimeUtils.java                                            | 1102 
 src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java                                                     |  117 
 src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java                                    |  293 
 src/main/java/com/qxueyou/scc/org/model/OrgCharger.java                                               |  213 
 target/classes/license.lic                                                                            |   26 
 src/main/java/com/qxueyou/scc/base/util/FreeMarkerMd5MethodDefine.java                                |   22 
 src/main/java/com/qxueyou/scc/base/model/ITrace.java                                                  |   34 
 src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java                                         |   69 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchChapter.java                           |   95 
 target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClassReSubject.java             |   55 
 src/main/java/com/qxueyou/scc/base/model/UserCipher.java                                              |  181 
 src/main/java/com/qxueyou/scc/evaluate/dao/EvaluateRepository.java                                    |   17 
 src/main/java/com/qxueyou/scc/user/model/UserRegistration.java                                        |  363 
 target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroup.java                                |   64 
 src/main/java/com/qxueyou/scc/school/service/IArticleService.java                                     |  150 
 src/main/java/com/qxueyou/scc/school/model/SchRankHis.java                                            |  268 
 src/main/java/com/qxueyou/scc/base/handler/QCacheCleaner.java                                         |   21 
 src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java                          |   45 
 target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleDetail.java           |   71 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReGroup.java                |   73 
 target/generated-sources/java/com/qxueyou/scc/notice/model/QNotice.java                               |   78 
 src/main/java/com/qxueyou/scc/sys/msg/CustomerMsgProducerService.java                                 |   39 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistration.java                       |   88 
 src/main/java/com/qxueyou/scc/courseware/service/ICourseService.java                                  |  174 
 target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentObject.java              |   63 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java                            |  381 
 target/classes/hanlp.properties                                                                       |   27 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolYear.java                        |   62 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentAchievement.java                |   69 
 src/main/java/com/qxueyou/scc/school/model/SchArticle.java                                            |  334 
 src/main/java/com/qxueyou/scc/sys/model/SysMenu.java                                                  |  286 
 src/main/java/com/qxueyou/scc/base/util/SerializeUtils.java                                           |   84 
 src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java                    |   82 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReTeacher.java                       |   59 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectReCourse.java                   |   59 
 src/main/java/com/qxueyou/scc/config/RedisCacheConfig.java                                            |   25 
 src/main/java/com/qxueyou/scc/exam/service/IExamBatchService.java                                     |   77 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java                    |  171 
 src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java                               |  310 
 target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarket.java                        |   65 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonVideo.java                     |   55 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReferFee.java                        |   55 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResDir.java                            |   59 
 src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java                                         |  670 
 src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java                                      |  175 
 src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java                               |  370 
 src/main/resources/static/images/homeword1.png                                                        |    0 
 src/main/java/com/qxueyou/scc/admin/progress/model/Progress.java                                      |  267 
 src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java                                      |  159 
 src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java                                      |  208 
 src/main/java/com/qxueyou/scc/org/model/OrgBanner.java                                                |  389 
 target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoCache.java                       |   77 
 src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java                                    |  243 
 src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java                                              |  160 
 src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java                                  |   75 
 src/main/resources/public/index.html                                                                  |   11 
 src/main/java/com/qxueyou/scc/exam/model/ExamPaperSectionInfo.java                                    |  241 
 src/main/java/com/qxueyou/scc/base/model/BaseVO.java                                                  |   11 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java                       |   52 
 src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java                                |  176 
 src/main/java/com/qxueyou/scc/school/service/ILessonService.java                                      |  133 
 src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java                                 |   50 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccount.java                          |   69 
 target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemExercise.java                   |   59 
 src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java                                    |  126 
 src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java                                               |  239 
 src/main/java/com/qxueyou/scc/base/handler/QLogMonitor.java                                           |  234 
 src/main/java/com/qxueyou/scc/base/model/FilePathConstants.java                                       |   52 
 src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java                                  |  175 
 target/classes/static/images/room.png                                                                 |    0 
 src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java                                               |  251 
 src/main/java/com/qxueyou/scc/teach/live/dao/MediaLiveDAO.java                                        |   54 
 src/main/java/com/qxueyou/scc/base/model/FileMeta.java                                                |   50 
 src/main/resources/static/images/homeword.png                                                         |    0 
 src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreVId.java                                |   66 
 target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReClass.java            |   55 
 src/main/java/com/qxueyou/scc/config/DruidDataSourceConfig.java                                       |   50 
 src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java                                              |  203 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserReRoleUser.java                         |   64 
 src/main/java/com/qxueyou/scc/school/model/SchRankVer.java                                            |  210 
 src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java                                             |   68 
 src/main/java/com/qxueyou/scc/web/DruidViewServlet.java                                               |   16 
 src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java                                           |  213 
 src/main/java/com/qxueyou/scc/media/service/impl/MediaVideoService.java                               | 1558 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteHis.java                |   77 
 src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java                                      |   99 
 src/main/resources/static/images/exerciselib.png                                                      |    0 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteRecord.java             |   91 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseReCourse.java                   |   59 
 src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java                                               |   96 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java                                 |  198 
 src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java                                      |  512 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java                              |   84 
 src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java                                          |  156 
 src/main/java/com/qxueyou/scc/user/model/UserReRoleUser.java                                          |  131 
 src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java                                        |   11 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavorite.java                   |   78 
 src/main/resources/static/images/score1.png                                                           |    0 
 src/main/java/com/qxueyou/scc/base/service/ICommonService.java                                        |   47 
 src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java                                 | 2026 
 src/main/java/com/qxueyou/scc/user/model/UserRegistrationCustom.java                                  |  198 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseOptionStatistics.java           |   77 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemStatistics.java             |   79 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecentRecord.java                                |  213 
 src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java                        | 3250 +
 src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java                                     |  270 
 src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java                                           |  207 
 src/main/java/com/qxueyou/scc/org/model/OrgClassReferFee.java                                         |  211 
 src/main/java/com/qxueyou/scc/sys/service/ISysConfigService.java                                      |   19 
 src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java                                       |  524 
 src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java                                      |  310 
 src/main/java/com/qxueyou/scc/sys/model/SysLog.java                                                   |  229 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchInteract.java                          |   67 
 target/generated-sources/java/com/qxueyou/scc/media/model/QVideoPlay.java                             |   47 
 target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QSubjectLectureProgressDetail.java |   61 
 src/main/java/com/qxueyou/scc/school/service/INoteService.java                                        |   63 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDeepAnalysis.java               |   79 
 src/main/java/com/qxueyou/scc/base/handler/MatchAgainstFunction.java                                  |   50 
 src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java                                 |  965 
 src/main/resources/application.properties                                                             |   81 
 src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java                                        |   53 
 src/main/java/com/qxueyou/scc/teach/res/model/ResDatas.java                                           |   23 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleStatistic.java                  |   65 
 src/main/java/com/qxueyou/scc/base/util/StatelessFilter.java                                          |   30 
 src/main/java/com/qxueyou/scc/exam/model/ExamItemV.java                                               |   92 
 src/main/java/com/qxueyou/scc/base/service/impl/LicenseChecker.java                                   |  146 
 src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java                                        |  101 
 target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java               |   73 
 src/main/java/com/qxueyou/scc/base/util/DateTimeFormatUtils.java                                      |  129 
 src/main/java/com/qxueyou/scc/sys/action/ImgController.java                                           |  208 
 src/main/java/com/qxueyou/scc/base/dao/CommonDAO.java                                                 |   56 
 src/main/java/com/qxueyou/scc/admin/course/model/CourseSchedule.java                                  |  443 
 src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java                                |  221 
 src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java                                   |  235 
 src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java                             |  164 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamItemType.java               |   65 
 src/main/java/com/qxueyou/scc/base/handler/PerformanceMonitor.java                                    |   31 
 src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java                                           |   87 
 src/main/java/com/qxueyou/scc/admin/examroom/service/IExamRoomService.java                            |   92 
 src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java                                            |  191 
 src/main/java/com/qxueyou/scc/school/service/IHandoutService.java                                     |  253 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateQuota.java                     |   65 
 src/main/java/com/qxueyou/scc/controller/ResController.java                                           |  220 
 src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java                                   |  215 
 src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java                                      |  227 
 target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFault.java                      |   80 
 target/generated-sources/java/com/qxueyou/scc/user/model/QUserAuthorizeTrace.java                     |   65 
 src/main/java/com/qxueyou/scc/exam/model/ExamItemVId.java                                             |   72 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReClass.java                             |  169 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircle.java                       |   63 
 src/main/java/com/qxueyou/scc/controller/CoursewareController.java                                    |  362 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultV.java                                     |  372 
 target/classes/static/images/res.png                                                                  |    0 
 src/main/resources/templates/index.html                                                               |   11 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPhotoalbum.java                           |   75 
 src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperSectionService.java                          |  336 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCard.java                         |   71 
 target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReOrg.java                         |   55 
 src/main/java/com/qxueyou/scc/teach/subject/dao/SubjectDAO.java                                       |   19 
 src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultVId.java                                   |   88 
 src/main/java/com/qxueyou/scc/web/OpenSessionFilter.java                                              |   38 
 target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemV.java                              |   59 
 src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java                                   |   56 
 target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassUserCustom.java                      |   71 
 src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgConsumerService.java                                |   16 
 src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java                                    |  177 
 src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java                                  |   24 
 src/main/java/com/qxueyou/scc/school/model/SchClassCircle.java                                        |  181 
 src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java                                     |  161 
 1,080 files changed, 184,881 insertions(+), 0 deletions(-)

diff --git a/D_/log/qxueyou-20200429-1.log b/D_/log/qxueyou-20200429-1.log
new file mode 100644
index 0000000..a921ff3
--- /dev/null
+++ b/D_/log/qxueyou-20200429-1.log
@@ -0,0 +1,2 @@
+2020-04-29 14:25:47.191 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - wait millis 10004, active 0, maxActive 5, creating 0
+2020-04-29 14:29:06.237 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - wait millis 10002, active 0, maxActive 5, creating 0
diff --git a/D_/log/qxueyou-20200505-1.log b/D_/log/qxueyou-20200505-1.log
new file mode 100644
index 0000000..a0c3052
--- /dev/null
+++ b/D_/log/qxueyou-20200505-1.log
@@ -0,0 +1,805 @@
+2020-05-05 10:40:00.053 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 10:40:00.087 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:40:00 CST 2020]
+2020-05-05 10:40:00.088 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 11:45:00 CST 2020]
+2020-05-05 10:40:00.088 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:40:00.137 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 10:40:00.137 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:40:00 CST 2020]
+2020-05-05 10:40:00.138 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 11:45:00 CST 2020]
+2020-05-05 10:40:00.138 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 10:46:12.529 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 10:46:12.538 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:46:12 CST 2020]
+2020-05-05 10:46:12.539 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 11:51:12 CST 2020]
+2020-05-05 10:46:12.539 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:46:12.545 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 10:46:12.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:46:12 CST 2020]
+2020-05-05 10:46:12.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 11:51:12 CST 2020]
+2020-05-05 10:46:12.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 10:50:00.010 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 10:50:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:50:00 CST 2020]
+2020-05-05 10:50:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 11:55:00 CST 2020]
+2020-05-05 10:50:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:50:00.017 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 10:50:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:50:00 CST 2020]
+2020-05-05 10:50:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 11:55:00 CST 2020]
+2020-05-05 10:50:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 10:51:22.812 DEBUG org.hibernate.SQL - select user0_.USER_ID as USER_ID1_234_, user0_.ACCOUNT as ACCOUNT2_234_, user0_.AGE as AGE3_234_, user0_.CREATE_ID as CREATE_I4_234_, user0_.CREATE_TIME as CREATE_T5_234_, user0_.CREATOR as CREATOR6_234_, user0_.DELETE_FLAG as DELETE_F7_234_, user0_.E_MAIL as E_MAIL8_234_, user0_.IMEI as IMEI9_234_, user0_.IMG_PATH as IMG_PAT10_234_, user0_.MOBILE_PHONE as MOBILE_11_234_, user0_.NAME as NAME12_234_, user0_.ORGANIZATION_ID as ORGANIZ13_234_, user0_.PASSWORD as PASSWOR14_234_, user0_.SEX as SEX15_234_, user0_.SOURCE as SOURCE16_234_, user0_.UPDATE_ID as UPDATE_17_234_, user0_.UPDATE_TIME as UPDATE_18_234_, user0_.UPDATOR as UPDATOR19_234_ from user user0_ where user0_.DELETE_FLAG=0 and user0_.ACCOUNT=? and user0_.PASSWORD=? limit ?
+2020-05-05 10:51:22.814 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [admin]
+2020-05-05 10:51:22.815 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [123]
+2020-05-05 10:51:22.921 DEBUG org.hibernate.SQL - insert into sys_log (CONTENT, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DESP, GPS, IP, MODULE, TYPE, UPDATE_ID, UPDATE_TIME, UPDATOR, USER_AGENT, USER_ID, USER_NAME, LOG_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-05 10:51:22.922 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15]
+2020-05-05 10:51:22.922 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [admin]
+2020-05-05 10:51:22.922 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [TIMESTAMP] - [Tue May 05 10:51:22 CST 2020]
+2020-05-05 10:51:22.922 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [admin]
+2020-05-05 10:51:22.923 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [BOOLEAN] - [false]
+2020-05-05 10:51:22.923 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [admin]
+2020-05-05 10:51:22.923 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [VARCHAR] - [127.0.0.1]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [SYS-LOGIN]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [SMALLINT] - [0]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [admin]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [TIMESTAMP] - [Tue May 05 10:51:22 CST 2020]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [admin]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [null]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [VARCHAR] - [管理员]
+2020-05-05 10:51:22.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [402881f271e2b26f0171e2bebb850000]
+2020-05-05 10:51:22.970 DEBUG org.hibernate.SQL - select organizati0_.ORGANIZATION_ID as ORGANIZA1_162_0_, organizati0_.CODE as CODE2_162_0_, organizati0_.CREATE_ID as CREATE_I3_162_0_, organizati0_.CREATE_TIME as CREATE_T4_162_0_, organizati0_.CREATOR as CREATOR5_162_0_, organizati0_.DELETE_FLAG as DELETE_F6_162_0_, organizati0_.LOGO_PATH as LOGO_PAT7_162_0_, organizati0_.NAME as NAME8_162_0_, organizati0_.ORG_CODE as ORG_CODE9_162_0_, organizati0_.PARENT_ORGANIZATION_ID as PARENT_10_162_0_, organizati0_.SERVER_URL as SERVER_11_162_0_, organizati0_.SHORT_NAME as SHORT_N12_162_0_, organizati0_.TEL as TEL13_162_0_, organizati0_.TYPE as TYPE14_162_0_, organizati0_.UPDATE_ID as UPDATE_15_162_0_, organizati0_.UPDATE_TIME as UPDATE_16_162_0_, organizati0_.UPDATOR as UPDATOR17_162_0_ from organization organizati0_ where organizati0_.ORGANIZATION_ID=?
+2020-05-05 10:51:22.970 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 10:51:22.997 DEBUG org.hibernate.SQL - select clsclass1_.CLASS_ID as CLASS_ID1_64_, clsclass1_.ADDRESS as ADDRESS2_64_, clsclass1_.ADDRESS_ID as ADDRESS_3_64_, clsclass1_.ADVANTAGE as ADVANTAG4_64_, clsclass1_.ARRANGEMENT as ARRANGEM5_64_, clsclass1_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass1_.CITY as CITY7_64_, clsclass1_.CLASS_CHARGER as CLASS_CH8_64_, clsclass1_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass1_.CLASS_NUMBER as CLASS_N10_64_, clsclass1_.CLASS_TYPES as CLASS_T11_64_, clsclass1_.CLICK_NUM as CLICK_N12_64_, clsclass1_.CODE as CODE13_64_, clsclass1_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass1_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass1_.COMMENT_COUNT as COMMENT16_64_, clsclass1_.COURSE_ID as COURSE_17_64_, clsclass1_.CREATE_ID as CREATE_18_64_, clsclass1_.CREATE_TIME as CREATE_19_64_, clsclass1_.CREATOR as CREATOR20_64_, clsclass1_.DELETE_FLAG as DELETE_21_64_, clsclass1_.DISCOUNT as DISCOUN22_64_, clsclass1_.DISPRICE as DISPRIC23_64_, clsclass1_.END_TIME as END_TIM24_64_, clsclass1_.EXTENDED as EXTENDE25_64_, clsclass1_.FULL_TEXT as FULL_TE26_64_, clsclass1_.GOOD_ID as GOOD_ID27_64_, clsclass1_.HAVA_AWARD as HAVA_AW28_64_, clsclass1_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass1_.HAVE_LIVE as HAVE_LI30_64_, clsclass1_.HAVE_VIDEO as HAVE_VI31_64_, clsclass1_.IMG_PATH as IMG_PAT32_64_, clsclass1_.LATITUDE_Y as LATITUD33_64_, clsclass1_.LONGITUDE_X as LONGITU34_64_, clsclass1_.MODE as MODE35_64_, clsclass1_.NAME as NAME36_64_, clsclass1_.NEED_FORUM as NEED_FO37_64_, clsclass1_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass1_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass1_.ORG_ID as ORG_ID40_64_, clsclass1_.PAYMENT_NUM as PAYMENT41_64_, clsclass1_.POINTER as POINTER42_64_, clsclass1_.PRICE as PRICE43_64_, clsclass1_.PRODUCT_ID as PRODUCT44_64_, clsclass1_.PROGRESS as PROGRES45_64_, clsclass1_.PROVINCE as PROVINC46_64_, clsclass1_.RECOMMEND as RECOMME47_64_, clsclass1_.REGION as REGION48_64_, clsclass1_.SCORE as SCORE49_64_, clsclass1_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass1_.START_TIME as START_T51_64_, clsclass1_.STU_ALL_COUNT as STU_ALL52_64_, clsclass1_.STUDENT_COUNT as STUDENT53_64_, clsclass1_.STUDY_TIME as STUDY_T54_64_, clsclass1_.TEACHER_ID as TEACHER55_64_, clsclass1_.TOP_FLAG as TOP_FLA56_64_, clsclass1_.UPDATE_ID as UPDATE_57_64_, clsclass1_.UPDATE_TIME as UPDATE_58_64_, clsclass1_.UPDATOR as UPDATOR59_64_ from stu_student stustudent0_ cross join cls_class clsclass1_ where clsclass1_.CLASS_ID=stustudent0_.CLASS_ID and clsclass1_.DELETE_FLAG=0 and stustudent0_.DELETE_FLAG=0 and clsclass1_.ORG_ID=? and stustudent0_.USER_ID=? and stustudent0_.STATUS=? order by stustudent0_.CREATE_TIME desc limit ?
+2020-05-05 10:51:22.998 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 10:51:22.998 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:51:22.998 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [active]
+2020-05-05 10:51:23.068 DEBUG org.hibernate.SQL - select sysmenu0_.MENU_ID as col_0_0_, sysmenu0_.NAME as col_1_0_, sysmenu0_.URL as col_2_0_, sysmenu0_.hover as col_3_0_, sysmenu0_.icon as col_4_0_, sysmenu0_.PARENT_MENU_ID as col_5_0_, sysmenu0_.MENU_ORDER as col_6_0_ from sys_menu sysmenu0_ cross join user_re_role_user userrerole1_ cross join sys_privilege sysprivile2_ where sysmenu0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and sysprivile2_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrerole1_.ROLE_ID=sysprivile2_.ROLE_ID and sysprivile2_.MENU_ID=sysmenu0_.MENU_ID order by sysmenu0_.MENU_ORDER limit ?
+2020-05-05 10:51:23.068 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:51:23.105 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-05 10:51:23.105 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:51:23.627 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-05 10:51:23.629 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 10:51:23.629 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 10:51:28.363 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 10:51:28.364 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:51:28.364 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:51:28.375 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 10:51:28.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:51:28.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:51:28.380 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 10:51:28.380 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:51:28.380 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:55:00.017 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 10:55:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:55:00 CST 2020]
+2020-05-05 10:55:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:00:00 CST 2020]
+2020-05-05 10:55:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 10:55:00.032 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 10:55:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 11:55:00 CST 2020]
+2020-05-05 10:55:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:00:00 CST 2020]
+2020-05-05 10:55:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:55:53.007 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-05 10:55:53.008 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 10:55:53.008 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 10:55:53.033 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 10:55:53.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 10:55:53.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 10:55:53.034 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 10:55:53.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 10:55:53.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 10:55:55.043 DEBUG org.hibernate.SQL - select userteache0_.TEACHER_ID as TEACHER_1_244_, userteache0_.CREATE_ID as CREATE_I2_244_, userteache0_.CREATE_TIME as CREATE_T3_244_, userteache0_.CREATOR as CREATOR4_244_, userteache0_.DELETE_FLAG as DELETE_F5_244_, userteache0_.MOBILE_PHONE as MOBILE_P6_244_, userteache0_.NAME as NAME7_244_, userteache0_.ORGANIZATION_ID as ORGANIZA8_244_, userteache0_.TEACHER_NO as TEACHER_9_244_, userteache0_.UPDATE_ID as UPDATE_10_244_, userteache0_.UPDATE_TIME as UPDATE_11_244_, userteache0_.UPDATOR as UPDATOR12_244_, userteache0_.USER_ID as USER_ID13_244_ from user_teacher userteache0_ where (userteache0_.NAME like ?) and userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=? order by userteache0_.CREATE_TIME desc limit ?
+2020-05-05 10:55:55.043 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-05 10:55:55.043 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-05 10:55:55.082 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from user_teacher userteache0_ where (userteache0_.NAME like ?) and userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=?
+2020-05-05 10:55:55.083 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-05 10:55:55.083 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-05 10:55:55.085 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from user_teacher userteache0_ where (userteache0_.NAME like ?) and userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=?
+2020-05-05 10:55:55.085 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-05 10:55:55.085 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-05 10:56:03.905 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_paper_info exampaperi0_ where exampaperi0_.CREATE_ID=? and (exampaperi0_.EXAM_PAPER_NAME like ?) and exampaperi0_.DELETE_FLAG=0
+2020-05-05 10:56:03.910 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:03.911 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%%]
+2020-05-05 10:56:03.922 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_paper_info exampaperi0_ where exampaperi0_.CREATE_ID=? and (exampaperi0_.EXAM_PAPER_NAME like ?) and exampaperi0_.DELETE_FLAG=0
+2020-05-05 10:56:03.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:03.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%%]
+2020-05-05 10:56:03.933 DEBUG org.hibernate.SQL - select exampaperi0_.EXAM_PAPER_ID as EXAM_PAP1_77_, exampaperi0_.CREATE_ID as CREATE_I2_77_, exampaperi0_.CREATE_TIME as CREATE_T3_77_, exampaperi0_.CREATOR as CREATOR4_77_, exampaperi0_.DELETE_FLAG as DELETE_F5_77_, exampaperi0_.DIFFICULT_LEVEL as DIFFICUL6_77_, exampaperi0_.EXAM_PAPER_NAME as EXAM_PAP7_77_, exampaperi0_.GROUP_ID as GROUP_ID8_77_, exampaperi0_.ORG_ID as ORG_ID9_77_, exampaperi0_.PAPER_STATUS as PAPER_S10_77_, exampaperi0_.TOTAL_SCORE as TOTAL_S11_77_, exampaperi0_.UPDATE_ID as UPDATE_12_77_, exampaperi0_.UPDATE_TIME as UPDATE_13_77_, exampaperi0_.UPDATOR as UPDATOR14_77_ from exam_paper_info exampaperi0_ where exampaperi0_.CREATE_ID=? and (exampaperi0_.EXAM_PAPER_NAME like ?) and exampaperi0_.DELETE_FLAG=0 order by exampaperi0_.CREATE_TIME DESC limit ?
+2020-05-05 10:56:03.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:03.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%%]
+2020-05-05 10:56:06.320 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-05 10:56:06.321 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:06.321 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:06.322 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-05 10:56:06.323 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:06.323 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:06.332 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-05 10:56:06.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:06.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:07.892 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exercise_info exercisein0_ where (exercisein0_.name like ?) and exercisein0_.CREATE_ID=? and exercisein0_.DELETE_FLAG=0
+2020-05-05 10:56:07.892 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:07.892 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:07.906 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exercise_info exercisein0_ where (exercisein0_.name like ?) and exercisein0_.CREATE_ID=? and exercisein0_.DELETE_FLAG=0
+2020-05-05 10:56:07.906 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:07.906 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:07.914 DEBUG org.hibernate.SQL - select exercisein0_.EXERCISE_INFO_ID as EXERCISE1_103_, exercisein0_.CLASS_COUNT as CLASS_CO2_103_, exercisein0_.COMMIT_UPLOAD_TYPE as COMMIT_U3_103_, exercisein0_.CREATE_ID as CREATE_I4_103_, exercisein0_.CREATE_TIME as CREATE_T5_103_, exercisein0_.creator as creator6_103_, exercisein0_.date as date7_103_, exercisein0_.DELETE_FLAG as DELETE_F8_103_, exercisein0_.end_time as end_time9_103_, exercisein0_.name as name10_103_, exercisein0_.org_id as org_id11_103_, exercisein0_.PASSING_SCORE as PASSING12_103_, exercisein0_.REMIND as REMIND13_103_, exercisein0_.score as score14_103_, exercisein0_.start_time as start_t15_103_, exercisein0_.status as status16_103_, exercisein0_.SUBJECT_ID as SUBJECT17_103_, exercisein0_.subject_id as subject17_103_, exercisein0_.type as type18_103_, exercisein0_.UPDATE_ID as UPDATE_19_103_, exercisein0_.UPDATE_TIME as UPDATE_20_103_, exercisein0_.updator as updator21_103_ from exercise_info exercisein0_ where (exercisein0_.name like ?) and exercisein0_.CREATE_ID=? and exercisein0_.DELETE_FLAG=0 order by exercisein0_.CREATE_TIME desc limit ?
+2020-05-05 10:56:07.915 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:07.915 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:09.795 DEBUG org.hibernate.SQL - select count(schevaluat0_.EVALUATE_ID) as col_0_0_ from sch_evaluate schevaluat0_ cross join sch_evaluate_template schevaluat1_ cross join exercise_group exercisegr2_ cross join SUBJECT subject3_ where 1=1 and schevaluat0_.EVALUATE_TEMPLATE_ID=schevaluat1_.EVALUATE_TEMPLATE_ID and schevaluat1_.GROUP_ID=exercisegr2_.GROUP_ID and schevaluat0_.EVALUATE_RANGE_ID=subject3_.SUBJECT_ID and schevaluat0_.CREATE_ID=? and schevaluat0_.DELETE_FLAG=?
+2020-05-05 10:56:09.796 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:09.796 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [BOOLEAN] - [false]
+2020-05-05 10:56:11.318 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.DELETE_FLAG=0 and (mediavideo0_.NAME like ?) and mediavideo0_.CREATE_ID=? order by mediavideo0_.CREATE_TIME desc limit ?
+2020-05-05 10:56:11.318 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-05 10:56:11.352 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-05 10:56:11.352 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.367 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.DELETE_FLAG=0 and (mediavideo0_.NAME like ?) and mediavideo0_.CREATE_ID=? order by mediavideo0_.CREATE_TIME desc
+2020-05-05 10:56:11.369 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-05 10:56:11.369 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.370 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.DELETE_FLAG=0 and (mediavideo0_.NAME like ?) and mediavideo0_.CREATE_ID=? order by mediavideo0_.CREATE_TIME desc
+2020-05-05 10:56:11.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-05 10:56:11.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.498 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-05 10:56:11.498 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-05 10:56:11.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.516 DEBUG org.hibernate.SQL - select clsclass0_.NAME as col_0_0_, clsclass0_.TEACHER_ID as col_1_0_, clsclass0_.CLASS_ID as col_2_0_, clsclass0_.CLASS_NUMBER as col_3_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 limit ?
+2020-05-05 10:56:11.531 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-05 10:56:11.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.547 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0
+2020-05-05 10:56:11.549 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0
+2020-05-05 10:56:11.559 DEBUG org.hibernate.SQL - select distinct topicinfo0_.TOPIC_ID as col_0_0_ from topic_info topicinfo0_ cross join topic_class_re topicclass1_ cross join sns_comment_object commentobj2_ cross join cls_class clsclass3_ where topicinfo0_.DELETE_FLAG=0 and topicclass1_.DELETE_FLAG=0 and commentobj2_.DELETE_FLAG=0 and topicclass1_.TOPIC_ID=topicinfo0_.TOPIC_ID and topicinfo0_.TOPIC_ID=commentobj2_.COMMENT_OBJECT_UID and (topicinfo0_.TOPIC_NAME like ?) and commentobj2_.COMMENT_OBJECT_TYPE=5 and topicclass1_.CLASS_ID=clsclass3_.CLASS_ID and clsclass3_.DELETE_FLAG=0 and topicinfo0_.TOPIC_ID=topicinfo0_.TOPIC_ID limit ?
+2020-05-05 10:56:11.559 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:11.567 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-05 10:56:11.567 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:11.568 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.569 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-05 10:56:11.569 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:11.570 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.574 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-05 10:56:11.574 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:11.575 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:11.575 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-05 10:56:11.576 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - []
+2020-05-05 10:56:11.579 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-05 10:56:11.579 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - []
+2020-05-05 10:56:11.584 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-05 10:56:11.585 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - []
+2020-05-05 10:56:11.603 DEBUG org.hibernate.SQL - select distinct topicinfo0_.TOPIC_ID as col_0_0_, topicinfo0_.TOPIC_NAME as col_1_0_, topicinfo0_.TOPIC_STATUS as col_2_0_, topicinfo0_.CREATOR as col_3_0_, topicinfo0_.CREATE_ID as col_4_0_, topicinfo0_.START_TIME as col_5_0_, topicinfo0_.END_TIME as col_6_0_, topicinfo0_.CLASS_ID as col_7_0_, topicinfo0_.LATEST_COMMENT_NAME as col_8_0_, topicinfo0_.LATEST_COMMENT_TIME as col_9_0_, commentobj2_.VIEW_COUNT as col_10_0_, commentobj2_.COMMENT_COUNT as col_11_0_ from topic_info topicinfo0_ cross join topic_class_re topicclass1_ cross join sns_comment_object commentobj2_ cross join cls_class clsclass3_ where topicinfo0_.DELETE_FLAG=0 and topicclass1_.DELETE_FLAG=0 and commentobj2_.DELETE_FLAG=0 and topicclass1_.TOPIC_ID=topicinfo0_.TOPIC_ID and topicinfo0_.TOPIC_ID=commentobj2_.COMMENT_OBJECT_UID and (topicinfo0_.TOPIC_NAME like ?) and commentobj2_.COMMENT_OBJECT_TYPE=5 and topicclass1_.CLASS_ID=clsclass3_.CLASS_ID and clsclass3_.DELETE_FLAG=0 and topicinfo0_.TOPIC_ID=topicinfo0_.TOPIC_ID order by topicinfo0_.CREATE_TIME desc limit ?
+2020-05-05 10:56:11.604 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:12.542 DEBUG org.hibernate.SQL - select sysmenu0_.MENU_ID as col_0_0_, sysmenu0_.NAME as col_1_0_, '1' as col_2_0_ from sys_menu sysmenu0_ where sysmenu0_.DELETE_FLAG=0 limit ?
+2020-05-05 10:56:12.542 DEBUG org.hibernate.SQL - select userrole0_.ROLE_ID as ROLE_ID1_242_, userrole0_.CREATE_ID as CREATE_I2_242_, userrole0_.CREATE_TIME as CREATE_T3_242_, userrole0_.CREATOR as CREATOR4_242_, userrole0_.DELETE_FLAG as DELETE_F5_242_, userrole0_.NAME as NAME6_242_, userrole0_.TOP_ORG_ID as TOP_ORG_7_242_, userrole0_.type as type8_242_, userrole0_.UPDATE_ID as UPDATE_I9_242_, userrole0_.UPDATE_TIME as UPDATE_10_242_, userrole0_.UPDATOR as UPDATOR11_242_ from user_role userrole0_ where userrole0_.DELETE_FLAG=0 and (userrole0_.NAME like ?) and userrole0_.TOP_ORG_ID=? limit ?
+2020-05-05 10:56:12.542 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:12.542 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-05 10:56:12.600 DEBUG org.hibernate.SQL - select sysmenu2_.NAME as col_0_0_, sysmenu2_.MENU_ID as col_1_0_, '1' as col_2_0_ from user_role userrole0_ cross join sys_privilege sysprivile1_ cross join sys_menu sysmenu2_ where userrole0_.ROLE_ID=sysprivile1_.ROLE_ID and sysprivile1_.MENU_ID=sysmenu2_.MENU_ID and userrole0_.ROLE_ID=? and userrole0_.DELETE_FLAG=0 and sysprivile1_.DELETE_FLAG=0 limit ?
+2020-05-05 10:56:12.600 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2]
+2020-05-05 10:56:12.610 DEBUG org.hibernate.SQL - select userrole0_.ROLE_ID as ROLE_ID1_242_0_, userrole0_.CREATE_ID as CREATE_I2_242_0_, userrole0_.CREATE_TIME as CREATE_T3_242_0_, userrole0_.CREATOR as CREATOR4_242_0_, userrole0_.DELETE_FLAG as DELETE_F5_242_0_, userrole0_.NAME as NAME6_242_0_, userrole0_.TOP_ORG_ID as TOP_ORG_7_242_0_, userrole0_.type as type8_242_0_, userrole0_.UPDATE_ID as UPDATE_I9_242_0_, userrole0_.UPDATE_TIME as UPDATE_10_242_0_, userrole0_.UPDATOR as UPDATOR11_242_0_ from user_role userrole0_ where userrole0_.ROLE_ID=?
+2020-05-05 10:56:12.610 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2]
+2020-05-05 10:56:12.646 DEBUG org.hibernate.SQL - select user0_.NAME as col_0_0_, user0_.USER_ID as col_1_0_, user0_.ACCOUNT as col_2_0_, user0_.MOBILE_PHONE as col_3_0_, user0_.PASSWORD as col_4_0_ from user user0_ cross join user_re_role_user userrerole1_ where user0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and user0_.USER_ID=userrerole1_.USER_ID and userrerole1_.ROLE_ID=? and (user0_.NAME like ?) and user0_.ORGANIZATION_ID=? limit ?
+2020-05-05 10:56:12.647 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2]
+2020-05-05 10:56:12.647 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%%]
+2020-05-05 10:56:12.647 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [1]
+2020-05-05 10:56:12.662 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from user user0_ cross join user_re_role_user userrerole1_ where user0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and user0_.USER_ID=userrerole1_.USER_ID and userrerole1_.ROLE_ID=? and (user0_.NAME like ?) and user0_.ORGANIZATION_ID=?
+2020-05-05 10:56:12.662 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2]
+2020-05-05 10:56:12.662 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%%]
+2020-05-05 10:56:12.662 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [1]
+2020-05-05 10:56:12.675 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from user user0_ cross join user_re_role_user userrerole1_ where user0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and user0_.USER_ID=userrerole1_.USER_ID and userrerole1_.ROLE_ID=? and (user0_.NAME like ?) and user0_.ORGANIZATION_ID=?
+2020-05-05 10:56:12.675 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2]
+2020-05-05 10:56:12.675 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%%]
+2020-05-05 10:56:12.675 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [1]
+2020-05-05 10:56:13.616 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 10:56:13.616 DEBUG org.hibernate.SQL - select day(coursesche0_.BEGIN_TIME) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 group by day(coursesche0_.BEGIN_TIME) limit ?
+2020-05-05 10:56:13.616 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 10:56:13.616 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Fri May 01 00:00:00 CST 2020]
+2020-05-05 10:56:13.616 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 10:56:13.616 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Sun May 31 23:59:59 CST 2020]
+2020-05-05 10:56:13.616 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:56:13.616 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:56:13.626 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 10:56:13.626 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 10:56:13.626 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 10:56:13.626 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:56:13.642 DEBUG org.hibernate.SQL - select coursesche0_.DETAIL_ID as DETAIL_I1_69_0_, coursesche1_.SCHEDULE_ID as SCHEDULE1_68_1_, subject2_.SUBJECT_ID as SUBJECT_1_54_2_, classroom3_.ROOM_ID as ROOM_ID1_63_3_, clsclass5_.CLASS_ID as CLASS_ID1_64_4_, coursesche0_.BEGIN_TIME as BEGIN_TI2_69_0_, coursesche0_.SCHEDULE_ID as SCHEDULE8_69_0_, coursesche0_.CREATE_ID as CREATE_I3_69_0_, coursesche0_.CREATE_TIME as CREATE_T4_69_0_, coursesche0_.CREATOR as CREATOR5_69_0_, coursesche0_.DELETE_FLAG as DELETE_F6_69_0_, coursesche0_.END_TIME as END_TIME7_69_0_, coursesche0_.UPDATE_ID as UPDATE_I9_69_0_, coursesche0_.UPDATE_TIME as UPDATE_10_69_0_, coursesche0_.UPDATOR as UPDATOR11_69_0_, coursesche1_.BEGIN_TIME as BEGIN_TI2_68_1_, coursesche1_.ROOM_ID as ROOM_ID13_68_1_, coursesche1_.CREATE_ID as CREATE_I3_68_1_, coursesche1_.CREATE_TIME as CREATE_T4_68_1_, coursesche1_.CREATOR as CREATOR5_68_1_, coursesche1_.DELETE_FLAG as DELETE_F6_68_1_, coursesche1_.END_TIME as END_TIME7_68_1_, coursesche1_.FRI_TIME as FRI_TIME8_68_1_, coursesche1_.mark as mark9_68_1_, coursesche1_.MON_TIME as MON_TIM10_68_1_, coursesche1_.OPEN_FLAG as OPEN_FL11_68_1_, coursesche1_.ORG_ID as ORG_ID12_68_1_, coursesche1_.SAT_TIME as SAT_TIM14_68_1_, coursesche1_.status as status15_68_1_, coursesche1_.SUBJECT_ID as SUBJECT16_68_1_, coursesche1_.SUM_TIME as SUM_TIM17_68_1_, coursesche1_.TEACHER_ID as TEACHER18_68_1_, coursesche1_.TEACHER_NAME as TEACHER19_68_1_, coursesche1_.THU_TIME as THU_TIM20_68_1_, coursesche1_.TUE_TIME as TUE_TIM21_68_1_, coursesche1_.type as type22_68_1_, coursesche1_.UPDATE_ID as UPDATE_23_68_1_, coursesche1_.UPDATE_TIME as UPDATE_24_68_1_, coursesche1_.UPDATOR as UPDATOR25_68_1_, coursesche1_.WED_TIME as WED_TIM26_68_1_, subject2_.CODE as CODE2_54_2_, subject2_.CONTENT_FILE_ID as CONTENT_3_54_2_, subject2_.COURSE_ID as COURSE_I4_54_2_, subject2_.COVER_PAGE_FILE_ID as COVER_PA5_54_2_, subject2_.COVER_PAGE_URL as COVER_PA6_54_2_, subject2_.CREATE_ID as CREATE_I7_54_2_, subject2_.CREATE_TIME as CREATE_T8_54_2_, subject2_.CREATOR as CREATOR9_54_2_, subject2_.DELETE_FLAG as DELETE_10_54_2_, subject2_.FULL_NAME as FULL_NA11_54_2_, subject2_.LECTURE_COUNT as LECTURE12_54_2_, subject2_.NAME as NAME13_54_2_, subject2_.ORDER_NUM as ORDER_N14_54_2_, subject2_.ORG_ID as ORG_ID15_54_2_, subject2_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_2_, subject2_.ORIG_SUBJECT_ID as ORIG_SU17_54_2_, subject2_.SCHOOL_YEAR as SCHOOL_18_54_2_, subject2_.STATUS as STATUS19_54_2_, subject2_.TEACHER_ID as TEACHER20_54_2_, subject2_.TEACHER_NAME as TEACHER21_54_2_, subject2_.TERM as TERM22_54_2_, subject2_.TYPE as TYPE23_54_2_, subject2_.UPDATE_ID as UPDATE_24_54_2_, subject2_.UPDATE_TIME as UPDATE_25_54_2_, subject2_.UPDATOR as UPDATOR26_54_2_, classroom3_.address as address2_63_3_, classroom3_.CREATE_ID as CREATE_I3_63_3_, classroom3_.CREATE_TIME as CREATE_T4_63_3_, classroom3_.CREATOR as CREATOR5_63_3_, classroom3_.DELETE_FLAG as DELETE_F6_63_3_, classroom3_.name as name7_63_3_, classroom3_.ORG_ID as ORG_ID8_63_3_, classroom3_.status as status9_63_3_, classroom3_.UPDATE_ID as UPDATE_10_63_3_, classroom3_.UPDATE_TIME as UPDATE_11_63_3_, classroom3_.UPDATOR as UPDATOR12_63_3_, clsclass5_.ADDRESS as ADDRESS2_64_4_, clsclass5_.ADDRESS_ID as ADDRESS_3_64_4_, clsclass5_.ADVANTAGE as ADVANTAG4_64_4_, clsclass5_.ARRANGEMENT as ARRANGEM5_64_4_, clsclass5_.CAN_MULTI_EXER as CAN_MULT6_64_4_, clsclass5_.CITY as CITY7_64_4_, clsclass5_.CLASS_CHARGER as CLASS_CH8_64_4_, clsclass5_.CLASS_CHARGER_ID as CLASS_CH9_64_4_, clsclass5_.CLASS_NUMBER as CLASS_N10_64_4_, clsclass5_.CLASS_TYPES as CLASS_T11_64_4_, clsclass5_.CLICK_NUM as CLICK_N12_64_4_, clsclass5_.CODE as CODE13_64_4_, clsclass5_.COLLEGE_COURSE_ID as COLLEGE14_64_4_, clsclass5_.COLLEGE_COURSE_NAME as COLLEGE15_64_4_, clsclass5_.COMMENT_COUNT as COMMENT16_64_4_, clsclass5_.COURSE_ID as COURSE_17_64_4_, clsclass5_.CREATE_ID as CREATE_18_64_4_, clsclass5_.CREATE_TIME as CREATE_19_64_4_, clsclass5_.CREATOR as CREATOR20_64_4_, clsclass5_.DELETE_FLAG as DELETE_21_64_4_, clsclass5_.DISCOUNT as DISCOUN22_64_4_, clsclass5_.DISPRICE as DISPRIC23_64_4_, clsclass5_.END_TIME as END_TIM24_64_4_, clsclass5_.EXTENDED as EXTENDE25_64_4_, clsclass5_.FULL_TEXT as FULL_TE26_64_4_, clsclass5_.GOOD_ID as GOOD_ID27_64_4_, clsclass5_.HAVA_AWARD as HAVA_AW28_64_4_, clsclass5_.HAVE_HANDOUT as HAVE_HA29_64_4_, clsclass5_.HAVE_LIVE as HAVE_LI30_64_4_, clsclass5_.HAVE_VIDEO as HAVE_VI31_64_4_, clsclass5_.IMG_PATH as IMG_PAT32_64_4_, clsclass5_.LATITUDE_Y as LATITUD33_64_4_, clsclass5_.LONGITUDE_X as LONGITU34_64_4_, clsclass5_.MODE as MODE35_64_4_, clsclass5_.NAME as NAME36_64_4_, clsclass5_.NEED_FORUM as NEED_FO37_64_4_, clsclass5_.NEED_JOIN_AUDIT as NEED_JO38_64_4_, clsclass5_.NEED_QUIT_AUDIT as NEED_QU39_64_4_, clsclass5_.ORG_ID as ORG_ID40_64_4_, clsclass5_.PAYMENT_NUM as PAYMENT41_64_4_, clsclass5_.POINTER as POINTER42_64_4_, clsclass5_.PRICE as PRICE43_64_4_, clsclass5_.PRODUCT_ID as PRODUCT44_64_4_, clsclass5_.PROGRESS as PROGRES45_64_4_, clsclass5_.PROVINCE as PROVINC46_64_4_, clsclass5_.RECOMMEND as RECOMME47_64_4_, clsclass5_.REGION as REGION48_64_4_, clsclass5_.SCORE as SCORE49_64_4_, clsclass5_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_4_, clsclass5_.START_TIME as START_T51_64_4_, clsclass5_.STU_ALL_COUNT as STU_ALL52_64_4_, clsclass5_.STUDENT_COUNT as STUDENT53_64_4_, clsclass5_.STUDY_TIME as STUDY_T54_64_4_, clsclass5_.TEACHER_ID as TEACHER55_64_4_, clsclass5_.TOP_FLAG as TOP_FLA56_64_4_, clsclass5_.UPDATE_ID as UPDATE_57_64_4_, clsclass5_.UPDATE_TIME as UPDATE_58_64_4_, clsclass5_.UPDATOR as UPDATOR59_64_4_, classes4_.SCHEDULE_ID as SCHEDULE1_68_0__, classes4_.CLASS_ID as CLASS_ID2_1_0__, classes4_.RE_ID as RE_ID3_0__ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID left outer join SUBJECT subject2_ on coursesche1_.SUBJECT_ID=subject2_.SUBJECT_ID left outer join class_room classroom3_ on coursesche1_.ROOM_ID=classroom3_.ROOM_ID left outer join COURSE_SCHEDULE_RE_CLS classes4_ on coursesche1_.SCHEDULE_ID=classes4_.SCHEDULE_ID left outer join cls_class clsclass5_ on classes4_.CLASS_ID=clsclass5_.CLASS_ID and ( clsclass5_.DELETE_FLAG=0) where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0 order by coursesche0_.BEGIN_TIME asc
+2020-05-05 10:56:13.643 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 10:56:13.643 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 10:56:13.643 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 10:56:14.443 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 10:56:14.444 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:14.444 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:14.445 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 10:56:14.446 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:14.446 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 10:56:14.448 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 10:56:14.449 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 10:56:14.449 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:00:00.012 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:00:00 CST 2020]
+2020-05-05 11:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:05:00 CST 2020]
+2020-05-05 11:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:00:00.022 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:00:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:00:00 CST 2020]
+2020-05-05 11:00:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:05:00 CST 2020]
+2020-05-05 11:00:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:02:48.369 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:02:48.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:02:48.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:02:48.372 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:02:48.372 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:02:48.372 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:02:48.375 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:02:48.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:02:48.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:05:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:05:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:05:00 CST 2020]
+2020-05-05 11:05:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:10:00 CST 2020]
+2020-05-05 11:05:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:05:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:05:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:05:00 CST 2020]
+2020-05-05 11:05:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:10:00 CST 2020]
+2020-05-05 11:05:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:05:08.688 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:05:08.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:05:08.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:05:08.694 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:05:08.694 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:05:08.694 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:05:08.696 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:05:08.697 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:05:08.697 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:10:00.016 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:10:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:10:00 CST 2020]
+2020-05-05 11:10:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:15:00 CST 2020]
+2020-05-05 11:10:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:10:00.027 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:10:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:10:00 CST 2020]
+2020-05-05 11:10:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:15:00 CST 2020]
+2020-05-05 11:10:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:14:51.046 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:14:51.054 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:14:51.055 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:14:51.059 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:14:51.059 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:14:51.059 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:14:51.062 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:14:51.062 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:14:51.062 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:15:00 CST 2020]
+2020-05-05 11:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:20:00 CST 2020]
+2020-05-05 11:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:15:00.021 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:15:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:15:00 CST 2020]
+2020-05-05 11:15:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:20:00 CST 2020]
+2020-05-05 11:15:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:15:08.966 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where classroom0_.name=? and classroom0_.address=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:08.967 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [fffff]
+2020-05-05 11:15:08.967 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [ddsddfs]
+2020-05-05 11:15:08.968 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where classroom0_.name=? and classroom0_.address=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:08.969 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [fffff]
+2020-05-05 11:15:08.969 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [ddsddfs]
+2020-05-05 11:15:08.981 DEBUG org.hibernate.SQL - insert into class_room (address, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, name, ORG_ID, status, UPDATE_ID, UPDATE_TIME, UPDATOR, ROOM_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-05 11:15:08.981 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ddsddfs]
+2020-05-05 11:15:08.981 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [TIMESTAMP] - [Tue May 05 11:15:08 CST 2020]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [管理员]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [BOOLEAN] - [false]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [fffff]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [1]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [TIMESTAMP] - [Tue May 05 11:15:08 CST 2020]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [管理员]
+2020-05-05 11:15:08.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:15:09.011 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:09.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:09.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:09.012 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:09.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:09.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:09.015 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:15:09.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:09.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:11.728 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:11.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:11.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:11.729 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:11.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:11.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:11.731 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:15:11.731 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:11.731 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:18.869 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:18.870 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:18.870 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:18.871 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:18.871 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:18.871 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:18.873 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:15:18.873 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:18.873 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:20.872 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-05 11:15:20.872 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:20.872 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:20.873 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-05 11:15:20.873 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:20.873 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:20.875 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-05 11:15:20.875 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:20.875 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:43.625 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:43.625 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:43.626 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:43.627 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:43.628 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:43.628 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:43.629 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:15:43.630 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:43.630 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:45.288 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:45.289 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:45.289 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:45.290 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:15:45.290 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:45.290 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:15:45.293 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:15:45.293 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:15:45.293 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:20:00.018 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:20:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:20:00 CST 2020]
+2020-05-05 11:20:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:25:00 CST 2020]
+2020-05-05 11:20:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:20:00.025 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:20:00 CST 2020]
+2020-05-05 11:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:25:00 CST 2020]
+2020-05-05 11:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:21:40.226 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:21:40.228 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:21:40.228 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:21:40.229 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:21:40.229 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:21:40.229 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:21:40.232 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:21:40.233 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:21:40.233 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:25:00.019 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:25:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:25:00 CST 2020]
+2020-05-05 11:25:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:30:00 CST 2020]
+2020-05-05 11:25:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:25:00.031 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:25:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:25:00 CST 2020]
+2020-05-05 11:25:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:30:00 CST 2020]
+2020-05-05 11:25:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:30:00.078 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:30:00.106 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:30:00 CST 2020]
+2020-05-05 11:30:00.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:35:00 CST 2020]
+2020-05-05 11:30:00.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:30:00.141 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:30:00.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:30:00 CST 2020]
+2020-05-05 11:30:00.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:35:00 CST 2020]
+2020-05-05 11:30:00.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:35:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:35:00 CST 2020]
+2020-05-05 11:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:40:00 CST 2020]
+2020-05-05 11:35:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:35:00.023 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:35:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:35:00 CST 2020]
+2020-05-05 11:35:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:40:00 CST 2020]
+2020-05-05 11:35:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:40:00.010 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:40:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:40:00 CST 2020]
+2020-05-05 11:40:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:45:00 CST 2020]
+2020-05-05 11:40:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:40:00.012 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:40:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:40:00 CST 2020]
+2020-05-05 11:40:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:45:00 CST 2020]
+2020-05-05 11:40:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:44:54.057 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:44:54.060 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:54.061 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:54.071 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:44:54.071 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:54.071 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:54.076 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:44:54.076 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:54.076 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:56.741 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:44:56.741 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:56.742 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:56.743 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:44:56.743 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:56.743 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:56.746 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:44:56.746 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:56.746 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:59.678 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:44:59.679 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:59.679 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:59.679 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:44:59.679 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:59.680 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:44:59.683 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:44:59.683 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:44:59.683 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:45:00.009 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:45:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:45:00 CST 2020]
+2020-05-05 11:45:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:50:00 CST 2020]
+2020-05-05 11:45:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:45:00.012 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:45:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:45:00 CST 2020]
+2020-05-05 11:45:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:50:00 CST 2020]
+2020-05-05 11:45:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:46:24.273 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:24.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:24.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:24.275 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:24.276 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:24.276 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:24.278 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:24.278 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:24.278 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:24.413 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:24.413 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:24.413 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:24.414 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:24.414 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:24.414 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:24.415 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:24.415 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:24.415 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:26.474 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:26.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:26.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:26.476 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:26.476 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:26.476 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:26.477 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:26.478 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:26.478 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:27.856 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:27.857 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:46:27.857 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:46:27.886 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 11:46:27.886 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:46:27.886 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:46:27.887 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 11:46:27.887 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:46:27.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:46:29.084 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:29.084 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:29.084 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:29.085 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:29.085 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:29.085 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:29.087 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:29.087 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:29.087 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:31.273 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:31.273 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:31.273 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:31.275 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:31.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:31.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:31.278 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:31.278 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:31.278 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:34.203 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:34.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:34.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:34.204 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:46:34.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:34.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:46:34.206 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:46:34.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:46:34.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:48:47.614 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:48:47.617 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:48:47.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:48:47.620 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:48:47.621 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:48:47.621 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:48:47.623 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:48:47.624 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:48:47.624 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:48:50.808 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-05 11:48:50.808 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:48:50.808 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:48:50.811 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 11:48:50.811 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:48:50.811 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:48:50.813 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 11:48:50.813 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:48:50.813 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:48:54.126 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-05 11:48:54.127 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:48:54.127 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:48:54.130 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 11:48:54.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:48:54.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:48:54.131 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-05 11:48:54.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-05 11:48:54.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-05 11:48:56.602 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:48:56.602 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:48:56.602 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:48:56.603 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 11:48:56.603 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:48:56.603 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:48:56.605 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:48:56.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 11:48:56.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:50:00.014 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:50:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:50:00 CST 2020]
+2020-05-05 11:50:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:55:00 CST 2020]
+2020-05-05 11:50:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:50:00.019 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:50:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:50:00 CST 2020]
+2020-05-05 11:50:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:55:00 CST 2020]
+2020-05-05 11:50:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:53:54.716 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:53:54.742 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:53:54.743 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:53:54.773 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:53:54.773 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:53:54.774 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:53:54.782 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:53:54.782 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:53:54.782 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:00.026 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 11:55:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:55:00 CST 2020]
+2020-05-05 11:55:00.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 13:00:00 CST 2020]
+2020-05-05 11:55:00.036 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 11:55:00.055 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 11:55:00.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 12:55:00 CST 2020]
+2020-05-05 11:55:00.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 13:00:00 CST 2020]
+2020-05-05 11:55:00.057 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 11:55:03.596 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:55:03.596 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:03.596 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:03.598 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:55:03.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:03.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:03.604 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:55:03.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:03.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:16.942 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:55:16.943 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:16.943 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:16.945 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:55:16.946 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:16.946 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:16.949 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:55:16.949 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:16.949 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:26.530 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:55:26.530 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:26.531 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:26.532 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 11:55:26.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:26.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 11:55:26.535 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 11:55:26.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 11:55:26.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:00:00.024 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 12:00:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 13:00:00 CST 2020]
+2020-05-05 12:00:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 13:05:00 CST 2020]
+2020-05-05 12:00:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:00:00.034 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 12:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 13:00:00 CST 2020]
+2020-05-05 12:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 13:05:00 CST 2020]
+2020-05-05 12:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 12:00:26.017 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exercise_group exercisegr0_ where exercisegr0_.CREATE_ID=? and exercisegr0_.TYPE=? and (exercisegr0_.NAME like ?) and exercisegr0_.DELETE_FLAG=0
+2020-05-05 12:00:26.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:26.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [SMALLINT] - [13]
+2020-05-05 12:00:26.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [%%]
+2020-05-05 12:00:26.032 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exercise_group exercisegr0_ where exercisegr0_.CREATE_ID=? and exercisegr0_.TYPE=? and (exercisegr0_.NAME like ?) and exercisegr0_.DELETE_FLAG=0
+2020-05-05 12:00:26.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:26.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [SMALLINT] - [13]
+2020-05-05 12:00:26.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [%%]
+2020-05-05 12:00:26.045 DEBUG org.hibernate.SQL - select exercisegr0_.GROUP_ID as col_0_0_, subject1_.NAME as col_1_0_, exercisegr0_.GROUP_ID as GROUP_ID1_99_, exercisegr0_.ALL_COUNT as ALL_COUN2_99_, exercisegr0_.ATTRIBUTE1 as ATTRIBUT3_99_, exercisegr0_.ATTRIBUTE2 as ATTRIBUT4_99_, exercisegr0_.CHAPTER_ID as CHAPTER_5_99_, exercisegr0_.CHAPTER_ORDER as CHAPTER_6_99_, exercisegr0_.CLASS_ID as CLASS_ID7_99_, exercisegr0_.COLLEGE_COURSE_ID as COLLEGE_8_99_, exercisegr0_.CREATE_ID as CREATE_I9_99_, exercisegr0_.CREATE_TIME as CREATE_10_99_, exercisegr0_.CREATOR as CREATOR11_99_, exercisegr0_.DELETE_FLAG as DELETE_12_99_, exercisegr0_.DIFFICULT_LEVEL as DIFFICU13_99_, exercisegr0_.GROUP_RANGE as GROUP_R14_99_, exercisegr0_.NAME as NAME15_99_, exercisegr0_.ORDER_NUM as ORDER_N16_99_, exercisegr0_.ORG_ID as ORG_ID17_99_, exercisegr0_.ORIGIN_EXERCISE_ID as ORIGIN_18_99_, exercisegr0_.PART_ORDER as PART_OR19_99_, exercisegr0_.SOURCE_USER_ID as SOURCE_20_99_, exercisegr0_.SOURCE_USER_NAME as SOURCE_21_99_, exercisegr0_.STATUS as STATUS22_99_, exercisegr0_.SUBJECT_ID as SUBJECT23_99_, exercisegr0_.SUBJECT_ORDER as SUBJECT24_99_, exercisegr0_.TYPE as TYPE25_99_, exercisegr0_.UPDATE_ID as UPDATE_26_99_, exercisegr0_.UPDATE_TIME as UPDATE_27_99_, exercisegr0_.UPDATOR as UPDATOR28_99_ from exercise_group exercisegr0_ cross join SUBJECT subject1_ where exercisegr0_.SUBJECT_ID=subject1_.SUBJECT_ID and exercisegr0_.CREATE_ID=? and exercisegr0_.TYPE=? and (exercisegr0_.NAME like ?) and exercisegr0_.DELETE_FLAG=0 order by exercisegr0_.CREATE_TIME DESC limit ?
+2020-05-05 12:00:26.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:26.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [SMALLINT] - [13]
+2020-05-05 12:00:26.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [%%]
+2020-05-05 12:00:29.855 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exercise_group exercisegr0_ where exercisegr0_.CREATE_ID=? and exercisegr0_.TYPE=? and (exercisegr0_.NAME like ?) and exercisegr0_.DELETE_FLAG=0
+2020-05-05 12:00:29.855 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:29.855 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [SMALLINT] - [13]
+2020-05-05 12:00:29.855 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [%%]
+2020-05-05 12:00:29.857 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exercise_group exercisegr0_ where exercisegr0_.CREATE_ID=? and exercisegr0_.TYPE=? and (exercisegr0_.NAME like ?) and exercisegr0_.DELETE_FLAG=0
+2020-05-05 12:00:29.857 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:29.857 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [SMALLINT] - [13]
+2020-05-05 12:00:29.857 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [%%]
+2020-05-05 12:00:29.861 DEBUG org.hibernate.SQL - select exercisegr0_.GROUP_ID as col_0_0_, subject1_.NAME as col_1_0_, exercisegr0_.GROUP_ID as GROUP_ID1_99_, exercisegr0_.ALL_COUNT as ALL_COUN2_99_, exercisegr0_.ATTRIBUTE1 as ATTRIBUT3_99_, exercisegr0_.ATTRIBUTE2 as ATTRIBUT4_99_, exercisegr0_.CHAPTER_ID as CHAPTER_5_99_, exercisegr0_.CHAPTER_ORDER as CHAPTER_6_99_, exercisegr0_.CLASS_ID as CLASS_ID7_99_, exercisegr0_.COLLEGE_COURSE_ID as COLLEGE_8_99_, exercisegr0_.CREATE_ID as CREATE_I9_99_, exercisegr0_.CREATE_TIME as CREATE_10_99_, exercisegr0_.CREATOR as CREATOR11_99_, exercisegr0_.DELETE_FLAG as DELETE_12_99_, exercisegr0_.DIFFICULT_LEVEL as DIFFICU13_99_, exercisegr0_.GROUP_RANGE as GROUP_R14_99_, exercisegr0_.NAME as NAME15_99_, exercisegr0_.ORDER_NUM as ORDER_N16_99_, exercisegr0_.ORG_ID as ORG_ID17_99_, exercisegr0_.ORIGIN_EXERCISE_ID as ORIGIN_18_99_, exercisegr0_.PART_ORDER as PART_OR19_99_, exercisegr0_.SOURCE_USER_ID as SOURCE_20_99_, exercisegr0_.SOURCE_USER_NAME as SOURCE_21_99_, exercisegr0_.STATUS as STATUS22_99_, exercisegr0_.SUBJECT_ID as SUBJECT23_99_, exercisegr0_.SUBJECT_ORDER as SUBJECT24_99_, exercisegr0_.TYPE as TYPE25_99_, exercisegr0_.UPDATE_ID as UPDATE_26_99_, exercisegr0_.UPDATE_TIME as UPDATE_27_99_, exercisegr0_.UPDATOR as UPDATOR28_99_ from exercise_group exercisegr0_ cross join SUBJECT subject1_ where exercisegr0_.SUBJECT_ID=subject1_.SUBJECT_ID and exercisegr0_.CREATE_ID=? and exercisegr0_.TYPE=? and (exercisegr0_.NAME like ?) and exercisegr0_.DELETE_FLAG=0 order by exercisegr0_.CREATE_TIME DESC limit ?
+2020-05-05 12:00:29.862 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:29.862 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [SMALLINT] - [13]
+2020-05-05 12:00:29.862 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [%%]
+2020-05-05 12:00:31.595 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:00:31.597 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:00:31.597 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:31.603 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:00:31.603 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:00:31.603 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:31.609 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:00:31.610 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:00:31.610 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:34.276 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:00:34.277 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:34.277 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:00:34.279 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:00:34.279 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:34.279 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:00:34.282 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:00:34.282 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:00:34.282 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:01:06.147 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.examroom_name=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:01:06.148 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [第一考场]
+2020-05-05 12:01:06.161 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.examroom_name=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:01:06.162 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [第一考场]
+2020-05-05 12:01:06.195 DEBUG org.hibernate.SQL - insert into exam_room (CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, examroom_name, room_id, room_name, seats_num, status, UPDATE_ID, UPDATE_TIME, UPDATOR, examroom_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-05 12:01:06.196 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:06.196 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:01:06 CST 2020]
+2020-05-05 12:01:06.196 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-05 12:01:06.196 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-05 12:01:06.197 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [VARCHAR] - [第一考场]
+2020-05-05 12:01:06.197 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [null]
+2020-05-05 12:01:06.197 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-05 12:01:06.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [INTEGER] - [98]
+2020-05-05 12:01:06.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [1]
+2020-05-05 12:01:06.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:06.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [TIMESTAMP] - [Tue May 05 12:01:06 CST 2020]
+2020-05-05 12:01:06.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [管理员]
+2020-05-05 12:01:06.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [ff80808171e2f6280171e2fe90790000]
+2020-05-05 12:01:06.221 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:01:06.222 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:06.222 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:01:06.222 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:01:06.222 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:06.223 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:01:06.225 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:01:06.225 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:06.225 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:01:36.765 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:01:36.769 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:01:36.769 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:36.779 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:01:36.779 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:01:36.779 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:36.781 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:01:36.781 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:01:36.781 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:39.256 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:01:39.256 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:39.256 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:01:39.258 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:01:39.258 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:39.258 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:01:39.261 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:01:39.261 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:01:39.261 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:08.427 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 12:04:08.431 DEBUG org.hibernate.SQL - select day(coursesche0_.BEGIN_TIME) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 group by day(coursesche0_.BEGIN_TIME) limit ?
+2020-05-05 12:04:08.464 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:04:08.465 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:04:08.465 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:04:08.474 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 12:04:08.474 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:04:08.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:04:08.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:04:08.478 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Fri May 01 00:00:00 CST 2020]
+2020-05-05 12:04:08.478 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Sun May 31 23:59:59 CST 2020]
+2020-05-05 12:04:08.478 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:04:08.496 DEBUG org.hibernate.SQL - select coursesche0_.DETAIL_ID as DETAIL_I1_69_0_, coursesche1_.SCHEDULE_ID as SCHEDULE1_68_1_, subject2_.SUBJECT_ID as SUBJECT_1_54_2_, classroom3_.ROOM_ID as ROOM_ID1_63_3_, clsclass5_.CLASS_ID as CLASS_ID1_64_4_, coursesche0_.BEGIN_TIME as BEGIN_TI2_69_0_, coursesche0_.SCHEDULE_ID as SCHEDULE8_69_0_, coursesche0_.CREATE_ID as CREATE_I3_69_0_, coursesche0_.CREATE_TIME as CREATE_T4_69_0_, coursesche0_.CREATOR as CREATOR5_69_0_, coursesche0_.DELETE_FLAG as DELETE_F6_69_0_, coursesche0_.END_TIME as END_TIME7_69_0_, coursesche0_.UPDATE_ID as UPDATE_I9_69_0_, coursesche0_.UPDATE_TIME as UPDATE_10_69_0_, coursesche0_.UPDATOR as UPDATOR11_69_0_, coursesche1_.BEGIN_TIME as BEGIN_TI2_68_1_, coursesche1_.ROOM_ID as ROOM_ID13_68_1_, coursesche1_.CREATE_ID as CREATE_I3_68_1_, coursesche1_.CREATE_TIME as CREATE_T4_68_1_, coursesche1_.CREATOR as CREATOR5_68_1_, coursesche1_.DELETE_FLAG as DELETE_F6_68_1_, coursesche1_.END_TIME as END_TIME7_68_1_, coursesche1_.FRI_TIME as FRI_TIME8_68_1_, coursesche1_.mark as mark9_68_1_, coursesche1_.MON_TIME as MON_TIM10_68_1_, coursesche1_.OPEN_FLAG as OPEN_FL11_68_1_, coursesche1_.ORG_ID as ORG_ID12_68_1_, coursesche1_.SAT_TIME as SAT_TIM14_68_1_, coursesche1_.status as status15_68_1_, coursesche1_.SUBJECT_ID as SUBJECT16_68_1_, coursesche1_.SUM_TIME as SUM_TIM17_68_1_, coursesche1_.TEACHER_ID as TEACHER18_68_1_, coursesche1_.TEACHER_NAME as TEACHER19_68_1_, coursesche1_.THU_TIME as THU_TIM20_68_1_, coursesche1_.TUE_TIME as TUE_TIM21_68_1_, coursesche1_.type as type22_68_1_, coursesche1_.UPDATE_ID as UPDATE_23_68_1_, coursesche1_.UPDATE_TIME as UPDATE_24_68_1_, coursesche1_.UPDATOR as UPDATOR25_68_1_, coursesche1_.WED_TIME as WED_TIM26_68_1_, subject2_.CODE as CODE2_54_2_, subject2_.CONTENT_FILE_ID as CONTENT_3_54_2_, subject2_.COURSE_ID as COURSE_I4_54_2_, subject2_.COVER_PAGE_FILE_ID as COVER_PA5_54_2_, subject2_.COVER_PAGE_URL as COVER_PA6_54_2_, subject2_.CREATE_ID as CREATE_I7_54_2_, subject2_.CREATE_TIME as CREATE_T8_54_2_, subject2_.CREATOR as CREATOR9_54_2_, subject2_.DELETE_FLAG as DELETE_10_54_2_, subject2_.FULL_NAME as FULL_NA11_54_2_, subject2_.LECTURE_COUNT as LECTURE12_54_2_, subject2_.NAME as NAME13_54_2_, subject2_.ORDER_NUM as ORDER_N14_54_2_, subject2_.ORG_ID as ORG_ID15_54_2_, subject2_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_2_, subject2_.ORIG_SUBJECT_ID as ORIG_SU17_54_2_, subject2_.SCHOOL_YEAR as SCHOOL_18_54_2_, subject2_.STATUS as STATUS19_54_2_, subject2_.TEACHER_ID as TEACHER20_54_2_, subject2_.TEACHER_NAME as TEACHER21_54_2_, subject2_.TERM as TERM22_54_2_, subject2_.TYPE as TYPE23_54_2_, subject2_.UPDATE_ID as UPDATE_24_54_2_, subject2_.UPDATE_TIME as UPDATE_25_54_2_, subject2_.UPDATOR as UPDATOR26_54_2_, classroom3_.address as address2_63_3_, classroom3_.CREATE_ID as CREATE_I3_63_3_, classroom3_.CREATE_TIME as CREATE_T4_63_3_, classroom3_.CREATOR as CREATOR5_63_3_, classroom3_.DELETE_FLAG as DELETE_F6_63_3_, classroom3_.name as name7_63_3_, classroom3_.ORG_ID as ORG_ID8_63_3_, classroom3_.status as status9_63_3_, classroom3_.UPDATE_ID as UPDATE_10_63_3_, classroom3_.UPDATE_TIME as UPDATE_11_63_3_, classroom3_.UPDATOR as UPDATOR12_63_3_, clsclass5_.ADDRESS as ADDRESS2_64_4_, clsclass5_.ADDRESS_ID as ADDRESS_3_64_4_, clsclass5_.ADVANTAGE as ADVANTAG4_64_4_, clsclass5_.ARRANGEMENT as ARRANGEM5_64_4_, clsclass5_.CAN_MULTI_EXER as CAN_MULT6_64_4_, clsclass5_.CITY as CITY7_64_4_, clsclass5_.CLASS_CHARGER as CLASS_CH8_64_4_, clsclass5_.CLASS_CHARGER_ID as CLASS_CH9_64_4_, clsclass5_.CLASS_NUMBER as CLASS_N10_64_4_, clsclass5_.CLASS_TYPES as CLASS_T11_64_4_, clsclass5_.CLICK_NUM as CLICK_N12_64_4_, clsclass5_.CODE as CODE13_64_4_, clsclass5_.COLLEGE_COURSE_ID as COLLEGE14_64_4_, clsclass5_.COLLEGE_COURSE_NAME as COLLEGE15_64_4_, clsclass5_.COMMENT_COUNT as COMMENT16_64_4_, clsclass5_.COURSE_ID as COURSE_17_64_4_, clsclass5_.CREATE_ID as CREATE_18_64_4_, clsclass5_.CREATE_TIME as CREATE_19_64_4_, clsclass5_.CREATOR as CREATOR20_64_4_, clsclass5_.DELETE_FLAG as DELETE_21_64_4_, clsclass5_.DISCOUNT as DISCOUN22_64_4_, clsclass5_.DISPRICE as DISPRIC23_64_4_, clsclass5_.END_TIME as END_TIM24_64_4_, clsclass5_.EXTENDED as EXTENDE25_64_4_, clsclass5_.FULL_TEXT as FULL_TE26_64_4_, clsclass5_.GOOD_ID as GOOD_ID27_64_4_, clsclass5_.HAVA_AWARD as HAVA_AW28_64_4_, clsclass5_.HAVE_HANDOUT as HAVE_HA29_64_4_, clsclass5_.HAVE_LIVE as HAVE_LI30_64_4_, clsclass5_.HAVE_VIDEO as HAVE_VI31_64_4_, clsclass5_.IMG_PATH as IMG_PAT32_64_4_, clsclass5_.LATITUDE_Y as LATITUD33_64_4_, clsclass5_.LONGITUDE_X as LONGITU34_64_4_, clsclass5_.MODE as MODE35_64_4_, clsclass5_.NAME as NAME36_64_4_, clsclass5_.NEED_FORUM as NEED_FO37_64_4_, clsclass5_.NEED_JOIN_AUDIT as NEED_JO38_64_4_, clsclass5_.NEED_QUIT_AUDIT as NEED_QU39_64_4_, clsclass5_.ORG_ID as ORG_ID40_64_4_, clsclass5_.PAYMENT_NUM as PAYMENT41_64_4_, clsclass5_.POINTER as POINTER42_64_4_, clsclass5_.PRICE as PRICE43_64_4_, clsclass5_.PRODUCT_ID as PRODUCT44_64_4_, clsclass5_.PROGRESS as PROGRES45_64_4_, clsclass5_.PROVINCE as PROVINC46_64_4_, clsclass5_.RECOMMEND as RECOMME47_64_4_, clsclass5_.REGION as REGION48_64_4_, clsclass5_.SCORE as SCORE49_64_4_, clsclass5_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_4_, clsclass5_.START_TIME as START_T51_64_4_, clsclass5_.STU_ALL_COUNT as STU_ALL52_64_4_, clsclass5_.STUDENT_COUNT as STUDENT53_64_4_, clsclass5_.STUDY_TIME as STUDY_T54_64_4_, clsclass5_.TEACHER_ID as TEACHER55_64_4_, clsclass5_.TOP_FLAG as TOP_FLA56_64_4_, clsclass5_.UPDATE_ID as UPDATE_57_64_4_, clsclass5_.UPDATE_TIME as UPDATE_58_64_4_, clsclass5_.UPDATOR as UPDATOR59_64_4_, classes4_.SCHEDULE_ID as SCHEDULE1_68_0__, classes4_.CLASS_ID as CLASS_ID2_1_0__, classes4_.RE_ID as RE_ID3_0__ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID left outer join SUBJECT subject2_ on coursesche1_.SUBJECT_ID=subject2_.SUBJECT_ID left outer join class_room classroom3_ on coursesche1_.ROOM_ID=classroom3_.ROOM_ID left outer join COURSE_SCHEDULE_RE_CLS classes4_ on coursesche1_.SCHEDULE_ID=classes4_.SCHEDULE_ID left outer join cls_class clsclass5_ on classes4_.CLASS_ID=clsclass5_.CLASS_ID and ( clsclass5_.DELETE_FLAG=0) where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0 order by coursesche0_.BEGIN_TIME asc
+2020-05-05 12:04:08.499 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:04:08.499 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:04:08.499 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:04:09.452 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:04:09.452 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:04:09.452 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:09.453 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:04:09.453 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:04:09.453 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:09.456 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:04:09.456 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:04:09.456 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:13.617 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:04:13.617 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:04:13.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:13.619 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:04:13.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:04:13.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:13.622 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:04:13.622 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:04:13.622 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:15.137 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:04:15.138 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:15.138 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:15.139 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:04:15.140 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:15.140 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:15.142 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:04:15.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:15.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:25.198 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.examroom_name=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:04:25.198 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [第二考场]
+2020-05-05 12:04:25.199 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.examroom_name=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:04:25.199 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [第二考场]
+2020-05-05 12:04:25.203 DEBUG org.hibernate.SQL - insert into exam_room (CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, examroom_name, room_id, room_name, seats_num, status, UPDATE_ID, UPDATE_TIME, UPDATOR, examroom_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-05 12:04:25.203 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:25.203 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 12:04:25 CST 2020]
+2020-05-05 12:04:25.203 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-05 12:04:25.203 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-05 12:04:25.203 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [VARCHAR] - [第二考场]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [INTEGER] - [55]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [1]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [TIMESTAMP] - [Tue May 05 12:04:25 CST 2020]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [管理员]
+2020-05-05 12:04:25.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [ff80808171e2f6280171e30199f10001]
+2020-05-05 12:04:25.234 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:04:25.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:25.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:25.235 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:04:25.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:25.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:04:25.237 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:04:25.238 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:04:25.239 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:05:00.010 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-05 12:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 13:05:00 CST 2020]
+2020-05-05 12:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 13:10:00 CST 2020]
+2020-05-05 12:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:05:00.018 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-05 12:05:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 13:05:00 CST 2020]
+2020-05-05 12:05:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 13:10:00 CST 2020]
+2020-05-05 12:05:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-05 12:06:45.495 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 12:06:45.495 DEBUG org.hibernate.SQL - select day(coursesche0_.BEGIN_TIME) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 group by day(coursesche0_.BEGIN_TIME) limit ?
+2020-05-05 12:06:45.512 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:06:45.512 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Fri May 01 00:00:00 CST 2020]
+2020-05-05 12:06:45.513 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:06:45.513 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Sun May 31 23:59:59 CST 2020]
+2020-05-05 12:06:45.513 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:45.513 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:45.532 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 12:06:45.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:06:45.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:06:45.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:45.545 DEBUG org.hibernate.SQL - select coursesche0_.DETAIL_ID as DETAIL_I1_69_0_, coursesche1_.SCHEDULE_ID as SCHEDULE1_68_1_, subject2_.SUBJECT_ID as SUBJECT_1_54_2_, classroom3_.ROOM_ID as ROOM_ID1_63_3_, clsclass5_.CLASS_ID as CLASS_ID1_64_4_, coursesche0_.BEGIN_TIME as BEGIN_TI2_69_0_, coursesche0_.SCHEDULE_ID as SCHEDULE8_69_0_, coursesche0_.CREATE_ID as CREATE_I3_69_0_, coursesche0_.CREATE_TIME as CREATE_T4_69_0_, coursesche0_.CREATOR as CREATOR5_69_0_, coursesche0_.DELETE_FLAG as DELETE_F6_69_0_, coursesche0_.END_TIME as END_TIME7_69_0_, coursesche0_.UPDATE_ID as UPDATE_I9_69_0_, coursesche0_.UPDATE_TIME as UPDATE_10_69_0_, coursesche0_.UPDATOR as UPDATOR11_69_0_, coursesche1_.BEGIN_TIME as BEGIN_TI2_68_1_, coursesche1_.ROOM_ID as ROOM_ID13_68_1_, coursesche1_.CREATE_ID as CREATE_I3_68_1_, coursesche1_.CREATE_TIME as CREATE_T4_68_1_, coursesche1_.CREATOR as CREATOR5_68_1_, coursesche1_.DELETE_FLAG as DELETE_F6_68_1_, coursesche1_.END_TIME as END_TIME7_68_1_, coursesche1_.FRI_TIME as FRI_TIME8_68_1_, coursesche1_.mark as mark9_68_1_, coursesche1_.MON_TIME as MON_TIM10_68_1_, coursesche1_.OPEN_FLAG as OPEN_FL11_68_1_, coursesche1_.ORG_ID as ORG_ID12_68_1_, coursesche1_.SAT_TIME as SAT_TIM14_68_1_, coursesche1_.status as status15_68_1_, coursesche1_.SUBJECT_ID as SUBJECT16_68_1_, coursesche1_.SUM_TIME as SUM_TIM17_68_1_, coursesche1_.TEACHER_ID as TEACHER18_68_1_, coursesche1_.TEACHER_NAME as TEACHER19_68_1_, coursesche1_.THU_TIME as THU_TIM20_68_1_, coursesche1_.TUE_TIME as TUE_TIM21_68_1_, coursesche1_.type as type22_68_1_, coursesche1_.UPDATE_ID as UPDATE_23_68_1_, coursesche1_.UPDATE_TIME as UPDATE_24_68_1_, coursesche1_.UPDATOR as UPDATOR25_68_1_, coursesche1_.WED_TIME as WED_TIM26_68_1_, subject2_.CODE as CODE2_54_2_, subject2_.CONTENT_FILE_ID as CONTENT_3_54_2_, subject2_.COURSE_ID as COURSE_I4_54_2_, subject2_.COVER_PAGE_FILE_ID as COVER_PA5_54_2_, subject2_.COVER_PAGE_URL as COVER_PA6_54_2_, subject2_.CREATE_ID as CREATE_I7_54_2_, subject2_.CREATE_TIME as CREATE_T8_54_2_, subject2_.CREATOR as CREATOR9_54_2_, subject2_.DELETE_FLAG as DELETE_10_54_2_, subject2_.FULL_NAME as FULL_NA11_54_2_, subject2_.LECTURE_COUNT as LECTURE12_54_2_, subject2_.NAME as NAME13_54_2_, subject2_.ORDER_NUM as ORDER_N14_54_2_, subject2_.ORG_ID as ORG_ID15_54_2_, subject2_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_2_, subject2_.ORIG_SUBJECT_ID as ORIG_SU17_54_2_, subject2_.SCHOOL_YEAR as SCHOOL_18_54_2_, subject2_.STATUS as STATUS19_54_2_, subject2_.TEACHER_ID as TEACHER20_54_2_, subject2_.TEACHER_NAME as TEACHER21_54_2_, subject2_.TERM as TERM22_54_2_, subject2_.TYPE as TYPE23_54_2_, subject2_.UPDATE_ID as UPDATE_24_54_2_, subject2_.UPDATE_TIME as UPDATE_25_54_2_, subject2_.UPDATOR as UPDATOR26_54_2_, classroom3_.address as address2_63_3_, classroom3_.CREATE_ID as CREATE_I3_63_3_, classroom3_.CREATE_TIME as CREATE_T4_63_3_, classroom3_.CREATOR as CREATOR5_63_3_, classroom3_.DELETE_FLAG as DELETE_F6_63_3_, classroom3_.name as name7_63_3_, classroom3_.ORG_ID as ORG_ID8_63_3_, classroom3_.status as status9_63_3_, classroom3_.UPDATE_ID as UPDATE_10_63_3_, classroom3_.UPDATE_TIME as UPDATE_11_63_3_, classroom3_.UPDATOR as UPDATOR12_63_3_, clsclass5_.ADDRESS as ADDRESS2_64_4_, clsclass5_.ADDRESS_ID as ADDRESS_3_64_4_, clsclass5_.ADVANTAGE as ADVANTAG4_64_4_, clsclass5_.ARRANGEMENT as ARRANGEM5_64_4_, clsclass5_.CAN_MULTI_EXER as CAN_MULT6_64_4_, clsclass5_.CITY as CITY7_64_4_, clsclass5_.CLASS_CHARGER as CLASS_CH8_64_4_, clsclass5_.CLASS_CHARGER_ID as CLASS_CH9_64_4_, clsclass5_.CLASS_NUMBER as CLASS_N10_64_4_, clsclass5_.CLASS_TYPES as CLASS_T11_64_4_, clsclass5_.CLICK_NUM as CLICK_N12_64_4_, clsclass5_.CODE as CODE13_64_4_, clsclass5_.COLLEGE_COURSE_ID as COLLEGE14_64_4_, clsclass5_.COLLEGE_COURSE_NAME as COLLEGE15_64_4_, clsclass5_.COMMENT_COUNT as COMMENT16_64_4_, clsclass5_.COURSE_ID as COURSE_17_64_4_, clsclass5_.CREATE_ID as CREATE_18_64_4_, clsclass5_.CREATE_TIME as CREATE_19_64_4_, clsclass5_.CREATOR as CREATOR20_64_4_, clsclass5_.DELETE_FLAG as DELETE_21_64_4_, clsclass5_.DISCOUNT as DISCOUN22_64_4_, clsclass5_.DISPRICE as DISPRIC23_64_4_, clsclass5_.END_TIME as END_TIM24_64_4_, clsclass5_.EXTENDED as EXTENDE25_64_4_, clsclass5_.FULL_TEXT as FULL_TE26_64_4_, clsclass5_.GOOD_ID as GOOD_ID27_64_4_, clsclass5_.HAVA_AWARD as HAVA_AW28_64_4_, clsclass5_.HAVE_HANDOUT as HAVE_HA29_64_4_, clsclass5_.HAVE_LIVE as HAVE_LI30_64_4_, clsclass5_.HAVE_VIDEO as HAVE_VI31_64_4_, clsclass5_.IMG_PATH as IMG_PAT32_64_4_, clsclass5_.LATITUDE_Y as LATITUD33_64_4_, clsclass5_.LONGITUDE_X as LONGITU34_64_4_, clsclass5_.MODE as MODE35_64_4_, clsclass5_.NAME as NAME36_64_4_, clsclass5_.NEED_FORUM as NEED_FO37_64_4_, clsclass5_.NEED_JOIN_AUDIT as NEED_JO38_64_4_, clsclass5_.NEED_QUIT_AUDIT as NEED_QU39_64_4_, clsclass5_.ORG_ID as ORG_ID40_64_4_, clsclass5_.PAYMENT_NUM as PAYMENT41_64_4_, clsclass5_.POINTER as POINTER42_64_4_, clsclass5_.PRICE as PRICE43_64_4_, clsclass5_.PRODUCT_ID as PRODUCT44_64_4_, clsclass5_.PROGRESS as PROGRES45_64_4_, clsclass5_.PROVINCE as PROVINC46_64_4_, clsclass5_.RECOMMEND as RECOMME47_64_4_, clsclass5_.REGION as REGION48_64_4_, clsclass5_.SCORE as SCORE49_64_4_, clsclass5_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_4_, clsclass5_.START_TIME as START_T51_64_4_, clsclass5_.STU_ALL_COUNT as STU_ALL52_64_4_, clsclass5_.STUDENT_COUNT as STUDENT53_64_4_, clsclass5_.STUDY_TIME as STUDY_T54_64_4_, clsclass5_.TEACHER_ID as TEACHER55_64_4_, clsclass5_.TOP_FLAG as TOP_FLA56_64_4_, clsclass5_.UPDATE_ID as UPDATE_57_64_4_, clsclass5_.UPDATE_TIME as UPDATE_58_64_4_, clsclass5_.UPDATOR as UPDATOR59_64_4_, classes4_.SCHEDULE_ID as SCHEDULE1_68_0__, classes4_.CLASS_ID as CLASS_ID2_1_0__, classes4_.RE_ID as RE_ID3_0__ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID left outer join SUBJECT subject2_ on coursesche1_.SUBJECT_ID=subject2_.SUBJECT_ID left outer join class_room classroom3_ on coursesche1_.ROOM_ID=classroom3_.ROOM_ID left outer join COURSE_SCHEDULE_RE_CLS classes4_ on coursesche1_.SCHEDULE_ID=classes4_.SCHEDULE_ID left outer join cls_class clsclass5_ on classes4_.CLASS_ID=clsclass5_.CLASS_ID and ( clsclass5_.DELETE_FLAG=0) where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0 order by coursesche0_.BEGIN_TIME asc
+2020-05-05 12:06:45.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:06:45.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:06:45.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:48.138 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 12:06:48.138 DEBUG org.hibernate.SQL - select day(coursesche0_.BEGIN_TIME) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 group by day(coursesche0_.BEGIN_TIME) limit ?
+2020-05-05 12:06:48.138 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Fri May 01 00:00:00 CST 2020]
+2020-05-05 12:06:48.138 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:06:48.139 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Sun May 31 23:59:59 CST 2020]
+2020-05-05 12:06:48.139 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:06:48.139 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:48.139 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:48.142 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0
+2020-05-05 12:06:48.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:06:48.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:06:48.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:48.146 DEBUG org.hibernate.SQL - select coursesche0_.DETAIL_ID as DETAIL_I1_69_0_, coursesche1_.SCHEDULE_ID as SCHEDULE1_68_1_, subject2_.SUBJECT_ID as SUBJECT_1_54_2_, classroom3_.ROOM_ID as ROOM_ID1_63_3_, clsclass5_.CLASS_ID as CLASS_ID1_64_4_, coursesche0_.BEGIN_TIME as BEGIN_TI2_69_0_, coursesche0_.SCHEDULE_ID as SCHEDULE8_69_0_, coursesche0_.CREATE_ID as CREATE_I3_69_0_, coursesche0_.CREATE_TIME as CREATE_T4_69_0_, coursesche0_.CREATOR as CREATOR5_69_0_, coursesche0_.DELETE_FLAG as DELETE_F6_69_0_, coursesche0_.END_TIME as END_TIME7_69_0_, coursesche0_.UPDATE_ID as UPDATE_I9_69_0_, coursesche0_.UPDATE_TIME as UPDATE_10_69_0_, coursesche0_.UPDATOR as UPDATOR11_69_0_, coursesche1_.BEGIN_TIME as BEGIN_TI2_68_1_, coursesche1_.ROOM_ID as ROOM_ID13_68_1_, coursesche1_.CREATE_ID as CREATE_I3_68_1_, coursesche1_.CREATE_TIME as CREATE_T4_68_1_, coursesche1_.CREATOR as CREATOR5_68_1_, coursesche1_.DELETE_FLAG as DELETE_F6_68_1_, coursesche1_.END_TIME as END_TIME7_68_1_, coursesche1_.FRI_TIME as FRI_TIME8_68_1_, coursesche1_.mark as mark9_68_1_, coursesche1_.MON_TIME as MON_TIM10_68_1_, coursesche1_.OPEN_FLAG as OPEN_FL11_68_1_, coursesche1_.ORG_ID as ORG_ID12_68_1_, coursesche1_.SAT_TIME as SAT_TIM14_68_1_, coursesche1_.status as status15_68_1_, coursesche1_.SUBJECT_ID as SUBJECT16_68_1_, coursesche1_.SUM_TIME as SUM_TIM17_68_1_, coursesche1_.TEACHER_ID as TEACHER18_68_1_, coursesche1_.TEACHER_NAME as TEACHER19_68_1_, coursesche1_.THU_TIME as THU_TIM20_68_1_, coursesche1_.TUE_TIME as TUE_TIM21_68_1_, coursesche1_.type as type22_68_1_, coursesche1_.UPDATE_ID as UPDATE_23_68_1_, coursesche1_.UPDATE_TIME as UPDATE_24_68_1_, coursesche1_.UPDATOR as UPDATOR25_68_1_, coursesche1_.WED_TIME as WED_TIM26_68_1_, subject2_.CODE as CODE2_54_2_, subject2_.CONTENT_FILE_ID as CONTENT_3_54_2_, subject2_.COURSE_ID as COURSE_I4_54_2_, subject2_.COVER_PAGE_FILE_ID as COVER_PA5_54_2_, subject2_.COVER_PAGE_URL as COVER_PA6_54_2_, subject2_.CREATE_ID as CREATE_I7_54_2_, subject2_.CREATE_TIME as CREATE_T8_54_2_, subject2_.CREATOR as CREATOR9_54_2_, subject2_.DELETE_FLAG as DELETE_10_54_2_, subject2_.FULL_NAME as FULL_NA11_54_2_, subject2_.LECTURE_COUNT as LECTURE12_54_2_, subject2_.NAME as NAME13_54_2_, subject2_.ORDER_NUM as ORDER_N14_54_2_, subject2_.ORG_ID as ORG_ID15_54_2_, subject2_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_2_, subject2_.ORIG_SUBJECT_ID as ORIG_SU17_54_2_, subject2_.SCHOOL_YEAR as SCHOOL_18_54_2_, subject2_.STATUS as STATUS19_54_2_, subject2_.TEACHER_ID as TEACHER20_54_2_, subject2_.TEACHER_NAME as TEACHER21_54_2_, subject2_.TERM as TERM22_54_2_, subject2_.TYPE as TYPE23_54_2_, subject2_.UPDATE_ID as UPDATE_24_54_2_, subject2_.UPDATE_TIME as UPDATE_25_54_2_, subject2_.UPDATOR as UPDATOR26_54_2_, classroom3_.address as address2_63_3_, classroom3_.CREATE_ID as CREATE_I3_63_3_, classroom3_.CREATE_TIME as CREATE_T4_63_3_, classroom3_.CREATOR as CREATOR5_63_3_, classroom3_.DELETE_FLAG as DELETE_F6_63_3_, classroom3_.name as name7_63_3_, classroom3_.ORG_ID as ORG_ID8_63_3_, classroom3_.status as status9_63_3_, classroom3_.UPDATE_ID as UPDATE_10_63_3_, classroom3_.UPDATE_TIME as UPDATE_11_63_3_, classroom3_.UPDATOR as UPDATOR12_63_3_, clsclass5_.ADDRESS as ADDRESS2_64_4_, clsclass5_.ADDRESS_ID as ADDRESS_3_64_4_, clsclass5_.ADVANTAGE as ADVANTAG4_64_4_, clsclass5_.ARRANGEMENT as ARRANGEM5_64_4_, clsclass5_.CAN_MULTI_EXER as CAN_MULT6_64_4_, clsclass5_.CITY as CITY7_64_4_, clsclass5_.CLASS_CHARGER as CLASS_CH8_64_4_, clsclass5_.CLASS_CHARGER_ID as CLASS_CH9_64_4_, clsclass5_.CLASS_NUMBER as CLASS_N10_64_4_, clsclass5_.CLASS_TYPES as CLASS_T11_64_4_, clsclass5_.CLICK_NUM as CLICK_N12_64_4_, clsclass5_.CODE as CODE13_64_4_, clsclass5_.COLLEGE_COURSE_ID as COLLEGE14_64_4_, clsclass5_.COLLEGE_COURSE_NAME as COLLEGE15_64_4_, clsclass5_.COMMENT_COUNT as COMMENT16_64_4_, clsclass5_.COURSE_ID as COURSE_17_64_4_, clsclass5_.CREATE_ID as CREATE_18_64_4_, clsclass5_.CREATE_TIME as CREATE_19_64_4_, clsclass5_.CREATOR as CREATOR20_64_4_, clsclass5_.DELETE_FLAG as DELETE_21_64_4_, clsclass5_.DISCOUNT as DISCOUN22_64_4_, clsclass5_.DISPRICE as DISPRIC23_64_4_, clsclass5_.END_TIME as END_TIM24_64_4_, clsclass5_.EXTENDED as EXTENDE25_64_4_, clsclass5_.FULL_TEXT as FULL_TE26_64_4_, clsclass5_.GOOD_ID as GOOD_ID27_64_4_, clsclass5_.HAVA_AWARD as HAVA_AW28_64_4_, clsclass5_.HAVE_HANDOUT as HAVE_HA29_64_4_, clsclass5_.HAVE_LIVE as HAVE_LI30_64_4_, clsclass5_.HAVE_VIDEO as HAVE_VI31_64_4_, clsclass5_.IMG_PATH as IMG_PAT32_64_4_, clsclass5_.LATITUDE_Y as LATITUD33_64_4_, clsclass5_.LONGITUDE_X as LONGITU34_64_4_, clsclass5_.MODE as MODE35_64_4_, clsclass5_.NAME as NAME36_64_4_, clsclass5_.NEED_FORUM as NEED_FO37_64_4_, clsclass5_.NEED_JOIN_AUDIT as NEED_JO38_64_4_, clsclass5_.NEED_QUIT_AUDIT as NEED_QU39_64_4_, clsclass5_.ORG_ID as ORG_ID40_64_4_, clsclass5_.PAYMENT_NUM as PAYMENT41_64_4_, clsclass5_.POINTER as POINTER42_64_4_, clsclass5_.PRICE as PRICE43_64_4_, clsclass5_.PRODUCT_ID as PRODUCT44_64_4_, clsclass5_.PROGRESS as PROGRES45_64_4_, clsclass5_.PROVINCE as PROVINC46_64_4_, clsclass5_.RECOMMEND as RECOMME47_64_4_, clsclass5_.REGION as REGION48_64_4_, clsclass5_.SCORE as SCORE49_64_4_, clsclass5_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_4_, clsclass5_.START_TIME as START_T51_64_4_, clsclass5_.STU_ALL_COUNT as STU_ALL52_64_4_, clsclass5_.STUDENT_COUNT as STUDENT53_64_4_, clsclass5_.STUDY_TIME as STUDY_T54_64_4_, clsclass5_.TEACHER_ID as TEACHER55_64_4_, clsclass5_.TOP_FLAG as TOP_FLA56_64_4_, clsclass5_.UPDATE_ID as UPDATE_57_64_4_, clsclass5_.UPDATE_TIME as UPDATE_58_64_4_, clsclass5_.UPDATOR as UPDATOR59_64_4_, classes4_.SCHEDULE_ID as SCHEDULE1_68_0__, classes4_.CLASS_ID as CLASS_ID2_1_0__, classes4_.RE_ID as RE_ID3_0__ from course_schedule_detail coursesche0_ left outer join course_schedule coursesche1_ on coursesche0_.SCHEDULE_ID=coursesche1_.SCHEDULE_ID left outer join SUBJECT subject2_ on coursesche1_.SUBJECT_ID=subject2_.SUBJECT_ID left outer join class_room classroom3_ on coursesche1_.ROOM_ID=classroom3_.ROOM_ID left outer join COURSE_SCHEDULE_RE_CLS classes4_ on coursesche1_.SCHEDULE_ID=classes4_.SCHEDULE_ID left outer join cls_class clsclass5_ on classes4_.CLASS_ID=clsclass5_.CLASS_ID and ( clsclass5_.DELETE_FLAG=0) where coursesche0_.DELETE_FLAG=0 and coursesche0_.BEGIN_TIME>=? and coursesche0_.END_TIME<=? and coursesche1_.status=? and coursesche1_.DELETE_FLAG=0 and coursesche0_.DELETE_FLAG=0 order by coursesche0_.BEGIN_TIME asc
+2020-05-05 12:06:48.148 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Tue May 05 00:00:00 CST 2020]
+2020-05-05 12:06:48.148 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Tue May 05 23:59:59 CST 2020]
+2020-05-05 12:06:48.148 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-05 12:06:49.452 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:06:49.453 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:06:49.453 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:06:49.455 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-05 12:06:49.455 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:06:49.455 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:06:49.458 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:06:49.459 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-05 12:06:49.459 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:06:51.228 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:06:51.229 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:06:51.229 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:06:51.234 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:06:51.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:06:51.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:06:51.238 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:06:51.239 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:06:51.239 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:07:29.247 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:07:29.249 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:07:29.249 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:07:29.250 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-05 12:07:29.250 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:07:29.251 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-05 12:07:29.253 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-05 12:07:29.253 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-05 12:07:29.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
diff --git a/D_/log/qxueyou-20200506-1.log b/D_/log/qxueyou-20200506-1.log
new file mode 100644
index 0000000..d2bbdb4
--- /dev/null
+++ b/D_/log/qxueyou-20200506-1.log
@@ -0,0 +1,2723 @@
+2020-05-06 16:00:00.092 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:00:00.146 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:00:00 CST 2020]
+2020-05-06 16:00:00.148 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:05:00 CST 2020]
+2020-05-06 16:00:00.149 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:00:00.219 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:00:00.219 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:00:00 CST 2020]
+2020-05-06 16:00:00.220 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:05:00 CST 2020]
+2020-05-06 16:00:00.220 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:02:27.771 DEBUG org.hibernate.SQL - select user0_.USER_ID as USER_ID1_234_, user0_.ACCOUNT as ACCOUNT2_234_, user0_.AGE as AGE3_234_, user0_.CREATE_ID as CREATE_I4_234_, user0_.CREATE_TIME as CREATE_T5_234_, user0_.CREATOR as CREATOR6_234_, user0_.DELETE_FLAG as DELETE_F7_234_, user0_.E_MAIL as E_MAIL8_234_, user0_.IMEI as IMEI9_234_, user0_.IMG_PATH as IMG_PAT10_234_, user0_.MOBILE_PHONE as MOBILE_11_234_, user0_.NAME as NAME12_234_, user0_.ORGANIZATION_ID as ORGANIZ13_234_, user0_.PASSWORD as PASSWOR14_234_, user0_.SEX as SEX15_234_, user0_.SOURCE as SOURCE16_234_, user0_.UPDATE_ID as UPDATE_17_234_, user0_.UPDATE_TIME as UPDATE_18_234_, user0_.UPDATOR as UPDATOR19_234_ from user user0_ where user0_.DELETE_FLAG=0 and user0_.ACCOUNT=? and user0_.PASSWORD=? limit ?
+2020-05-06 16:02:27.774 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [admin]
+2020-05-06 16:02:27.775 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [123]
+2020-05-06 16:02:27.897 DEBUG org.hibernate.SQL - insert into sys_log (CONTENT, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DESP, GPS, IP, MODULE, TYPE, UPDATE_ID, UPDATE_TIME, UPDATOR, USER_AGENT, USER_ID, USER_NAME, LOG_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-06 16:02:27.898 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15]
+2020-05-06 16:02:27.898 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [admin]
+2020-05-06 16:02:27.898 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [TIMESTAMP] - [Wed May 06 16:02:27 CST 2020]
+2020-05-06 16:02:27.898 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [admin]
+2020-05-06 16:02:27.899 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [BOOLEAN] - [false]
+2020-05-06 16:02:27.899 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [admin]
+2020-05-06 16:02:27.899 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [VARCHAR] - [127.0.0.1]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [SYS-LOGIN]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [SMALLINT] - [0]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [admin]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [TIMESTAMP] - [Wed May 06 16:02:27 CST 2020]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [admin]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [null]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [VARCHAR] - [管理员]
+2020-05-06 16:02:27.900 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [40288a1971e8fd7e0171e901e5920000]
+2020-05-06 16:02:27.959 DEBUG org.hibernate.SQL - select organizati0_.ORGANIZATION_ID as ORGANIZA1_162_0_, organizati0_.CODE as CODE2_162_0_, organizati0_.CREATE_ID as CREATE_I3_162_0_, organizati0_.CREATE_TIME as CREATE_T4_162_0_, organizati0_.CREATOR as CREATOR5_162_0_, organizati0_.DELETE_FLAG as DELETE_F6_162_0_, organizati0_.LOGO_PATH as LOGO_PAT7_162_0_, organizati0_.NAME as NAME8_162_0_, organizati0_.ORG_CODE as ORG_CODE9_162_0_, organizati0_.PARENT_ORGANIZATION_ID as PARENT_10_162_0_, organizati0_.SERVER_URL as SERVER_11_162_0_, organizati0_.SHORT_NAME as SHORT_N12_162_0_, organizati0_.TEL as TEL13_162_0_, organizati0_.TYPE as TYPE14_162_0_, organizati0_.UPDATE_ID as UPDATE_15_162_0_, organizati0_.UPDATE_TIME as UPDATE_16_162_0_, organizati0_.UPDATOR as UPDATOR17_162_0_ from organization organizati0_ where organizati0_.ORGANIZATION_ID=?
+2020-05-06 16:02:27.960 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:02:27.991 DEBUG org.hibernate.SQL - select clsclass1_.CLASS_ID as CLASS_ID1_64_, clsclass1_.ADDRESS as ADDRESS2_64_, clsclass1_.ADDRESS_ID as ADDRESS_3_64_, clsclass1_.ADVANTAGE as ADVANTAG4_64_, clsclass1_.ARRANGEMENT as ARRANGEM5_64_, clsclass1_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass1_.CITY as CITY7_64_, clsclass1_.CLASS_CHARGER as CLASS_CH8_64_, clsclass1_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass1_.CLASS_NUMBER as CLASS_N10_64_, clsclass1_.CLASS_TYPES as CLASS_T11_64_, clsclass1_.CLICK_NUM as CLICK_N12_64_, clsclass1_.CODE as CODE13_64_, clsclass1_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass1_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass1_.COMMENT_COUNT as COMMENT16_64_, clsclass1_.COURSE_ID as COURSE_17_64_, clsclass1_.CREATE_ID as CREATE_18_64_, clsclass1_.CREATE_TIME as CREATE_19_64_, clsclass1_.CREATOR as CREATOR20_64_, clsclass1_.DELETE_FLAG as DELETE_21_64_, clsclass1_.DISCOUNT as DISCOUN22_64_, clsclass1_.DISPRICE as DISPRIC23_64_, clsclass1_.END_TIME as END_TIM24_64_, clsclass1_.EXTENDED as EXTENDE25_64_, clsclass1_.FULL_TEXT as FULL_TE26_64_, clsclass1_.GOOD_ID as GOOD_ID27_64_, clsclass1_.HAVA_AWARD as HAVA_AW28_64_, clsclass1_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass1_.HAVE_LIVE as HAVE_LI30_64_, clsclass1_.HAVE_VIDEO as HAVE_VI31_64_, clsclass1_.IMG_PATH as IMG_PAT32_64_, clsclass1_.LATITUDE_Y as LATITUD33_64_, clsclass1_.LONGITUDE_X as LONGITU34_64_, clsclass1_.MODE as MODE35_64_, clsclass1_.NAME as NAME36_64_, clsclass1_.NEED_FORUM as NEED_FO37_64_, clsclass1_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass1_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass1_.ORG_ID as ORG_ID40_64_, clsclass1_.PAYMENT_NUM as PAYMENT41_64_, clsclass1_.POINTER as POINTER42_64_, clsclass1_.PRICE as PRICE43_64_, clsclass1_.PRODUCT_ID as PRODUCT44_64_, clsclass1_.PROGRESS as PROGRES45_64_, clsclass1_.PROVINCE as PROVINC46_64_, clsclass1_.RECOMMEND as RECOMME47_64_, clsclass1_.REGION as REGION48_64_, clsclass1_.SCORE as SCORE49_64_, clsclass1_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass1_.START_TIME as START_T51_64_, clsclass1_.STU_ALL_COUNT as STU_ALL52_64_, clsclass1_.STUDENT_COUNT as STUDENT53_64_, clsclass1_.STUDY_TIME as STUDY_T54_64_, clsclass1_.TEACHER_ID as TEACHER55_64_, clsclass1_.TOP_FLAG as TOP_FLA56_64_, clsclass1_.UPDATE_ID as UPDATE_57_64_, clsclass1_.UPDATE_TIME as UPDATE_58_64_, clsclass1_.UPDATOR as UPDATOR59_64_ from stu_student stustudent0_ cross join cls_class clsclass1_ where clsclass1_.CLASS_ID=stustudent0_.CLASS_ID and clsclass1_.DELETE_FLAG=0 and stustudent0_.DELETE_FLAG=0 and clsclass1_.ORG_ID=? and stustudent0_.USER_ID=? and stustudent0_.STATUS=? order by stustudent0_.CREATE_TIME desc limit ?
+2020-05-06 16:02:27.992 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:02:27.992 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:02:27.992 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [active]
+2020-05-06 16:02:28.056 DEBUG org.hibernate.SQL - select sysmenu0_.MENU_ID as col_0_0_, sysmenu0_.NAME as col_1_0_, sysmenu0_.URL as col_2_0_, sysmenu0_.hover as col_3_0_, sysmenu0_.icon as col_4_0_, sysmenu0_.PARENT_MENU_ID as col_5_0_, sysmenu0_.MENU_ORDER as col_6_0_ from sys_menu sysmenu0_ cross join user_re_role_user userrerole1_ cross join sys_privilege sysprivile2_ where sysmenu0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and sysprivile2_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrerole1_.ROLE_ID=sysprivile2_.ROLE_ID and sysprivile2_.MENU_ID=sysmenu0_.MENU_ID order by sysmenu0_.MENU_ORDER limit ?
+2020-05-06 16:02:28.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:02:28.102 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-06 16:02:28.103 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:02:28.719 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-06 16:02:28.721 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:02:28.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 16:05:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:05:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:05:00 CST 2020]
+2020-05-06 16:05:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:10:00 CST 2020]
+2020-05-06 16:05:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:05:00.030 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:05:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:05:00 CST 2020]
+2020-05-06 16:05:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:10:00 CST 2020]
+2020-05-06 16:05:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:05:54.894 DEBUG org.hibernate.SQL - select userteache0_.TEACHER_ID as TEACHER_1_244_, userteache0_.CREATE_ID as CREATE_I2_244_, userteache0_.CREATE_TIME as CREATE_T3_244_, userteache0_.CREATOR as CREATOR4_244_, userteache0_.DELETE_FLAG as DELETE_F5_244_, userteache0_.MOBILE_PHONE as MOBILE_P6_244_, userteache0_.NAME as NAME7_244_, userteache0_.ORGANIZATION_ID as ORGANIZA8_244_, userteache0_.TEACHER_NO as TEACHER_9_244_, userteache0_.UPDATE_ID as UPDATE_10_244_, userteache0_.UPDATE_TIME as UPDATE_11_244_, userteache0_.UPDATOR as UPDATOR12_244_, userteache0_.USER_ID as USER_ID13_244_ from user_teacher userteache0_ where (userteache0_.NAME like ?) and userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=? order by userteache0_.CREATE_TIME desc limit ?
+2020-05-06 16:05:54.895 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-06 16:05:54.895 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-06 16:05:54.910 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from user_teacher userteache0_ where (userteache0_.NAME like ?) and userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=?
+2020-05-06 16:05:54.910 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-06 16:05:54.910 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-06 16:05:54.914 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from user_teacher userteache0_ where (userteache0_.NAME like ?) and userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=?
+2020-05-06 16:05:54.914 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-06 16:05:54.914 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-06 16:05:59.298 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 16:05:59.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:05:59.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:05:59.309 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 16:05:59.309 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:05:59.309 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:05:59.314 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 16:05:59.314 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:05:59.314 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:01.924 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 16:06:01.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:01.924 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 16:06:01.929 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 16:06:01.929 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:01.929 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 16:06:01.934 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-06 16:06:01.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:01.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 16:06:09.803 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.examroom_name=? and examroom0_.DELETE_FLAG=0
+2020-05-06 16:06:09.804 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [第一考场]
+2020-05-06 16:06:09.806 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.examroom_name=? and examroom0_.DELETE_FLAG=0
+2020-05-06 16:06:09.806 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [第一考场]
+2020-05-06 16:06:21.555 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 16:06:21.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:06:21.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:21.561 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 16:06:21.561 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:06:21.561 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:21.563 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 16:06:21.563 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:06:21.563 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:39.337 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:06:39.338 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:06:39.338 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:39.341 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:06:39.342 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:06:39.342 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:39.349 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:06:39.350 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:06:39.350 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:06:44.100 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 16:07:00.128 DEBUG org.hibernate.SQL - insert into exam_info (CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DURATION_MIN, EXAM_NAME, EXAM_STATUS, EXAM_TYPE, MAX_LATE_MIN, ORG_ID, PASSING_SCORE, SHOW_ANALYSE, SHOW_CORRECT_ANSWER, SHOW_SCORE, SHOW_SCORE_TIME, SHOW_TYPE, SUBJECT_ID, TOTAL_SCORE, UPDATE_ID, UPDATE_TIME, UPDATOR, EXAM_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-06 16:07:00.129 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:07:00.129 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 16:07:00 CST 2020]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [60]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ssssss]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 16:07:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 16:07:00.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 16:07:00.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 16:07:00.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 16:07:00.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 16:07:00 CST 2020]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 16:07:00.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:07:00.157 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:07:00.157 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:07:00.159 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:07:00.160 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:07:00.162 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:07:00.162 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:07:00.165 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:07:00.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:07:58.324 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:07:58.325 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:07:58.325 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:07:58.337 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:07:58.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:07:58.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:07:58.341 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:07:58.341 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:07:58.341 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:07:58.365 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:07:58.366 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:07:58.393 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:07:58.394 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:07:58.610 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:07:58.611 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:07:58.645 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:07:58.645 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.792 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:08:10.793 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:08:10.795 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:08:10.795 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.797 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:08:10.798 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.799 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:08:10.799 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.811 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:08:10.811 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:08:10.812 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.813 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:08:10.813 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:08:10.813 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.824 DEBUG org.hibernate.SQL - select examresult0_.CLASS_ID as CLASS_ID1_80_, examresult0_.EXAM_BATCH_ID as EXAM_BAT2_80_, examresult0_.STUDENT_NO as STUDENT_3_80_, examresult0_.ACCURACY as ACCURACY4_80_, examresult0_.CLASS_NAME as CLASS_NA5_80_, examresult0_.COMPLETION_RATE as COMPLETI6_80_, examresult0_.CORRECT_COUNT as CORRECT_7_80_, examresult0_.END_TIME as END_TIME8_80_, examresult0_.EXAM_BATCH_NO as EXAM_BAT9_80_, examresult0_.EXAM_ID as EXAM_ID10_80_, examresult0_.EXAM_NAME as EXAM_NA11_80_, examresult0_.EXAM_STATUS as EXAM_ST12_80_, examresult0_.EXERCISE_GROUP_ID as EXERCIS13_80_, examresult0_.MOBILE_PHONE as MOBILE_14_80_, examresult0_.RELATION_PAPER_CODE as RELATIO15_80_, examresult0_.PAPER_NAME as PAPER_N16_80_, examresult0_.PASSING_SCORE as PASSING17_80_, examresult0_.RECORD_ID as RECORD_18_80_, examresult0_.REMAINING_SECONDS as REMAINI19_80_, examresult0_.SCORE as SCORE20_80_, examresult0_.SEX as SEX21_80_, examresult0_.START_TIME as START_T22_80_, examresult0_.STATUS as STATUS23_80_, examresult0_.STUDENT_NAME as STUDENT24_80_, examresult0_.SUBJECT_ID as SUBJECT25_80_, examresult0_.SUBJECT_Name as SUBJECT26_80_, examresult0_.SUBMIT_TIME as SUBMIT_27_80_, examresult0_.TOTAL_SCORE as TOTAL_S28_80_, examresult0_.USER_ID as USER_ID29_80_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=? order by examresult0_.EXAM_BATCH_ID, examresult0_.SCORE desc limit ?
+2020-05-06 16:08:10.825 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:08:10.825 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.827 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:08:10.828 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.838 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:08:10.839 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.843 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:08:10.843 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:10.844 DEBUG org.hibernate.SQL - select exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_75_0_, exerciseit0_.set_id as set_id1_110_0_, exerciseit0_.set_id as set_id1_110_1_, exerciseit0_.blank_score as blank_sc2_110_1_, exerciseit0_.CREATE_ID as CREATE_I3_110_1_, exerciseit0_.CREATE_TIME as CREATE_T4_110_1_, exerciseit0_.creator as creator5_110_1_, exerciseit0_.DELETE_FLAG as DELETE_F6_110_1_, exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_110_1_, exerciseit0_.exercise_Info_Id as exercise7_110_1_, exerciseit0_.half_right_score as half_rig8_110_1_, exerciseit0_.item_count as item_cou9_110_1_, exerciseit0_.item_type as item_ty10_110_1_, exerciseit0_.right_score as right_s11_110_1_, exerciseit0_.source_group_id as source_12_110_1_, exerciseit0_.UPDATE_ID as UPDATE_13_110_1_, exerciseit0_.UPDATE_TIME as UPDATE_14_110_1_, exerciseit0_.updator as updator15_110_1_, exerciseit0_.wrong_score as wrong_s16_110_1_ from exercise_item_set exerciseit0_ where ( exerciseit0_.DELETE_FLAG=0) and exerciseit0_.EXERCISE_INFO_ID=?
+2020-05-06 16:08:10.844 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:12.470 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:08:12.470 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:08:12.470 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:08:12.471 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:08:12.472 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:08:12.472 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:08:12.474 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:08:12.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:08:12.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:08:12.479 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:08:12.480 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:08:12.483 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:08:12.484 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:12.485 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:08:12.485 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:08:12.486 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:08:12.486 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:10:00.013 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:10:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:10:00 CST 2020]
+2020-05-06 16:10:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:15:00 CST 2020]
+2020-05-06 16:10:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:10:00.026 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:10:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:10:00 CST 2020]
+2020-05-06 16:10:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:15:00 CST 2020]
+2020-05-06 16:10:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:13:24.918 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 16:13:24.971 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:13:24.971 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:13:24.976 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:13:24.977 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:14:53.543 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:14:53.544 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:14:53.556 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 16:14:53.556 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [60]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [sssssf]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 16:14:53.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 16:14:53 CST 2020]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 16:14:53.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:14:53.584 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:14:53.584 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:14:53.584 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:14:53.585 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:14:53.586 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:14:53.586 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:14:53.587 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:14:53.591 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:15:00.011 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:15:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:15:00 CST 2020]
+2020-05-06 16:15:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:20:00 CST 2020]
+2020-05-06 16:15:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:15:00.017 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:15:00 CST 2020]
+2020-05-06 16:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:20:00 CST 2020]
+2020-05-06 16:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:17:12.291 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:17:12.297 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:17:12.297 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:17:12.299 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:17:12.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:17:12.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:17:12.301 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:17:12.301 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:17:12.301 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:17:12.308 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:17:12.308 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:17:12.317 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:17:12.318 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:17:12.326 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:17:12.327 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:17:12.330 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:17:12.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:18:13.056 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 16:18:13.072 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:18:13.072 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:18:13.074 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:18:13.074 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:18:24.523 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:18:24.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:18:24.527 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 16:18:24.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:18:24.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [aaaa]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 16:18:24.528 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 16:18:24 CST 2020]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 16:18:24.529 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:18:24.554 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:18:24.555 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:18:24.556 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:18:24.556 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:18:24.557 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:18:24.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:18:24.557 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:18:24.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:20:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:20:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:20:00 CST 2020]
+2020-05-06 16:20:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:25:00 CST 2020]
+2020-05-06 16:20:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:20:00.025 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:20:00 CST 2020]
+2020-05-06 16:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:25:00 CST 2020]
+2020-05-06 16:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:25:00.010 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:25:00 CST 2020]
+2020-05-06 16:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:30:00 CST 2020]
+2020-05-06 16:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:25:00.015 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:25:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:25:00 CST 2020]
+2020-05-06 16:25:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:30:00 CST 2020]
+2020-05-06 16:25:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:28:53.063 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:28:53.065 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:28:53.065 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:28:53.067 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:28:53.068 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:28:53.068 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:28:53.069 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:28:53.070 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:28:53.070 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:28:53.072 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:28:53.072 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:28:53.081 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:28:53.081 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:28:53.087 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:28:53.088 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:28:53.090 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:28:53.091 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:30:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:30:00 CST 2020]
+2020-05-06 16:30:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:35:00 CST 2020]
+2020-05-06 16:30:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:30:00.023 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:30:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:30:00 CST 2020]
+2020-05-06 16:30:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:35:00 CST 2020]
+2020-05-06 16:30:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:30:34.881 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:30:34.885 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:30:34.887 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:30:34.899 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.901 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:30:34.901 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.902 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:30:34.903 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.904 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:30:34.912 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:34.913 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.915 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:30:34.915 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:34.915 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.937 DEBUG org.hibernate.SQL - select examresult0_.CLASS_ID as CLASS_ID1_80_, examresult0_.EXAM_BATCH_ID as EXAM_BAT2_80_, examresult0_.STUDENT_NO as STUDENT_3_80_, examresult0_.ACCURACY as ACCURACY4_80_, examresult0_.CLASS_NAME as CLASS_NA5_80_, examresult0_.COMPLETION_RATE as COMPLETI6_80_, examresult0_.CORRECT_COUNT as CORRECT_7_80_, examresult0_.END_TIME as END_TIME8_80_, examresult0_.EXAM_BATCH_NO as EXAM_BAT9_80_, examresult0_.EXAM_ID as EXAM_ID10_80_, examresult0_.EXAM_NAME as EXAM_NA11_80_, examresult0_.EXAM_STATUS as EXAM_ST12_80_, examresult0_.EXERCISE_GROUP_ID as EXERCIS13_80_, examresult0_.MOBILE_PHONE as MOBILE_14_80_, examresult0_.RELATION_PAPER_CODE as RELATIO15_80_, examresult0_.PAPER_NAME as PAPER_N16_80_, examresult0_.PASSING_SCORE as PASSING17_80_, examresult0_.RECORD_ID as RECORD_18_80_, examresult0_.REMAINING_SECONDS as REMAINI19_80_, examresult0_.SCORE as SCORE20_80_, examresult0_.SEX as SEX21_80_, examresult0_.START_TIME as START_T22_80_, examresult0_.STATUS as STATUS23_80_, examresult0_.STUDENT_NAME as STUDENT24_80_, examresult0_.SUBJECT_ID as SUBJECT25_80_, examresult0_.SUBJECT_Name as SUBJECT26_80_, examresult0_.SUBMIT_TIME as SUBMIT_27_80_, examresult0_.TOTAL_SCORE as TOTAL_S28_80_, examresult0_.USER_ID as USER_ID29_80_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=? order by examresult0_.EXAM_BATCH_ID, examresult0_.SCORE desc limit ?
+2020-05-06 16:30:34.938 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:34.938 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.944 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:30:34.945 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.948 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:30:34.948 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.950 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:30:34.950 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:34.951 DEBUG org.hibernate.SQL - select exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_75_0_, exerciseit0_.set_id as set_id1_110_0_, exerciseit0_.set_id as set_id1_110_1_, exerciseit0_.blank_score as blank_sc2_110_1_, exerciseit0_.CREATE_ID as CREATE_I3_110_1_, exerciseit0_.CREATE_TIME as CREATE_T4_110_1_, exerciseit0_.creator as creator5_110_1_, exerciseit0_.DELETE_FLAG as DELETE_F6_110_1_, exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_110_1_, exerciseit0_.exercise_Info_Id as exercise7_110_1_, exerciseit0_.half_right_score as half_rig8_110_1_, exerciseit0_.item_count as item_cou9_110_1_, exerciseit0_.item_type as item_ty10_110_1_, exerciseit0_.right_score as right_s11_110_1_, exerciseit0_.source_group_id as source_12_110_1_, exerciseit0_.UPDATE_ID as UPDATE_13_110_1_, exerciseit0_.UPDATE_TIME as UPDATE_14_110_1_, exerciseit0_.updator as updator15_110_1_, exerciseit0_.wrong_score as wrong_s16_110_1_ from exercise_item_set exerciseit0_ where ( exerciseit0_.DELETE_FLAG=0) and exerciseit0_.EXERCISE_INFO_ID=?
+2020-05-06 16:30:34.952 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:39.041 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:30:39.041 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:39.042 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:30:39.042 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:30:39.043 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:39.043 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:30:39.046 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:30:39.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:39.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:30:39.049 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:30:39.049 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:30:39.052 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:30:39.052 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:39.053 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:30:39.054 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:39.055 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:30:39.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.548 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:30:42.548 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:30:42.548 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:30:42.548 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.560 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:30:42.561 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.561 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:30:42.562 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.566 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:30:42.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:42.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.581 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:30:42.581 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:42.581 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.584 DEBUG org.hibernate.SQL - select examresult0_.CLASS_ID as CLASS_ID1_80_, examresult0_.EXAM_BATCH_ID as EXAM_BAT2_80_, examresult0_.STUDENT_NO as STUDENT_3_80_, examresult0_.ACCURACY as ACCURACY4_80_, examresult0_.CLASS_NAME as CLASS_NA5_80_, examresult0_.COMPLETION_RATE as COMPLETI6_80_, examresult0_.CORRECT_COUNT as CORRECT_7_80_, examresult0_.END_TIME as END_TIME8_80_, examresult0_.EXAM_BATCH_NO as EXAM_BAT9_80_, examresult0_.EXAM_ID as EXAM_ID10_80_, examresult0_.EXAM_NAME as EXAM_NA11_80_, examresult0_.EXAM_STATUS as EXAM_ST12_80_, examresult0_.EXERCISE_GROUP_ID as EXERCIS13_80_, examresult0_.MOBILE_PHONE as MOBILE_14_80_, examresult0_.RELATION_PAPER_CODE as RELATIO15_80_, examresult0_.PAPER_NAME as PAPER_N16_80_, examresult0_.PASSING_SCORE as PASSING17_80_, examresult0_.RECORD_ID as RECORD_18_80_, examresult0_.REMAINING_SECONDS as REMAINI19_80_, examresult0_.SCORE as SCORE20_80_, examresult0_.SEX as SEX21_80_, examresult0_.START_TIME as START_T22_80_, examresult0_.STATUS as STATUS23_80_, examresult0_.STUDENT_NAME as STUDENT24_80_, examresult0_.SUBJECT_ID as SUBJECT25_80_, examresult0_.SUBJECT_Name as SUBJECT26_80_, examresult0_.SUBMIT_TIME as SUBMIT_27_80_, examresult0_.TOTAL_SCORE as TOTAL_S28_80_, examresult0_.USER_ID as USER_ID29_80_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=? order by examresult0_.EXAM_BATCH_ID, examresult0_.SCORE desc limit ?
+2020-05-06 16:30:42.584 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:42.584 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.587 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:30:42.587 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.592 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:30:42.593 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.596 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:30:42.596 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:42.598 DEBUG org.hibernate.SQL - select exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_75_0_, exerciseit0_.set_id as set_id1_110_0_, exerciseit0_.set_id as set_id1_110_1_, exerciseit0_.blank_score as blank_sc2_110_1_, exerciseit0_.CREATE_ID as CREATE_I3_110_1_, exerciseit0_.CREATE_TIME as CREATE_T4_110_1_, exerciseit0_.creator as creator5_110_1_, exerciseit0_.DELETE_FLAG as DELETE_F6_110_1_, exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_110_1_, exerciseit0_.exercise_Info_Id as exercise7_110_1_, exerciseit0_.half_right_score as half_rig8_110_1_, exerciseit0_.item_count as item_cou9_110_1_, exerciseit0_.item_type as item_ty10_110_1_, exerciseit0_.right_score as right_s11_110_1_, exerciseit0_.source_group_id as source_12_110_1_, exerciseit0_.UPDATE_ID as UPDATE_13_110_1_, exerciseit0_.UPDATE_TIME as UPDATE_14_110_1_, exerciseit0_.updator as updator15_110_1_, exerciseit0_.wrong_score as wrong_s16_110_1_ from exercise_item_set exerciseit0_ where ( exerciseit0_.DELETE_FLAG=0) and exerciseit0_.EXERCISE_INFO_ID=?
+2020-05-06 16:30:42.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:54.209 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:30:54.211 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:54.211 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:30:54.213 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:30:54.213 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:54.214 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:30:54.216 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:30:54.216 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:30:54.216 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:30:54.218 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:30:54.219 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:30:54.222 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:30:54.223 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:54.225 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:30:54.225 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:30:54.226 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:30:54.226 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:16.964 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:32:16.965 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:16.965 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:16.966 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:32:16.966 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:16.966 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:16.968 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:32:16.968 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:16.968 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:16.971 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:32:16.971 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:32:16.974 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:32:16.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:16.975 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:32:16.975 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:16.975 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:32:16.976 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.458 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 16:32:22.458 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 16:32:22.459 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:32:22.460 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.461 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 16:32:22.461 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.462 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 16:32:22.462 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.466 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:32:22.466 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:22.467 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.470 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=?
+2020-05-06 16:32:22.470 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:22.470 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.472 DEBUG org.hibernate.SQL - select examresult0_.CLASS_ID as CLASS_ID1_80_, examresult0_.EXAM_BATCH_ID as EXAM_BAT2_80_, examresult0_.STUDENT_NO as STUDENT_3_80_, examresult0_.ACCURACY as ACCURACY4_80_, examresult0_.CLASS_NAME as CLASS_NA5_80_, examresult0_.COMPLETION_RATE as COMPLETI6_80_, examresult0_.CORRECT_COUNT as CORRECT_7_80_, examresult0_.END_TIME as END_TIME8_80_, examresult0_.EXAM_BATCH_NO as EXAM_BAT9_80_, examresult0_.EXAM_ID as EXAM_ID10_80_, examresult0_.EXAM_NAME as EXAM_NA11_80_, examresult0_.EXAM_STATUS as EXAM_ST12_80_, examresult0_.EXERCISE_GROUP_ID as EXERCIS13_80_, examresult0_.MOBILE_PHONE as MOBILE_14_80_, examresult0_.RELATION_PAPER_CODE as RELATIO15_80_, examresult0_.PAPER_NAME as PAPER_N16_80_, examresult0_.PASSING_SCORE as PASSING17_80_, examresult0_.RECORD_ID as RECORD_18_80_, examresult0_.REMAINING_SECONDS as REMAINI19_80_, examresult0_.SCORE as SCORE20_80_, examresult0_.SEX as SEX21_80_, examresult0_.START_TIME as START_T22_80_, examresult0_.STATUS as STATUS23_80_, examresult0_.STUDENT_NAME as STUDENT24_80_, examresult0_.SUBJECT_ID as SUBJECT25_80_, examresult0_.SUBJECT_Name as SUBJECT26_80_, examresult0_.SUBMIT_TIME as SUBMIT_27_80_, examresult0_.TOTAL_SCORE as TOTAL_S28_80_, examresult0_.USER_ID as USER_ID29_80_ from exam_result_v examresult0_ where (examresult0_.STUDENT_NAME like ?) and examresult0_.EXAM_ID=? order by examresult0_.EXAM_BATCH_ID, examresult0_.SCORE desc limit ?
+2020-05-06 16:32:22.473 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:22.473 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.475 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:32:22.476 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.478 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:32:22.478 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.481 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:32:22.481 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:22.482 DEBUG org.hibernate.SQL - select exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_75_0_, exerciseit0_.set_id as set_id1_110_0_, exerciseit0_.set_id as set_id1_110_1_, exerciseit0_.blank_score as blank_sc2_110_1_, exerciseit0_.CREATE_ID as CREATE_I3_110_1_, exerciseit0_.CREATE_TIME as CREATE_T4_110_1_, exerciseit0_.creator as creator5_110_1_, exerciseit0_.DELETE_FLAG as DELETE_F6_110_1_, exerciseit0_.EXERCISE_INFO_ID as EXERCISE7_110_1_, exerciseit0_.exercise_Info_Id as exercise7_110_1_, exerciseit0_.half_right_score as half_rig8_110_1_, exerciseit0_.item_count as item_cou9_110_1_, exerciseit0_.item_type as item_ty10_110_1_, exerciseit0_.right_score as right_s11_110_1_, exerciseit0_.source_group_id as source_12_110_1_, exerciseit0_.UPDATE_ID as UPDATE_13_110_1_, exerciseit0_.UPDATE_TIME as UPDATE_14_110_1_, exerciseit0_.updator as updator15_110_1_, exerciseit0_.wrong_score as wrong_s16_110_1_ from exercise_item_set exerciseit0_ where ( exerciseit0_.DELETE_FLAG=0) and exerciseit0_.EXERCISE_INFO_ID=?
+2020-05-06 16:32:22.482 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:26.810 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:32:26.810 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:26.810 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:26.812 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:32:26.812 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:26.812 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:26.814 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:32:26.814 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:26.814 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:26.817 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:32:26.817 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:32:26.819 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:32:26.820 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:26.821 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:32:26.821 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:26.821 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:32:26.821 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:39.055 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 16:32:39.086 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 16:32:39.086 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:39.088 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:32:39.088 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:32:42.316 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:32:42.317 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:42.317 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:42.318 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:32:42.319 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:42.319 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:42.323 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:32:42.323 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:32:42.323 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:32:42.329 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:32:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:32:42.334 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:32:42.334 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:42.336 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:32:42.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:32:42.338 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:32:42.339 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:35:00.013 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:35:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:35:00 CST 2020]
+2020-05-06 16:35:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:40:00 CST 2020]
+2020-05-06 16:35:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:35:00.018 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:35:00 CST 2020]
+2020-05-06 16:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:40:00 CST 2020]
+2020-05-06 16:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:40:00.019 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:40:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:40:00 CST 2020]
+2020-05-06 16:40:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:45:00 CST 2020]
+2020-05-06 16:40:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:40:00.027 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:40:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:40:00 CST 2020]
+2020-05-06 16:40:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:45:00 CST 2020]
+2020-05-06 16:40:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:45:00.018 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:45:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:45:00 CST 2020]
+2020-05-06 16:45:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:50:00 CST 2020]
+2020-05-06 16:45:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:45:00.039 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:45:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:45:00 CST 2020]
+2020-05-06 16:45:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:50:00 CST 2020]
+2020-05-06 16:45:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:50:00.025 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:50:00.030 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:50:00 CST 2020]
+2020-05-06 16:50:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:55:00 CST 2020]
+2020-05-06 16:50:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 16:50:00.039 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:50:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:50:00 CST 2020]
+2020-05-06 16:50:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 17:55:00 CST 2020]
+2020-05-06 16:50:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:50:00.140 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:50:00.140 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:50:00.140 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:50:00.143 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 16:50:00.144 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:50:00.144 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:50:00.147 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 16:50:00.147 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 16:50:00.147 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 16:50:00.166 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 16:50:00.166 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 16:50:00.186 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 16:50:00.186 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:50:00.189 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 16:50:00.190 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:50:00.192 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 16:50:00.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 16:55:00.012 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 16:55:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:55:00 CST 2020]
+2020-05-06 16:55:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:00:00 CST 2020]
+2020-05-06 16:55:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 16:55:00.018 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 16:55:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 17:55:00 CST 2020]
+2020-05-06 16:55:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:00:00 CST 2020]
+2020-05-06 16:55:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:00:00.012 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:00:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:00:00 CST 2020]
+2020-05-06 17:00:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:05:00 CST 2020]
+2020-05-06 17:00:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:00:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:00:00 CST 2020]
+2020-05-06 17:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:05:00 CST 2020]
+2020-05-06 17:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:05:00.021 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:05:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:05:00 CST 2020]
+2020-05-06 17:05:00.030 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:10:00 CST 2020]
+2020-05-06 17:05:00.030 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:05:00.036 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:05:00.037 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:05:00 CST 2020]
+2020-05-06 17:05:00.037 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:10:00 CST 2020]
+2020-05-06 17:05:00.037 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:10:00.026 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:10:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:10:00 CST 2020]
+2020-05-06 17:10:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:15:00 CST 2020]
+2020-05-06 17:10:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:10:00.031 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:10:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:10:00 CST 2020]
+2020-05-06 17:10:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:15:00 CST 2020]
+2020-05-06 17:10:00.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:15:00.010 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:15:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:15:00 CST 2020]
+2020-05-06 17:15:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:20:00 CST 2020]
+2020-05-06 17:15:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:15:00.023 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:15:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:15:00 CST 2020]
+2020-05-06 17:15:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:20:00 CST 2020]
+2020-05-06 17:15:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:20:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:20:00 CST 2020]
+2020-05-06 17:20:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:25:00 CST 2020]
+2020-05-06 17:20:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:20:00.034 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:20:00.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:20:00 CST 2020]
+2020-05-06 17:20:00.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:25:00 CST 2020]
+2020-05-06 17:20:00.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:25:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:25:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:25:00 CST 2020]
+2020-05-06 17:25:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:30:00 CST 2020]
+2020-05-06 17:25:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:25:00.019 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:25:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:25:00 CST 2020]
+2020-05-06 17:25:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:30:00 CST 2020]
+2020-05-06 17:25:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:30:00.009 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:30:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:30:00 CST 2020]
+2020-05-06 17:30:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:35:00 CST 2020]
+2020-05-06 17:30:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:30:00.012 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:30:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:30:00 CST 2020]
+2020-05-06 17:30:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:35:00 CST 2020]
+2020-05-06 17:30:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:35:00.012 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:35:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:35:00 CST 2020]
+2020-05-06 17:35:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:40:00 CST 2020]
+2020-05-06 17:35:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:35:00.017 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:35:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:35:00 CST 2020]
+2020-05-06 17:35:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:40:00 CST 2020]
+2020-05-06 17:35:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:37:53.957 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:37:53.962 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:37:53.963 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:37:53.973 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:37:53.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:37:53.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:37:53.982 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:37:53.983 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:37:53.983 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:37:54.017 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:37:54.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:37:54.044 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:37:54.044 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:37:54.056 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:37:54.059 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:37:54.062 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:37:54.062 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:45.147 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:39:45.155 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:39:45.156 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:39:45.170 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:39:45.170 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:39:45.170 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:39:45.175 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:39:45.176 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:39:45.176 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:39:45.189 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:39:45.190 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:39:45.205 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:39:45.205 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:45.208 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:39:45.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:45.213 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:39:45.213 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:47.205 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:39:47.244 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:39:47.244 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:47.247 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:39:47.247 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:39:52.100 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:39:52.100 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:52.106 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:39:52.106 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:39:52.107 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [eeeeeee]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:39:52 CST 2020]
+2020-05-06 17:39:52.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:39:52.109 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:52.128 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:39:52.128 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:39:52.132 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:39:52.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:52.133 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:39:52.133 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:39:52.136 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:39:52.136 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:00.013 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:40:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:40:00 CST 2020]
+2020-05-06 17:40:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:45:00 CST 2020]
+2020-05-06 17:40:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:40:00.021 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:40:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:40:00 CST 2020]
+2020-05-06 17:40:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:45:00 CST 2020]
+2020-05-06 17:40:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:40:33.504 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:33.508 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:33.508 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:33.511 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:33.511 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:33.511 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:33.513 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:33.516 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:33.516 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:33.519 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:40:33.519 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:40:33.531 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:40:33.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:33.537 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:40:33.538 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:33.543 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:40:33.543 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:33.679 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:33.680 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:33.680 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:33.680 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:33.680 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:33.681 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:33.683 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:33.684 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:33.684 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:33.689 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:40:33.689 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:40:33.698 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:40:33.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:33.700 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:40:33.700 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:33.701 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:40:33.701 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:35.720 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:35.720 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:35.720 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:35.722 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:35.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:35.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:35.728 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:35.728 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:35.728 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:35.733 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:40:35.736 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:40:35.747 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:40:35.748 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:35.750 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:40:35.751 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:35.752 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:40:35.752 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:36.843 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:40:36.884 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:40:36.884 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:36.886 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:40:36.886 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:40:39.883 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:40:39.884 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:39.887 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:40:39.888 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:40:39 CST 2020]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:40:39.889 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:39.909 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:40:39.910 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:39.911 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:40:39.912 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:39.913 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:40:39.913 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:39.914 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:40:39.914 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:46.474 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:46.474 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:46.474 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:46.476 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:40:46.476 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:46.476 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:46.478 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:46.479 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:40:46.479 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:46.497 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:40:46.498 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:40:46.510 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:40:46.511 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:46.512 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:40:46.512 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:46.513 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:40:46.513 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:40:48.084 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:48.085 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:48.086 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 17:40:48.142 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-06 17:40:48.143 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:48.143 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 17:40:48.144 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-06 17:40:48.145 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:48.145 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 17:40:49.950 DEBUG org.hibernate.SQL - select userteache0_.TEACHER_ID as TEACHER_1_244_, userteache0_.CREATE_ID as CREATE_I2_244_, userteache0_.CREATE_TIME as CREATE_T3_244_, userteache0_.CREATOR as CREATOR4_244_, userteache0_.DELETE_FLAG as DELETE_F5_244_, userteache0_.MOBILE_PHONE as MOBILE_P6_244_, userteache0_.NAME as NAME7_244_, userteache0_.ORGANIZATION_ID as ORGANIZA8_244_, userteache0_.TEACHER_NO as TEACHER_9_244_, userteache0_.UPDATE_ID as UPDATE_10_244_, userteache0_.UPDATE_TIME as UPDATE_11_244_, userteache0_.UPDATOR as UPDATOR12_244_, userteache0_.USER_ID as USER_ID13_244_ from user_teacher userteache0_ where userteache0_.DELETE_FLAG=0 and userteache0_.ORGANIZATION_ID=? limit ?
+2020-05-06 17:40:49.950 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:49.970 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_, subject0_.CODE as CODE2_54_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_, subject0_.COURSE_ID as COURSE_I4_54_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_, subject0_.COVER_PAGE_URL as COVER_PA6_54_, subject0_.CREATE_ID as CREATE_I7_54_, subject0_.CREATE_TIME as CREATE_T8_54_, subject0_.CREATOR as CREATOR9_54_, subject0_.DELETE_FLAG as DELETE_10_54_, subject0_.FULL_NAME as FULL_NA11_54_, subject0_.LECTURE_COUNT as LECTURE12_54_, subject0_.NAME as NAME13_54_, subject0_.ORDER_NUM as ORDER_N14_54_, subject0_.ORG_ID as ORG_ID15_54_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_, subject0_.STATUS as STATUS19_54_, subject0_.TEACHER_ID as TEACHER20_54_, subject0_.TEACHER_NAME as TEACHER21_54_, subject0_.TERM as TERM22_54_, subject0_.TYPE as TYPE23_54_, subject0_.UPDATE_ID as UPDATE_24_54_, subject0_.UPDATE_TIME as UPDATE_25_54_, subject0_.UPDATOR as UPDATOR26_54_ from SUBJECT subject0_ where (subject0_.NAME like ?) and subject0_.ORG_ID=? and subject0_.DELETE_FLAG=0 and (subject0_.ORIG_SUBJECT_ID is null) and subject0_.STATUS=? order by subject0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:50.388 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%]
+2020-05-06 17:40:50.388 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-06 17:40:50.388 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [1]
+2020-05-06 17:40:57.531 DEBUG org.hibernate.SQL - insert into cls_class (ADDRESS, ADDRESS_ID, ADVANTAGE, ARRANGEMENT, CAN_MULTI_EXER, CITY, CLASS_CHARGER, CLASS_CHARGER_ID, CLASS_NUMBER, CLASS_TYPES, CLICK_NUM, CODE, COLLEGE_COURSE_ID, COLLEGE_COURSE_NAME, COMMENT_COUNT, COURSE_ID, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DISCOUNT, DISPRICE, END_TIME, EXTENDED, FULL_TEXT, GOOD_ID, HAVA_AWARD, HAVE_HANDOUT, HAVE_LIVE, HAVE_VIDEO, IMG_PATH, LATITUDE_Y, LONGITUDE_X, MODE, NAME, NEED_FORUM, NEED_JOIN_AUDIT, NEED_QUIT_AUDIT, ORG_ID, PAYMENT_NUM, POINTER, PRICE, PRODUCT_ID, PROGRESS, PROVINCE, RECOMMEND, REGION, SCORE, SHOU_ANALYSIS_AFTER_EXER, START_TIME, STU_ALL_COUNT, STUDENT_COUNT, STUDY_TIME, TEACHER_ID, TOP_FLAG, UPDATE_ID, UPDATE_TIME, UPDATOR, CLASS_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [BOOLEAN] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [VARCHAR] - [null]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [eeee]
+2020-05-06 17:40:57.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [NUMERIC] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [NUMERIC] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [VARCHAR] - [null]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [TIMESTAMP] - [Wed May 06 17:40:57 CST 2020]
+2020-05-06 17:40:57.533 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [管理员]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [BOOLEAN] - [false]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [NUMERIC] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [NUMERIC] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [23] as [TIMESTAMP] - [Fri May 29 00:00:00 CST 2020]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [24] as [BOOLEAN] - [false]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [25] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [26] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [27] as [INTEGER] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [28] as [INTEGER] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [29] as [INTEGER] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [30] as [INTEGER] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [31] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [32] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [33] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [34] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [35] as [VARCHAR] - [dddd]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [36] as [BOOLEAN] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [37] as [BOOLEAN] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [38] as [BOOLEAN] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [39] as [VARCHAR] - [1]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [40] as [NUMERIC] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [41] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [42] as [NUMERIC] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [43] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [44] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [45] as [VARCHAR] - [null]
+2020-05-06 17:40:57.534 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [46] as [BOOLEAN] - [false]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [47] as [VARCHAR] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [48] as [NUMERIC] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [49] as [BOOLEAN] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [50] as [TIMESTAMP] - [Wed May 06 00:00:00 CST 2020]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [51] as [NUMERIC] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [52] as [INTEGER] - [0]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [53] as [NUMERIC] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [54] as [VARCHAR] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [55] as [BOOLEAN] - [null]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [56] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [57] as [TIMESTAMP] - [Wed May 06 17:40:57 CST 2020]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [58] as [VARCHAR] - [管理员]
+2020-05-06 17:40:57.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [59] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 17:40:57.663 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-06 17:40:57.665 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:57.665 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 17:40:57.674 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-06 17:40:57.674 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:57.674 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 17:40:57.676 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate()
+2020-05-06 17:40:57.676 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:40:57.676 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 17:40:57.681 DEBUG org.hibernate.SQL - select subjects0_.CLASS_ID as CLASS_ID1_64_0_, subjects0_.SUBJECT_ID as SUBJECT_2_0_0_, subjects0_.CLS_RE_SUBJECT_ID as CLS_RE_S3_0_, subject1_.SUBJECT_ID as SUBJECT_1_54_1_, subject1_.CODE as CODE2_54_1_, subject1_.CONTENT_FILE_ID as CONTENT_3_54_1_, subject1_.COURSE_ID as COURSE_I4_54_1_, subject1_.COVER_PAGE_FILE_ID as COVER_PA5_54_1_, subject1_.COVER_PAGE_URL as COVER_PA6_54_1_, subject1_.CREATE_ID as CREATE_I7_54_1_, subject1_.CREATE_TIME as CREATE_T8_54_1_, subject1_.CREATOR as CREATOR9_54_1_, subject1_.DELETE_FLAG as DELETE_10_54_1_, subject1_.FULL_NAME as FULL_NA11_54_1_, subject1_.LECTURE_COUNT as LECTURE12_54_1_, subject1_.NAME as NAME13_54_1_, subject1_.ORDER_NUM as ORDER_N14_54_1_, subject1_.ORG_ID as ORG_ID15_54_1_, subject1_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_1_, subject1_.ORIG_SUBJECT_ID as ORIG_SU17_54_1_, subject1_.SCHOOL_YEAR as SCHOOL_18_54_1_, subject1_.STATUS as STATUS19_54_1_, subject1_.TEACHER_ID as TEACHER20_54_1_, subject1_.TEACHER_NAME as TEACHER21_54_1_, subject1_.TERM as TERM22_54_1_, subject1_.TYPE as TYPE23_54_1_, subject1_.UPDATE_ID as UPDATE_24_54_1_, subject1_.UPDATE_TIME as UPDATE_25_54_1_, subject1_.UPDATOR as UPDATOR26_54_1_ from CLS_CLASS_RE_SUBJECT subjects0_ inner join SUBJECT subject1_ on subjects0_.SUBJECT_ID=subject1_.SUBJECT_ID where ( subject1_.DELETE_FLAG=0) and subjects0_.CLASS_ID=?
+2020-05-06 17:40:57.682 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 17:41:00.110 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:41:00.111 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:41:00.111 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:00.111 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:41:00.112 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:41:00.112 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:00.113 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:41:00.113 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:41:00.113 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:00.116 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:41:00.116 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:41:00.127 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:41:00.127 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:00.129 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:41:00.130 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:00.131 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:41:00.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:01.332 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:41:01.369 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:41:01.369 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:01.370 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:41:01.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:41:04.252 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:41:04.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:04.254 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [sssss]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:41:04.254 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:41:04.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:41:04.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:41:04.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:04.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:41:04 CST 2020]
+2020-05-06 17:41:04.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:41:04.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:04.270 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:41:04.271 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:41:04.271 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:41:04.271 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:04.272 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:41:04.272 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:04.273 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:41:04.273 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:10.117 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:41:10.118 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:41:10.118 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:10.123 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:41:10.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:41:10.124 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:10.126 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:41:10.127 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:41:10.127 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:41:10.133 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:41:10.134 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:41:10.149 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:41:10.150 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:10.154 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:41:10.155 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:41:10.157 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:41:10.158 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:42:33.494 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:42:33.518 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:42:33.520 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:42:33.531 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:42:33.532 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:43:39.870 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:43:39.872 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:43:39.872 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:43:39.872 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:43:39.872 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:43:39.872 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:43:39.874 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:43:39.874 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:43:39.874 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:43:39.877 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:43:39.877 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:43:39.894 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:43:39.894 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:43:39.896 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:43:39.896 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:43:39.897 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:43:39.898 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:43:43.767 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:43:43.767 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:43:43.767 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:43:43.769 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:43:43.769 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:43:43.769 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:43:43.771 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:43:43.771 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:43:43.771 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:43:43.775 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:43:43.775 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:43:43.803 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:43:43.804 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:43:43.807 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:43:43.807 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:43:43.808 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:43:43.808 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:45:00.014 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:45:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:45:00 CST 2020]
+2020-05-06 17:45:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:50:00 CST 2020]
+2020-05-06 17:45:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:45:00.022 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:45:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:45:00 CST 2020]
+2020-05-06 17:45:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:50:00 CST 2020]
+2020-05-06 17:45:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:45:14.340 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:45:14.341 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:45:14.342 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:45:14.344 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:45:14.344 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:45:14.344 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:45:14.347 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:45:14.348 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:45:14.349 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:45:14.357 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:45:14.357 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:45:14.373 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:45:14.373 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:45:14.375 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:45:14.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:45:14.376 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:45:14.376 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:46:56.470 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:46:56.472 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:46:56.472 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:46:56.473 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:46:56.473 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:46:56.473 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:46:56.473 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:46:56.474 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:46:56.474 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:46:56.475 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:46:56.481 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:46:56.481 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:46:56.481 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:46:56.482 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:46:56.483 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:46:56.485 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 17:46:56.493 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:46:56.494 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:46:56.499 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:46:56.505 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:46:56.540 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:46:56.540 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:46:56.543 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:46:56.543 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:46:56.546 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:46:56.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:47:00.320 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:47:00.367 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:47:00.368 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:47:00.370 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:47:00.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:47:04.185 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:47:04.185 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:47:04.190 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:47:04.191 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:47:04.191 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:47:04.191 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:47:04.191 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:47:04.191 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:47:04 CST 2020]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:47:04.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:47:04.219 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:47:04.220 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:47:04.220 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:47:04.220 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:47:04.220 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:47:04.220 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:47:04.222 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:47:04.222 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:50:00.013 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:50:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:50:00 CST 2020]
+2020-05-06 17:50:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:55:00 CST 2020]
+2020-05-06 17:50:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:50:00.031 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:50:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:50:00 CST 2020]
+2020-05-06 17:50:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 18:55:00 CST 2020]
+2020-05-06 17:50:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:51:29.510 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:51:29.510 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:51:29.512 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:51:29.512 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:51:29.512 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:51:29.513 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:51:29.514 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:51:29.514 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:51:29.515 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:51:29.515 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:51:29.516 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:51:29.516 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:51:29.517 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:51:29.518 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:51:29.518 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:51:29.518 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 17:51:29.518 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:51:29.518 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:51:29.525 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:51:29.525 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:51:29.549 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:51:29.549 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:51:29.557 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:51:29.558 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:51:29.559 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:51:29.559 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:55:00.017 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 17:55:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:55:00 CST 2020]
+2020-05-06 17:55:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:00:00 CST 2020]
+2020-05-06 17:55:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 17:55:00.030 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 17:55:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 18:55:00 CST 2020]
+2020-05-06 17:55:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:00:00 CST 2020]
+2020-05-06 17:55:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 17:57:20.307 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:57:20.307 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:57:20.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:20.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:20.385 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:57:20.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:20.386 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:20.390 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:20.390 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:20.395 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:57:20.397 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:57:20.397 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:20.397 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:20.398 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:20.398 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:20.399 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 17:57:20.404 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:20.404 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:20.406 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:57:20.408 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:57:20.456 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:57:20.456 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:20.459 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:57:20.459 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:20.462 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:57:20.463 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:22.660 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:57:22.663 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:22.663 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:22.664 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:57:22.664 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:22.664 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:22.666 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:57:22.666 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:22.666 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:22.668 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:57:22.668 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:22.668 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:22.668 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:57:22.669 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:22.669 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:22.672 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 17:57:22.672 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:57:22.672 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:22.675 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:57:22.675 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:57:22.692 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:57:22.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:22.694 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:57:22.695 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:22.698 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:57:22.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:26.182 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:57:26.234 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:57:26.236 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:26.243 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:57:26.243 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:57:29.795 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:57:29.796 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:29.800 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:57:29.800 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [hhh]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:57:29.801 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:57:29.802 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:57:29.802 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:57:29 CST 2020]
+2020-05-06 17:57:29.802 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:57:29.802 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:29.823 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:57:29.823 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:29.825 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:57:29.825 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:29.826 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:57:29.827 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:57:29.828 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:57:29.829 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:58:00.096 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:58:00.097 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:58:00.097 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:00.097 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:00.097 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:00.097 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:00.098 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:58:00.098 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:58:00.098 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:00.098 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:00.098 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:00.099 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:00.100 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:58:00.100 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:00.100 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:00.102 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 17:58:00.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:00.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:00.106 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:58:00.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:58:00.124 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:58:00.124 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:00.126 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:58:00.127 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:00.129 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:58:00.129 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:02.298 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:58:02.356 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:58:02.356 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:02.358 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:58:02.358 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:58:06.120 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:58:06.121 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:06.122 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:58:06.122 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:06.122 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:58:06 CST 2020]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:58:06.123 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:06.144 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:58:06.144 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:58:06.144 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:58:06.144 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:06.145 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:58:06.145 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:06.146 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:58:06.146 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:47.614 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:58:47.614 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:58:47.614 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:47.614 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:47.615 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:47.615 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:47.617 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 17:58:47.617 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:47.617 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:47.618 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 17:58:47.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:47.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:47.620 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 17:58:47.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:47.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:47.621 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 17:58:47.621 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 17:58:47.621 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:47.623 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:58:47.623 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:58:47.648 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 17:58:47.648 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:47.650 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 17:58:47.651 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:47.652 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 17:58:47.653 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:49.162 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 17:58:49.220 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:58:49.220 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:49.225 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 17:58:49.226 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:58:51.836 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 17:58:51.836 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:51.840 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 17:58:51.840 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:51.840 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 17:58:51.841 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 17:58:51 CST 2020]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 17:58:51.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:51.863 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:58:51.863 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:51.864 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 17:58:51.864 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 17:58:51.864 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 17:58:51.864 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 17:58:51.866 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 17:58:51.866 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:00.016 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 18:00:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:00:00 CST 2020]
+2020-05-06 18:00:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:05:00 CST 2020]
+2020-05-06 18:00:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 18:00:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 18:00:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:00:00 CST 2020]
+2020-05-06 18:00:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:05:00 CST 2020]
+2020-05-06 18:00:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 18:00:29.950 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:00:29.950 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:29.950 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:29.952 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:00:29.952 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:29.952 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:29.953 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:00:29.954 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:29.954 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 18:00:29.955 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:29.955 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:29.955 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:29.956 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:00:29.956 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:29.956 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:29.959 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 18:00:29.959 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:00:29.959 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:00:29.960 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:29.960 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:29.995 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 18:00:29.995 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:29.997 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 18:00:29.997 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:29.999 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 18:00:29.999 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:31.642 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 18:00:31.698 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:00:31.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:31.701 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:00:31.701 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:00:34.244 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:00:34.245 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:34.250 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 18:00:34.250 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:34.251 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 18:00:34.251 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 18:00:34.251 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:00:34.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 18:00:34.253 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:34.253 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 18:00:34 CST 2020]
+2020-05-06 18:00:34.253 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 18:00:34.253 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:34.278 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:00:34.278 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:34.278 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 18:00:34.279 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 18:00:34.279 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:00:34.279 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:34.280 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 18:00:34.280 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:59.101 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:00:59.104 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:00:59.104 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:59.104 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:59.105 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:59.105 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:59.105 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:00:59.105 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:59.105 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:59.106 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:00:59.106 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:59.106 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:59.107 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 18:00:59.107 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:59.107 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:59.108 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 18:00:59.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:00:59.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:00:59.110 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:00:59.110 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:00:59.125 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 18:00:59.126 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:59.131 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 18:00:59.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:00:59.134 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 18:00:59.134 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:00.394 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 18:01:00.482 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:01:00.483 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:00.485 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:01:00.485 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:01:02.774 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:01:02.774 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:02.777 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 18:01:02.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:01:02.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 18:01:02.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 18:01:02.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 18:01:02.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 18:01:02.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 18:01:02 CST 2020]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 18:01:02.778 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:02.803 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:01:02.803 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:02.804 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:01:02.804 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:02.805 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 18:01:02.806 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:01:02.806 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 18:01:02.806 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 18:03:10.998 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:03:10.998 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:03:11.000 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:03:11.000 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:03:11.001 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:11.001 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:11.007 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:03:11.007 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:03:11.007 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:11.010 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:03:11.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:03:11.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:11.013 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 18:03:11.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:03:11.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:11.014 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 18:03:11.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:03:11.023 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:03:11.035 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:11.036 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:03:11.065 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 18:03:11.065 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:11.071 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 18:03:11.071 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:11.073 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 18:03:11.074 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:13.550 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 18:03:13.609 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:03:13.610 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:13.614 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:03:13.614 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:03:17.017 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:03:17.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:17.023 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 18:03:17.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 18:03:17.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 18:03:17 CST 2020]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 18:03:17.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:17.048 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 18:03:17.048 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 18:03:17.052 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:03:17.053 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:17.054 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:03:17.054 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:03:17.056 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 18:03:17.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:05:00.014 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 18:05:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:05:00 CST 2020]
+2020-05-06 18:05:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:10:00 CST 2020]
+2020-05-06 18:05:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 18:05:00.018 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 18:05:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:05:00 CST 2020]
+2020-05-06 18:05:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:10:00 CST 2020]
+2020-05-06 18:05:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 18:09:18.287 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:09:18.296 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:09:18.296 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:09:18.306 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:09:18.306 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:09:18.306 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:09:18.322 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:09:18.328 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 18:09:18.419 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:09:18.419 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:09:18.430 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:09:18.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:09:18.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:09:18.433 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:09:18.434 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:09:18.436 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 18:09:18.444 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:09:18.444 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:09:18.446 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:09:18.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:09:18.469 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 18:09:18.469 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:09:18.474 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 18:09:18.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:09:18.479 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 18:09:18.479 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:10:00.014 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 18:10:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:10:00 CST 2020]
+2020-05-06 18:10:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:15:00 CST 2020]
+2020-05-06 18:10:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 18:10:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 18:10:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:10:00 CST 2020]
+2020-05-06 18:10:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:15:00 CST 2020]
+2020-05-06 18:10:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 18:15:00.020 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 18:15:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:15:00 CST 2020]
+2020-05-06 18:15:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:20:00 CST 2020]
+2020-05-06 18:15:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 18:15:00.025 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 18:15:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:15:00 CST 2020]
+2020-05-06 18:15:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:20:00 CST 2020]
+2020-05-06 18:15:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 18:20:00.017 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 18:20:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:20:00 CST 2020]
+2020-05-06 18:20:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:25:00 CST 2020]
+2020-05-06 18:20:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 18:20:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 18:20:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:20:00 CST 2020]
+2020-05-06 18:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:25:00 CST 2020]
+2020-05-06 18:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 18:25:00.019 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 18:25:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:25:00 CST 2020]
+2020-05-06 18:25:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:30:00 CST 2020]
+2020-05-06 18:25:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 18:25:00.037 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 18:25:00.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 19:25:00 CST 2020]
+2020-05-06 18:25:00.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 19:30:00 CST 2020]
+2020-05-06 18:25:00.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 18:25:49.682 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:25:49.682 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:25:49.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:25:49.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:49.732 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:25:49.732 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:25:49.733 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:49.733 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:25:49.733 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:49.735 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 18:25:49.742 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:25:49.742 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:25:49.742 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:49.743 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:25:49.743 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:49.744 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 18:25:49.750 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:25:49.750 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:49.753 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:25:49.753 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:25:49.775 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 18:25:49.777 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:49.783 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 18:25:49.783 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:49.787 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 18:25:49.787 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:52.211 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 18:25:52.274 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:25:52.276 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:52.278 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:25:52.278 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:25:56.927 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:25:56.929 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:56.932 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddd]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 18:25:56.933 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 18:25:56 CST 2020]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 18:25:56.934 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:56.952 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 18:25:56.952 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 18:25:56.953 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:25:56.953 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:56.954 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:25:56.954 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:25:56.954 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 18:25:56.955 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:01.151 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 18:26:01.151 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:01.151 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 18:26:01.155 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 18:26:01.155 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:01.155 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 18:26:01.159 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 18:26:01.159 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:01.159 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 18:26:23.201 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:26:23.203 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:26:23.203 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:26:23.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:23.211 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:26:23.211 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:23.212 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 18:26:23.212 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:26:23.212 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:23.213 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 18:26:23.214 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:26:23.214 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:23.214 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 18:26:23.215 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:26:23.215 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:23.216 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 18:26:23.216 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 18:26:23.216 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:23.219 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:26:23.219 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:26:23.232 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 18:26:23.232 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:23.236 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 18:26:23.236 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:23.239 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 18:26:23.239 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:25.058 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 18:26:25.119 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:26:25.120 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:25.121 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 18:26:25.121 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:26:28.010 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 18:26:28.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:28.017 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [sssss]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 18:26:28.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 18:26:28 CST 2020]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 18:26:28.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:28.037 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:26:28.037 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:28.038 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 18:26:28.038 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 18:26:28.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:28.038 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 18:26:28.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 18:26:28.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 18:26:31.140 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 18:26:31.141 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:31.141 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 18:26:31.142 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 18:26:31.142 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:31.143 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 18:26:31.144 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 18:26:31.144 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 18:26:31.144 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 19:19:33.674 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 19:19:33.674 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 19:19:33.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 19:19:33.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 19:19:33.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:33.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:33.722 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 19:19:33.722 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 19:19:33.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 19:19:33.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 19:19:33.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:33.722 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:33.729 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 19:19:33.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 19:19:33.729 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 19:19:33.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:33.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 19:19:33.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:33.822 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 19:19:33.823 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 19:19:33.902 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 19:19:33.903 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:33.927 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 19:19:33.936 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:33.952 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 19:19:33.952 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:36.207 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 19:19:36.242 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 19:19:36.242 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:36.251 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 19:19:36.252 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 19:19:40.335 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 19:19:40.335 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:40.366 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 19:19:40.367 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:40.367 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 19:19:40.368 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 19:19:40.369 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 19:19:40.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 19:19:40.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 19:19:40.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 19:19:40.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 19:19:40.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 19:19:40.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 19:19:40.371 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:40.372 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 19:19:40 CST 2020]
+2020-05-06 19:19:40.372 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 19:19:40.372 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:40.399 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 19:19:40.400 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:40.403 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 19:19:40.403 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:40.406 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 19:19:40.407 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 19:19:40.411 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 19:19:40.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 19:19:49.092 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 19:19:49.093 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:49.093 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 19:19:49.097 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 19:19:49.097 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:49.097 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 19:19:49.102 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 19:19:49.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 19:19:49.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 19:20:00.013 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 19:20:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 20:20:00 CST 2020]
+2020-05-06 19:20:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 20:25:00 CST 2020]
+2020-05-06 19:20:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 19:20:00.020 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 19:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 20:20:00 CST 2020]
+2020-05-06 19:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 20:25:00 CST 2020]
+2020-05-06 19:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 19:25:00.012 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 19:25:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 20:25:00 CST 2020]
+2020-05-06 19:25:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 20:30:00 CST 2020]
+2020-05-06 19:25:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 19:25:00.023 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 19:25:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 20:25:00 CST 2020]
+2020-05-06 19:25:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 20:30:00 CST 2020]
+2020-05-06 19:25:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 21:55:47.452 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 21:55:47.458 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 22:55:47 CST 2020]
+2020-05-06 21:55:47.459 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:00:47 CST 2020]
+2020-05-06 21:55:47.459 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 21:55:47.464 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 21:55:47.464 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 22:55:47 CST 2020]
+2020-05-06 21:55:47.464 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:00:47 CST 2020]
+2020-05-06 21:55:47.464 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 21:59:59.979 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 21:59:59.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 22:59:59 CST 2020]
+2020-05-06 21:59:59.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:04:59 CST 2020]
+2020-05-06 21:59:59.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 21:59:59.986 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 21:59:59.986 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 22:59:59 CST 2020]
+2020-05-06 21:59:59.986 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:04:59 CST 2020]
+2020-05-06 21:59:59.986 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:03:00.855 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:03:00.855 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:03:00.958 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:03:00.963 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:03:00.991 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:03:00.992 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:03:01.004 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:03:01.004 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:03:01.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:03:01.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:03:01.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:03:01.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:03:01.011 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:03:01.011 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:03:01.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:03:01.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:03:01.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:03:01.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:03:01.018 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:03:01.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:03:01.033 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:03:01.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:03:01.047 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:03:01.048 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:03:01.058 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:03:01.058 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:05:00.003 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:05:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:05:00 CST 2020]
+2020-05-06 22:05:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:10:00 CST 2020]
+2020-05-06 22:05:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:05:00.010 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:05:00 CST 2020]
+2020-05-06 22:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:10:00 CST 2020]
+2020-05-06 22:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:10:00.008 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:10:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:10:00 CST 2020]
+2020-05-06 22:10:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:15:00 CST 2020]
+2020-05-06 22:10:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:10:00.026 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:10:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:10:00 CST 2020]
+2020-05-06 22:10:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:15:00 CST 2020]
+2020-05-06 22:10:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:15:00.014 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:15:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:15:00 CST 2020]
+2020-05-06 22:15:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:20:00 CST 2020]
+2020-05-06 22:15:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:15:00.026 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:15:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:15:00 CST 2020]
+2020-05-06 22:15:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:20:00 CST 2020]
+2020-05-06 22:15:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:15:42.677 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:15:42.677 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:15:42.746 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:42.747 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:42.756 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:15:42.757 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:42.757 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:42.758 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:42.758 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:42.760 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:15:42.763 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:15:42.764 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:42.764 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:42.765 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:42.765 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:42.767 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:15:42.770 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:42.770 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:42.784 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:15:42.786 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:15:42.810 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:15:42.811 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:42.819 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:15:42.819 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:42.824 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:15:42.825 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:46.257 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:15:46.257 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:46.257 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:46.257 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:15:46.257 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:46.257 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:46.258 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:15:46.258 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:15:46.258 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:46.258 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:46.258 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:46.258 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:46.260 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:15:46.260 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:15:46.260 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:46.260 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:46.260 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:15:46.260 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:46.266 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:15:46.267 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:15:46.276 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:15:46.276 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:46.280 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:15:46.280 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:46.284 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:15:46.284 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:48.007 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:15:48.062 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:15:48.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:48.070 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:15:48.071 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:15:51.065 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:15:51.065 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:51.076 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:15:51.076 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:51.077 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:15:51.077 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:15:51.077 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:15:51.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:15:51 CST 2020]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:15:51.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:51.117 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:15:51.117 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:15:51.118 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:15:51.118 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:51.118 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:15:51.119 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:51.120 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:15:51.120 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:15:55.842 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:15:55.842 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:55.843 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:15:55.844 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:15:55.844 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:55.844 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:15:55.847 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:15:55.847 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:15:55.847 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:20:00.016 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:20:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:20:00 CST 2020]
+2020-05-06 22:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:25:00 CST 2020]
+2020-05-06 22:20:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:20:00.038 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:20:00.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:20:00 CST 2020]
+2020-05-06 22:20:00.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:25:00 CST 2020]
+2020-05-06 22:20:00.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:25:00.003 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:25:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:25:00 CST 2020]
+2020-05-06 22:25:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:30:00 CST 2020]
+2020-05-06 22:25:00.007 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:25:00.012 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:25:00 CST 2020]
+2020-05-06 22:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:30:00 CST 2020]
+2020-05-06 22:25:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:30:00.003 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:30:00.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:30:00 CST 2020]
+2020-05-06 22:30:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:35:00 CST 2020]
+2020-05-06 22:30:00.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:30:00.009 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:30:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:30:00 CST 2020]
+2020-05-06 22:30:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:35:00 CST 2020]
+2020-05-06 22:30:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:35:00.008 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:35:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:35:00 CST 2020]
+2020-05-06 22:35:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:40:00 CST 2020]
+2020-05-06 22:35:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:35:00.019 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:35:00 CST 2020]
+2020-05-06 22:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:40:00 CST 2020]
+2020-05-06 22:35:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:35:33.317 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-06 22:35:33.324 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:35:33.324 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-06 22:35:33.680 DEBUG org.hibernate.SQL - select count(distinct homeworksc0_.HOMEWORK_ID) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=?
+2020-05-06 22:35:33.680 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.691 DEBUG org.hibernate.SQL - select count(distinct homeworksc0_.HOMEWORK_ID) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=?
+2020-05-06 22:35:33.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.697 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-06 22:35:33.697 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.697 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [2]
+2020-05-06 22:35:33.698 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-06 22:35:33.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [2]
+2020-05-06 22:35:33.698 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-06 22:35:33.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.698 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-06 22:35:33.699 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-06 22:35:33.699 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.699 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-06 22:35:33.703 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and (coalesce(homeworksc0_.COMPLETE_STATUS, 0) in (? , ?))
+2020-05-06 22:35:33.704 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.704 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [0]
+2020-05-06 22:35:33.704 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [3]
+2020-05-06 22:35:33.706 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and (coalesce(homeworksc0_.COMPLETE_STATUS, 0) in (? , ?))
+2020-05-06 22:35:33.706 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.706 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [0]
+2020-05-06 22:35:33.706 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [3]
+2020-05-06 22:35:33.726 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-06 22:35:33.727 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.733 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-06 22:35:33.733 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.734 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-06 22:35:33.734 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.734 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-06 22:35:33.734 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.740 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=? and coalesce(examscorev0_.SCORE, -1)=-1
+2020-05-06 22:35:33.741 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:33.743 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=? and coalesce(examscorev0_.SCORE, -1)=-1
+2020-05-06 22:35:33.743 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-06 22:35:39.640 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:35:39.640 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:39.640 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:39.645 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:35:39.645 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:39.645 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:39.647 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:35:39.647 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:39.647 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:42.295 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:35:42.295 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:42.295 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:35:42.299 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:35:42.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:42.300 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:35:42.302 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:35:42.303 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:42.303 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:35:49.369 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:35:49.369 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:49.369 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:49.370 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:35:49.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:49.370 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:49.372 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:35:49.373 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:49.373 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.008 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:35:52.009 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:52.009 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.010 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:35:52.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:52.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.015 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:35:52.015 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:35:52.047 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:52.047 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.052 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:35:52.052 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:52.052 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.053 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:52.053 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.054 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:35:52.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:35:52.056 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:52.057 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:35:52.057 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:35:52.066 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:35:52.066 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:52.070 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:35:52.070 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:52.074 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:35:52.074 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:55.028 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:35:55.063 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:35:55.064 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:55.066 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:35:55.068 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:35:57.599 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:35:57.599 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:57.603 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:35:57.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:57.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:35:57.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:35:57.605 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:35:57.606 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:35:57 CST 2020]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:35:57.607 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:57.628 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:35:57.628 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:57.628 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:35:57.628 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:35:57.629 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:35:57.629 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:35:57.630 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:35:57.630 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:36:00.518 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:36:00.519 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:00.519 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:36:00.520 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:36:00.521 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:00.521 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:36:00.522 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:36:00.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:00.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:36:45.331 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:36:45.331 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:36:45.332 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:36:45.332 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:45.332 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:36:45.332 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:45.333 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:36:45.333 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:36:45.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:36:45.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:36:45.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:45.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:45.336 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:36:45.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:36:45.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:45.337 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:36:45.338 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:36:45.338 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:36:45.344 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:36:45.344 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:36:45.349 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:36:45.351 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:36:45.354 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:36:45.355 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:36:45.356 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:36:45.356 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:36:56.073 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:36:56.167 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:36:56.168 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:36:56.169 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:36:56.170 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:37:04.686 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:37:04.687 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:37:04.689 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:37:04.690 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:37:04.690 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:37:04.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:37:04.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:37:04.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:37:04.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddddd]
+2020-05-06 22:37:04.691 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:37:04.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:37:04.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:37:04.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:37:04.692 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:37:04.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:37:04.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:37:04.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:37:04.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:37:04.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:37:04.694 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:37:04.694 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:37:04.694 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:37:04.695 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:37:04 CST 2020]
+2020-05-06 22:37:04.696 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:37:04.696 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:37:04.735 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:37:04.736 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:37:04.738 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:37:04.739 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:37:04.739 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:37:04.740 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:37:04.741 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:37:04.741 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:37:09.516 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:37:09.516 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:37:09.516 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:37:09.518 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:37:09.518 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:37:09.518 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:37:09.521 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:37:09.521 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:37:09.521 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:40:39.021 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:40:39.021 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:40:39.047 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:40:39.047 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:40:39.048 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:39.048 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:39.069 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:40:39.069 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:40:39.069 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:40:39.069 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:40:39.069 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:39.069 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:39.076 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:40:39.076 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:40:39.077 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:39.078 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:40:39.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:40:39.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:39.160 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:40:39.161 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:40:39.186 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:40:39.187 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:39.194 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:40:39.194 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:39.201 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:40:39.201 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:40.820 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:40:40.843 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:40:40.843 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:40.853 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:40:40.854 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:40:43.194 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:40:43.194 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:43.230 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:40:43.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:43.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:40:43.232 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:40:43.233 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:40:43.233 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:40:43.233 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:40:43.234 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:40:43 CST 2020]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:40:43.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:43.265 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:40:43.265 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:43.269 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:40:43.269 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:43.273 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:40:43.273 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:40:43.285 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:40:43.286 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:40:59.094 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:40:59.101 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:59.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:40:59.110 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:40:59.111 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:40:59.113 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:42:13.886 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:42:13.892 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:42:13.893 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:44:33.438 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:44:33.445 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:44:33.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:44:33.451 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:44:33.452 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:44:33.454 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:46:23.836 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:46:25.008 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:46:28.132 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:46:28.214 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:46:28.228 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:46:28.877 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:47:12.232 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:47:17.947 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:47:17.948 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:47:17.950 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:47:17.958 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:47:17.959 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:47:17.964 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:47:17.966 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:46:29 CST 2020]
+2020-05-06 22:47:18.980 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:51:29 CST 2020]
+2020-05-06 22:47:33.236 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:48:57.369 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:48:57.374 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:47:37 CST 2020]
+2020-05-06 22:48:57.374 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:52:37 CST 2020]
+2020-05-06 22:48:57.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:50:00.002 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:50:00.004 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:50:00 CST 2020]
+2020-05-06 22:50:00.004 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:55:00 CST 2020]
+2020-05-06 22:50:00.004 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:50:00.015 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:50:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:50:00 CST 2020]
+2020-05-06 22:50:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Wed May 06 23:55:00 CST 2020]
+2020-05-06 22:50:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:51:07.300 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:51:07.300 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:51:07.309 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:51:07.309 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:51:07.309 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:07.309 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:07.315 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:51:07.316 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:51:07.316 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:07.318 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:51:07.318 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:51:07.318 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:14.505 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:51:14.506 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:51:14.506 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:51:14.506 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:14.511 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:51:14.511 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:14.539 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:51:14.539 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:51:14.555 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:51:14.556 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:14.570 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:51:14.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:14.575 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:51:14.575 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:20.711 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:51:20.765 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:51:20.766 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:20.769 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:51:20.770 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:51:23.636 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:51:23.636 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:23.640 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:51:23.640 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:51:23.641 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:51:23 CST 2020]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:51:23.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:23.672 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:51:23.673 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:51:23.677 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:51:23.677 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:23.678 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:51:23.678 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:23.679 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:51:23.679 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:51:33.836 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:51:33.839 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:33.840 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:51:33.849 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:51:33.851 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:33.852 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:51:45.462 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:51:45.463 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:51:45.463 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:53:19.129 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:53:19.129 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:53:19.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:53:19.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:19.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:53:19.131 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:19.133 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:53:19.133 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:53:19.133 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:19.134 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:53:19.134 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:53:19.134 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:19.136 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:53:19.136 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:53:19.137 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:53:19.137 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:53:19.137 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:19.137 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:19.141 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:53:19.141 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:53:19.148 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:53:19.148 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:19.156 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:53:19.157 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:19.160 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:53:19.160 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:22.441 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:53:22.500 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:53:22.500 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:22.502 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:53:22.503 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:53:25.428 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:53:25.428 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:25.430 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [gg]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:53:25.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:53:25.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:53:25.433 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:25.433 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:53:25 CST 2020]
+2020-05-06 22:53:25.433 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:53:25.433 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:25.459 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:53:25.459 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:25.460 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:53:25.460 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:53:25.463 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:53:25.463 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:25.464 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:53:25.464 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:53:57.278 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:53:57.280 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:57.280 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:53:57.281 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:53:57.281 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:57.281 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:53:57.284 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?, ?
+2020-05-06 22:53:57.285 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:53:57.286 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:54:41.179 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:54:41.179 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:54:41.180 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:54:41.180 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:54:41.181 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:41.181 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:41.185 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:54:41.185 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:54:41.185 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:41.186 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:54:41.186 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:54:41.186 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:41.187 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:54:41.188 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:54:41.188 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:41.189 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:54:41.189 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:54:41.189 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:41.192 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:54:41.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:54:41.201 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:54:41.201 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:41.203 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:54:41.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:41.205 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:54:41.205 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:46.361 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:54:46.421 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:54:46.421 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:46.423 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:54:46.423 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:54:50.377 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:54:50.378 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:50.381 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:54:50.381 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [kk]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:54:50.382 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:54:50.383 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:54:50.383 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:54:50.383 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:54:50.383 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:54:50.383 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:54:50.384 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:54:50.384 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:54:50.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:54:50.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:50.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:54:50 CST 2020]
+2020-05-06 22:54:50.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:54:50.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:50.409 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:54:50.409 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:54:50.410 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:54:50.410 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:50.411 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:54:50.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:50.413 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:54:50.413 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:54:53.388 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:54:53.390 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:53.390 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:54:53.391 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:54:53.391 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:53.391 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:54:53.393 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:54:53.393 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:54:53.393 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:55:02.595 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 22:55:02.597 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:55:02 CST 2020]
+2020-05-06 22:55:02.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:00:02 CST 2020]
+2020-05-06 22:55:02.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 22:55:02.600 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 22:55:02.601 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Wed May 06 23:55:02 CST 2020]
+2020-05-06 22:55:02.601 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:00:02 CST 2020]
+2020-05-06 22:55:02.601 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 22:57:20.423 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:57:20.424 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:57:20.430 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:57:20.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:57:20.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:20.434 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:20.442 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-06 22:57:20.442 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:57:20.442 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-06 22:57:20.442 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:20.442 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:57:20.442 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:20.446 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:57:20.446 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-06 22:57:20.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:57:20.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-06 22:57:20.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:20.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:20.455 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:57:20.456 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:57:20.470 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-06 22:57:20.470 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:20.473 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-06 22:57:20.474 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:20.479 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID9_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.CREATE_ID as CREATE_I3_73_1_, exambatchi0_.CREATE_TIME as CREATE_T4_73_1_, exambatchi0_.CREATOR as CREATOR5_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_1_, exambatchi0_.END_TIME as END_TIME7_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_1_, exambatchi0_.EXAM_ID as EXAM_ID9_73_1_, exambatchi0_.START_TIME as START_T10_73_1_, exambatchi0_.UPDATE_ID as UPDATE_11_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_1_, exambatchi0_.UPDATOR as UPDATOR13_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-06 22:57:20.481 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:23.086 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-06 22:57:23.150 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:57:23.151 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:23.155 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-06 22:57:23.155 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:57:27.158 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-06 22:57:27.159 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:27.164 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-06 22:57:27.164 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:27.164 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-06 22:57:27.165 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-06 22:57:27.166 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:27.166 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Wed May 06 22:57:27 CST 2020]
+2020-05-06 22:57:27.166 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-06 22:57:27.166 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:27.192 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:57:27.192 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-06 22:57:27.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:27.192 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-06 22:57:27.193 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-06 22:57:27.194 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:27.195 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.CREATE_ID as CREATE_I3_73_, exambatchi0_.CREATE_TIME as CREATE_T4_73_, exambatchi0_.CREATOR as CREATOR5_73_, exambatchi0_.DELETE_FLAG as DELETE_F6_73_, exambatchi0_.END_TIME as END_TIME7_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT8_73_, exambatchi0_.EXAM_ID as EXAM_ID9_73_, exambatchi0_.START_TIME as START_T10_73_, exambatchi0_.UPDATE_ID as UPDATE_11_73_, exambatchi0_.UPDATE_TIME as UPDATE_12_73_, exambatchi0_.UPDATOR as UPDATOR13_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-06 22:57:27.195 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-06 22:57:31.114 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:57:31.114 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:31.115 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:57:31.117 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-06 22:57:31.117 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:31.117 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 22:57:31.119 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-06 22:57:31.120 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-06 22:57:31.120 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-06 23:00:00.019 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 23:00:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:00:00 CST 2020]
+2020-05-06 23:00:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:05:00 CST 2020]
+2020-05-06 23:00:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 23:00:00.033 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 23:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:00:00 CST 2020]
+2020-05-06 23:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:05:00 CST 2020]
+2020-05-06 23:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 23:05:00.009 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 23:05:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:05:00 CST 2020]
+2020-05-06 23:05:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:10:00 CST 2020]
+2020-05-06 23:05:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 23:05:00.013 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 23:05:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:05:00 CST 2020]
+2020-05-06 23:05:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:10:00 CST 2020]
+2020-05-06 23:05:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 23:10:00.013 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 23:10:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:10:00 CST 2020]
+2020-05-06 23:10:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:15:00 CST 2020]
+2020-05-06 23:10:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 23:10:00.038 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 23:10:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:10:00 CST 2020]
+2020-05-06 23:10:00.041 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:15:00 CST 2020]
+2020-05-06 23:10:00.041 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 23:15:00.016 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 23:15:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:15:00 CST 2020]
+2020-05-06 23:15:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:20:00 CST 2020]
+2020-05-06 23:15:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 23:15:00.022 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 23:15:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:15:00 CST 2020]
+2020-05-06 23:15:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:20:00 CST 2020]
+2020-05-06 23:15:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 23:20:00.020 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 23:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:20:00 CST 2020]
+2020-05-06 23:20:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:25:00 CST 2020]
+2020-05-06 23:20:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 23:20:00.024 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 23:20:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:20:00 CST 2020]
+2020-05-06 23:20:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:25:00 CST 2020]
+2020-05-06 23:20:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-06 23:25:00.010 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-06 23:25:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:25:00 CST 2020]
+2020-05-06 23:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:30:00 CST 2020]
+2020-05-06 23:25:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-06 23:25:00.014 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-06 23:25:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 00:25:00 CST 2020]
+2020-05-06 23:25:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 00:30:00 CST 2020]
+2020-05-06 23:25:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
diff --git a/D_/log/qxueyou.log b/D_/log/qxueyou.log
new file mode 100644
index 0000000..fb96c72
--- /dev/null
+++ b/D_/log/qxueyou.log
@@ -0,0 +1,1204 @@
+2020-05-07 08:46:29.226 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 08:46:29.903 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 09:46:29 CST 2020]
+2020-05-07 08:46:29.909 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 09:51:29 CST 2020]
+2020-05-07 08:46:29.910 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 08:46:29.955 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 08:46:29.962 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 09:46:29 CST 2020]
+2020-05-07 08:46:29.963 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 09:51:29 CST 2020]
+2020-05-07 08:46:29.963 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 09:40:59.332 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 09:40:59.333 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:40:59 CST 2020]
+2020-05-07 09:40:59.334 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:45:59 CST 2020]
+2020-05-07 09:40:59.334 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 09:40:59.337 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 09:40:59.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:40:59 CST 2020]
+2020-05-07 09:40:59.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:45:59 CST 2020]
+2020-05-07 09:40:59.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 09:45:00.003 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 09:45:00.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:45:00 CST 2020]
+2020-05-07 09:45:00.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:50:00 CST 2020]
+2020-05-07 09:45:00.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 09:45:00.008 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 09:45:00.008 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:45:00 CST 2020]
+2020-05-07 09:45:00.008 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:50:00 CST 2020]
+2020-05-07 09:45:00.008 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 09:50:00.008 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 09:50:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:50:00 CST 2020]
+2020-05-07 09:50:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:55:00 CST 2020]
+2020-05-07 09:50:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 09:50:00.025 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 09:50:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:50:00 CST 2020]
+2020-05-07 09:50:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:55:00 CST 2020]
+2020-05-07 09:50:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 09:55:00.022 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 09:55:00.027 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:55:00 CST 2020]
+2020-05-07 09:55:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:00:00 CST 2020]
+2020-05-07 09:55:00.028 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 09:55:00.033 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 09:55:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 10:55:00 CST 2020]
+2020-05-07 09:55:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:00:00 CST 2020]
+2020-05-07 09:55:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:00:00.018 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:00:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:00:00 CST 2020]
+2020-05-07 10:00:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:05:00 CST 2020]
+2020-05-07 10:00:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:00:00.033 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:00:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:00:00 CST 2020]
+2020-05-07 10:00:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:05:00 CST 2020]
+2020-05-07 10:00:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:05:00.006 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:05:00.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:05:00 CST 2020]
+2020-05-07 10:05:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:10:00 CST 2020]
+2020-05-07 10:05:00.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:05:00.019 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:05:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:05:00 CST 2020]
+2020-05-07 10:05:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:10:00 CST 2020]
+2020-05-07 10:05:00.020 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:08:00.436 DEBUG org.hibernate.SQL - select user0_.USER_ID as USER_ID1_234_, user0_.ACCOUNT as ACCOUNT2_234_, user0_.AGE as AGE3_234_, user0_.CREATE_ID as CREATE_I4_234_, user0_.CREATE_TIME as CREATE_T5_234_, user0_.CREATOR as CREATOR6_234_, user0_.DELETE_FLAG as DELETE_F7_234_, user0_.E_MAIL as E_MAIL8_234_, user0_.IMEI as IMEI9_234_, user0_.IMG_PATH as IMG_PAT10_234_, user0_.MOBILE_PHONE as MOBILE_11_234_, user0_.NAME as NAME12_234_, user0_.ORGANIZATION_ID as ORGANIZ13_234_, user0_.PASSWORD as PASSWOR14_234_, user0_.SEX as SEX15_234_, user0_.SOURCE as SOURCE16_234_, user0_.UPDATE_ID as UPDATE_17_234_, user0_.UPDATE_TIME as UPDATE_18_234_, user0_.UPDATOR as UPDATOR19_234_ from user user0_ where user0_.DELETE_FLAG=0 and user0_.ACCOUNT=? and user0_.PASSWORD=? limit ?
+2020-05-07 10:08:00.460 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [admin]
+2020-05-07 10:08:00.461 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [123]
+2020-05-07 10:08:00.566 DEBUG org.hibernate.SQL - insert into sys_log (CONTENT, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DESP, GPS, IP, MODULE, TYPE, UPDATE_ID, UPDATE_TIME, UPDATOR, USER_AGENT, USER_ID, USER_NAME, LOG_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-07 10:08:00.567 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15]
+2020-05-07 10:08:00.567 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [admin]
+2020-05-07 10:08:00.568 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [TIMESTAMP] - [Thu May 07 10:08:00 CST 2020]
+2020-05-07 10:08:00.569 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [admin]
+2020-05-07 10:08:00.569 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [BOOLEAN] - [false]
+2020-05-07 10:08:00.570 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [admin]
+2020-05-07 10:08:00.570 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-07 10:08:00.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [VARCHAR] - [127.0.0.1]
+2020-05-07 10:08:00.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [SYS-LOGIN]
+2020-05-07 10:08:00.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [SMALLINT] - [0]
+2020-05-07 10:08:00.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [admin]
+2020-05-07 10:08:00.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [TIMESTAMP] - [Thu May 07 10:08:00 CST 2020]
+2020-05-07 10:08:00.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [admin]
+2020-05-07 10:08:00.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [null]
+2020-05-07 10:08:00.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:00.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [VARCHAR] - [管理员]
+2020-05-07 10:08:00.572 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [ff80808171ece24f0171ece3be180000]
+2020-05-07 10:08:00.610 DEBUG org.hibernate.SQL - select organizati0_.ORGANIZATION_ID as ORGANIZA1_162_0_, organizati0_.CODE as CODE2_162_0_, organizati0_.CREATE_ID as CREATE_I3_162_0_, organizati0_.CREATE_TIME as CREATE_T4_162_0_, organizati0_.CREATOR as CREATOR5_162_0_, organizati0_.DELETE_FLAG as DELETE_F6_162_0_, organizati0_.LOGO_PATH as LOGO_PAT7_162_0_, organizati0_.NAME as NAME8_162_0_, organizati0_.ORG_CODE as ORG_CODE9_162_0_, organizati0_.PARENT_ORGANIZATION_ID as PARENT_10_162_0_, organizati0_.SERVER_URL as SERVER_11_162_0_, organizati0_.SHORT_NAME as SHORT_N12_162_0_, organizati0_.TEL as TEL13_162_0_, organizati0_.TYPE as TYPE14_162_0_, organizati0_.UPDATE_ID as UPDATE_15_162_0_, organizati0_.UPDATE_TIME as UPDATE_16_162_0_, organizati0_.UPDATOR as UPDATOR17_162_0_ from organization organizati0_ where organizati0_.ORGANIZATION_ID=?
+2020-05-07 10:08:00.610 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:08:00.636 DEBUG org.hibernate.SQL - select clsclass1_.CLASS_ID as CLASS_ID1_64_, clsclass1_.ADDRESS as ADDRESS2_64_, clsclass1_.ADDRESS_ID as ADDRESS_3_64_, clsclass1_.ADVANTAGE as ADVANTAG4_64_, clsclass1_.ARRANGEMENT as ARRANGEM5_64_, clsclass1_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass1_.CITY as CITY7_64_, clsclass1_.CLASS_CHARGER as CLASS_CH8_64_, clsclass1_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass1_.CLASS_NUMBER as CLASS_N10_64_, clsclass1_.CLASS_TYPES as CLASS_T11_64_, clsclass1_.CLICK_NUM as CLICK_N12_64_, clsclass1_.CODE as CODE13_64_, clsclass1_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass1_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass1_.COMMENT_COUNT as COMMENT16_64_, clsclass1_.COURSE_ID as COURSE_17_64_, clsclass1_.CREATE_ID as CREATE_18_64_, clsclass1_.CREATE_TIME as CREATE_19_64_, clsclass1_.CREATOR as CREATOR20_64_, clsclass1_.DELETE_FLAG as DELETE_21_64_, clsclass1_.DISCOUNT as DISCOUN22_64_, clsclass1_.DISPRICE as DISPRIC23_64_, clsclass1_.END_TIME as END_TIM24_64_, clsclass1_.EXTENDED as EXTENDE25_64_, clsclass1_.FULL_TEXT as FULL_TE26_64_, clsclass1_.GOOD_ID as GOOD_ID27_64_, clsclass1_.HAVA_AWARD as HAVA_AW28_64_, clsclass1_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass1_.HAVE_LIVE as HAVE_LI30_64_, clsclass1_.HAVE_VIDEO as HAVE_VI31_64_, clsclass1_.IMG_PATH as IMG_PAT32_64_, clsclass1_.LATITUDE_Y as LATITUD33_64_, clsclass1_.LONGITUDE_X as LONGITU34_64_, clsclass1_.MODE as MODE35_64_, clsclass1_.NAME as NAME36_64_, clsclass1_.NEED_FORUM as NEED_FO37_64_, clsclass1_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass1_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass1_.ORG_ID as ORG_ID40_64_, clsclass1_.PAYMENT_NUM as PAYMENT41_64_, clsclass1_.POINTER as POINTER42_64_, clsclass1_.PRICE as PRICE43_64_, clsclass1_.PRODUCT_ID as PRODUCT44_64_, clsclass1_.PROGRESS as PROGRES45_64_, clsclass1_.PROVINCE as PROVINC46_64_, clsclass1_.RECOMMEND as RECOMME47_64_, clsclass1_.REGION as REGION48_64_, clsclass1_.SCORE as SCORE49_64_, clsclass1_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass1_.START_TIME as START_T51_64_, clsclass1_.STU_ALL_COUNT as STU_ALL52_64_, clsclass1_.STUDENT_COUNT as STUDENT53_64_, clsclass1_.STUDY_TIME as STUDY_T54_64_, clsclass1_.TEACHER_ID as TEACHER55_64_, clsclass1_.TOP_FLAG as TOP_FLA56_64_, clsclass1_.UPDATE_ID as UPDATE_57_64_, clsclass1_.UPDATE_TIME as UPDATE_58_64_, clsclass1_.UPDATOR as UPDATOR59_64_ from stu_student stustudent0_ cross join cls_class clsclass1_ where clsclass1_.CLASS_ID=stustudent0_.CLASS_ID and clsclass1_.DELETE_FLAG=0 and stustudent0_.DELETE_FLAG=0 and clsclass1_.ORG_ID=? and stustudent0_.USER_ID=? and stustudent0_.STATUS=? order by stustudent0_.CREATE_TIME desc limit ?
+2020-05-07 10:08:00.637 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:08:00.637 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:00.637 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [active]
+2020-05-07 10:08:00.692 DEBUG org.hibernate.SQL - select sysmenu0_.MENU_ID as col_0_0_, sysmenu0_.NAME as col_1_0_, sysmenu0_.URL as col_2_0_, sysmenu0_.hover as col_3_0_, sysmenu0_.icon as col_4_0_, sysmenu0_.PARENT_MENU_ID as col_5_0_, sysmenu0_.MENU_ORDER as col_6_0_ from sys_menu sysmenu0_ cross join user_re_role_user userrerole1_ cross join sys_privilege sysprivile2_ where sysmenu0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and sysprivile2_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrerole1_.ROLE_ID=sysprivile2_.ROLE_ID and sysprivile2_.MENU_ID=sysmenu0_.MENU_ID order by sysmenu0_.MENU_ORDER limit ?
+2020-05-07 10:08:00.693 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:00.725 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-07 10:08:00.725 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:01.336 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-07 10:08:01.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:08:01.337 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-07 10:08:01.403 DEBUG org.hibernate.SQL - select count(distinct homeworksc0_.HOMEWORK_ID) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=?
+2020-05-07 10:08:01.403 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.408 DEBUG org.hibernate.SQL - select count(distinct homeworksc0_.HOMEWORK_ID) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=?
+2020-05-07 10:08:01.408 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.411 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 10:08:01.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [2]
+2020-05-07 10:08:01.412 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 10:08:01.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [2]
+2020-05-07 10:08:01.413 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 10:08:01.413 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.413 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-07 10:08:01.414 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 10:08:01.414 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.414 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-07 10:08:01.418 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and (coalesce(homeworksc0_.COMPLETE_STATUS, 0) in (? , ?))
+2020-05-07 10:08:01.418 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.418 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [0]
+2020-05-07 10:08:01.418 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [3]
+2020-05-07 10:08:01.420 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and (coalesce(homeworksc0_.COMPLETE_STATUS, 0) in (? , ?))
+2020-05-07 10:08:01.420 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.420 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [0]
+2020-05-07 10:08:01.420 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [3]
+2020-05-07 10:08:01.431 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 10:08:01.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.436 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 10:08:01.436 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.437 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 10:08:01.437 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.438 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 10:08:01.438 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.441 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=? and coalesce(examscorev0_.SCORE, -1)=-1
+2020-05-07 10:08:01.441 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:01.442 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=? and coalesce(examscorev0_.SCORE, -1)=-1
+2020-05-07 10:08:01.442 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 10:08:09.543 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:08:09.545 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:08:09.546 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:09.548 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:08:09.548 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:08:09.548 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:09.549 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:08:09.551 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:08:09.552 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:09.555 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:08:09.555 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:08:09.555 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:08:09.555 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:09.555 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:08:09.555 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:09.563 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:08:09.564 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:08:09.564 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:09.632 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:08:09.632 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:08:09.649 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:08:09.650 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:09.656 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:08:09.656 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:09.662 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:08:09.664 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:11.654 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:08:11.675 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:08:11.675 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:11.680 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:08:11.680 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:08:16.201 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:08:16.201 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:16.207 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:08:16.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:16.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 10:08:16.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:08:16.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:08:16.207 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dddd]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:08:16.208 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:08:16 CST 2020]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:08:16.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:16.232 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:08:16.233 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:16.235 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:08:16.235 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:08:16.238 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:08:16.238 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:16.242 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:08:16.243 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:35.102 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-07 10:08:35.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:35.102 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 10:08:35.108 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-07 10:08:35.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:35.108 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 10:08:35.115 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:08:35.115 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:35.115 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 10:08:54.490 DEBUG org.hibernate.SQL - select max(exambatchi0_.EXAM_BATCH_NO) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:08:54.492 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:54.499 DEBUG org.hibernate.SQL - insert into exam_batch_info (BATCH_STATUS, classRoom_id, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, END_TIME, EXAM_BATCH_NO, EXAM_ID, examRoom_id, START_TIME, UPDATE_ID, UPDATE_TIME, UPDATOR, EXAM_BATCH_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-07 10:08:54.500 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [SMALLINT] - [0]
+2020-05-07 10:08:54.500 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 10:08:54.500 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:54.500 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [TIMESTAMP] - [Thu May 07 10:08:54 CST 2020]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [VARCHAR] - [管理员]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [BOOLEAN] - [false]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [TIMESTAMP] - [Sat May 09 00:00:00 CST 2020]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [1]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [ff80808171e2f6280171e2fe90790000]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [TIMESTAMP] - [Thu May 07 00:00:00 CST 2020]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [TIMESTAMP] - [Thu May 07 10:08:54 CST 2020]
+2020-05-07 10:08:54.501 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [管理员]
+2020-05-07 10:08:54.502 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:08:54.506 DEBUG org.hibernate.SQL - insert into exam_class_re (CLASS_ID, CLASS_NAME, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, EXAM_BATCH_ID, EXAM_ID, UPDATE_ID, UPDATE_TIME, UPDATOR, EXAM_CLASS_RE_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171149ead017114dc045b0001]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [软件工程实战班]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [TIMESTAMP] - [Thu May 07 10:08:54 CST 2020]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [VARCHAR] - [管理员]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [BOOLEAN] - [false]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [TIMESTAMP] - [Thu May 07 10:08:54 CST 2020]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [管理员]
+2020-05-07 10:08:54.507 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [VARCHAR] - [ff80808171ece24f0171ece490e00002]
+2020-05-07 10:08:54.582 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:08:54.583 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:54.585 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:08:54.585 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:54.586 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:08:54.586 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:08:54.599 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 10:08:54.600 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:10:00.043 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:10:00.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:10:00 CST 2020]
+2020-05-07 10:10:00.047 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:15:00 CST 2020]
+2020-05-07 10:10:00.047 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:10:00.062 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:10:00.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:10:00 CST 2020]
+2020-05-07 10:10:00.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:15:00 CST 2020]
+2020-05-07 10:10:00.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:12:54.262 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:12:54.264 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:12:54.264 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:12:54.267 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:12:54.267 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:12:54.267 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:12:54.269 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:12:54.270 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:12:54.270 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:12:54.276 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:12:54.277 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:12:54.287 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:12:54.287 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:12:54.296 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:12:54.297 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:12:54.301 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:12:54.302 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:12:56.416 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:12:56.429 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:12:56.429 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:12:56.431 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:12:56.431 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:13:00.921 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:13:00.922 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:13:00.926 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:13:00.927 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:13:00.927 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 10:13:00.927 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ssss]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:13:00.928 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:13:00 CST 2020]
+2020-05-07 10:13:00.929 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:13:00.929 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:13:00.953 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:13:00.954 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:13:00.954 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:13:00.955 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:13:00.955 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:13:00.955 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:13:00.956 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:13:00.957 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:13:00.960 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 10:13:00.960 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:15:00.010 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:15:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:15:00 CST 2020]
+2020-05-07 10:15:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:20:00 CST 2020]
+2020-05-07 10:15:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:15:00.022 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:15:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:15:00 CST 2020]
+2020-05-07 10:15:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:20:00 CST 2020]
+2020-05-07 10:15:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:20:00.009 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:20:00.014 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:20:00 CST 2020]
+2020-05-07 10:20:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:25:00 CST 2020]
+2020-05-07 10:20:00.015 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:20:00.018 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:20:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:20:00 CST 2020]
+2020-05-07 10:20:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:25:00 CST 2020]
+2020-05-07 10:20:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:25:00.005 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:25:00.010 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:25:00 CST 2020]
+2020-05-07 10:25:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:30:00 CST 2020]
+2020-05-07 10:25:00.011 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:25:00.021 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:25:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:25:00 CST 2020]
+2020-05-07 10:25:00.021 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:30:00 CST 2020]
+2020-05-07 10:25:00.022 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:25:58.580 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:25:58.582 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:25:58.582 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:25:58.594 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:25:58.595 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:25:58.595 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:25:58.598 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:25:58.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:25:58.598 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:25:58.608 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:25:58.609 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:25:58.623 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:25:58.623 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:25:58.633 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:25:58.634 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:25:58.639 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:25:58.639 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:26:02.347 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:26:02.348 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:02.348 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:02.349 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:26:02.349 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:02.350 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:02.351 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:26:02.352 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:26:02.437 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:02.437 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:02.447 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:26:02.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:02.448 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:02.449 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:02.449 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:02.451 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:26:02.454 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:02.454 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:02.456 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:26:02.460 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:26:02.470 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:26:02.470 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:26:02.475 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:26:02.475 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:26:02.480 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:26:02.481 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:26:04.404 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:26:07.937 DEBUG org.hibernate.SQL - insert into exam_info (CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DURATION_MIN, EXAM_NAME, EXAM_STATUS, EXAM_TYPE, MAX_LATE_MIN, ORG_ID, PASSING_SCORE, SHOW_ANALYSE, SHOW_CORRECT_ANSWER, SHOW_SCORE, SHOW_SCORE_TIME, SHOW_TYPE, SUBJECT_ID, TOTAL_SCORE, UPDATE_ID, UPDATE_TIME, UPDATOR, EXAM_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-07 10:26:07.939 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 10:26:07 CST 2020]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dsadfs]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:26:07.940 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:07.941 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:26:07 CST 2020]
+2020-05-07 10:26:07.942 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:26:07.942 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:07.980 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:26:07.980 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:26:07.981 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:26:07.981 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:07.982 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:26:07.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:07.983 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:26:07.983 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:12.617 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:26:12.617 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:12.617 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:12.619 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:26:12.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:12.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:12.622 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:26:12.622 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:26:12.622 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:26:12.626 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:26:12.626 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:26:12.650 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:26:12.650 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:12.651 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:26:12.653 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:26:12.654 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:12.654 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:26:12.655 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:26:12.655 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:26:12.656 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:26:12.657 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:26:12.657 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:30:00.034 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:30:00.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:30:00 CST 2020]
+2020-05-07 10:30:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:35:00 CST 2020]
+2020-05-07 10:30:00.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:30:00.045 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:30:00.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:30:00 CST 2020]
+2020-05-07 10:30:00.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:35:00 CST 2020]
+2020-05-07 10:30:00.046 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:30:55.528 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:30:55.528 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:30:55.540 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:55.540 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:55.541 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:55.541 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:55.543 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:30:55.543 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:55.544 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:55.545 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:30:55.545 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:55.545 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:55.546 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:30:55.547 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:55.547 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:55.548 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:30:55.548 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:55.549 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:55.557 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:30:55.557 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:30:55.571 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:30:55.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:30:55.571 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:30:55.574 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:30:55.574 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:30:55.576 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:30:55.576 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:30:55.578 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:30:55.578 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:30:55.579 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:30:55.579 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:30:58.061 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:30:58.061 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:58.062 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:58.063 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:30:58.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:58.063 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:30:58.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:58.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:58.063 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:58.064 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:30:58.064 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:58.064 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:58.065 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:30:58.066 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:58.066 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:58.066 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:30:58.067 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:30:58.067 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:30:58.070 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:30:58.070 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:30:58.076 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:30:58.076 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:30:58.076 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:30:58.078 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:30:58.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:30:58.078 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:30:58.078 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:30:58.079 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:30:58.079 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:30:58.080 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:30:58.080 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:01.642 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:31:01.693 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:31:01.694 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:01.696 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:31:01.697 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:08.614 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:31:08.614 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:08.617 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:31:08.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:08.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 10:31:08.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:31:08.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:31:08.618 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [uiuiuiu]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:31:08.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:31:08 CST 2020]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:31:08.620 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:08.642 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:31:08.642 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:08.642 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:31:08.643 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:31:08.643 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:31:08.643 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:08.644 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:31:08.644 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:08.646 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 10:31:08.647 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:31:16.860 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:31:16.860 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:16.861 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:16.861 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:31:16.862 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:16.862 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:16.863 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:31:16.864 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:16.864 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:16.866 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:31:16.866 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:16.875 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:31:16.875 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:16.875 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:16.877 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:31:16.877 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:16.877 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:31:16.878 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:16.878 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:31:16.878 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:16.879 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:31:16.879 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:25.097 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:31:25.109 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:31:25.109 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:25.110 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:31:25.110 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:29.271 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:31:29.271 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:29.273 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:31:29.273 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:29.273 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-07 10:26:08.0]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ttttttt]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:31:29.274 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:29.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:31:29.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:29.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:31:29 CST 2020]
+2020-05-07 10:31:29.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:31:29.275 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:29.290 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:31:29.290 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:29.291 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:31:29.291 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:31:29.291 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:31:29.291 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:29.292 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:31:29.292 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:36.373 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:31:36.374 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:36.374 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:36.375 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:31:36.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:36.375 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:36.377 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:31:36.377 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:36.377 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:36.379 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:31:36.379 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:36.385 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:31:36.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:36.385 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:36.388 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:31:36.388 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:36.389 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:31:36.389 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:36.390 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:31:36.390 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:36.391 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:31:36.391 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:38.654 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:31:38.666 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:31:38.666 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:38.668 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:31:38.668 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:42.326 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:31:42.327 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:42.330 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddddd]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:31:42.330 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:31:42 CST 2020]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:31:42.331 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:42.346 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:31:42.347 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:42.348 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:31:42.348 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:31:42.348 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:42.348 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:31:42.349 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:31:42.349 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:42.351 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 10:31:42.351 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:31:51.391 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:31:51.391 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:51.391 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:51.392 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:31:51.393 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:51.393 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:51.395 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:31:51.396 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:31:51.396 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:31:51.399 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:31:51.399 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:31:51.407 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:31:51.407 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:51.407 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:51.409 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:31:51.410 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:51.411 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:31:51.411 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:31:51.412 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:31:51.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:31:51.413 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:31:51.413 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:35:00.011 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:35:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:35:00 CST 2020]
+2020-05-07 10:35:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:40:00 CST 2020]
+2020-05-07 10:35:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:35:00.029 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:35:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:35:00 CST 2020]
+2020-05-07 10:35:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:40:00 CST 2020]
+2020-05-07 10:35:00.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:40:00.018 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:40:00.023 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:40:00 CST 2020]
+2020-05-07 10:40:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:45:00 CST 2020]
+2020-05-07 10:40:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:40:00.032 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:40:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:40:00 CST 2020]
+2020-05-07 10:40:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:45:00 CST 2020]
+2020-05-07 10:40:00.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:45:00.013 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:45:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:45:00 CST 2020]
+2020-05-07 10:45:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:50:00 CST 2020]
+2020-05-07 10:45:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:45:00.024 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:45:00.024 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:45:00 CST 2020]
+2020-05-07 10:45:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:50:00 CST 2020]
+2020-05-07 10:45:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:45:31.168 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:45:31.168 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:45:31.204 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:31.205 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:31.209 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:45:31.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:31.209 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:31.211 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:31.211 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:31.212 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:45:31.214 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:45:31.215 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:31.215 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:31.216 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:31.216 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:31.216 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:45:31.221 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:31.222 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:31.224 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:45:31.225 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:31.243 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:45:31.244 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:31.244 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:31.247 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:45:31.247 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:31.251 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:45:31.251 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:31.253 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:45:31.253 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:31.254 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:45:31.255 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:35.264 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:45:35.265 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:45:35.267 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:35.269 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:45:35.269 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:35.394 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:45:35.394 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:35.394 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:35.397 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:45:35.397 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:35.398 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:35.401 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:45:35.401 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:35.401 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:35.404 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:45:35.404 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:35.404 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:35.405 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 10:45:35.405 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:35.405 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:35.406 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:45:35.406 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:35.411 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 10:45:35.411 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:35.412 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:35.429 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:45:35.430 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:35.430 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:35.433 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:45:35.434 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:35.437 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:45:35.437 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:35.438 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:45:35.438 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:35.439 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:45:35.440 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:37.806 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:45:37.840 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:45:37.840 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:37.844 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:45:37.844 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:40.554 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:45:40.555 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:40.559 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:45:40.559 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:40.559 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-07 10:26:08.0]
+2020-05-07 10:45:40.559 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:45:40.559 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [ddsdf]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:45:40 CST 2020]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:45:40.560 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:40.581 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:45:40.581 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:40.582 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:45:40.582 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:40.582 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:45:40.583 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:45:40.583 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:45:40.583 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:42.424 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:45:42.425 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:42.425 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:42.426 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 10:45:42.426 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:42.427 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:42.429 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 10:45:42.429 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 10:45:42.429 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:42.432 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:45:42.432 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:42.446 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 10:45:42.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:42.447 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:42.448 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:45:42.448 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:42.449 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:45:42.450 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 10:45:42.452 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 10:45:42.452 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:42.453 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.START_TIME as START_T12_73_1_, exambatchi0_.UPDATE_ID as UPDATE_13_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_1_, exambatchi0_.UPDATOR as UPDATOR15_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 10:45:42.453 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:44.467 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 10:45:44.481 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:45:44.482 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:44.483 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 10:45:44.483 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:47.029 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 10:45:47.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:47.031 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 10:45:47.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:47.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 10:45:47.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 10:45:47.031 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [sdfs]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 10:45:47.032 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 10:45:47.033 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 10:45:47 CST 2020]
+2020-05-07 10:45:47.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 10:45:47.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:47.048 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 10:45:47.048 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:45:47.048 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 10:45:47.048 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:47.049 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 10:45:47.049 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:47.050 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.START_TIME as START_T12_73_, exambatchi0_.UPDATE_ID as UPDATE_13_73_, exambatchi0_.UPDATE_TIME as UPDATE_14_73_, exambatchi0_.UPDATOR as UPDATOR15_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 10:45:47.050 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 10:45:47.052 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 10:45:47.052 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 10:50:00.018 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:50:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:50:00 CST 2020]
+2020-05-07 10:50:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:55:00 CST 2020]
+2020-05-07 10:50:00.026 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 10:50:00.033 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:50:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:50:00 CST 2020]
+2020-05-07 10:50:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 11:55:00 CST 2020]
+2020-05-07 10:50:00.034 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:55:00.016 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 10:55:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:55:00 CST 2020]
+2020-05-07 10:55:00.018 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 12:00:00 CST 2020]
+2020-05-07 10:55:00.019 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 10:55:00.028 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 10:55:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 11:55:00 CST 2020]
+2020-05-07 10:55:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 12:00:00 CST 2020]
+2020-05-07 10:55:00.029 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 11:00:00.012 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 11:00:00.016 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 12:00:00 CST 2020]
+2020-05-07 11:00:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 12:05:00 CST 2020]
+2020-05-07 11:00:00.017 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 11:00:00.024 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 11:00:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 12:00:00 CST 2020]
+2020-05-07 11:00:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 12:05:00 CST 2020]
+2020-05-07 11:00:00.025 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 11:45:00.557 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as col_0_0_ from exam_batch_info exambatchi0_ cross join exam_info examinfo1_ where exambatchi0_.EXAM_ID=examinfo1_.EXAM_ID and exambatchi0_.START_TIME>=? and exambatchi0_.START_TIME<? and examinfo1_.EXAM_STATUS=? and examinfo1_.DELETE_FLAG=0 and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.START_TIME desc limit ?
+2020-05-07 11:45:00.580 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 12:45:00 CST 2020]
+2020-05-07 11:45:00.580 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 12:50:00 CST 2020]
+2020-05-07 11:45:00.581 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [1]
+2020-05-07 11:45:00.610 DEBUG org.hibernate.SQL - select mediavideo0_.VIDEO_LIVE_ID as VIDEO_LI1_11_, mediavideo0_.ANCHOR as ANCHOR2_11_, mediavideo0_.ANCHOR_ID as ANCHOR_I3_11_, mediavideo0_.ATTRIBUTE as ATTRIBUT4_11_, mediavideo0_.COMPLETE_FLAG as COMPLETE5_11_, mediavideo0_.CONSULT_IMG_URL as CONSULT_6_11_, mediavideo0_.CREATE_ID as CREATE_I7_11_, mediavideo0_.CREATE_TIME as CREATE_T8_11_, mediavideo0_.CREATOR as CREATOR9_11_, mediavideo0_.DEFINITION as DEFINIT10_11_, mediavideo0_.DELETE_FLAG as DELETE_11_11_, mediavideo0_.EDIT_REPLAY_FLAG as EDIT_RE12_11_, mediavideo0_.END_TIME as END_TIM13_11_, mediavideo0_.EXPECTED_TIMES as EXPECTE14_11_, mediavideo0_.WY_HLS_PULL_URL as WY_HLS_15_11_, mediavideo0_.WY_HTTP_PULL_URL as WY_HTTP16_11_, mediavideo0_.LAST_RECORD_TIME as LAST_RE17_11_, mediavideo0_.TQ_MEETING_ID as TQ_MEET18_11_, mediavideo0_.TQ_MEETING_PWD as TQ_MEET19_11_, mediavideo0_.NAME as NAME20_11_, mediavideo0_.ON_TIME_FLAG as ON_TIME21_11_, mediavideo0_.ORDER_TIMES as ORDER_T22_11_, mediavideo0_.PERMISSION as PERMISS23_11_, mediavideo0_.PLAY_TIMES as PLAY_TI24_11_, mediavideo0_.PRAISE_TIMES as PRAISE_25_11_, mediavideo0_.PREVIEW_IMG_URL as PREVIEW26_11_, mediavideo0_.PREVIEW_VIDEO_URL as PREVIEW27_11_, mediavideo0_.WY_PUSH_URL as WY_PUSH28_11_, mediavideo0_.REMARK as REMARK29_11_, mediavideo0_.REVIEW_TIMES as REVIEW_30_11_, mediavideo0_.WY_RTMP_PULL_URL as WY_RTMP31_11_, mediavideo0_.SHARE_TIMES as SHARE_T32_11_, mediavideo0_.START_TIME as START_T33_11_, mediavideo0_.STATUS as STATUS34_11_, mediavideo0_.SUBJECT_ID as SUBJECT35_11_, mediavideo0_.SUBJECT_NAME as SUBJECT36_11_, mediavideo0_.TECENT_LIVE_NUMBER as TECENT_37_11_, mediavideo0_.UPDATE_ID as UPDATE_38_11_, mediavideo0_.UPDATE_TIME as UPDATE_39_11_, mediavideo0_.UPDATOR as UPDATOR40_11_, mediavideo0_.WATCH_MAX_TIMES as WATCH_M41_11_, mediavideo0_.WATCH_TIMES as WATCH_T42_11_, mediavideo0_.WATCHER_LIMIT as WATCHER43_11_, mediavideo0_.WY_LIVE_NUMBER as WY_LIVE44_11_ from MEDIA_VIDEO_LIVE mediavideo0_ where mediavideo0_.START_TIME>=? and mediavideo0_.START_TIME<? and mediavideo0_.STATUS=? and mediavideo0_.DELETE_FLAG=0 limit ?
+2020-05-07 11:45:00.611 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [TIMESTAMP] - [Thu May 07 12:45:00 CST 2020]
+2020-05-07 11:45:00.611 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [Thu May 07 12:50:00 CST 2020]
+2020-05-07 11:45:00.611 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [SMALLINT] - [3]
+2020-05-07 11:45:10.954 DEBUG org.hibernate.SQL - select user0_.USER_ID as USER_ID1_234_, user0_.ACCOUNT as ACCOUNT2_234_, user0_.AGE as AGE3_234_, user0_.CREATE_ID as CREATE_I4_234_, user0_.CREATE_TIME as CREATE_T5_234_, user0_.CREATOR as CREATOR6_234_, user0_.DELETE_FLAG as DELETE_F7_234_, user0_.E_MAIL as E_MAIL8_234_, user0_.IMEI as IMEI9_234_, user0_.IMG_PATH as IMG_PAT10_234_, user0_.MOBILE_PHONE as MOBILE_11_234_, user0_.NAME as NAME12_234_, user0_.ORGANIZATION_ID as ORGANIZ13_234_, user0_.PASSWORD as PASSWOR14_234_, user0_.SEX as SEX15_234_, user0_.SOURCE as SOURCE16_234_, user0_.UPDATE_ID as UPDATE_17_234_, user0_.UPDATE_TIME as UPDATE_18_234_, user0_.UPDATOR as UPDATOR19_234_ from user user0_ where user0_.DELETE_FLAG=0 and user0_.ACCOUNT=? and user0_.PASSWORD=? limit ?
+2020-05-07 11:45:10.956 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [admin]
+2020-05-07 11:45:10.956 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [123]
+2020-05-07 11:45:11.037 DEBUG org.hibernate.SQL - insert into sys_log (CONTENT, CREATE_ID, CREATE_TIME, CREATOR, DELETE_FLAG, DESP, GPS, IP, MODULE, TYPE, UPDATE_ID, UPDATE_TIME, UPDATOR, USER_AGENT, USER_ID, USER_NAME, LOG_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+2020-05-07 11:45:11.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15]
+2020-05-07 11:45:11.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [admin]
+2020-05-07 11:45:11.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [TIMESTAMP] - [Thu May 07 11:45:10 CST 2020]
+2020-05-07 11:45:11.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [VARCHAR] - [admin]
+2020-05-07 11:45:11.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [BOOLEAN] - [false]
+2020-05-07 11:45:11.038 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [admin]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [VARCHAR] - [null]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [VARCHAR] - [127.0.0.1]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [VARCHAR] - [SYS-LOGIN]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [SMALLINT] - [0]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [VARCHAR] - [admin]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [TIMESTAMP] - [Thu May 07 11:45:10 CST 2020]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [VARCHAR] - [admin]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [VARCHAR] - [null]
+2020-05-07 11:45:11.039 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:11.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [VARCHAR] - [管理员]
+2020-05-07 11:45:11.040 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [ff80808171ed3c250171ed3cb5640000]
+2020-05-07 11:45:11.154 DEBUG org.hibernate.SQL - select organizati0_.ORGANIZATION_ID as ORGANIZA1_162_0_, organizati0_.CODE as CODE2_162_0_, organizati0_.CREATE_ID as CREATE_I3_162_0_, organizati0_.CREATE_TIME as CREATE_T4_162_0_, organizati0_.CREATOR as CREATOR5_162_0_, organizati0_.DELETE_FLAG as DELETE_F6_162_0_, organizati0_.LOGO_PATH as LOGO_PAT7_162_0_, organizati0_.NAME as NAME8_162_0_, organizati0_.ORG_CODE as ORG_CODE9_162_0_, organizati0_.PARENT_ORGANIZATION_ID as PARENT_10_162_0_, organizati0_.SERVER_URL as SERVER_11_162_0_, organizati0_.SHORT_NAME as SHORT_N12_162_0_, organizati0_.TEL as TEL13_162_0_, organizati0_.TYPE as TYPE14_162_0_, organizati0_.UPDATE_ID as UPDATE_15_162_0_, organizati0_.UPDATE_TIME as UPDATE_16_162_0_, organizati0_.UPDATOR as UPDATOR17_162_0_ from organization organizati0_ where organizati0_.ORGANIZATION_ID=?
+2020-05-07 11:45:11.155 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 11:45:11.179 DEBUG org.hibernate.SQL - select clsclass1_.CLASS_ID as CLASS_ID1_64_, clsclass1_.ADDRESS as ADDRESS2_64_, clsclass1_.ADDRESS_ID as ADDRESS_3_64_, clsclass1_.ADVANTAGE as ADVANTAG4_64_, clsclass1_.ARRANGEMENT as ARRANGEM5_64_, clsclass1_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass1_.CITY as CITY7_64_, clsclass1_.CLASS_CHARGER as CLASS_CH8_64_, clsclass1_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass1_.CLASS_NUMBER as CLASS_N10_64_, clsclass1_.CLASS_TYPES as CLASS_T11_64_, clsclass1_.CLICK_NUM as CLICK_N12_64_, clsclass1_.CODE as CODE13_64_, clsclass1_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass1_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass1_.COMMENT_COUNT as COMMENT16_64_, clsclass1_.COURSE_ID as COURSE_17_64_, clsclass1_.CREATE_ID as CREATE_18_64_, clsclass1_.CREATE_TIME as CREATE_19_64_, clsclass1_.CREATOR as CREATOR20_64_, clsclass1_.DELETE_FLAG as DELETE_21_64_, clsclass1_.DISCOUNT as DISCOUN22_64_, clsclass1_.DISPRICE as DISPRIC23_64_, clsclass1_.END_TIME as END_TIM24_64_, clsclass1_.EXTENDED as EXTENDE25_64_, clsclass1_.FULL_TEXT as FULL_TE26_64_, clsclass1_.GOOD_ID as GOOD_ID27_64_, clsclass1_.HAVA_AWARD as HAVA_AW28_64_, clsclass1_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass1_.HAVE_LIVE as HAVE_LI30_64_, clsclass1_.HAVE_VIDEO as HAVE_VI31_64_, clsclass1_.IMG_PATH as IMG_PAT32_64_, clsclass1_.LATITUDE_Y as LATITUD33_64_, clsclass1_.LONGITUDE_X as LONGITU34_64_, clsclass1_.MODE as MODE35_64_, clsclass1_.NAME as NAME36_64_, clsclass1_.NEED_FORUM as NEED_FO37_64_, clsclass1_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass1_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass1_.ORG_ID as ORG_ID40_64_, clsclass1_.PAYMENT_NUM as PAYMENT41_64_, clsclass1_.POINTER as POINTER42_64_, clsclass1_.PRICE as PRICE43_64_, clsclass1_.PRODUCT_ID as PRODUCT44_64_, clsclass1_.PROGRESS as PROGRES45_64_, clsclass1_.PROVINCE as PROVINC46_64_, clsclass1_.RECOMMEND as RECOMME47_64_, clsclass1_.REGION as REGION48_64_, clsclass1_.SCORE as SCORE49_64_, clsclass1_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass1_.START_TIME as START_T51_64_, clsclass1_.STU_ALL_COUNT as STU_ALL52_64_, clsclass1_.STUDENT_COUNT as STUDENT53_64_, clsclass1_.STUDY_TIME as STUDY_T54_64_, clsclass1_.TEACHER_ID as TEACHER55_64_, clsclass1_.TOP_FLAG as TOP_FLA56_64_, clsclass1_.UPDATE_ID as UPDATE_57_64_, clsclass1_.UPDATE_TIME as UPDATE_58_64_, clsclass1_.UPDATOR as UPDATOR59_64_ from stu_student stustudent0_ cross join cls_class clsclass1_ where clsclass1_.CLASS_ID=stustudent0_.CLASS_ID and clsclass1_.DELETE_FLAG=0 and stustudent0_.DELETE_FLAG=0 and clsclass1_.ORG_ID=? and stustudent0_.USER_ID=? and stustudent0_.STATUS=? order by stustudent0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:11.179 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 11:45:11.179 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:11.179 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [active]
+2020-05-07 11:45:11.228 DEBUG org.hibernate.SQL - select sysmenu0_.MENU_ID as col_0_0_, sysmenu0_.NAME as col_1_0_, sysmenu0_.URL as col_2_0_, sysmenu0_.hover as col_3_0_, sysmenu0_.icon as col_4_0_, sysmenu0_.PARENT_MENU_ID as col_5_0_, sysmenu0_.MENU_ORDER as col_6_0_ from sys_menu sysmenu0_ cross join user_re_role_user userrerole1_ cross join sys_privilege sysprivile2_ where sysmenu0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and sysprivile2_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrerole1_.ROLE_ID=sysprivile2_.ROLE_ID and sysprivile2_.MENU_ID=sysmenu0_.MENU_ID order by sysmenu0_.MENU_ORDER limit ?
+2020-05-07 11:45:11.228 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:11.248 DEBUG org.hibernate.SQL - select min(userrole0_.type) as col_0_0_ from user_role userrole0_ cross join user_re_role_user userrerole1_ where userrole0_.DELETE_FLAG=0 and userrerole1_.DELETE_FLAG=0 and userrerole1_.USER_ID=? and userrole0_.ROLE_ID=userrerole1_.ROLE_ID limit ?
+2020-05-07 11:45:11.248 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:11.902 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as CLASS_ID1_64_, clsclass0_.ADDRESS as ADDRESS2_64_, clsclass0_.ADDRESS_ID as ADDRESS_3_64_, clsclass0_.ADVANTAGE as ADVANTAG4_64_, clsclass0_.ARRANGEMENT as ARRANGEM5_64_, clsclass0_.CAN_MULTI_EXER as CAN_MULT6_64_, clsclass0_.CITY as CITY7_64_, clsclass0_.CLASS_CHARGER as CLASS_CH8_64_, clsclass0_.CLASS_CHARGER_ID as CLASS_CH9_64_, clsclass0_.CLASS_NUMBER as CLASS_N10_64_, clsclass0_.CLASS_TYPES as CLASS_T11_64_, clsclass0_.CLICK_NUM as CLICK_N12_64_, clsclass0_.CODE as CODE13_64_, clsclass0_.COLLEGE_COURSE_ID as COLLEGE14_64_, clsclass0_.COLLEGE_COURSE_NAME as COLLEGE15_64_, clsclass0_.COMMENT_COUNT as COMMENT16_64_, clsclass0_.COURSE_ID as COURSE_17_64_, clsclass0_.CREATE_ID as CREATE_18_64_, clsclass0_.CREATE_TIME as CREATE_19_64_, clsclass0_.CREATOR as CREATOR20_64_, clsclass0_.DELETE_FLAG as DELETE_21_64_, clsclass0_.DISCOUNT as DISCOUN22_64_, clsclass0_.DISPRICE as DISPRIC23_64_, clsclass0_.END_TIME as END_TIM24_64_, clsclass0_.EXTENDED as EXTENDE25_64_, clsclass0_.FULL_TEXT as FULL_TE26_64_, clsclass0_.GOOD_ID as GOOD_ID27_64_, clsclass0_.HAVA_AWARD as HAVA_AW28_64_, clsclass0_.HAVE_HANDOUT as HAVE_HA29_64_, clsclass0_.HAVE_LIVE as HAVE_LI30_64_, clsclass0_.HAVE_VIDEO as HAVE_VI31_64_, clsclass0_.IMG_PATH as IMG_PAT32_64_, clsclass0_.LATITUDE_Y as LATITUD33_64_, clsclass0_.LONGITUDE_X as LONGITU34_64_, clsclass0_.MODE as MODE35_64_, clsclass0_.NAME as NAME36_64_, clsclass0_.NEED_FORUM as NEED_FO37_64_, clsclass0_.NEED_JOIN_AUDIT as NEED_JO38_64_, clsclass0_.NEED_QUIT_AUDIT as NEED_QU39_64_, clsclass0_.ORG_ID as ORG_ID40_64_, clsclass0_.PAYMENT_NUM as PAYMENT41_64_, clsclass0_.POINTER as POINTER42_64_, clsclass0_.PRICE as PRICE43_64_, clsclass0_.PRODUCT_ID as PRODUCT44_64_, clsclass0_.PROGRESS as PROGRES45_64_, clsclass0_.PROVINCE as PROVINC46_64_, clsclass0_.RECOMMEND as RECOMME47_64_, clsclass0_.REGION as REGION48_64_, clsclass0_.SCORE as SCORE49_64_, clsclass0_.SHOU_ANALYSIS_AFTER_EXER as SHOU_AN50_64_, clsclass0_.START_TIME as START_T51_64_, clsclass0_.STU_ALL_COUNT as STU_ALL52_64_, clsclass0_.STUDENT_COUNT as STUDENT53_64_, clsclass0_.STUDY_TIME as STUDY_T54_64_, clsclass0_.TEACHER_ID as TEACHER55_64_, clsclass0_.TOP_FLAG as TOP_FLA56_64_, clsclass0_.UPDATE_ID as UPDATE_57_64_, clsclass0_.UPDATE_TIME as UPDATE_58_64_, clsclass0_.UPDATOR as UPDATOR59_64_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? and (clsclass0_.NAME like ?) and clsclass0_.END_TIME>=sysdate() order by clsclass0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:11.903 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 11:45:11.903 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [%]
+2020-05-07 11:45:11.965 DEBUG org.hibernate.SQL - select count(distinct homeworksc0_.HOMEWORK_ID) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=?
+2020-05-07 11:45:11.965 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.969 DEBUG org.hibernate.SQL - select count(distinct homeworksc0_.HOMEWORK_ID) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=?
+2020-05-07 11:45:11.970 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.972 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 11:45:11.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [2]
+2020-05-07 11:45:11.975 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 11:45:11.975 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.975 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [2]
+2020-05-07 11:45:11.976 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 11:45:11.976 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.976 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-07 11:45:11.977 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and homeworksc0_.COMPLETE_STATUS=?
+2020-05-07 11:45:11.977 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.977 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [1]
+2020-05-07 11:45:11.981 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and (coalesce(homeworksc0_.COMPLETE_STATUS, 0) in (? , ?))
+2020-05-07 11:45:11.981 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.981 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [0]
+2020-05-07 11:45:11.981 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [3]
+2020-05-07 11:45:11.982 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from homework_score_v homeworksc0_ where homeworksc0_.CLASS_ID=? and (coalesce(homeworksc0_.COMPLETE_STATUS, 0) in (? , ?))
+2020-05-07 11:45:11.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:11.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [0]
+2020-05-07 11:45:11.982 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [3]
+2020-05-07 11:45:11.998 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 11:45:11.999 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:12.004 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 11:45:12.004 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:12.005 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 11:45:12.005 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:12.006 DEBUG org.hibernate.SQL - select count(distinct examscorev0_.EXAM_ID) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=?
+2020-05-07 11:45:12.006 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:12.011 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=? and coalesce(examscorev0_.SCORE, -1)=-1
+2020-05-07 11:45:12.012 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:12.013 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_score_v examscorev0_ where examscorev0_.CLASS_ID=? and coalesce(examscorev0_.SCORE, -1)=-1
+2020-05-07 11:45:12.013 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e95c12310002]
+2020-05-07 11:45:16.527 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 11:45:16.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:16.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:16.529 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:16.531 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 11:45:16.531 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:16.531 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:16.531 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:16.531 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:16.535 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:16.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:16.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:16.537 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:16.537 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:16.537 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:16.543 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:16.544 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:16.544 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:16.589 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:16.590 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:16.609 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 11:45:16.609 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:16.609 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:16.618 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:16.619 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:16.627 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:16.627 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:16.629 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:16.630 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:16.630 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:16.630 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:21.424 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 11:45:21.454 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 11:45:21.455 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:21.458 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:21.458 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:24.721 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 11:45:24.723 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:24.728 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 11:45:24.728 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-07 10:26:08.0]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [dd]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 11:45:24.729 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 11:45:24.730 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:24.731 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 11:45:24 CST 2020]
+2020-05-07 11:45:24.731 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 11:45:24.731 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:24.755 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 11:45:24.755 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:24.755 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 11:45:24.756 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 11:45:24.756 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 11:45:24.756 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:24.760 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.examRoom_name as examRoo12_73_, exambatchi0_.START_TIME as START_T13_73_, exambatchi0_.UPDATE_ID as UPDATE_14_73_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_, exambatchi0_.UPDATOR as UPDATOR16_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 11:45:24.760 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:25.851 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:25.851 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:25.851 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:25.852 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:25.852 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:25.852 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:25.854 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:25.855 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:25.855 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:25.858 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:25.859 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:25.865 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 11:45:25.865 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:25.865 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:25.867 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:25.867 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:25.868 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:25.868 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:25.869 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:25.869 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:25.870 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:25.870 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:27.092 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 11:45:27.105 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 11:45:27.106 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:27.112 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:27.112 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:30.970 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 11:45:30.971 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:30.973 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [aaaaa]
+2020-05-07 11:45:30.973 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 11:45:30 CST 2020]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 11:45:30.974 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:30.990 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 11:45:30.990 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 11:45:30.992 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 11:45:30.992 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:30.993 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 11:45:30.994 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:30.994 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.examRoom_name as examRoo12_73_, exambatchi0_.START_TIME as START_T13_73_, exambatchi0_.UPDATE_ID as UPDATE_14_73_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_, exambatchi0_.UPDATOR as UPDATOR16_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 11:45:30.995 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:31.001 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 11:45:31.001 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
+2020-05-07 11:45:39.970 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-07 11:45:39.971 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:39.971 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 11:45:39.979 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0
+2020-05-07 11:45:39.980 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:39.980 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 11:45:39.984 DEBUG org.hibernate.SQL - select examroom0_.examroom_id as examroom1_81_, examroom0_.CREATE_ID as CREATE_I2_81_, examroom0_.CREATE_TIME as CREATE_T3_81_, examroom0_.CREATOR as CREATOR4_81_, examroom0_.DELETE_FLAG as DELETE_F5_81_, examroom0_.examroom_name as examroom6_81_, examroom0_.room_id as room_id7_81_, examroom0_.room_name as room_nam8_81_, examroom0_.seats_num as seats_nu9_81_, examroom0_.status as status10_81_, examroom0_.UPDATE_ID as UPDATE_11_81_, examroom0_.UPDATE_TIME as UPDATE_12_81_, examroom0_.UPDATOR as UPDATOR13_81_ from exam_room examroom0_ where examroom0_.CREATE_ID=? and examroom0_.room_id=? and examroom0_.DELETE_FLAG=0 order by examroom0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:39.984 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:39.984 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [402881f271e2b26f0171e2d47e2e0001]
+2020-05-07 11:45:46.276 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:46.277 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:46.277 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:46.279 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:46.279 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:46.279 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:46.281 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:46.281 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:46.282 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:46.285 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:46.285 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:46.292 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 11:45:46.293 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:46.293 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:46.296 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:46.297 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:46.298 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:46.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:46.299 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:46.299 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:46.300 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:46.300 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:50.522 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:50.522 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 11:45:50.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:50.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:50.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:50.523 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:50.524 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0
+2020-05-07 11:45:50.524 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:50.524 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:50.524 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0
+2020-05-07 11:45:50.524 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:50.525 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:50.526 DEBUG org.hibernate.SQL - select classroom0_.ROOM_ID as ROOM_ID1_63_, classroom0_.address as address2_63_, classroom0_.CREATE_ID as CREATE_I3_63_, classroom0_.CREATE_TIME as CREATE_T4_63_, classroom0_.CREATOR as CREATOR5_63_, classroom0_.DELETE_FLAG as DELETE_F6_63_, classroom0_.name as name7_63_, classroom0_.ORG_ID as ORG_ID8_63_, classroom0_.status as status9_63_, classroom0_.UPDATE_ID as UPDATE_10_63_, classroom0_.UPDATE_TIME as UPDATE_11_63_, classroom0_.UPDATOR as UPDATOR12_63_ from class_room classroom0_ where (classroom0_.name like ?) and classroom0_.CREATE_ID=? and classroom0_.DELETE_FLAG=0 order by classroom0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:50.527 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_, examinfo0_.CREATE_ID as CREATE_I2_75_, examinfo0_.CREATE_TIME as CREATE_T3_75_, examinfo0_.CREATOR as CREATOR4_75_, examinfo0_.DELETE_FLAG as DELETE_F5_75_, examinfo0_.DURATION_MIN as DURATION6_75_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_, examinfo0_.ORG_ID as ORG_ID11_75_, examinfo0_.PASSING_SCORE as PASSING12_75_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_, examinfo0_.SUBJECT_ID as SUBJECT18_75_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_, examinfo0_.UPDATE_ID as UPDATE_20_75_, examinfo0_.UPDATE_TIME as UPDATE_21_75_, examinfo0_.UPDATOR as UPDATOR22_75_ from exam_info examinfo0_ where (examinfo0_.EXAM_NAME like ?) and examinfo0_.CREATE_ID=? and examinfo0_.DELETE_FLAG=0 order by examinfo0_.CREATE_TIME desc limit ?
+2020-05-07 11:45:50.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:50.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:50.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%%]
+2020-05-07 11:45:50.527 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:50.534 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:50.535 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:50.542 DEBUG org.hibernate.SQL - select concat(examresult0_.EXAM_ID, '-', examresult0_.STATUS) as col_0_0_, count(1) as col_1_0_ from exam_result_v examresult0_ where examresult0_.EXAM_ID in (? , ?) group by examresult0_.EXAM_ID , examresult0_.STATUS limit ?
+2020-05-07 11:45:50.542 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:50.543 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:50.549 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:50.549 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:50.551 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:50.552 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ecf455bf0003]
+2020-05-07 11:45:50.553 DEBUG org.hibernate.SQL - select reexampape0_.EXAM_ID as EXAM_ID6_75_0_, reexampape0_.RELATION_ID as RELATION1_79_0_, reexampape0_.RELATION_ID as RELATION1_79_1_, reexampape0_.CREATE_ID as CREATE_I2_79_1_, reexampape0_.CREATE_TIME as CREATE_T3_79_1_, reexampape0_.CREATOR as CREATOR4_79_1_, reexampape0_.DELETE_FLAG as DELETE_F5_79_1_, reexampape0_.EXAM_ID as EXAM_ID6_79_1_, reexampape0_.EXAM_PAPER_ID as EXAM_PAP7_79_1_, reexampape0_.EXAM_PAPER_NAME as EXAM_PAP8_79_1_, reexampape0_.RELATION_PAPER_CODE as RELATION9_79_1_, reexampape0_.UPDATE_ID as UPDATE_10_79_1_, reexampape0_.UPDATE_TIME as UPDATE_11_79_1_, reexampape0_.UPDATOR as UPDATOR12_79_1_ from exam_re_exam_paper reexampape0_ where ( reexampape0_.DELETE_FLAG=0) and reexampape0_.EXAM_ID=?
+2020-05-07 11:45:50.553 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:50.554 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_ID as EXAM_ID10_75_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_0_, exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_1_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_1_, exambatchi0_.classRoom_id as classRoo3_73_1_, exambatchi0_.CREATE_ID as CREATE_I4_73_1_, exambatchi0_.CREATE_TIME as CREATE_T5_73_1_, exambatchi0_.CREATOR as CREATOR6_73_1_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_1_, exambatchi0_.END_TIME as END_TIME8_73_1_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_1_, exambatchi0_.EXAM_ID as EXAM_ID10_73_1_, exambatchi0_.examRoom_id as examRoo11_73_1_, exambatchi0_.examRoom_name as examRoo12_73_1_, exambatchi0_.START_TIME as START_T13_73_1_, exambatchi0_.UPDATE_ID as UPDATE_14_73_1_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_1_, exambatchi0_.UPDATOR as UPDATOR16_73_1_ from exam_batch_info exambatchi0_ where ( exambatchi0_.DELETE_FLAG=0) and exambatchi0_.EXAM_ID=? order by exambatchi0_.START_TIME asc
+2020-05-07 11:45:50.554 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:51.665 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as col_0_0_, subject0_.NAME as col_1_0_ from SUBJECT subject0_ where subject0_.DELETE_FLAG=0 and subject0_.TYPE=1 and subject0_.ORG_ID='1' limit ?
+2020-05-07 11:45:51.708 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 11:45:51.708 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:51.710 DEBUG org.hibernate.SQL - select subject0_.SUBJECT_ID as SUBJECT_1_54_0_, subject0_.CODE as CODE2_54_0_, subject0_.CONTENT_FILE_ID as CONTENT_3_54_0_, subject0_.COURSE_ID as COURSE_I4_54_0_, subject0_.COVER_PAGE_FILE_ID as COVER_PA5_54_0_, subject0_.COVER_PAGE_URL as COVER_PA6_54_0_, subject0_.CREATE_ID as CREATE_I7_54_0_, subject0_.CREATE_TIME as CREATE_T8_54_0_, subject0_.CREATOR as CREATOR9_54_0_, subject0_.DELETE_FLAG as DELETE_10_54_0_, subject0_.FULL_NAME as FULL_NA11_54_0_, subject0_.LECTURE_COUNT as LECTURE12_54_0_, subject0_.NAME as NAME13_54_0_, subject0_.ORDER_NUM as ORDER_N14_54_0_, subject0_.ORG_ID as ORG_ID15_54_0_, subject0_.ORIG_COPY_SUBJECT_ID as ORIG_CO16_54_0_, subject0_.ORIG_SUBJECT_ID as ORIG_SU17_54_0_, subject0_.SCHOOL_YEAR as SCHOOL_18_54_0_, subject0_.STATUS as STATUS19_54_0_, subject0_.TEACHER_ID as TEACHER20_54_0_, subject0_.TEACHER_NAME as TEACHER21_54_0_, subject0_.TERM as TERM22_54_0_, subject0_.TYPE as TYPE23_54_0_, subject0_.UPDATE_ID as UPDATE_24_54_0_, subject0_.UPDATE_TIME as UPDATE_25_54_0_, subject0_.UPDATOR as UPDATOR26_54_0_ from SUBJECT subject0_ where subject0_.SUBJECT_ID=?
+2020-05-07 11:45:51.710 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:56.228 DEBUG org.hibernate.SQL - select examinfo0_.EXAM_ID as EXAM_ID1_75_0_, examinfo0_.CREATE_ID as CREATE_I2_75_0_, examinfo0_.CREATE_TIME as CREATE_T3_75_0_, examinfo0_.CREATOR as CREATOR4_75_0_, examinfo0_.DELETE_FLAG as DELETE_F5_75_0_, examinfo0_.DURATION_MIN as DURATION6_75_0_, examinfo0_.EXAM_NAME as EXAM_NAM7_75_0_, examinfo0_.EXAM_STATUS as EXAM_STA8_75_0_, examinfo0_.EXAM_TYPE as EXAM_TYP9_75_0_, examinfo0_.MAX_LATE_MIN as MAX_LAT10_75_0_, examinfo0_.ORG_ID as ORG_ID11_75_0_, examinfo0_.PASSING_SCORE as PASSING12_75_0_, examinfo0_.SHOW_ANALYSE as SHOW_AN13_75_0_, examinfo0_.SHOW_CORRECT_ANSWER as SHOW_CO14_75_0_, examinfo0_.SHOW_SCORE as SHOW_SC15_75_0_, examinfo0_.SHOW_SCORE_TIME as SHOW_SC16_75_0_, examinfo0_.SHOW_TYPE as SHOW_TY17_75_0_, examinfo0_.SUBJECT_ID as SUBJECT18_75_0_, examinfo0_.TOTAL_SCORE as TOTAL_S19_75_0_, examinfo0_.UPDATE_ID as UPDATE_20_75_0_, examinfo0_.UPDATE_TIME as UPDATE_21_75_0_, examinfo0_.UPDATOR as UPDATOR22_75_0_ from exam_info examinfo0_ where examinfo0_.EXAM_ID=?
+2020-05-07 11:45:56.228 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:56.229 DEBUG org.hibernate.SQL - update exam_info set CREATE_ID=?, CREATE_TIME=?, CREATOR=?, DELETE_FLAG=?, DURATION_MIN=?, EXAM_NAME=?, EXAM_STATUS=?, EXAM_TYPE=?, MAX_LATE_MIN=?, ORG_ID=?, PASSING_SCORE=?, SHOW_ANALYSE=?, SHOW_CORRECT_ANSWER=?, SHOW_SCORE=?, SHOW_SCORE_TIME=?, SHOW_TYPE=?, SUBJECT_ID=?, TOTAL_SCORE=?, UPDATE_ID=?, UPDATE_TIME=?, UPDATOR=? where EXAM_ID=?
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [TIMESTAMP] - [2020-05-06 16:07:00.0]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [VARCHAR] - [管理员]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [4] as [BOOLEAN] - [false]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [5] as [SMALLINT] - [1]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [6] as [VARCHAR] - [aaaa]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [7] as [SMALLINT] - [0]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [8] as [SMALLINT] - [0]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [9] as [SMALLINT] - [0]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [10] as [VARCHAR] - [1]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [11] as [FLOAT] - [0.0]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [12] as [SMALLINT] - [1]
+2020-05-07 11:45:56.230 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [13] as [SMALLINT] - [1]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [14] as [SMALLINT] - [1]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [15] as [INTEGER] - [100000]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [16] as [SMALLINT] - [0]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [17] as [VARCHAR] - [2c92ad6a710b09db017177b10dfe009c]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [18] as [FLOAT] - [0.0]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [19] as [VARCHAR] - [40288a1261d106ba0161d1072e260000]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [20] as [TIMESTAMP] - [Thu May 07 11:45:56 CST 2020]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [21] as [VARCHAR] - [管理员]
+2020-05-07 11:45:56.231 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [22] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:56.247 DEBUG org.hibernate.SQL - select clsclass0_.CLASS_ID as col_0_0_, clsclass0_.NAME as col_1_0_ from cls_class clsclass0_ where clsclass0_.DELETE_FLAG=0 and clsclass0_.ORG_ID=? limit ?
+2020-05-07 11:45:56.247 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [1]
+2020-05-07 11:45:56.247 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 11:45:56.247 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:56.248 DEBUG org.hibernate.SQL - select count(1) as col_0_0_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0
+2020-05-07 11:45:56.248 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:56.249 DEBUG org.hibernate.SQL - select exambatchi0_.EXAM_BATCH_ID as EXAM_BAT1_73_, exambatchi0_.BATCH_STATUS as BATCH_ST2_73_, exambatchi0_.classRoom_id as classRoo3_73_, exambatchi0_.CREATE_ID as CREATE_I4_73_, exambatchi0_.CREATE_TIME as CREATE_T5_73_, exambatchi0_.CREATOR as CREATOR6_73_, exambatchi0_.DELETE_FLAG as DELETE_F7_73_, exambatchi0_.END_TIME as END_TIME8_73_, exambatchi0_.EXAM_BATCH_NO as EXAM_BAT9_73_, exambatchi0_.EXAM_ID as EXAM_ID10_73_, exambatchi0_.examRoom_id as examRoo11_73_, exambatchi0_.examRoom_name as examRoo12_73_, exambatchi0_.START_TIME as START_T13_73_, exambatchi0_.UPDATE_ID as UPDATE_14_73_, exambatchi0_.UPDATE_TIME as UPDATE_15_73_, exambatchi0_.UPDATOR as UPDATOR16_73_ from exam_batch_info exambatchi0_ where exambatchi0_.EXAM_ID=? and exambatchi0_.DELETE_FLAG=0 order by exambatchi0_.CREATE_TIME DESC limit ?
+2020-05-07 11:45:56.249 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [40288a1971e8fd7e0171e9060d1c0001]
+2020-05-07 11:45:56.251 DEBUG org.hibernate.SQL - select reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_73_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_0_, reclasses0_.EXAM_CLASS_RE_ID as EXAM_CLA1_74_1_, reclasses0_.CLASS_ID as CLASS_ID2_74_1_, reclasses0_.CLASS_NAME as CLASS_NA3_74_1_, reclasses0_.CREATE_ID as CREATE_I4_74_1_, reclasses0_.CREATE_TIME as CREATE_T5_74_1_, reclasses0_.CREATOR as CREATOR6_74_1_, reclasses0_.DELETE_FLAG as DELETE_F7_74_1_, reclasses0_.EXAM_BATCH_ID as EXAM_BAT8_74_1_, reclasses0_.EXAM_ID as EXAM_ID9_74_1_, reclasses0_.UPDATE_ID as UPDATE_10_74_1_, reclasses0_.UPDATE_TIME as UPDATE_11_74_1_, reclasses0_.UPDATOR as UPDATOR12_74_1_ from exam_class_re reclasses0_ where ( reclasses0_.DELETE_FLAG=0) and reclasses0_.EXAM_BATCH_ID=?
+2020-05-07 11:45:56.251 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [ff80808171ece24f0171ece490df0001]
diff --git a/D_/log/qxueyou_err.log b/D_/log/qxueyou_err.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/D_/log/qxueyou_err.log
diff --git a/D_/logOns/qxueyouOns.log b/D_/logOns/qxueyouOns.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/D_/logOns/qxueyouOns.log
diff --git a/mvnw b/mvnw
new file mode 100644
index 0000000..5bf251c
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,225 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Migwn, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+  # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+echo $MAVEN_PROJECTBASEDIR
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 0000000..019bd74
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,143 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..38a4271
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>com.qxueyou</groupId>
+	<artifactId>scc</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>scc</name>
+	<description>鏅烘収钃濋珮鏍℃暀鑲插钩鍙�</description>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>1.5.10.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>GBK</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>GBK</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+	<repositories>
+		<!-- 閰嶇疆nexus杩滅▼浠撳簱 -->
+		<repository>
+			<id>nexus</id>
+			<name>Nexus Snapshot Repository</name>
+			<url>http://134.175.66.181/nexus/repository/maven-public/</url>
+			<releases>
+				<enabled>true</enabled>
+			</releases>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
+		<repository>
+			<id>license4j repository</id>
+			<url>https://repository.mulesoft.org/releases/</url>
+		</repository>
+	</repositories>
+	<dependencies>
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+			<version>3.3.2</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-logging</groupId>
+			<artifactId>commons-logging</artifactId>
+			<version>1.2</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>druid</artifactId>
+			<version>1.1.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.hibernate.common</groupId>
+			<artifactId>hibernate-commons-annotations</artifactId>
+			<version>4.0.5.Final</version>
+		</dependency>
+
+		<!-- hibernate-core-4.3.7.Final.jar -->
+		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-core</artifactId>
+			<version>4.3.7.Final</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+
+		<!-- hibernate-jpa-2.1-api-1.0.0.Final.jar -->
+		<!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
+		<dependency>
+			<groupId>org.hibernate.javax.persistence</groupId>
+			<artifactId>hibernate-jpa-2.1-api</artifactId>
+			<version>1.0.0.Final</version>
+		</dependency>
+
+		<!-- aspectj-weaver.jar -->
+		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
+		<dependency>
+			<groupId>org.aspectj</groupId>
+			<artifactId>aspectjweaver</artifactId>
+			<version>1.8.9</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+
+		<!-- spring-orm-4.1.2.RELEASE.jar -->
+		<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-orm</artifactId>
+			<version>4.1.2.RELEASE</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+
+		<dependency>
+			<groupId>com.fasterxml.jackson.datatype</groupId>
+			<artifactId>jackson-datatype-hibernate4</artifactId>
+			<version>2.4.6</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.kafka</groupId>
+			<artifactId>spring-kafka</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+			<exclusions>
+				<exclusion>
+					<groupId>org.springframework.boot</groupId>
+					<artifactId>spring-boot-starter-logging</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-log4j2</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>1.2.3</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.4</version>
+		</dependency>
+		<dependency>
+			<groupId>com.artofsolving</groupId>
+			<artifactId>jodconverter</artifactId>
+			<version>2.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.caucho</groupId>
+			<artifactId>hessian</artifactId>
+			<version>4.0.38</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi</artifactId>
+			<version>3.11</version>
+		</dependency>
+
+		<!-- poi-excelant-3.11-20141221.jar -->
+		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-excelant -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-excelant</artifactId>
+			<version>3.11</version>
+		</dependency>
+
+		<!-- poi-ooxml-3.11-20141221.jar -->
+		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>3.11</version>
+		</dependency>
+
+		<!-- poi-ooxml-schemas-3.11-20141221.jar -->
+		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml-schemas</artifactId>
+			<version>3.11</version>
+		</dependency>
+
+		<!-- poi-scratchpad-3.11-20141221.jar -->
+		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-scratchpad</artifactId>
+			<version>3.11</version>
+		</dependency>
+		<!-- freemarker.jar -->
+		<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
+		<dependency>
+			<groupId>org.freemarker</groupId>
+			<artifactId>freemarker</artifactId>
+			<version>2.3.21</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.5.2</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+		<dependency>
+			<groupId>com.iqtogether.thirdparty</groupId>
+			<artifactId>jacob</artifactId>
+			<version>1.18</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+			<version>1.9.2</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+		<dependency>
+			<groupId>org.projectreactor</groupId>
+			<artifactId>reactor-core</artifactId>
+			<version>1.1.6.RELEASE</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.zxing</groupId>
+			<artifactId>javase</artifactId>
+			<version>2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.zxing</groupId>
+			<artifactId>core</artifactId>
+			<version>2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.iqtogether.thirdparty</groupId>
+			<artifactId>ua-parser</artifactId>
+			<version>1.3.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+			<version>3.3.2</version>
+		</dependency>
+		<!--<dependency>-->
+		<!--<groupId>com.iqtogether.thirdparty</groupId>-->
+		<!--<artifactId>jpedal0</artifactId>-->
+		<!--<version>1.0</version>-->
+		<!--</dependency>-->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-configuration-processor</artifactId>
+			<optional>true</optional>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.9.2</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.9.2</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.session</groupId>
+			<artifactId>spring-session</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+
+		<!--<dependency>-->
+		<!--<groupId>com.iqtogether.thirdparty</groupId>-->
+		<!--<artifactId>license4j-runtime-library</artifactId>-->
+		<!--<version>4.7.0</version>-->
+		<!--</dependency>-->
+		<!-- https://mvnrepository.com/artifact/com.license4j/license4j-runtime-library -->
+		<dependency>
+			<groupId>com.license4j</groupId>
+			<artifactId>license4j-runtime-library</artifactId>
+			<version>4.7.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-amqp</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.hankcs</groupId>
+			<artifactId>hanlp</artifactId>
+			<version>portable-1.6.4</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-entitymanager</artifactId>
+			<version>4.3.2.Final</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+
+		<!--query dsl-->
+		<dependency>
+			<groupId>com.querydsl</groupId>
+			<artifactId>querydsl-jpa</artifactId>
+			<version>4.2.1</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+
+		<dependency>
+			<groupId>com.querydsl</groupId>
+			<artifactId>querydsl-apt</artifactId>
+			<version>4.2.1</version><!--$NO-MVN-MAN-VER$-->
+			<scope>provided</scope>
+		</dependency>
+		<!--query dsl end-->
+
+		<!--JPA start-->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+		<!--JPA end-->
+
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+			<!--<plugin>-->
+			<!--<groupId>org.springframework.boot</groupId>-->
+			<!--<artifactId>spring-boot-maven-plugin</artifactId>-->
+			<!--<configuration>  -->
+			<!--<verbose>true</verbose>  -->
+			<!--<fork>true</fork>  -->
+			<!--<executable>${JAVA8_HOME}/bin/javac</executable>-->
+			<!--</configuration>-->
+			<!--</plugin>-->
+
+			<!--璇ユ彃浠跺彲浠ョ敓鎴恞uerysdl闇�瑕佺殑鏌ヨ瀵硅薄锛屾墽琛宮vn compile鍗冲彲-->
+			<plugin>
+				<groupId>com.mysema.maven</groupId>
+				<artifactId>apt-maven-plugin</artifactId>
+				<version>1.1.3</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>process</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>target/generated-sources/java</outputDirectory>
+							<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git "a/scripts/\344\277\256\346\224\271\344\270\252\344\272\272\350\257\276\344\273\266\350\247\206\345\233\276_20181213_ddl.sql" "b/scripts/\344\277\256\346\224\271\344\270\252\344\272\272\350\257\276\344\273\266\350\247\206\345\233\276_20181213_ddl.sql"
new file mode 100644
index 0000000..7b066cd
--- /dev/null
+++ "b/scripts/\344\277\256\346\224\271\344\270\252\344\272\272\350\257\276\344\273\266\350\247\206\345\233\276_20181213_ddl.sql"
@@ -0,0 +1,67 @@
+create or REPLACE view  my_lecture_v as
+SELECT
+	`p`.`PROGRESS_PERCENT` AS `PERCENT`,
+	`p`.`PROGRESS_VALUE` AS `PROGRESS_VALUE`,
+	`s`.`SUBJECT_ID` AS `SUBJECT_ID`,
+	`s`.`NAME` AS `SUBJECT_NAME`,
+	`l`.`SUBJECT_CHAPTER_ID` AS `CHAPTER_ID`,
+	`l`.`NAME` AS `LECTURE_NAME`,
+	`l`.`LECTURE_ID` AS `LECTURE_ID`,
+	`stu`.`NAME` AS `USER_NAME`,
+	`stu`.`USER_ID` AS `USER_ID`,
+	`l`.`LECTURE_TYPE` AS `LECTURE_TYPE`,
+	`l`.`UPDATE_TIME` AS `LECTURE_UPDATE_TIME`,
+  `l`.`STATUS`,
+	`stu`.`CLASS_ID` AS `CLASS_ID`,
+	`l`.`CREATE_TIME` AS `LECTURE_CREATE_TIME`
+FROM
+	(
+		(
+			(
+				`subject` `s`
+				JOIN (
+					`cls_class_re_subject` `c`
+					JOIN `stu_student` `stu` ON (
+						(
+							(`stu`.`STATUS` = 'ACTIVE')
+							AND (`stu`.`DELETE_FLAG` = '0')
+							AND (
+								`c`.`CLASS_ID` = `stu`.`CLASS_ID`
+							)
+						)
+					)
+				)
+			)
+			LEFT JOIN `cls_subject_lecture` `l` ON (
+				(
+					(
+						`s`.`SUBJECT_ID` = `l`.`SUBJECT_ID`
+					)
+					AND (
+						`l`.`CLASS_ID` = `stu`.`CLASS_ID`
+					)
+					AND (`l`.`DELETE_FLAG` = 0)
+				)
+			)
+		)
+		LEFT JOIN `progress` `p` ON (
+			(
+				(
+					`l`.`LECTURE_ID` = `p`.`TARGET_ID`
+				)
+				AND (
+					`p`.`LEARNER_ID` = `stu`.`USER_ID`
+				)
+				AND (`p`.`DELETE_FLAG` = 0)
+			)
+		)
+	)
+WHERE
+	(
+		(`s`.`DELETE_FLAG` = 0)
+		AND (
+			`c`.`SUBJECT_ID` = `s`.`SUBJECT_ID`
+		)
+		AND (`c`.`DELETE_FLAG` IS FALSE)
+		AND (`l`.`STATUS` = 'draft')
+	)
\ No newline at end of file
diff --git "a/scripts/\344\277\256\346\224\271\344\270\252\344\272\272\350\257\276\347\250\213\350\247\206\345\233\276_20181128_ddl.sql" "b/scripts/\344\277\256\346\224\271\344\270\252\344\272\272\350\257\276\347\250\213\350\247\206\345\233\276_20181128_ddl.sql"
new file mode 100644
index 0000000..43c9035
--- /dev/null
+++ "b/scripts/\344\277\256\346\224\271\344\270\252\344\272\272\350\257\276\347\250\213\350\247\206\345\233\276_20181128_ddl.sql"
@@ -0,0 +1,68 @@
+create or REPLACE view  my_subject_v as
+SELECT
+	`s`.`COVER_PAGE_URL` AS `COVER_PAGE_URL`,
+	`p`.`PROGRESS_VALUE` AS `PROGRESS_VALUE`,
+	`stu`.`USER_ID` AS `USER_ID`,
+	`stu`.`NAME` AS `USER_NAME`,
+	`s`.`SUBJECT_ID` AS `SUBJECT_ID`,
+	`s`.`STATUS` AS `subject_status`,
+	`s`.`NAME` AS `SUBJECT_NAME`,
+	`s`.`ORIG_SUBJECT_ID` AS `ORIG_SUBJECT_ID`,
+	`cls`.`CLASS_ID` AS `CLASS_ID`,
+	`cls`.`NAME` AS `CLASS_NAME`,
+	`s`.`SCHOOL_YEAR` AS `SCHOOL_YEAR`,
+	`s`.`TERM` AS `TERM`,
+	`s`.`LECTURE_COUNT` AS `LECTURE_COUNT`,
+	`p`.`PROGRESS_PERCENT` AS `PERCENT`,
+	`s`.`TEACHER_ID` AS `TEACHER_ID`
+FROM
+	(
+		(
+			(
+				(
+					`cls_class` `cls`
+					JOIN `cls_class_re_subject` `re` ON (
+						(
+							(
+								`cls`.`CLASS_ID` = `re`.`CLASS_ID`
+							)
+							AND (`re`.`DELETE_FLAG` = '0')
+						)
+					)
+				)
+				JOIN `stu_student` `stu` ON (
+					(
+						(
+							`cls`.`CLASS_ID` = `stu`.`CLASS_ID`
+						)
+						AND (`stu`.`STATUS` = 'ACTIVE')
+						AND (`stu`.`DELETE_FLAG` = '0')
+					)
+				)
+			)
+			JOIN `subject` `s` ON (
+				(
+					(`s`.`DELETE_FLAG` = '0')
+					AND (
+						`re`.`SUBJECT_ID` = `s`.`SUBJECT_ID`
+					)
+				)
+			)
+		)
+		LEFT JOIN `progress` `p` ON (
+			(
+				(
+					`s`.`SUBJECT_ID` = `p`.`TARGET_ID`
+				)
+				AND (
+					`stu`.`USER_ID` = `p`.`LEARNER_ID`
+				)
+				AND (`p`.`TYPE` = 'subject')
+				AND (`s`.`DELETE_FLAG` = 0)
+			)
+		)
+	)
+WHERE
+	(`cls`.`DELETE_FLAG` = '0')
+ORDER BY
+	`s`.`CREATE_TIME` DESC
\ No newline at end of file
diff --git "a/scripts/\345\255\246\346\240\241APP\346\234\215\345\212\241\345\231\250\345\234\260\345\235\200_20181122_ddl.sql" "b/scripts/\345\255\246\346\240\241APP\346\234\215\345\212\241\345\231\250\345\234\260\345\235\200_20181122_ddl.sql"
new file mode 100644
index 0000000..81ea011
--- /dev/null
+++ "b/scripts/\345\255\246\346\240\241APP\346\234\215\345\212\241\345\231\250\345\234\260\345\235\200_20181122_ddl.sql"
@@ -0,0 +1 @@
+alter table organization add COLUMN SERVER_URL varchar(255) DEFAULT NULL;
\ No newline at end of file
diff --git "a/scripts/\350\257\276\347\250\213\350\241\250\350\204\232\346\234\254_20181122_ddl.sql" "b/scripts/\350\257\276\347\250\213\350\241\250\350\204\232\346\234\254_20181122_ddl.sql"
new file mode 100644
index 0000000..1e44844
--- /dev/null
+++ "b/scripts/\350\257\276\347\250\213\350\241\250\350\204\232\346\234\254_20181122_ddl.sql"
@@ -0,0 +1,98 @@
+锘縟rop table if exists course_schedule;
+
+/*==============================================================*/
+/* Table: course_schedule                                       */
+/*==============================================================*/
+CREATE TABLE `course_schedule` (
+  `SCHEDULE_ID` varchar(32) NOT NULL COMMENT '璇捐〃ID',
+  `SUBJECT_ID` varchar(32) DEFAULT NULL COMMENT '璇剧▼ID',
+  `STATUS` smallint(2) DEFAULT NULL COMMENT '璇捐〃鐘舵��',
+  `ORG_ID` varchar(32) DEFAULT NULL,
+  `OPEN_FLAG` smallint(6) NOT NULL DEFAULT '0',
+  `TEACHER_ID` varchar(32) DEFAULT NULL,
+  `TEACHER_NAME` varchar(100) DEFAULT NULL,
+  `CREATE_TIME` timestamp NOT NULL DEFAULT '2014-11-03 00:00:00',
+  `UPDATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `CREATE_ID` varchar(32) DEFAULT NULL,
+  `CREATOR` varchar(100) DEFAULT NULL,
+  `UPDATE_ID` varchar(32) DEFAULT NULL,
+  `UPDATOR` varchar(100) DEFAULT NULL,
+  `DELETE_FLAG` smallint(6) NOT NULL DEFAULT '0',
+  `TYPE` smallint(6) DEFAULT NULL COMMENT '0锛氬崟娆★紝1锛氭瘡鍛�',
+  `BEGIN_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '寮�濮嬫椂闂�',
+  `END_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '缁撴潫鏃堕棿',
+  `ROOM_ID` varchar(32) DEFAULT NULL COMMENT '涓婅鏁欏ID',
+  `MARK` varchar(4000) DEFAULT NULL COMMENT '澶囨敞',
+  `MON_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄤ竴鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  `TUE_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄤ簩鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  `WED_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄤ笁鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  `THU_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄥ洓鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  `FRI_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄤ簲鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  `SAT_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄥ叚鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  `SUM_TIME` varchar(100) DEFAULT NULL COMMENT '鍛ㄦ棩鏃堕棿(鏍煎紡锛欻H:mm:ss)',
+  PRIMARY KEY (`SCHEDULE_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=gbk;
+
+
+drop table if exists course_schedule_detail;
+
+/*==============================================================*/
+/* Table: course_schedule_detail                                */
+/*==============================================================*/
+CREATE TABLE `course_schedule_detail` (
+  `DETAIL_ID` varchar(32) NOT NULL COMMENT '鏄庣粏ID',
+  `SCHEDULE_ID` varchar(32) DEFAULT NULL COMMENT '璇捐〃ID',
+  `BEGIN_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '寮�濮嬫椂闂�',
+  `END_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '缁撴潫鏃堕棿',
+  `CREATE_TIME` timestamp NOT NULL DEFAULT '2014-11-03 00:00:00',
+  `UPDATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `CREATE_ID` varchar(32) DEFAULT NULL,
+  `CREATOR` varchar(100) DEFAULT NULL,
+  `UPDATE_ID` varchar(32) DEFAULT NULL,
+  `UPDATOR` varchar(100) DEFAULT NULL,
+  `DELETE_FLAG` smallint(6) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`DETAIL_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=gbk;
+
+drop table if exists course_schedule_re_cls;
+
+/*==============================================================*/
+/* Table: course_schedule_re_cls                                */
+/*==============================================================*/
+CREATE TABLE `course_schedule_re_cls` (
+  `RE_ID` varchar(32) NOT NULL COMMENT '鍏宠仈ID',
+  `SCHEDULE_ID` varchar(32) DEFAULT NULL COMMENT '璇捐〃ID',
+  `CLASS_ID` varchar(32) DEFAULT NULL COMMENT '鐝骇ID',
+  `CREATE_TIME` timestamp NOT NULL DEFAULT '2014-11-03 00:00:00',
+  `UPDATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `CREATE_ID` varchar(32) DEFAULT NULL,
+  `CREATOR` varchar(100) DEFAULT NULL,
+  `UPDATE_ID` varchar(32) DEFAULT NULL,
+  `UPDATOR` varchar(100) DEFAULT NULL,
+  `DELETE_FLAG` smallint(6) NOT NULL DEFAULT '0',
+  PRIMARY KEY (`RE_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=gbk;
+
+
+drop table if exists CLASS_ROOM;
+
+/*==============================================================*/
+/* Table: CLASS_ROOM                                            */
+/*==============================================================*/
+CREATE TABLE `class_room` (
+  `ROOM_ID` varchar(32) NOT NULL COMMENT '鏁欏ID',
+  `NAME` varchar(500) DEFAULT NULL COMMENT '鏁欏鍚嶇О',
+  `ADDRESS` varchar(1000) DEFAULT NULL COMMENT '璇︾粏鍦板潃',
+  `ORG_ID` varchar(32) DEFAULT NULL,
+  `CREATE_TIME` timestamp NOT NULL DEFAULT '2014-11-03 00:00:00',
+  `UPDATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `CREATE_ID` varchar(32) DEFAULT NULL,
+  `CREATOR` varchar(100) DEFAULT NULL,
+  `UPDATE_ID` varchar(32) DEFAULT NULL,
+  `UPDATOR` varchar(100) DEFAULT NULL,
+  `DELETE_FLAG` smallint(6) NOT NULL DEFAULT '0',
+  `STATUS` smallint(6) DEFAULT NULL,
+  PRIMARY KEY (`ROOM_ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=gbk;
+
+
diff --git a/src/main/java/com/qxueyou/scc/SccApplication.java b/src/main/java/com/qxueyou/scc/SccApplication.java
new file mode 100644
index 0000000..62037df
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/SccApplication.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc;
+
+import javax.persistence.EntityManagerFactory;
+
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
+import org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration;
+import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ImportResource;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
+
+
+@SpringBootApplication
+@ServletComponentScan
+@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3*60*60)
+@ImportResource("classpath:Transaction.xml")
+@EnableScheduling
+@EnableCaching
+@EnableAutoConfiguration(exclude = {
+		JndiConnectionFactoryAutoConfiguration.class,
+		DataSourceAutoConfiguration.class,
+        HibernateJpaAutoConfiguration.class,
+        JpaRepositoriesAutoConfiguration.class,
+        DataSourceTransactionManagerAutoConfiguration.class})
+public class SccApplication {
+	public static void main(String[] args) {
+		SpringApplication.run(SccApplication.class, args);
+	}
+
+	@Autowired
+	private EntityManagerFactory entityManagerFactory;
+
+	@Bean(name="sessionFactory")
+	public SessionFactory getSessionFactory() {
+	    return entityManagerFactory.unwrap(SessionFactory.class);
+	}
+
+//	@Bean
+//	public RedisTemplate redisTemplate(){
+//		return new RedisTemplate();
+//	}
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/dao/ClassDAO.java b/src/main/java/com/qxueyou/scc/admin/classes/dao/ClassDAO.java
new file mode 100644
index 0000000..164a6d6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/dao/ClassDAO.java
@@ -0,0 +1,56 @@
+package com.qxueyou.scc.admin.classes.dao;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Repository
+public class ClassDAO extends BaseDAO {
+
+    public int addStudent(String classId, int count) {
+        ClsClass clsClass = read(ClsClass.class, classId);
+
+        int studentCount = clsClass.getStudentCount();
+
+        if (studentCount == 0 && count == -1) {
+            return 0;
+        }
+        String hql = "update ClsClass cls set studentCount = studentCount+? where classId=?";
+
+        Result r = bulkUpdate(hql, new Object[]{count, classId});
+
+        return r.getDataT("doCount");
+    }
+
+    /**
+     * 获取这个通知的总人数
+     */
+    public int getStudentCount(List<String> classIds) {
+
+        List<ClsClass> classLst = findByComplexHql("from ClsClass where deleteFlag is false and classId in(:ids) ",
+                CollectionUtils.newObjectMap("ids", classIds), ClsClass.class);
+        int studentCount = 0;
+        for (ClsClass clsClass : classLst) {
+            studentCount += clsClass.getStudentCount();
+        }
+        return studentCount;
+
+    }
+
+    /**
+     * 获取通知的班级名称
+     */
+    public List<String> getClassNameByclsId(List<String> classIds) {
+        List<ClsClass> clsLst = findByComplexHql("from ClsClass where deleteFlag is false and classId in(:ids)", CollectionUtils.newObjectMap("ids", classIds), ClsClass.class);
+        List<String> nameLst = new ArrayList<String>(clsLst.size());
+        for (ClsClass clsClass : clsLst) {
+            nameLst.add(clsClass.getName());
+        }
+        return nameLst;
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/dao/ClassRepository.java b/src/main/java/com/qxueyou/scc/admin/classes/dao/ClassRepository.java
new file mode 100644
index 0000000..f18fd19
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/dao/ClassRepository.java
@@ -0,0 +1,17 @@
+package com.qxueyou.scc.admin.classes.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.service.IBaseJpaRepository;
+
+/**
+ * 评估
+ * @author zhiyong
+ *
+ */
+@Repository
+public interface ClassRepository extends IBaseJpaRepository<ClsClass>{
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/model/ClsClass.java b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsClass.java
new file mode 100644
index 0000000..07283c3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsClass.java
@@ -0,0 +1,965 @@
+package com.qxueyou.scc.admin.classes.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+/**
+ * The persistent class for the org_class database table.
+ * 
+ */
+@Entity
+@Table(name = "cls_class")
+public class ClsClass implements Serializable, ITrace {
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = 5971007065116777117L;
+	
+	/** 面授 */
+	public static final String CLASS_FACE = "FACE_TO_FACE";
+	/** 网络 */
+	public static final String CLASS_NETWORK = "NETWORK";
+
+	/** 有直播 */
+	public static final int HAVE_LIVE = 1;
+	
+	/** 无直播 */
+	public static final int NOT_HAVE_LIVE = 0;
+
+	/** 有视频 */
+	public static final int HAVE_VIDEO = 1;
+	/** 无视频 */
+	public static final int NOT_HAVE_VIDEO = 0;
+
+	/** 有讲义 */
+	public static final int HAVE_HANDOUT = 1;
+	/** 无讲义 */
+	public static final int NOT_HAVE_HANDOUT = 0;
+
+	/** 有推荐奖励 */
+	public static final int HAVE_AWARD = 1;
+	/** 无推荐奖励 */
+	public static final int NOT_HAVE_AWARD = 0;
+
+	/** 消息处理业务类型:发送消息 */
+	public static final String MSG_ACTION_TYPE_SEND = "send_sms";
+	/** 消息处理业务类型:新建班级 */
+	public static final String MSG_ACTION_TYPE_ADD = "add_Class";
+	/** 消息处理业务类型:复制班级 */
+	public static final String MSG_ACTION_TYPE_COPY = "copy_Class";
+
+	/** 班级进度:报名 */
+	public static final String CLASS_PROGRESS_START = "报名";
+	/** 班级进度:学习 */
+	public static final String CLASS_PROGRESS_STUDY = "学习";
+	/** 班级进度:结束 */
+	public static final String CLASS_PROGRESS_END = "结束";
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CLASS_ID", unique = true, nullable = false, length = 32)
+	private String classId;
+
+	@Column(name = "CLASS_CHARGER", length = 50)
+	private String classCharger;
+
+	@Column(name = "CLASS_CHARGER_ID", length = 32)
+	private String classChargerId;
+
+	@Column(name = "CODE", length = 50)
+	private String code;
+
+	@Column(name = "COLLEGE_COURSE_ID", length = 32)
+	private String collegeCourseId;
+
+	@Column(name = "COLLEGE_COURSE_NAME", length = 255)
+	private String collegeCourseName;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name = "NAME", length = 255)
+	private String name;
+
+	@Column(name = "FULL_TEXT", length = 4096)
+	private String fullText;
+
+	@Column(name = "PROGRESS", length = 255)
+	private String progress;
+
+	@Column(name = "ADDRESS", length = 255)
+	private String address;
+
+	@Column(name = "ADDRESS_ID", length = 255)
+	private String addressId;
+
+	@Column(name = "ARRANGEMENT", length = 255)
+	private String arrangement;
+
+	/** 班级优势 */
+	@Column(name = "ADVANTAGE", length = 255)
+	private String advantage;
+
+	@Column(name = "PRICE", precision = 10, scale = 2)
+	private BigDecimal price;
+
+	@Column(name = "START_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+
+	@Column(name = "END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/** 当前已报名学生人数 */
+	@Column(name = "STUDENT_COUNT")
+	private int studentCount;
+
+	@Column(name = "RECOMMEND", nullable = false)
+	private boolean recommend;
+
+	@Column(name = "IMG_PATH", length = 255)
+	private String imgPath;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 是否推广 false:不推广 true:推广 */
+	@Column(name = "EXTENDED")
+	private boolean extended;
+
+	@Column(name = "CLASS_TYPES", length = 100)
+	private String classTypes;
+
+	@Column(name = "DISCOUNT", precision = 10, scale = 2)
+	private BigDecimal discount;
+
+	@Column(name = "DISPRICE", precision = 10, scale = 2)
+	private BigDecimal disprice;
+
+	@Column(name = "STUDY_TIME", precision = 10, scale = 2)
+	private BigDecimal studyTime;
+
+	@Column(name = "SCORE", precision = 10, scale = 2)
+	private BigDecimal score;
+
+	/** 学生总数 计划招生人数,用于机构 指定 */
+	@Column(name = "STU_ALL_COUNT")
+	private BigInteger stuAllCount;
+
+	@Column(name = "COMMENT_COUNT")
+	private BigInteger commentCount;
+
+	@Column(name = "POINTER", length = 255)
+	private String pointer;
+
+	/*** 点击次数 **/
+	@Column(name = "CLICK_NUM", precision = 11, scale = 0)
+	private BigDecimal clickNum;
+
+	/*** 省份 **/
+	@Column(name = "PROVINCE", length = 255)
+	private String province;
+
+	/*** 城市 **/
+	@Column(name = "CITY", length = 255)
+	private String city;
+
+	/*** 区域 **/
+	@Column(name = "REGION", length = 255)
+	private String region;
+
+	/*** 是否置顶 **/
+	@Column(name = "TOP_FLAG", length = 255)
+	private Boolean topFlag;
+
+	/*** 方式 **/
+	@Column(name = "MODE", length = 255)
+	private String mode;
+
+	/*** 商品ID **/
+	@Column(name = "GOOD_ID", length = 32)
+	private String goodId;
+
+	/*** 产品ID **/
+	@Column(name = "PRODUCT_ID", length = 255)
+	private String productId;
+
+	/*** 机构ID **/
+	@Column(name = "ORG_ID", length = 32)
+	private String orgId;
+
+	/*** 是否有直播 **/
+	@Column(name = "HAVE_LIVE", length = 1)
+	private Integer haveLive;
+
+	/*** 是否有视频 **/
+	@Column(name = "HAVE_VIDEO", length = 1)
+	private Integer haveVideo;
+
+	/*** 是否有讲义 **/
+	@Column(name = "HAVE_HANDOUT", length = 1)
+	private Integer haveHandout;
+
+	/*** 经度 **/
+	@Column(name = "LONGITUDE_X", length = 32)
+	private String logitudeX;
+
+	/*** 纬度 **/
+	@Column(name = "LATITUDE_Y", length = 32)
+	private String latitudeY;
+
+	/*** 付款人数 **/
+	@Column(name = "PAYMENT_NUM", length = 11)
+	private BigInteger paymentNum;
+
+	/*** 是否有推荐奖励 **/
+	@Column(name = "HAVA_AWARD", length = 32)
+	private Integer haveAward;
+
+	@Transient
+	private String content;
+
+	@Column(name = "COURSE_ID", length = 4096)
+	private String courseId;
+
+	@Transient
+	private String courseName;
+
+	@Transient
+	private String orgName;
+
+	@Transient
+	private String orgShortName;
+
+	// 班级引荐费
+	@Transient
+	private BigDecimal referFee;
+
+	/** 激活人数 **/
+	@Transient
+	private Integer registCount;
+
+	// ============================新添加字段=================================
+	/** 是否有学生加班审批 */
+
+	@Column(name = "NEED_JOIN_AUDIT", nullable = false)
+	private Boolean needJoinAudit;
+
+	/** 班级编码 */
+	@Column(name = "CLASS_NUMBER", nullable = false)
+	private String classNumber;
+
+	/** 是否有需要学生退班审批 */
+	@Column(name = "NEED_QUIT_AUDIT", nullable = false)
+	private Boolean needQuitAudit;
+
+	/** 完成练习是否显示答案 */
+	@Column(name = "SHOU_ANALYSIS_AFTER_EXER", nullable = false)
+	private Boolean showAnalysisAfterExer;
+
+	/** 是否允许重复练习 */
+	@Column(name = "CAN_MULTI_EXER", nullable = false)
+	private Boolean canMultiExer;
+
+	/** 是否开通班级论坛 */
+	@Column(name = "NEED_FORUM", nullable = false)
+	private Boolean needForum;
+
+	/** 班级老师 */
+	@Column(name = "TEACHER_ID", length = 32)
+	private String teacherId;
+	
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
+	@JoinTable(name = "CLS_CLASS_RE_SUBJECT", joinColumns = { 
+			@JoinColumn(name = "CLASS_ID") }, 
+			inverseJoinColumns = { @JoinColumn(name = "SUBJECT_ID") })
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@CollectionId(
+		        columns = @Column(name="CLS_RE_SUBJECT_ID"), 
+		        type=@Type(type="string"), 
+		        generator = "hibernate-uuid"
+		    )
+	@Where(clause="DELETE_FLAG=0")
+	private List<Subject> subjects = new ArrayList<>();
+	
+	
+	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "classes")
+	@JsonIgnore
+	private List<MediaVideoLive> videoLives;
+	
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getAddressId() {
+		return addressId;
+	}
+
+	public void setAddressId(String addressId) {
+		this.addressId = addressId;
+	}
+
+	public Integer getRegistCount() {
+		return registCount;
+	}
+
+	public void setRegistCount(Integer registCount) {
+		this.registCount = registCount;
+	}
+
+	public Integer getSignUpCount() {
+		return this.studentCount;
+	}
+
+	public BigDecimal getReferFee() {
+		return referFee;
+	}
+
+	public void setReferFee(BigDecimal referFee) {
+		this.referFee = referFee;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getClassCharger() {
+		return this.classCharger;
+	}
+
+	public void setClassCharger(String classCharger) {
+		this.classCharger = classCharger;
+	}
+
+	public String getClassChargerId() {
+		return this.classChargerId;
+	}
+
+	public void setClassChargerId(String classChargerId) {
+		this.classChargerId = classChargerId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public BigDecimal getPrice() {
+		return this.price;
+	}
+
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	public Date getStartTime() {
+		return this.startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public int getStudentCount() {
+		return this.studentCount;
+	}
+
+	public void setStudentCount(int studentCount) {
+		this.studentCount = studentCount;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getProgress() {
+		return progress;
+	}
+
+	public void setProgress(String progress) {
+		this.progress = progress;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public boolean getRecommend() {
+		return recommend;
+	}
+
+	public void setRecommend(boolean recommend) {
+		this.recommend = recommend;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public boolean getExtended() {
+		return extended;
+	}
+
+	public void setExtended(boolean extended) {
+		this.extended = extended;
+	}
+
+	public String getClassTypes() {
+		return classTypes;
+	}
+
+	public void setClassTypes(String classTypes) {
+		this.classTypes = classTypes;
+	}
+
+	public BigDecimal getDiscount() {
+		return discount;
+	}
+
+	public void setDiscount(BigDecimal discount) {
+		this.discount = discount;
+	}
+
+	public BigDecimal getDisprice() {
+		return disprice;
+	}
+
+	public void setDisprice(BigDecimal disprice) {
+		this.disprice = disprice;
+	}
+
+	public BigDecimal getStudyTime() {
+		return studyTime;
+	}
+
+	public void setStudyTime(BigDecimal studyTime) {
+		this.studyTime = studyTime;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public BigInteger getStuAllCount() {
+		return stuAllCount;
+	}
+
+	public void setStuAllCount(BigInteger stuAllCount) {
+		this.stuAllCount = stuAllCount;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public String getPointer() {
+		return pointer;
+	}
+
+	public void setPointer(String pointer) {
+		this.pointer = pointer;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getCollegeCourseName() {
+		return collegeCourseName;
+	}
+
+	public void setCollegeCourseName(String collegeCourseName) {
+		this.collegeCourseName = collegeCourseName;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCourseName() {
+		return courseName;
+	}
+
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getArrangement() {
+		return arrangement;
+	}
+
+	public void setArrangement(String arrangement) {
+		this.arrangement = arrangement;
+	}
+
+	public String getAdvantage() {
+		return advantage;
+	}
+
+	public void setAdvantage(String advantage) {
+		this.advantage = advantage;
+	}
+
+	public BigDecimal getClickNum() {
+		return clickNum;
+	}
+
+	public void setClickNum(BigDecimal clickNum) {
+		this.clickNum = clickNum;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getRegion() {
+		return region;
+	}
+
+	public void setRegion(String region) {
+		this.region = region;
+	}
+
+	public Boolean getTopFlag() {
+		return topFlag;
+	}
+
+	public void setTopFlag(Boolean topFlag) {
+		this.topFlag = topFlag;
+	}
+
+	public String getMode() {
+		return mode;
+	}
+
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+
+	public String getGoodId() {
+		return goodId;
+	}
+
+	public void setGoodId(String goodId) {
+		this.goodId = goodId;
+	}
+
+	public String getProductId() {
+		return productId;
+	}
+
+	public void setProductId(String productId) {
+		this.productId = productId;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	/**
+	 * @return the haveLive
+	 */
+	public Integer getHaveLive() {
+		return haveLive;
+	}
+
+	/**
+	 * @param haveLive
+	 *            the haveLive to set
+	 */
+	public void setHaveLive(Integer haveLive) {
+		this.haveLive = haveLive;
+	}
+
+	/**
+	 * @return the haveVideo
+	 */
+	public Integer getHaveVideo() {
+		return haveVideo;
+	}
+
+	/**
+	 * @param haveVideo
+	 *            the haveVideo to set
+	 */
+	public void setHaveVideo(Integer haveVideo) {
+		this.haveVideo = haveVideo;
+	}
+
+	/**
+	 * @return the haveHandout
+	 */
+	public Integer getHaveHandout() {
+		return haveHandout;
+	}
+
+	/**
+	 * @param haveHandout
+	 *            the haveHandout to set
+	 */
+	public void setHaveHandout(Integer haveHandout) {
+		this.haveHandout = haveHandout;
+	}
+
+	/**
+	 * @return the logitudeX
+	 */
+	public String getLogitudeX() {
+		return logitudeX;
+	}
+
+	/**
+	 * @param logitudeX
+	 *            the logitudeX to set
+	 */
+	public void setLogitudeX(String logitudeX) {
+		this.logitudeX = logitudeX;
+	}
+
+	/**
+	 * @return the latitudeY
+	 */
+	public String getLatitudeY() {
+		return latitudeY;
+	}
+
+	/**
+	 * @param latitudeY
+	 *            the latitudeY to set
+	 */
+	public void setLatitudeY(String latitudeY) {
+		this.latitudeY = latitudeY;
+	}
+
+	/**
+	 * @return the paymentNum
+	 */
+	public BigInteger getPaymentNum() {
+		return paymentNum;
+	}
+
+	/**
+	 * @param paymentNum
+	 *            the paymentNum to set
+	 */
+	public void setPaymentNum(BigInteger paymentNum) {
+		this.paymentNum = paymentNum;
+	}
+
+	/**
+	 * @return the haveAward
+	 */
+	public Integer getHaveAward() {
+		return haveAward;
+	}
+
+	/**
+	 * @param haveAward
+	 *            the haveAward to set
+	 */
+	public void setHaveAward(int haveAward) {
+		this.haveAward = haveAward;
+	}
+
+	public String getOrgShortName() {
+		return orgShortName;
+	}
+
+	public void setOrgShortName(String orgShortName) {
+		this.orgShortName = orgShortName;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((classId == null) ? 0 : classId.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+
+		ClsClass other = (ClsClass) obj;
+		if (classId == null) {
+			if (other.classId != null) {
+				return false;
+			}
+		} else if (!classId.equals(other.classId)) {
+			return false;
+		}
+		return true;
+	}
+
+	public String getFullText() {
+		return fullText;
+	}
+
+	public void setFullText(String fullText) {
+		this.fullText = fullText;
+	}
+
+	public String getClassNumber() {
+		return classNumber;
+	}
+
+	public void setClassNumber(String classNumber) {
+		this.classNumber = classNumber;
+	}
+
+	public void setHaveAward(Integer haveAward) {
+		this.haveAward = haveAward;
+	}
+
+	public Boolean getNeedJoinAudit() {
+		return needJoinAudit;
+	}
+
+	public void setNeedJoinAudit(Boolean needJoinAudit) {
+		this.needJoinAudit = needJoinAudit;
+	}
+
+	public Boolean getNeedQuitAudit() {
+		return needQuitAudit;
+	}
+
+	public void setNeedQuitAudit(Boolean needQuitAudit) {
+		this.needQuitAudit = needQuitAudit;
+	}
+
+	public Boolean getShowAnalysisAfterExer() {
+		return showAnalysisAfterExer;
+	}
+
+	public void setShowAnalysisAfterExer(Boolean showAnalysisAfterExer) {
+		this.showAnalysisAfterExer = showAnalysisAfterExer;
+	}
+
+	public Boolean getCanMultiExer() {
+		return canMultiExer;
+	}
+
+	public void setCanMultiExer(Boolean canMultiExer) {
+		this.canMultiExer = canMultiExer;
+	}
+
+	public Boolean getNeedForum() {
+		return needForum;
+	}
+
+	public void setNeedForum(Boolean needForum) {
+		this.needForum = needForum;
+	}
+
+	public List<Subject> getSubjects() {
+		return subjects;
+	}
+
+	public List<MediaVideoLive> getVideoLives() {
+		return videoLives;
+	}
+
+	public void setVideoLives(List<MediaVideoLive> videoLives) {
+		this.videoLives = videoLives;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/model/ClsClassReSubject.java b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsClassReSubject.java
new file mode 100644
index 0000000..065e070
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsClassReSubject.java
@@ -0,0 +1,165 @@
+package com.qxueyou.scc.admin.classes.model;
+// Generated 2018-3-18 10:42:29 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * SchClassReSubject generated by hbm2java
+ */
+@Entity
+@Table(name = "cls_class_re_subject")
+public class ClsClassReSubject implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = -1141272377219425657L;
+	private String clsReSubjectId;
+	private String classId;
+	private String subjectId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+
+	public ClsClassReSubject() {
+	}
+
+	public ClsClassReSubject(String shcClassReSubjectId, String classId, String schClassSubjectId, Date createTimne,
+			String creator, String createId, boolean deleteFlag) {
+		this.clsReSubjectId = shcClassReSubjectId;
+		this.classId = classId;
+		this.subjectId = schClassSubjectId;
+		this.createTime = createTimne;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ClsClassReSubject(String shcClassReSubjectId, String classId, String schClassSubjectId, Date createTimne,
+			Date updateTime, String creator, String createId, String updator, String updateId, boolean deleteFlag) {
+		this.clsReSubjectId = shcClassReSubjectId;
+		this.classId = classId;
+		this.subjectId = schClassSubjectId;
+		this.createTime = createTimne;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CLS_RE_SUBJECT_ID", unique = true, nullable = false, length = 32)
+	public String getClsReSubjectId() {
+		return this.clsReSubjectId;
+	}
+
+	public void setClsReSubjectId(String clsReSubjectId) {
+		this.clsReSubjectId = clsReSubjectId;
+	}
+
+	@Column(name = "CLASS_ID", nullable = false, length = 32)
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "SUBJECT_ID", nullable = false, length = 32)
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTimne) {
+		this.createTime = createTimne;
+	}
+
+	@Column(name = "UPDATE_TIME", length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectChapter.java b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectChapter.java
new file mode 100644
index 0000000..3412abd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectChapter.java
@@ -0,0 +1,243 @@
+package com.qxueyou.scc.admin.classes.model;
+// Generated 2018-3-11 16:20:04 by Hibernate Tools 5.2.8.Final
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ClsSubjectChapter generated by hbm2java
+ */
+@Entity
+@Table(name = "cls_subject_chapter")
+public class ClsSubjectChapter implements java.io.Serializable, ITrace {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6073387027581019030L;
+	private String chapterId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private String subjectId;
+	private String classId;
+	private String name;
+	private String code;
+	private String parentChapterId;
+	private Integer orderNum;
+	private String tenantId;
+	private boolean deleteFlag;
+	
+	private List<Map<String,Object>> lectures = new ArrayList<Map<String,Object>>();
+
+	public static final String ROOT_CHAPTER_ID = "0";
+
+	public ClsSubjectChapter() {
+	}
+
+	public ClsSubjectChapter(String chapterId, Date createTime, Date updateTime, String creator, String createId,
+			boolean deleteFlag) {
+		this.chapterId = chapterId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ClsSubjectChapter(String chapterId, Date createTime, Date updateTime, String creator, String createId,
+			String updator, String updateId, boolean deleteFlag, String subjectId, String classId, String name,
+			String code, String parentChapterId, Integer orderNum, String tenantId) {
+		this.chapterId = chapterId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.subjectId = subjectId;
+		this.classId = classId;
+		this.name = name;
+		this.code = code;
+		this.parentChapterId = parentChapterId;
+		this.orderNum = orderNum;
+		this.tenantId = tenantId;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CHAPTER_ID", unique = true, nullable = false, length = 32)
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "SUBJECT_ID", length = 32)
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "CLASS_ID", length = 32)
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "NAME", length = 150)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "CODE", length = 64)
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	@Column(name = "PARENT_CHAPTER_ID", length = 32)
+	public String getParentChapterId() {
+		return this.parentChapterId;
+	}
+
+	public void setParentChapterId(String parentChapterId) {
+		this.parentChapterId = parentChapterId;
+	}
+
+	@Column(name = "ORDER_NUM")
+	public Integer getOrderNum() {
+		return this.orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+
+	@Transient
+	public List<Map<String, Object>> getLectures() {
+		return lectures;
+	}
+
+	public void setLectures(List<Map<String, Object>> lectures) {
+		this.lectures = lectures;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectLecture.java b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectLecture.java
new file mode 100644
index 0000000..b688367
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/model/ClsSubjectLecture.java
@@ -0,0 +1,259 @@
+package com.qxueyou.scc.admin.classes.model;
+// Generated 2018-3-11 16:20:04 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.res.model.Res;
+
+/**
+ * ClsSubjectLecture generated by hbm2java
+ */
+@Entity
+@Table(name = "cls_subject_lecture")
+public class ClsSubjectLecture implements java.io.Serializable, ITrace {
+	public final static String STATUS_DRAFT = "draft";
+
+	public final static String STATUS_ISSUED = "issued";
+
+	public final static String STATUS_OFFLINE = "offline";
+
+	public final static String STATUS_CONVER = "conver";
+
+	public final static String TYPE_VIDEO = Res.FILE_TYPE_VIDEO;
+
+	public final static String TYPE_AUDIO = Res.FILE_TYPE_AUDIO;
+
+	public final static String TYPE_DOC = Res.FILE_TYPE_DOC;
+
+	public final static String TYPE_EXERCISE = Res.FILE_TYPE_EXERCISE;
+
+	public final static String TYPE_ARTICLE = Res.FILE_TYPE_ARTICLE;
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 9199546821229948903L;
+	private String lectureId;
+	private String name;
+	private String resItemId;
+	private String lectureType;
+	private String tenantId;
+	private String classId;
+	private String chapterId;
+	private String subjectId;
+	private String status;
+	private Date updateTime;
+	private Date createTime;
+	private boolean deleteFlag;
+	private String remark;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+
+	public ClsSubjectLecture() {
+	}
+
+	public ClsSubjectLecture(String lectureId, Date updateTime, Date createTime, boolean deleteFlag) {
+		this.lectureId = lectureId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ClsSubjectLecture(String lectureId, String name, String resItemId, String lectureType, String tenantId,
+			String classId, String subjectChapterId, String subjectId, String status, Date updateTime, Date createTime,
+			boolean deleteFlag, String remark, String createId, String creator, String updator, String updateId) {
+		this.lectureId = lectureId;
+		this.name = name;
+		this.resItemId = resItemId;
+		this.lectureType = lectureType;
+		this.tenantId = tenantId;
+		this.classId = classId;
+		this.chapterId = subjectChapterId;
+		this.subjectId = subjectId;
+		this.status = status;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+		this.remark = remark;
+		this.createId = createId;
+		this.creator = creator;
+		this.updator = updator;
+		this.updateId = updateId;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "LECTURE_ID", unique = true, nullable = false, length = 32)
+	public String getLectureId() {
+		return this.lectureId;
+	}
+
+	public void setLectureId(String lectureId) {
+		this.lectureId = lectureId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "RES_ITEM_ID", length = 32)
+	public String getResItemId() {
+		return this.resItemId;
+	}
+
+	public void setResItemId(String resItemId) {
+		this.resItemId = resItemId;
+	}
+
+	@Column(name = "LECTURE_TYPE", length = 16)
+	public String getLectureType() {
+		return this.lectureType;
+	}
+
+	public void setLectureType(String lectureType) {
+		this.lectureType = lectureType;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "CLASS_ID", length = 32)
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "SUBJECT_CHAPTER_ID", length = 32)
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	@Column(name = "SUBJECT_ID", length = 32)
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "REMARK")
+	public String getRemark() {
+		return this.remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	@Column(name = "CREATOR")
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID")
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR")
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID")
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/service/IClassLectureService.java b/src/main/java/com/qxueyou/scc/admin/classes/service/IClassLectureService.java
new file mode 100644
index 0000000..536751c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/service/IClassLectureService.java
@@ -0,0 +1,334 @@
+package com.qxueyou.scc.admin.classes.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.admin.classes.model.ClsSubjectChapter;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
+
+public interface IClassLectureService {
+
+	/**
+	 * 新增章节文件夹
+	 * 
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @param name
+	 *            文件夹名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回ChapterId
+	 */
+	Result addChapter(String parentChapterId, String name);
+
+	/**
+	 * 返回下级章节文件夹列表,如果
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @return 返回章节列表
+	 */
+	List<SubjectProgressTreeV> getChapterTreeVList(String classId, String parentChapterId);
+
+	/**
+	 * 课件列表搜索
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param keyword
+	 *            关键字
+	 * @param pageSize
+	 *            页码
+	 * @param pageNum
+	 *            每页显示数据条数
+	 * @param type
+	 *            类型
+	 * @return
+	 */
+	List<MyLectureV> listLectureV(String learnerId, String chapterId, String keyword, Integer pageSize, Integer pageNum,
+			String type);
+
+	/**
+	 * 修改章节文件夹
+	 * 
+	 * @param chapterId
+	 *            文件夹id
+	 * @param name
+	 *            名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result updateChapter(String chapterId, String name);
+
+	/**
+	 * 删除章节文件夹
+	 * 
+	 * @param chapterIds
+	 *            章节文件夹id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result deleteChapter(String[] chapterIds);
+
+	/**
+	 * 新增课件
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param resId
+	 *            资源id
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回chapterId
+	 */
+	Result addClsLecture(String chapterId, String resId);
+
+	/**
+	 * 修改课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param resId
+	 *            资源id
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result updateLecture(String lectureId, String resId);
+
+	/**
+	 * 删除课件
+	 * 
+	 * @param lectureIds
+	 *            课件id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result deleteLecture(String[] lectureIds);
+
+	/**
+	 * 课件学习进度提交
+	 * 
+	 * @param clsLectureId
+	 * @param from
+	 * @param to
+	 * @return
+	 */
+	Result doStudy(String clsLectureId, Double from, Double to);
+
+	/**
+	 * 复制课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param destChapterId
+	 *            目标章节id
+	 * @param name
+	 *            课件名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result doCopyLecture(String lectureId, String destChapterId, String name);
+
+	/**
+	 * 移动课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param destChapterId
+	 *            目标章节id
+	 * @param name
+	 *            课件名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result doMoveLecture(String lectureId, String destChapterId, String name);
+
+	/**
+	 * 课件列表搜索
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param keyword
+	 *            关键字
+	 * @param pageNo
+	 *            页码
+	 * @param pageNum
+	 *            每页显示数据条数
+	 * @param type
+	 *            类型
+	 * @return
+	 */
+	List<ClsSubjectLecture> listLecture(String chapterId, String keyword, Integer pageNo, Integer pageNum, String type,
+			String classId);
+
+	/**
+	 * 课件列表
+	 * 
+	 * @param classId
+	 *            章节id
+	 * @return
+	 */
+	List<ClsSubjectLecture> listLecture(String classId);
+
+	/**
+	 * 读取课件真实文件访问路径
+	 * 
+	 * @param lectureId
+	 *            课件id数组
+	 * @param attribute
+	 *            课件附加属性
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"type":"",path:""}}
+	 */
+	Result readLectureAccessPath(String lectureId, String attribute);
+
+	/**
+	 * 通过id读取班级的课件对象
+	 */
+	ClsSubjectLecture readClsLecture(String id);
+
+	/**
+	 * 读取课件目录
+	 * 
+	 * @param chapterId
+	 * @return
+	 */
+	ClsSubjectChapter readChapter(String chapterId);
+
+	/**
+	 * 课件列表大小
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param keyword
+	 *            关键字
+	 * @param type
+	 *            类型
+	 * @return
+	 */
+	int listLectureCount(String chapterId, String keyword, String type);
+
+	/**
+	 * 返回下级章节文件夹列表
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @param classId
+	 *            课程id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @return 返回章节列表
+	 */
+	List<ClsSubjectChapter> getListChapter(String classId,String subjectId, String parentChapterId);
+
+	/**
+	 * 返回下级章节文件夹列表,如果
+	 * 
+	 * @param classId
+	 *            班级id
+	 *  @param subjectId
+	 *            课程id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @return 返回章节列表
+	 */
+	List<ClsSubjectChapter> doGetListChapter(String classId,String subjectId, String parentChapterId);
+
+	/**
+	 * 把课程上的课件拷贝到班级课程
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param classId
+	 *            班级id
+	 * @return
+	 */
+	Result doCopyLecturesToClass(String origSubjectId, String subjectId, String classId);
+	
+	
+	/**
+     * 清理所有的班级课件
+     * @param subjectId
+     * @param classId
+     * @return
+     */
+	Result doClearLecturesToClass(String subjectId, String classId);
+	
+	/**
+	 * 根据课程查询课件
+	 * 
+	 * @param subjectId
+	 * @param type
+	 * @param classId
+	 * @return
+	 */
+	List<Map<String, Object>> listLectureBySubject(String subjectId, String type, String classId);
+	
+	/**
+	 * 查询班级内的课件和课程
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	Result listSubjectLecture(String classId, String sort, Pager pager);
+	
+	/**
+	 * 获取课程下的课件
+	 * 
+	 * @param subjectId
+	 * @param type
+	 * @return
+	 */
+	public Map<String,Object> listLectureBySubjectOrderCreateTime(String subjectId, String classId, String sort, Pager pager);
+	
+	/**
+	 * 学员端获取课程下课件
+	 * 
+	 * @param subjectId
+	 * @param type
+	 * @return
+	 */
+	public List<Map<String, Object>> listStuLectureBySubject(String subjectId, String classId);
+	
+	/**
+	 * 学员端获取课程下课件数量
+	 * 
+	 * @param subjectId
+	 * @param type
+	 * @return
+	 */
+    public long stuLectureCountBySubject(String subjectId, String classId);
+    
+    /**
+     * 获取章节下的课件
+     * 
+     * @param chapterLst
+     * @param lectures
+     * @return
+     */
+    public List<ClsSubjectChapter> getChapterLectures(List<ClsSubjectChapter> chapterLst, List<Map<String, Object>> lectures);
+    
+	/**
+	 * 获取文档页码
+	 * 
+	 * @param resItemId
+	 * @return
+	 */
+	public int readDocPageCount(String resItemId);
+	
+	/**
+	 * 公开课课件
+	 * 
+	 * @param subjectId
+	 * @param classId
+	 * @param sort
+	 * @param pager
+	 * @return
+	 */
+    public Map<String,Object> listOpenLectureBySubjectOrderCreateTime(String subjectId, String sort, Pager pager);
+    
+    /**
+     * 课件按目录分类
+     * 
+     * @param classId
+     * @param subjectId
+     * @param type
+     * @return
+     */
+    public Result coursewareChapterList(String classId,String subjectId, String type);
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/service/IClassService.java b/src/main/java/com/qxueyou/scc/admin/classes/service/IClassService.java
new file mode 100644
index 0000000..ddedc65
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/service/IClassService.java
@@ -0,0 +1,148 @@
+package com.qxueyou.scc.admin.classes.service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 班级管理服务层
+ *
+ * @author chenjunliang
+ */
+public interface IClassService {
+
+    /**
+     * 新增班级
+     *
+     * @param course
+     * @return
+     */
+    Result insertClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
+                       String teacherId);
+
+	/**
+	 *
+	 *新增补考分组
+	 * @param classTypes
+	 * @return
+	 */
+	Result insertReClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
+						 String teacherId,String classTypes);
+	/**
+     * 修改班级
+     *
+     * @param course
+     * @return
+     */
+    Result updateClass(String classId, String className, String classNumber, Date startTime, Date endTime,
+                       String subjectId, boolean needJoinAudit, boolean needQuitAudit, boolean showAnalysisAfterExer,
+                       boolean canMultiExer, boolean needForum, String teacherId);
+
+    /**
+     * 获取班级列表
+     *
+     * @return
+     */
+    List<ClsClass> getClassLst(String keyword, String teacherId, Integer pageSize, Integer pageNum, Integer pageType);
+
+    /**
+     * 获取班级列表数量
+     *
+     * @return
+     */
+    int getClassLstCount(String keyword, String teacherId, Integer pageType);
+
+    /**
+     * @return
+     */
+    List<ClsClass> listMyClass();
+
+    /**
+     * 获取班级考试、作业等活动信息
+     *
+     * @return
+     */
+    Map<String, Object> getClassActivityInfo(String classId);
+
+    /**
+     * 获取班级详情
+     *
+     * @return
+     */
+    ClsClass read(String classId);
+
+    /**
+     * 删除班级
+     *
+     * @param classIds
+     * @return
+     */
+    Result deleteClass(String[] classIds);
+
+    /**
+     * 新增学生
+     *
+     * @param count 学生数量
+     * @return
+     */
+    Result addStudent(String classId, int count);
+
+    /**
+     * 获取个人已加入班级的课程及学习情况
+     *
+     * @param classId
+     * @return
+     */
+    List<Map<String, Object>> getSubjectLstByClsId(String classId);
+
+    Result getAllClassLst();
+
+    /**
+     * 老师获取班级列表
+     */
+    List<ClsClass> getClassLstByTeacherId();
+
+    /**
+     * 查询老师或管理员可用的班级ID和名称列表
+     * @param teacherId  根据教师ID过滤
+     * @param subjectId  根据课程ID过滤
+     * @return
+     */
+	List<Map<String, Object>> queryAvailableClassIdAndName(String teacherId,String subjectId);
+
+	/**
+	 * app教师端班级列表
+	 *
+	 * @param keyword
+	 * @param limit
+	 * @param pageNum
+	 * @return
+	 */
+	Result classList(String keyword, Pager pager, int type);
+
+	/**
+	 * 根据班级ID获取班级名字,顺序与传入的id顺序一致
+	 * @param classIds
+	 * @return
+	 */
+	String [] queryClassNamesByIds(String[] classIds);
+
+	/**
+	 * 根据用户ID查询所用户加入的班级
+	 * @param userId
+	 * @return
+	 */
+	List<ClsClass> queryStudentClassesByUserId(String userId);
+
+	/**
+	 * 查询所有班级信息
+	 * @return
+	 */
+	List<Map<String, Object>> queryAllClassIdAndName();
+
+	ClsClass getReClass(String classTypes);
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
new file mode 100644
index 0000000..4f55be4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
@@ -0,0 +1,779 @@
+package com.qxueyou.scc.admin.classes.service.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.querydsl.core.QueryResults;
+import com.querydsl.core.types.Order;
+import com.querydsl.core.types.OrderSpecifier;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectChapter;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.progress.dao.ProgressDAO;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.QProgress;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.service.IProgressService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.base.util.QueryDslOptionBuilder;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResItemDoc;
+import com.qxueyou.scc.teach.res.service.IResService;
+import com.qxueyou.scc.teach.subject.model.QSubjectLecture;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
+import com.qxueyou.scc.teach.subject.model.view.QMyLectureV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+
+@Service
+public class ClassLectureService extends CommonAppService implements IClassLectureService {
+	
+	private final Logger log = LogManager.getLogger(ClassLectureService.class);
+
+    @Autowired
+    IResService resService;
+
+    @Autowired
+    ILectureService lectureService;
+
+    @Autowired
+    IProgressService progressService;
+
+    @Autowired
+    ISubjectService subjectService;
+
+    @Autowired
+    ProgressDAO progressDao;
+    
+	@Autowired
+	IMsgInfoService msgInfoService;
+
+    @Override
+    public Result addChapter(String parentChapterId, String name) {
+
+        ClsSubjectChapter parent = read(ClsSubjectChapter.class, parentChapterId);
+
+        ClsSubjectChapter chapter = new ClsSubjectChapter();
+
+        TraceUtils.setCreateTrace(chapter);
+        chapter.setName(name);
+        chapter.setParentChapterId(parentChapterId);
+        chapter.setSubjectId(parent.getSubjectId());
+        chapter.setClassId(parent.getClassId());
+        save(chapter);
+
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("id", chapter.getChapterId(), "name", chapter.getName()));
+
+    }
+
+    @Override
+    public List<MyLectureV> listLectureV(String learnerId, String chapterId, String keyword, Integer pageSize,
+                                         Integer pageNum, String type) {
+        StringBuffer hql = new StringBuffer("from MyLectureV where chapterId=? and id.userId=? and status=? order by lectureCreateTime desc");
+        List<Object> args = CollectionUtils.newList(chapterId, learnerId,ClsSubjectLecture.STATUS_DRAFT);
+
+        if (StringUtils.isNotEmpty(type)) {
+            hql.append(" and lectureType=?");
+            args.add(type);
+        }
+
+        List<MyLectureV> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, MyLectureV.class);
+
+        return result;
+    }
+    
+    /**
+     * 课程课件
+     * 
+     */
+    @Override
+    public Map<String,Object> listLectureBySubjectOrderCreateTime(String subjectId, String classId, String sort, Pager pager) {
+    	Subject subject = this.read(Subject.class, subjectId);
+    	if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType()) {//公开课课件
+    		return this.listOpenLectureBySubjectOrderCreateTime(subjectId, sort, pager);
+    	}
+    	
+    	QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+    	
+    	OrderSpecifier<Date> order = "desc".equals(sort)?new OrderSpecifier<Date>(Order.DESC, qMyLectureV.lectureCreateTime):
+			new OrderSpecifier<Date>(Order.ASC, qMyLectureV.lectureCreateTime);
+    	
+    	JPAQuery<MyLectureV> query = this.getQueryFactory().selectFrom(qMyLectureV)
+    		    .where(qMyLectureV.subjectId.eq(subjectId).
+    		    		and(qMyLectureV.classId.eq(classId)).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId())));
+    	
+    	long count = query.fetchCount();
+    	
+    	return CollectionUtils.newObjectMap("count", count, "listData", query.limit(pager.getPageSize()).offset(pager.getOffset())
+    		    .orderBy(order)
+    		    .fetch().stream()
+    		    .map(tuple -> {
+    		    	Map<String,Object> map = new HashMap<String,Object>();
+    		    	map.put("lectureName", tuple.getLectureName());
+    		    	map.put("chapterId", tuple.getChapterId());
+    		    	map.put("lectureType", tuple.getLectureType());
+    		    	map.put("progressPercent", tuple.getPercent());
+    		    	map.put("lectureId", tuple.getId().getLectureId());
+    		    	map.put("createTime", tuple.getLectureCreateTime());
+    		    	return map;
+    		    }).collect(Collectors.toList()));
+    }
+    
+    /**
+	 * 公开课课件
+	 * 
+	 * @param subjectId
+	 * @param sort
+	 * @param pager
+	 * @return
+	 */
+    @Override
+    public Map<String,Object> listOpenLectureBySubjectOrderCreateTime(String subjectId, String sort, Pager pager) {
+    	QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+    	QProgress qProgress = QProgress.progress;
+    	
+    	OrderSpecifier<Date> order = "desc".equals(sort)?new OrderSpecifier<Date>(Order.DESC, qSubjectLecture.createTime):
+			new OrderSpecifier<Date>(Order.ASC, qSubjectLecture.createTime);
+    	
+    	JPAQuery<SubjectLecture> query = this.getQueryFactory().selectFrom(qSubjectLecture).where(qSubjectLecture.subjectId.eq(subjectId).and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT)));
+    	
+    	long count = query.fetchCount();
+    	
+    	return CollectionUtils.newObjectMap("count", count, "listData", query.limit(pager.getPageSize()).offset(pager.getOffset())
+    		    .orderBy(order)
+    		    .fetch().stream()
+    		    .map(tuple -> {
+    		    	Map<String,Object> map = new HashMap<String,Object>();
+    		    	map.put("lectureName", tuple.getName());
+    		    	map.put("chapterId", tuple.getChapterId());
+    		    	map.put("lectureType", tuple.getLectureType());
+    		    	map.put("progressPercent", this.getQueryFactory().select(qProgress.progressPercent).from(qProgress).where(
+							qProgress.deleteFlag.isFalse().and(qProgress.targetId.eq(tuple.getLectureId())
+									.and(qProgress.learnerId.eq(ClientUtils.getUserId())))).fetchFirst());
+    		    	map.put("lectureId", tuple.getLectureId());
+    		    	map.put("createTime", tuple.getCreateTime());
+    		    	return map;
+    		    }).collect(Collectors.toList()));
+    }
+
+    @Override
+    public Result updateChapter(String chapterId, String name) {
+
+        ClsSubjectChapter chapter = read(ClsSubjectChapter.class, chapterId);
+        TraceUtils.setUpdateTrace(chapter);
+        chapter.setName(name);
+        save(chapter);
+        return new Result(true, "success", CollectionUtils.newObjectMap("id", chapter.getChapterId(), "name", name));
+    }
+
+    @Override
+    public Result deleteChapter(String[] chapterIds) {
+        for (String chapterId : chapterIds) {
+            deleteChapter(chapterId);
+        }
+        return new Result(true, "success");
+    }
+
+    /**
+     * 删除单个章节
+     *
+     * @param chapterId 章节id
+     * @return
+     */
+    private Result deleteChapter(String chapterId) {
+
+        ClsSubjectChapter chapter = read(ClsSubjectChapter.class, chapterId);
+
+        TraceUtils.setUpdateTrace(chapter);
+        chapter.setDeleteFlag(true);
+        save(chapter);
+        Result result = deleteCourseware4Chapter(chapterId);
+        if (!result.isSuccess()) {
+            return result;
+        }
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result addClsLecture(String chapterId, String resId) {
+        ClsSubjectChapter chapter = read(ClsSubjectChapter.class, chapterId);
+
+        Res res = resService.read(resId);
+        ClsSubjectLecture lecture = new ClsSubjectLecture();
+        TraceUtils.setCreateTrace(lecture);
+        lecture.setChapterId(chapterId);
+        lecture.setLectureType(res.getType());
+        lecture.setName(res.getName());
+        lecture.setRemark(res.getRemark());
+        lecture.setSubjectId(chapter.getSubjectId());
+        lecture.setResItemId(res.getResId());
+        lecture.setClassId(chapter.getClassId());
+        lecture.setStatus(res.getStatus());
+        save(lecture);
+        
+        // 发送消息
+        doPublishMsg(lecture);
+
+        return new Result(true, "success");
+    }
+    
+    //添加课程,发送消息
+    private void doPublishMsg(ClsSubjectLecture lecture){
+    	Subject subject = this.read(Subject.class, lecture.getSubjectId());
+    	
+    	if(!subject.getStatus().equals(Subject.STATUS_ISSUED)){
+    		return ;
+    	}
+    	
+		//查询直播关联的班级
+		String hql = "select userId from StuStudent  where classId =:classId and deleteFlag is false ";
+		
+		List<String> lstUserIds = this.findByComplexHql(hql, CollectionUtils.newObjectMap("classId",lecture.getClassId()), String.class);
+		
+		if(lstUserIds!=null && lstUserIds.size()>0){
+			Map<String,String> attrs = CollectionUtils.newStringMap("lectureId",lecture.getLectureId(),"lectureName",lecture.getName(),"subjectId",subject.getSubjectId(),
+					"lectureType",lecture.getLectureType(),"subjectName",subject.getName());
+				
+			msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]),MsgInfo.TYPE_COURSEWARE,"发布了课件",attrs);
+		}
+	}
+
+    @Override
+    public Result updateLecture(String lectureId, String resId) {
+
+        ClsSubjectLecture lecture = read(ClsSubjectLecture.class, lectureId);
+
+        Res res = resService.read(resId);
+
+        TraceUtils.setUpdateTrace(lecture);
+        lecture.setLectureType(res.getType());
+        lecture.setName(res.getName());
+        lecture.setRemark(res.getRemark());
+        lecture.setResItemId(res.getResId());
+
+        save(lecture);
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result deleteLecture(String[] lectureIds) {
+        for (String lectureId : lectureIds) {
+            deleteLecture(lectureId);
+        }
+
+        return new Result(true, "success");
+    }
+
+    /**
+     * @param lectureId 课件id
+     * @return
+     */
+    private Result deleteLecture(String lectureId) {
+        ClsSubjectLecture lecture = read(ClsSubjectLecture.class, lectureId);
+
+        TraceUtils.setUpdateTrace(lecture);
+        lecture.setDeleteFlag(true);
+        save(lecture);
+        deleteProgress(lectureId);// 删除对应的进度
+        return new Result(true, "success");
+    }
+
+    /**
+     *
+     */
+    private Result deleteProgress(String targetId) {
+        String hql = "update Progress set deleteFlag = true where deleteFlag is  false and targetId = ?";
+        bulkUpdate(hql, new String[]{targetId});
+        return new Result(true);
+    }
+
+    @Override
+    public Result doCopyLecture(String lectureId, String destChapterId, String name) {
+
+        return null;
+    }
+
+    @Override
+    public Result doMoveLecture(String lectureId, String destChapterId, String name) {
+
+        return null;
+    }
+
+    @Override
+    public List<ClsSubjectLecture> listLecture(String chapterId, String keyword, Integer pageSize, Integer pageNum,
+                                               String type, String classId) {
+        StringBuffer hql = new StringBuffer("from ClsSubjectLecture where chapterId = ? and deleteFlag is false");
+
+        List<Object> args = CollectionUtils.newList(chapterId);
+
+        if (StringUtils.isNotEmpty(type)) {
+            hql.append(" and lectureType=? order by createTime desc");
+            args.add(type);
+        } else {
+            hql.append(" order by createTime desc");
+        }
+
+        List<ClsSubjectLecture> result = findList(hql.toString(), new Pager(pageSize, pageNum), args,
+                ClsSubjectLecture.class);
+
+        return result;
+    }
+    
+    @Override
+    public List<Map<String, Object>> listLectureBySubject(String subjectId, String type, String classId) {
+        StringBuffer hql = new StringBuffer("select name as lectureName, "
+        		+ " lectureId as lectureId, "
+        		+ " lectureType as lectureType, "
+        		+ " chapterId as chapterId, "
+        		+ " status as status, "
+        		+ " updateTime as updateTime "
+        		+ " from ClsSubjectLecture where subjectId = :subjectId and classId = :classId and deleteFlag is false and status = :status");
+
+        Map<String, Object> args = CollectionUtils.newObjectMap("subjectId", subjectId, "classId", classId, "status", Res.STATUS_DRAFT);
+
+        if (StringUtils.isNotEmpty(type)) {
+            hql.append(" and lectureType= :lectureType");
+            args.put("lectureType", type);
+        }
+        hql.append(" order by createTime desc");
+
+        return this.findListWithMapByHql(hql.toString(), args);
+    }
+    
+    
+    @Override
+    public List<Map<String, Object>> listStuLectureBySubject(String subjectId, String classId) {
+    	if(StringUtils.isEmpty(subjectId) || StringUtils.isEmpty(classId)) {
+    		return new ArrayList<>();
+    	}
+    	QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+		return this.getQueryFactory().selectFrom(qMyLectureV)
+				.where(qMyLectureV.classId.eq(classId).and(
+						qMyLectureV.subjectId.eq(subjectId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))))
+				.orderBy(qMyLectureV.lectureCreateTime.desc()).fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(6);
+					map.put("lectureName", tuple.getLectureName());
+					map.put("lectureId", tuple.getId().getLectureId());
+					map.put("lectureType", tuple.getLectureType());
+					map.put("chapterId", tuple.getChapterId());
+					map.put("subjectId", tuple.getSubjectId());
+					map.put("progressPercent", tuple.getPercent());
+					map.put("createTime", tuple.getLectureCreateTime());
+					return map;
+				}).collect(Collectors.toList());
+    }
+    
+    /**
+     * 我的公开课课件查询
+     * 
+     * @param subjectId
+     * @return
+     */
+    public List<Map<String, Object>> listStuLectureByOpenSubject(String subjectId) {
+    	QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+    	QProgress qProgress = QProgress.progress;
+		return this.getQueryFactory().selectFrom(qSubjectLecture)
+				.where(qSubjectLecture.subjectId.eq(subjectId).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT)).and(qSubjectLecture.deleteFlag.isFalse()))
+				.orderBy(qSubjectLecture.createTime.desc()).fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(6);
+					map.put("lectureName", tuple.getName());
+					map.put("lectureId", tuple.getLectureId());
+					map.put("lectureType", tuple.getLectureType());
+					map.put("chapterId", tuple.getChapterId());
+					map.put("subjectId", tuple.getSubjectId());
+					map.put("progressPercent",
+							this.getQueryFactory().select(qProgress.progressPercent).from(qProgress).where(
+									qProgress.deleteFlag.isFalse().and(qProgress.targetId.eq(tuple.getLectureId())
+											.and(qProgress.learnerId.eq(ClientUtils.getUserId())))).fetchFirst());
+					map.put("createTime", tuple.getCreateTime());
+					map.put("updateTime", tuple.getUpdateTime());
+					return map;
+				}).collect(Collectors.toList());
+    }
+    
+    /**
+     * 查询数量
+     * 
+     * @param subjectId
+     * @param classId
+     * @return
+     */
+    @Override
+    public long stuLectureCountBySubject(String subjectId, String classId) {
+    	QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+		return this.getQueryFactory().selectFrom(qMyLectureV)
+				.where(qMyLectureV.classId.eq(classId).and(
+						qMyLectureV.subjectId.eq(subjectId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId())))).fetchCount();
+    }
+
+    @Override
+    public Result readLectureAccessPath(String lectureId, String attribute) {
+        ClsSubjectLecture lecture = read(ClsSubjectLecture.class, lectureId);
+		String resItemId = null;
+		if(lecture == null) {
+			resItemId = read(SubjectLecture.class, lectureId).getResItemId();//班级课件
+		}else {
+			resItemId = lecture.getResItemId();
+		}
+        return resService.readAccessPath(resItemId, attribute);
+    }
+
+    @Override
+    public ClsSubjectLecture readClsLecture(String id) {
+
+        return read(ClsSubjectLecture.class, id);
+    }
+
+    @Override
+    public ClsSubjectChapter readChapter(String chapterId) {
+
+        return read(ClsSubjectChapter.class, chapterId);
+    }
+
+    @Override
+    public int listLectureCount(String chapterId, String keyword, String type) {
+        String hql = "from ClsSubjectLecture where deleteFlag is false and chapterId =:chapterId ";
+        Map<String, Object> args = CollectionUtils.newObjectMap("chapterId", chapterId);
+        if (StringUtils.isNotBlank(type)) {
+            hql = hql.concat(" and lectureType =:type");
+            args.put("type", type);
+        }
+        int count = findCountByComplexHql(hql, args);
+        return count;
+    }
+
+    @Override
+    public List<ClsSubjectChapter> getListChapter(String classId, String subjectId, String parentChapterId) {
+
+        StringBuffer hql = new StringBuffer(
+                "from ClsSubjectChapter where classId=? and subjectId=? and deleteFlag is false ");
+
+        List<Object> args = CollectionUtils.newList(classId,subjectId);
+
+        if (StringUtils.isNotEmpty(parentChapterId)) {
+        	hql = hql.append(" and parentChapterId=? ");
+            args.add(parentChapterId);
+        }
+
+        List<ClsSubjectChapter> result = find(hql.toString(), args, ClsSubjectChapter.class);
+
+        return result;
+    }
+    
+    public List<SubjectChapter> getListOpenChapter(String subjectId) {
+
+        StringBuffer hql = new StringBuffer(
+                "from SubjectChapter where subjectId=? and deleteFlag is false ");
+
+        List<Object> args = CollectionUtils.newList(subjectId);
+
+        return find(hql.toString(), args, SubjectChapter.class);
+    }
+
+    @Override
+    public List<ClsSubjectChapter> doGetListChapter(String classId,String subjectId, String parentChapterId) {
+
+        List<ClsSubjectChapter> result = getListChapter(classId,subjectId, StringUtils.isEmpty(parentChapterId)?ClsSubjectChapter.ROOT_CHAPTER_ID:parentChapterId);
+
+        return result;
+    }
+    
+    @Override
+    public Result doClearLecturesToClass( String classId,String subjectId) {
+    	this.bulkUpdate("update ClsSubjectLecture set deleteFlag = true where classId=? and  subjectId = ? ",
+                   new String[]{classId,subjectId});
+    	
+    	this.bulkUpdate("update ClsSubjectChapter set deleteFlag = true where classId=? and  subjectId = ? ",
+                new String[]{classId,subjectId});
+    	
+        return new Result(true);
+    }
+    
+    @Override
+    public Result doCopyLecturesToClass(String origSubjectId, String subjectId, String classId) {
+        Map<String, String> subjectIdMap = CollectionUtils.newStringMap(SubjectChapter.ROOT_CHAPTER_ID,
+                SubjectChapter.ROOT_CHAPTER_ID);
+
+        List<SubjectChapter> chapterLst = lectureService.getAllChapterBySubjectId(origSubjectId);
+        ClsSubjectChapter clsChapter = null;
+
+        for (SubjectChapter subjectChapter : chapterLst) {
+            clsChapter = new ClsSubjectChapter();
+            clsChapter.setClassId(classId);
+            clsChapter.setName(subjectChapter.getName());
+            clsChapter.setOrderNum(subjectChapter.getOrderNum());
+            clsChapter.setParentChapterId(subjectIdMap.get(subjectChapter.getParentChapterId()));
+            clsChapter.setSubjectId(subjectId);
+            TraceUtils.setCreateTrace(clsChapter);
+            clsChapter.setCreateTime(subjectChapter.getCreateTime());
+            save(clsChapter);
+            subjectIdMap.put(subjectChapter.getChapterId(), clsChapter.getChapterId());
+        }
+
+        List<SubjectLecture> lectureLst = lectureService.listLectureBySubjectId(origSubjectId);
+        ClsSubjectLecture clsLecture = null;
+        for (SubjectLecture lecture : lectureLst) {
+            clsLecture = new ClsSubjectLecture();
+            clsLecture.setChapterId(subjectIdMap.get(lecture.getChapterId()));
+            clsLecture.setClassId(classId);
+            clsLecture.setLectureType(lecture.getLectureType());
+            clsLecture.setName(lecture.getName());
+            clsLecture.setRemark(lecture.getRemark());
+            clsLecture.setResItemId(lecture.getResItemId());
+            clsLecture.setSubjectId(subjectId);
+            clsLecture.setDeleteFlag(false);
+            clsLecture.setStatus(lecture.getStatus());
+            TraceUtils.setCreateTrace(clsLecture);
+            save(clsLecture);
+        }
+
+        return new Result(true);
+    }
+
+    @Override
+    public Result doStudy(String clsLectureId, Double from, Double to) {
+        return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, clsLectureId, from.intValue(), to.intValue(),
+                ClientUtils.getUserId());
+    }
+
+    @Override
+    public List<ClsSubjectLecture> listLecture(String subjectId) {
+    	
+        StringBuffer hql = new StringBuffer("from ClsSubjectLecture where subjectId = ? and deleteFlag is false");
+
+        List<Object> args = CollectionUtils.newList(subjectId);
+
+        return find(hql.toString(), args, ClsSubjectLecture.class);
+
+    }
+    
+    @Override
+    public Result listSubjectLecture(String classId, String sort, Pager pager) {
+    	if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id不能为空");
+    	}
+    	QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+    	
+    	OrderSpecifier<Date> order = "desc".equals(sort)?new OrderSpecifier<Date>(Order.DESC, qMyLectureV.lectureCreateTime):
+			new OrderSpecifier<Date>(Order.ASC, qMyLectureV.lectureCreateTime);
+    	
+    	JPAQuery<MyLectureV> query = this.getQueryFactory()
+    			.selectFrom(qMyLectureV)
+    			.where(new QueryDslOptionBuilder()
+    					.and(qMyLectureV.classId::eq, classId).and(qMyLectureV.id.userId::eq,ClientUtils.getUserId())
+    					.build()
+    					);
+    	
+    	long count = query.fetchCount();
+    	
+    	// 获取查询结果集合
+		QueryResults<MyLectureV> results = query.limit(pager.getPageSize()).offset(pager.getOffset()).orderBy(order).fetchResults();
+    	
+		List<Map<String,Object>> resultLst = 
+				results.getResults()
+				.stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(8);
+			    	map.put("lectureName", tuple.getLectureName());
+			    	map.put("lectureId", tuple.getId().getLectureId());
+			    	map.put("lectureType", tuple.getLectureType());
+			    	map.put("chapterId", tuple.getChapterId());
+			    	map.put("subjectName", tuple.getSubjectName());
+			    	map.put("subjectId", tuple.getSubjectId());
+			    	map.put("progressPercent", tuple.getPercent());
+			    	map.put("createTime", tuple.getLectureCreateTime());
+			    	return map;
+			    }).collect(Collectors.toList());
+
+        return new Result(true, "", CollectionUtils.newObjectMap("count", count, "listData", resultLst));
+
+    }
+
+    @Override
+    public List<SubjectProgressTreeV> getChapterTreeVList(String subjectId, String parentChapterId) {
+
+        if (parentChapterId == null) {
+            return progressService.getSubjectChapterTreeVList(subjectId, ClientUtils.getUserId());
+        }
+
+        return progressService.getSubjectChapterTreeVList(parentChapterId, ClientUtils.getUserId());
+    }
+
+    /**
+     * 删除对应的课件
+     *
+     * @param chapterId
+     * @return
+     */
+    private Result deleteCourseware4Chapter(String chapterId) {
+
+        this.bulkUpdate("update ClsSubjectLecture set deleteFlag = true where chapterId = ?",
+                new String[]{chapterId});
+        return new Result(true);
+
+    }
+    
+    
+    /**
+     * 获取章节下的课件
+     * 
+     * @param chapterLst
+     * @param lectures
+     * @return
+     */
+    public List<ClsSubjectChapter> getChapterLectures(List<ClsSubjectChapter> chapterLst, List<Map<String, Object>> lectures){
+    	if (chapterLst != null && chapterLst.size() > 0 && lectures != null) {
+			for (ClsSubjectChapter objClsSubjectChapter : chapterLst) {
+				for (Map<String, Object> objClsSubjectLecture : lectures) {
+					if (objClsSubjectChapter.getChapterId().equals(objClsSubjectLecture.get("chapterId"))) {
+						objClsSubjectChapter.getLectures().add(objClsSubjectLecture);
+					}
+				}
+			}
+			
+			this.getTopChapters(chapterLst);
+			
+			for (int i=chapterLst.size()-1;i>=0;i--) {
+				ClsSubjectChapter objClsSubjectChapter = chapterLst.get(i);
+				if(objClsSubjectChapter.getLectures() == null || objClsSubjectChapter.getLectures().isEmpty()) {
+					chapterLst.remove(i);
+				}
+			}
+		}
+    	
+    	return chapterLst;
+    }
+    
+    /**
+     * 获取章节的第一层数据
+     * 
+     * @param chapterLst
+     * @return
+     */
+    private List<ClsSubjectChapter> getTopChapters(List<ClsSubjectChapter> chapterLst){
+    	int count = 0;
+    	if (chapterLst != null && chapterLst.size() > 0) {
+    		for (int i=chapterLst.size()-1;i>=0;i--) {
+				ClsSubjectChapter objClsSubjectChapter = chapterLst.get(i);
+				for (ClsSubjectChapter objClsSubjectChapter2 : chapterLst) {
+					if(StringUtils.isNotBlank(objClsSubjectChapter.getChapterId()) && !ClsSubjectChapter.ROOT_CHAPTER_ID.equals(objClsSubjectChapter.getParentChapterId())
+							&& objClsSubjectChapter.getChapterId().equals(objClsSubjectChapter2.getParentChapterId())
+							&& objClsSubjectChapter2.getLectures() != null) {
+						if(objClsSubjectChapter.getLectures() == null) {
+							objClsSubjectChapter.setLectures(new ArrayList<Map<String,Object>>());
+						}
+						objClsSubjectChapter.getLectures().addAll(objClsSubjectChapter2.getLectures());
+						count++;
+						objClsSubjectChapter2.setLectures(null);
+						break;
+					}
+				}
+			}
+    		if(count != 0) {
+    			chapterLst = this.getTopChapters(chapterLst);
+    		}
+		}
+    	
+    	return chapterLst;
+    }
+    
+	
+	@Override
+	public int readDocPageCount(String resItemId) {
+		ResItemDoc resItemDoc = read(ResItemDoc.class, resItemId);
+		if (resItemDoc == null || ResItemDoc.STATUS_DRAFT != resItemDoc.getStatus()) {
+			return 0;
+		}
+		SchHandout schHandout = read(SchHandout.class, resItemDoc.getHandoutId());
+
+		if (schHandout == null) {
+			return 0;
+		}
+
+		return schHandout.getPageCount();
+	}
+	
+	 /**
+     * 课件按目录分类
+     * 
+     * @param classId
+     * @param subjectId
+     * @param type
+     * @return
+     */
+    public Result coursewareChapterList(String classId,String subjectId, String type) {
+    	Subject subject = this.read(Subject.class, subjectId);
+    	
+    	if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType() || Subject.TYPE_ORG_SUBJECT == subject.getType()) {//公开课和管理员课程
+    		QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+    		//课件
+    		List<Map<String, Object>> lectures = this.listStuLectureByOpenSubject(subjectId);
+    		
+    		List<SubjectChapter> lstSubjectChapterLst = this.getListOpenChapter(subjectId);
+    		List<ClsSubjectChapter> lstClsSubjectChapter = new ArrayList<>();
+    		if(lstSubjectChapterLst != null && !lstSubjectChapterLst.isEmpty()) {
+    			ClsSubjectChapter objClsSubjectChapter = null;
+    			for(SubjectChapter objSubjectChapter : lstSubjectChapterLst) {
+    				objClsSubjectChapter = new ClsSubjectChapter();
+    				try {
+						BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter);
+					} catch (IllegalAccessException e) {
+						log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e);
+					} catch (InvocationTargetException e) {
+						log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e);
+					}
+    				
+    				lstClsSubjectChapter.add(objClsSubjectChapter);
+    			}
+    		}
+    		//章节
+    		List<ClsSubjectChapter> chapterLst = this.getChapterLectures(lstClsSubjectChapter, lectures);
+    		
+    		long count =  this.getQueryFactory().selectFrom(qSubjectLecture)
+    				.where(qSubjectLecture.subjectId.eq(subjectId).and(qSubjectLecture.deleteFlag.isFalse()).
+    						and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT))).fetchCount();
+
+    		return new Result(true, "success", CollectionUtils.newObjectMap("count",count, "listData", QBeanUtils.listBean2ListMap(chapterLst,
+    				CollectionUtils.newStringMap("name", "name", "chapterId", "chapterId", "lectures", "lectures"))));
+    		
+    	}else{
+    		//课件
+    		List<Map<String, Object>> lectures = this.listStuLectureBySubject(subjectId, classId);
+    		//章节
+    		List<ClsSubjectChapter> chapterLst = this.getChapterLectures(this.getListChapter(classId, subjectId, null), lectures);
+
+    		return new Result(true, "success", CollectionUtils.newObjectMap("count",this.stuLectureCountBySubject(subjectId, classId), "listData", QBeanUtils.listBean2ListMap(chapterLst,
+    				CollectionUtils.newStringMap("name", "name", "chapterId", "chapterId", "lectures", "lectures"))));
+    	}
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
new file mode 100644
index 0000000..2241ed6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
@@ -0,0 +1,429 @@
+package com.qxueyou.scc.admin.classes.service.impl;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import com.querydsl.core.Tuple;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.qxueyou.scc.admin.classes.dao.ClassDAO;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.model.QClsClass;
+import com.qxueyou.scc.admin.classes.model.QClsClassReSubject;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.view.QSubjectProgressTreeV;
+import com.qxueyou.scc.admin.score.service.IScoreService;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.subject.model.QSubject;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+/**
+ * 班级服务类
+ *
+ * @author xiadehu
+ */
+@Service
+public class ClsClassService extends CommonAppService implements IClassService {
+
+    @Autowired
+    ClassDAO clsDao;
+
+    @Autowired
+    IScoreService scoreService;
+
+    @Autowired
+    ICacheService cache;
+
+    @Autowired
+    ITeacherService teacherService;
+
+    /**
+     * 添加班级
+     */
+    @Override
+    public Result insertClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
+                              String teacherId) {
+
+        ClsClass cls = new ClsClass();
+
+        TraceUtils.setCreateTrace(cls);
+
+        cls.setClassNumber(classNumber);
+        cls.setName(className);
+        cls.setStartTime(startTime);
+        cls.setEndTime(endTime);
+        cls.setTeacherId(teacherId);
+        cls.setOrgId(ClientUtils.getOrgId());
+        save(cls);
+        return new Result(true, "success",CollectionUtils.newStringMap("classId",cls.getClassId()));
+    }
+    /**
+     * 添加补考班级班级
+     */
+    @Override
+    public Result insertReClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
+                              String teacherId,String classTypes) {
+
+        ClsClass cls = new ClsClass();
+
+        TraceUtils.setCreateTrace(cls);
+
+        cls.setClassNumber(classNumber);
+        cls.setName(className);
+        cls.setStartTime(startTime);
+        cls.setEndTime(endTime);
+        cls.setTeacherId(teacherId);
+        cls.setOrgId(ClientUtils.getOrgId());
+        cls.setClassTypes(classTypes);
+        save(cls);
+        return new Result(true, "success",CollectionUtils.newStringMap("classId",cls.getClassId()));
+    }
+	@Override
+	public ClsClass getReClass(String classTypes) {
+		String hql = "select c from ClsClass c where c.deleteFlag is false and c.classTypes=? ";
+
+		ClsClass cls = findUnique(hql, CollectionUtils.newList(classTypes),
+				ClsClass.class);
+		return cls;
+	}
+
+    @Override
+    public Result updateClass(String classId, String className, String classNumber, Date startTime, Date endTime,
+                              String subjectId, boolean needJoinAudit, boolean needQuitAudit, boolean showAnalysisAfterExer,
+                              boolean canMultiExer, boolean needForum, String teacherId) {
+
+        ClsClass cls = read(ClsClass.class, classId);
+
+        TraceUtils.setUpdateTrace(cls);
+
+        cls.setClassNumber(classNumber);
+        cls.setName(className);
+        cls.setStartTime(startTime);
+        cls.setEndTime(endTime);
+        cls.setNeedJoinAudit(needJoinAudit);
+        cls.setNeedQuitAudit(needQuitAudit);
+        cls.setShowAnalysisAfterExer(showAnalysisAfterExer);
+        cls.setCanMultiExer(canMultiExer);
+        cls.setNeedForum(needForum);
+        cls.setTeacherId(teacherId);
+        save(cls);
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public ClsClass read(String classId) {
+        return read(ClsClass.class, classId);
+    }
+
+    /**
+     * 获取班级列表
+     */
+    @Override
+    public List<ClsClass> getClassLst(String keyword, String teacherId, Integer pageSize, Integer pageNum, Integer pageType) {
+        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+//        System.out.println(keyword_);
+        StringBuffer hql = new StringBuffer("from ClsClass c where c.deleteFlag is false and c.orgId=? and c.name like ? and c.createId=?");
+
+        if (pageType == 1) {
+            hql.append(" and c.endTime >= sysdate() ");
+        }else if(pageType == 2) {
+            hql.append(" and c.endTime < sysdate() ");
+        }
+//        System.out.println("vvvvv"+ClientUtils.getOrgId()+"333333333"+ClientUtils.getUserId());
+        List<Object> args = CollectionUtils.newList(ClientUtils.getOrgId(),keyword_ + "%","40288a1261d106ba0161d1072e260000");
+//        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)");
+            args.add(teacherId);
+        }
+
+        hql.append(" order by c.createTime desc");
+//        System.out.println(hql.toString());
+//        System.out.println(findList(hql.toString(), new Pager(pageSize, pageNum), args, ClsClass.class));
+        return findList(hql.toString(), new Pager(pageSize, pageNum), args, ClsClass.class);
+    }
+
+    @Override
+    public int getClassLstCount(String keyword, String teacherId, Integer pageType) {
+        StringBuffer hql = new StringBuffer("from ClsClass c where c.deleteFlag is false and c.orgId=?  and c.name like ?");
+
+        if (pageType == 1) {
+            hql.append(" and c.endTime >= sysdate() ");
+        }else if(pageType == 2) {
+        	hql.append(" and c.endTime < sysdate() ");
+        }
+
+        List<Object> args = CollectionUtils.newList(ClientUtils.getOrgId(),keyword + "%");
+
+        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)");
+            args.add(teacherId);
+        }
+
+        return findCount(hql.toString(), args);
+    }
+
+    @Override
+    public List<ClsClass> listMyClass() {
+
+        String hql = "select c from ClsClass c,StuStudent s where c.classId=s.classId and s.userId=? and s.status=?";
+
+        List<ClsClass> result = find(hql, CollectionUtils.newList(ClientUtils.getUserId(), StuStudent.STATUS_ACTIVE),
+                ClsClass.class);
+
+        return result;
+    }
+
+    /**
+     * 删除班级
+     */
+    @Override
+    public Result deleteClass(String[] classIds) {
+        for (String classId : classIds) {
+            deleteClass(classId);
+            //删除班级学员
+            this.deleteStudent(classId);
+            //删除班级课程
+            this.deleteClassSubject(classId);
+        }
+
+        return new Result(true, "success");
+    }
+
+    /**
+     * 删除班级学员
+     */
+    private void deleteStudent(String classId) {
+        this.bulkUpdate("update StuStudent set deleteFlag = 1 where classId = ?", new Object[] {classId});
+    }
+
+    /**
+     * 删除班级课程
+     */
+    private void deleteClassSubject(String classId) {
+        this.bulkUpdate("delete from ClsClassReSubject  where classId=?", new Object[] {classId});
+    }
+
+    /**
+     * @param classId 班级id
+     * @return
+     */
+    private Result deleteClass(String classId) {
+
+        ClsClass cls = read(ClsClass.class, classId);
+
+        TraceUtils.setUpdateTrace(cls);
+        cls.setDeleteFlag(true);
+
+        save(cls);
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public List<Map<String, Object>> getSubjectLstByClsId(String classId) {
+        return null;
+    }
+
+    @Override
+    public Result addStudent(String classId, int count) {
+
+        clsDao.addStudent(classId, count);
+
+        return new Result(true);
+    }
+
+    @Cacheable(value = "ClsClassService_ClassActivityInfo")
+    @Override
+    public Map<String, Object> getClassActivityInfo(String classId) {
+
+        Map<String, Object> result = scoreService.queryClassHomeworkScoreInfo(classId);
+        result.putAll(scoreService.queryClassExamScoreInfo(classId));
+
+        ClsClass cls = read(classId);
+
+        result.put("classId", cls.getClassId());
+        result.put("className", cls.getName());
+        result.put("coverPageUrl", cls.getImgPath());
+        result.put("status", cls.getProgress());
+        result.put("studentCount", cls.getStudentCount());
+        result.put("startTime", cls.getStartTime());
+
+        return result;
+    }
+
+    @Override
+    public Result getAllClassLst() {
+        String hql = "select c.name as className, c.teacherId as teacherId ,c.classId as classId ,c.classNumber as classNumber from ClsClass c  where c.deleteFlag is false ";
+
+        List<Map<String, Object>> classLst = findListWithMapByHql(hql, null);
+        int classCount = findCountByComplexHql("from ClsClass where deleteFlag is false", null);
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("classLst", classLst, "classCount", classCount));
+
+    }
+
+    @Override
+    public List<ClsClass> getClassLstByTeacherId() {
+        String hql = "select c from ClsClass c,UserTeacher t where "
+                + " EXISTS(select 1 from ClsClassReSubject r ,Subject s where r.subjectId=s.subjectId and  r.classId =c.classId and r.deleteFlag is false and s.teacherId = t.teacherId) and  t.userId= ? order by c.createTime desc ";
+
+        return find(hql, CollectionUtils.newList(ClientUtils.getUserId()), ClsClass.class);
+    }
+
+    @Override
+    public List<Map<String,Object>> queryAvailableClassIdAndName(String teacherId,String subjectId) {
+    	StringBuffer hql = new StringBuffer(1000);
+    	// and c.endTime>=sysdate() 增加条件过滤掉历史班级
+    	hql.append("select c.classId as classId ,c.name as className from ClsClass c where c.deleteFlag is false and c.orgId=:orgId and c.createId=:createId " );
+    	Map<String,Object> queryParam = new HashMap<String,Object>();
+    	queryParam.put("orgId", ClientUtils.getOrgId());
+    	queryParam.put("createId", ClientUtils.getUserId());
+
+    	if(StringUtils.isNotEmpty(teacherId)||StringUtils.isNotEmpty(subjectId)){
+    		hql.append(" and exists (select 1 from ClsClassReSubject r ,Subject s where r.subjectId=s.subjectId and  r.classId =c.classId and r.deleteFlag is false ");
+    	}
+
+    	if(!StringUtils.isEmpty(teacherId)){
+    		hql.append(" and s.teacherId=:teacherId ");
+    		queryParam.put("teacherId", teacherId);
+    	}
+
+    	if(!StringUtils.isEmpty(subjectId)){
+    		hql.append(" and s.origSubjectId=:subjectId ");
+    		queryParam.put("subjectId", subjectId);
+    	}
+
+    	if(StringUtils.isNotEmpty(teacherId)||StringUtils.isNotEmpty(subjectId)){
+    		hql.append(")");
+    	}
+
+    	return this.findListWithMapByHql(hql.toString(), queryParam);
+    }
+
+	@Override
+    public List<Map<String,Object>> queryAllClassIdAndName() {
+    	StringBuffer hql = new StringBuffer(500);
+//        c.deleteFlag is false  and
+        hql.append("select c.classId as classId ,c.name as className from ClsClass c where c.endTime>=:endTime  and c.orgId=:orgId " );
+
+    	return this.findListWithMapByHql(hql.toString(), CollectionUtils.newObjectMap("endTime",new Date(),"orgId",ClientUtils.getOrgId()));
+    }
+
+
+
+	/**
+	 * 查询班级
+	 *
+	 * type 1正常班級,2历史班級
+	 */
+	public Result classList(String keyword, Pager pager, int type) {
+		//获取老师id
+		String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+		if (StringUtils.isEmpty(teacherId)) {
+			return new Result(false, "非老师角色无法查看班级");
+		}
+		QClsClass qClsClass = QClsClass.clsClass;
+		QSubject qSubject = QSubject.subject;
+		QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
+		QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+
+		//查询脚本
+		JPAQuery<Tuple> queryDsl = this.getQueryFactory()
+				.select(qClsClass.name, qClsClass.classId, qClsClass.classNumber, qClsClass.studentCount,
+						qClsClass.createTime, qClsClass.startTime, qClsClass.endTime, qSubject)
+				.from(qClsClass, qSubject, qClsClassReSubject)
+				.where(qClsClass.deleteFlag.isFalse().and((type == 2 ? qClsClass.endTime.lt(new Date()) : qClsClass.endTime.gt(new Date()))).and(qClsClass.name.like("%" + keyword + "%"))
+						.and(qSubject.teacherId.eq(teacherId)).and(qSubject.deleteFlag.isFalse())
+						.and(qClsClassReSubject.deleteFlag.isFalse())
+						.and(qClsClassReSubject.classId.eq(qClsClass.classId))
+						.and(qClsClassReSubject.subjectId.eq(qSubject.subjectId)))
+				.groupBy(qClsClass.classId);
+
+		//总数
+		long count = queryDsl.fetchCount();
+
+		//listData
+		List<Map<String, Object>> listData = queryDsl.limit(pager.getPageSize()).offset(pager.getOffset())
+				.orderBy(qClsClass.createTime.desc(), qSubject.createTime.desc()).fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>();
+					Subject subject = tuple.get(qSubject);
+
+					map.put("className", tuple.get(qClsClass.name));
+					map.put("classId", tuple.get(qClsClass.classId));
+					map.put("classNumber", tuple.get(qClsClass.classNumber));
+					map.put("studentCount", tuple.get(qClsClass.studentCount));
+					map.put("createTime", tuple.get(qClsClass.createTime));
+					map.put("startTime", tuple.get(qClsClass.startTime));
+					map.put("endTime", tuple.get(qClsClass.endTime));
+					if (subject != null) {
+						map.put("subjectName", subject.getName());
+						map.put("progressPercent",
+								this.getQueryFactory().select(qSubjectProgressTreeV.percent.avg())
+										.from(qSubjectProgressTreeV)
+										.where(qSubjectProgressTreeV.id.nodeId.eq(subject.getSubjectId())
+												.and(qSubjectProgressTreeV.nodeType.eq(Progress.PROGRESS_TYPE_SUBJECT)))
+										.groupBy(qSubjectProgressTreeV.id.nodeId).fetchOne());
+					} else {
+						map.put("subjectName", "暂无开班课程");
+						map.put("progressPercent", 0);
+					}
+					return map;
+				}).collect(Collectors.toList());
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("count", count, "listData", listData));
+	}
+
+    @Override
+    public String [] queryClassNamesByIds(String[] classIds){
+    	if(classIds!=null && classIds.length==0){
+    		return null;
+    	}
+
+    	String [] classNames = null;
+
+    	List<Map<String,Object>> lstResult= this.findListWithMapByHql("select c.classId as classId ,c.name as className from ClsClass c where c.classId in (:classIds) ",
+    			CollectionUtils.newObjectMap("classIds",classIds));
+
+    	if(lstResult!=null && lstResult.size()==classIds.length){
+    		Map<String,String> map= new HashMap<String,String>(lstResult.size());
+    		classNames =new String [classIds.length];
+
+    		for(Map<String,Object> item:lstResult){
+        		map.put((String)item.get("classId"), (String)item.get("className"));
+        	}
+
+    		for(int i=0;i<classIds.length;i++){
+    			classNames[i]= map.get(classIds[i]);
+    		}
+    	}
+
+    	return classNames;
+    }
+
+    @Override
+    public List<ClsClass> queryStudentClassesByUserId(String userId) {
+    	return this.find("from  ClsClass c where c.deleteFlag is false and exists( select 1 from StuStudent t where  t.classId = c.classId and t.userId=? and t.status=? ) ",
+				CollectionUtils.newList(userId,StuStudent.STATUS_ACTIVE),ClsClass.class);
+    }
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classroom/model/ClassRoom.java b/src/main/java/com/qxueyou/scc/admin/classroom/model/ClassRoom.java
new file mode 100644
index 0000000..4f9703e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classroom/model/ClassRoom.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.admin.classroom.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the class_room database table.
+ * 
+ */
+@Entity
+@Table(name="class_room")
+@NamedQuery(name="ClassRoom.findAll", query="SELECT c FROM ClassRoom c")
+public class ClassRoom implements Serializable ,ITrace {
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -8815707507227185401L;
+	
+	/*
+	 * 草稿 :0  已发布:1
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	public static final short STATUS_PUBLISH = 1;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "ROOM_ID", unique = true, nullable = false, length = 32)
+	private String roomId;
+
+	@Column(name="address")
+	private String address;
+
+	@Column(name="name")
+	private String name;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	/** 状态 */
+	private short status;
+	
+	@Column(name="ORG_ID")
+	private String orgId;
+	
+	public ClassRoom() {
+	}
+
+	public String getRoomId() {
+		return this.roomId;
+	}
+
+	public void setRoomId(String roomId) {
+		this.roomId = roomId;
+	}
+
+	public String getAddress() {
+		return this.address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/admin/classroom/service/IClassRoomService.java b/src/main/java/com/qxueyou/scc/admin/classroom/service/IClassRoomService.java
new file mode 100644
index 0000000..dee0205
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classroom/service/IClassRoomService.java
@@ -0,0 +1,93 @@
+package com.qxueyou.scc.admin.classroom.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.admin.classroom.model.ClassRoom;
+import com.qxueyou.scc.admin.course.model.CourseSchedule;
+import com.qxueyou.scc.base.model.Result;
+
+public interface IClassRoomService {
+
+	/**
+	 * 新增教室
+	 * 
+	 * @param ClassRoom 教室
+	 *            
+	 * @return
+	 */
+	String add(ClassRoom classRoom);
+
+	/**
+	 * 修改教室
+	 * 
+	 * @param ClassRoom 教室
+	 * 
+	 * @return
+	 */
+	Result update(ClassRoom classRoom);
+
+	/**
+	 * 删除教室
+	 * 
+	 * @param roomIds  课表ID数组
+	 *           
+	 */
+	Result delete(String[] roomIds);
+
+	/**
+	 * 发布教室
+	 * 
+	 * @param roomIds  教室ID数组
+	 *           
+	 */
+	Result doRelease(String[] roomIds);
+
+	/**
+	 * 撤回教室
+	 * 
+	 * @param roomIds 教室id数组
+	 *            
+	 */
+	Result doCancel(String[] roomIds);
+
+	/**
+	 * 查询教室
+	 * 
+	 * @param keyword   搜索文本(教室名称)
+	 *           
+     * @param status  状态
+	 *           
+	 * @param pageSize 页码
+	 *            
+	 * @param pageNum   每页显示行数
+	 *           
+	 * @return 返回课程列表
+	 */
+	List<ClassRoom> list(String keyword,Short status,Integer pageSize, Integer pageNum);
+
+	/**
+	 * 查询教室个数
+	 * 
+	 * @param keyword 搜索文本(教室名称)
+	 *            
+	 * @return 返回教室总数
+	 */
+	int listCount(String keyword,Short status);
+
+	/**
+	 * 读取教室详情
+	 * 
+	 * @param roomId 教室ID
+	 *            
+	 * @return 返回教室详情信息
+	 */
+	ClassRoom detail(String roomId);
+	
+	/**
+	 * 获取教室ID和名称列表
+	 * @return
+	 */
+	List<Map<String, Object>> queryAllRoomIdAndNames();
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/classroom/service/impl/ClassRoomService.java b/src/main/java/com/qxueyou/scc/admin/classroom/service/impl/ClassRoomService.java
new file mode 100644
index 0000000..7e9a5d1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/classroom/service/impl/ClassRoomService.java
@@ -0,0 +1,142 @@
+package com.qxueyou.scc.admin.classroom.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classroom.model.ClassRoom;
+import com.qxueyou.scc.admin.classroom.service.IClassRoomService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exam.model.ExamInfo;
+
+@Service
+public class ClassRoomService extends CommonAppService implements IClassRoomService {
+
+	@Override
+	public String add(ClassRoom classRoom) {
+		TraceUtils.setCreateTrace(classRoom);
+		classRoom.setStatus(ClassRoom.STATUS_PUBLISH);
+		this.insert(classRoom);
+		return classRoom.getRoomId();
+	}
+
+	@Override
+	public Result update(ClassRoom classRoom) {
+		ClassRoom newClassRoom = read(ClassRoom.class, classRoom.getRoomId());
+
+		if (newClassRoom == null) {
+			return new Result(false, "教室不存在");
+		}
+
+		TraceUtils.setUpdateTrace(newClassRoom);
+		newClassRoom.setName(classRoom.getName());
+		newClassRoom.setAddress(classRoom.getAddress());
+		return save(newClassRoom);
+	}
+
+	@Override
+	public Result delete(String[] roomIds) {
+		Result result = new Result(true);
+		if (roomIds != null && roomIds.length > 0) {
+			String hql = "update ClassRoom set deleteFlag = true where roomId=?";
+			result = bulkUpdateInLoop(hql, roomIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result doRelease(String[] roomIds) {
+		if(roomIds==null || roomIds.length==0){
+			return new Result(false, "没有选择要发布的教室");
+		}
+		
+		List<ClassRoom> lstClsRoom = this.findByComplexHql("from ClassRoom where roomId in (:roomIds)", 
+										CollectionUtils.newObjectMap("roomIds",roomIds), ClassRoom.class);
+
+		for (ClassRoom room : lstClsRoom) {
+			if (ExamInfo.STATUS_DRAFT != room.getStatus()) {
+				return new Result(false, "只有草稿状态的教室,才能发布。");
+			}
+			room.setStatus(ClassRoom.STATUS_PUBLISH);
+			TraceUtils.setUpdateTrace(room);
+			save(room);
+		}
+		
+		return new Result(true);
+	}
+
+	@Override
+	public Result doCancel(String[] roomIds) {
+		if(roomIds==null || roomIds.length==0){
+			return new Result(false, "没有选择要撤回的教室");
+		}
+		
+		List<ClassRoom> lstClsRoom = this.findByComplexHql("from ClassRoom where roomId in (:roomIds)", 
+											CollectionUtils.newObjectMap("roomIds",roomIds), ClassRoom.class);
+		
+		for (ClassRoom room : lstClsRoom) {
+			if (ExamInfo.STATUS_PUBLISH != room.getStatus()) {
+				return new Result(false, "只有发布状态的 教室,才能撤回");
+			}
+			room.setStatus(ExamInfo.STATUS_DRAFT);
+			TraceUtils.setUpdateTrace(room);
+			save(room);
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public List<ClassRoom> list(String keyword, Short status, Integer pageSize, Integer pageNum) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append(" from ClassRoom where name like ? and createId=? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+		
+		if(status!=null){
+			hql.append(" and status = ? ");
+			params.add(status);
+		}
+		
+		hql.append(" and deleteFlag is false order by createTime desc");
+		
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, ClassRoom.class);
+	}
+
+	@Override
+	public int listCount(String keyword, Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append(" from ClassRoom where name like ? and createId=? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+		
+		if(status!=null){
+			hql.append(" and status = ? ");
+			params.add(status);
+		}
+		
+		hql.append(" and deleteFlag is false ");
+		
+		return findCount(hql.toString(),params);
+		
+		
+	}
+
+	@Override
+	public ClassRoom detail(String roomId) {
+		return this.read(ClassRoom.class,roomId);
+	}
+	
+	@Override
+	public List<Map<String,Object>> queryAllRoomIdAndNames(){
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("select roomId as roomId,name as roomName,address as address from ClassRoom where  status = :status and deleteFlag is false ");
+		
+		return  this.findListWithMapByHql(hql.toString(), CollectionUtils.newObjectMap("status",ClassRoom.STATUS_PUBLISH));
+	}
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/course/model/CourseSchedule.java b/src/main/java/com/qxueyou/scc/admin/course/model/CourseSchedule.java
new file mode 100644
index 0000000..23bcffb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/course/model/CourseSchedule.java
@@ -0,0 +1,443 @@
+package com.qxueyou.scc.admin.course.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classroom.model.ClassRoom;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+
+/**
+ * The persistent class for the course_schedule database table.
+ * 
+ */
+@Entity
+@Table(name="course_schedule")
+@NamedQuery(name="CourseSchedule.findAll", query="SELECT c FROM CourseSchedule c")
+@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})
+public class CourseSchedule implements Serializable ,ITrace {
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -6281684815713519425L;
+
+	/*
+	 * 草稿 :0  已发布:1
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	public static final short STATUS_PUBLISH = 1;
+		
+	/*
+	 * 非开放 :0  ,开放:1
+	 */
+	public static final short OPEN_FALSE = 0;
+	
+	public static final short OPEN_TRUE = 1;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "SCHEDULE_ID", unique = true, nullable = false, length = 32)
+	private String scheduleId;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="BEGIN_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date beginTime;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+	
+	@Column(name="FRI_TIME")
+	private String friTime;
+
+	@Column(name="mark")
+	private String mark;
+
+	@Column(name="MON_TIME")
+	private String monTime;
+
+	@Column(name="ROOM_ID")
+	private String roomId;
+	
+	@Column(name="TEACHER_ID")
+	private String teacherId;
+	
+	@Column(name="TEACHER_NAME")
+	private String teacherName;
+
+	@Column(name="SAT_TIME")
+	private String satTime;
+
+	private short status;
+
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+
+	@Column(name="SUM_TIME")
+	private String sumTime;
+
+	@Column(name="THU_TIME")
+	private String thuTime;
+
+	@Column(name="TUE_TIME")
+	private String tueTime;
+
+	private short type;
+	
+	@Column(name="OPEN_FLAG")
+	private short openFlag;
+
+	@Column(name="WED_TIME")
+	private String wedTime;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+	
+	@Column(name="ORG_ID")
+	private String orgId;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "courseSchedule")
+	@Where(clause="DELETE_FLAG=0")
+	private List<CourseScheduleReCls> reClasses;		
+	
+	@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID",referencedColumnName="SUBJECT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Subject subject;
+	
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
+	@JoinTable(name = "COURSE_SCHEDULE_RE_CLS", joinColumns = { 
+			@JoinColumn(name = "SCHEDULE_ID") }, 
+			inverseJoinColumns = { @JoinColumn(name = "CLASS_ID") })
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@CollectionId(
+		        columns = @Column(name="RE_ID"), 
+		        type=@Type(type="string"), 
+		        generator = "hibernate-uuid"
+		    )
+	@Where(clause="DELETE_FLAG=0")
+	private List<ClsClass> classes = new ArrayList<>();
+	
+	@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "ROOM_ID",referencedColumnName="ROOM_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ClassRoom classRoom;
+	
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "courseSchedule")
+	@Where(clause="DELETE_FLAG=0")
+	private List<CourseScheduleDetail> details;	
+	
+	
+	public CourseSchedule() {
+		
+	}	
+
+	public String getScheduleId() {
+		return scheduleId;
+	}
+
+	public void setScheduleId(String scheduleId) {
+		this.scheduleId = scheduleId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+
+	public String getFriTime() {
+		return this.friTime;
+	}
+
+	public void setFriTime(String friTime) {
+		this.friTime = friTime;
+	}
+
+	public String getMark() {
+		return this.mark;
+	}
+
+	public void setMark(String mark) {
+		this.mark = mark;
+	}
+
+	public String getMonTime() {
+		return this.monTime;
+	}
+
+	public void setMonTime(String monTime) {
+		this.monTime = monTime;
+	}
+
+	public String getRoomId() {
+		return this.roomId;
+	}
+
+	public void setRoomId(String roomId) {
+		this.roomId = roomId;
+	}
+
+	public String getSatTime() {
+		return this.satTime;
+	}
+
+	public void setSatTime(String satTime) {
+		this.satTime = satTime;
+	}
+
+	public short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSumTime() {
+		return this.sumTime;
+	}
+
+	public void setSumTime(String sumTime) {
+		this.sumTime = sumTime;
+	}
+
+	public String getThuTime() {
+		return this.thuTime;
+	}
+
+	public void setThuTime(String thuTime) {
+		this.thuTime = thuTime;
+	}
+
+	public String getTueTime() {
+		return this.tueTime;
+	}
+
+	public void setTueTime(String tueTime) {
+		this.tueTime = tueTime;
+	}
+
+	public short getType() {
+		return this.type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getWedTime() {
+		return this.wedTime;
+	}
+
+	public void setWedTime(String wedTime) {
+		this.wedTime = wedTime;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public List<CourseScheduleReCls> getReClasses() {
+		return reClasses;
+	}
+
+	public void setReClasses(List<CourseScheduleReCls> reClasses) {
+		this.reClasses = reClasses;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public Date getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(Date beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public List<ClsClass> getClasses() {
+		return classes;
+	}
+
+	public void setClasses(List<ClsClass> classes) {
+		this.classes = classes;
+	}
+
+	public ClassRoom getClassRoom() {
+		return classRoom;
+	}
+
+	public void setClassRoom(ClassRoom classRoom) {
+		this.classRoom = classRoom;
+	}
+
+	public List<CourseScheduleDetail> getDetails() {
+		return details;
+	}
+
+	public void setDetails(List<CourseScheduleDetail> details) {
+		this.details = details;
+	}
+
+	public short getOpenFlag() {
+		return openFlag;
+	}
+
+	public void setOpenFlag(short openFlag) {
+		this.openFlag = openFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleDetail.java b/src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleDetail.java
new file mode 100644
index 0000000..68a9479
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleDetail.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.admin.course.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the course_schedule_detail database table.
+ * 
+ */
+@Entity
+@Table(name="course_schedule_detail")
+@NamedQuery(name="CourseScheduleDetail.findAll", query="SELECT c FROM CourseScheduleDetail c")
+public class CourseScheduleDetail implements Serializable ,ITrace{
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -418246372466731226L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "DETAIL_ID", unique = true, nullable = false, length = 32)
+	private String detailId;
+
+	@Column(name="BEGIN_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date beginTime;
+
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+
+	@Column(name="SCHEDULE_ID")
+	private String scheduleId;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+	
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SCHEDULE_ID",referencedColumnName="SCHEDULE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private CourseSchedule courseSchedule;
+	
+	public CourseScheduleDetail() {
+	}
+
+	public String getDetailId() {
+		return this.detailId;
+	}
+
+	public void setDetailId(String detailId) {
+		this.detailId = detailId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(Date beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public String getScheduleId() {
+		return scheduleId;
+	}
+
+	public void setScheduleId(String scheduleId) {
+		this.scheduleId = scheduleId;
+	}
+
+	public CourseSchedule getCourseSchedule() {
+		return courseSchedule;
+	}
+
+	public void setCourseSchedule(CourseSchedule courseSchedule) {
+		this.courseSchedule = courseSchedule;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleReCls.java b/src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleReCls.java
new file mode 100644
index 0000000..4f9c6cf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleReCls.java
@@ -0,0 +1,191 @@
+package com.qxueyou.scc.admin.course.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the course_schedule_re_cls database table.
+ * 
+ */
+@Entity
+@Table(name="course_schedule_re_cls")
+@NamedQuery(name="CourseScheduleReCls.findAll", query="SELECT c FROM CourseScheduleReCls c")
+@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})
+public class CourseScheduleReCls implements Serializable ,ITrace {
+
+	/**
+	 *UID 
+	 */
+	private static final long serialVersionUID = -2170738527939581523L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "RE_ID", unique = true, nullable = false, length = 32)
+	private String reId;
+
+	@Column(name="CLASS_ID")
+	private String classId;
+
+	@Column(name="SCHEDULE_ID")
+	private String scheduleId;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SCHEDULE_ID",referencedColumnName="SCHEDULE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private CourseSchedule courseSchedule;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "CLASS_ID",referencedColumnName="CLASS_ID",updatable=false,insertable=false)
+	private ClsClass clsClass;
+	
+	public CourseScheduleReCls() {
+		
+	}
+
+	public String getReId() {
+		return this.reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public String getScheduleId() {
+		return scheduleId;
+	}
+
+	public void setScheduleId(String scheduleId) {
+		this.scheduleId = scheduleId;
+	}
+
+	public CourseSchedule getCourseSchedule() {
+		return courseSchedule;
+	}
+
+	public void setCourseSchedule(CourseSchedule courseSchedule) {
+		this.courseSchedule = courseSchedule;
+	}
+
+	public ClsClass getClsClass() {
+		return clsClass;
+	}
+
+	public void setClsClass(ClsClass clsClass) {
+		this.clsClass = clsClass;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/admin/course/service/ICourseScheduleService.java b/src/main/java/com/qxueyou/scc/admin/course/service/ICourseScheduleService.java
new file mode 100644
index 0000000..8a6ec47
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/course/service/ICourseScheduleService.java
@@ -0,0 +1,134 @@
+package com.qxueyou.scc.admin.course.service;
+
+import java.text.ParseException;
+import java.util.List;
+
+import com.qxueyou.scc.admin.course.model.CourseSchedule;
+import com.qxueyou.scc.base.model.Result;
+
+public interface ICourseScheduleService {
+	
+	/**
+	 * 新增课表
+	 * 
+	 * @param courseSchedule 课表
+	 *            
+	 * @return
+	 */
+	String add(CourseSchedule courseSchedule)  throws Exception;
+
+	/**
+	 * 修改课表
+	 * 
+	 * @param courseSchedule 课表
+	 * 
+	 * @return
+	 */
+	Result update(CourseSchedule courseSchedule)  throws Exception;
+
+	/**
+	 * 删除课表
+	 * 
+	 * @param scheduleIds  课表ID数组
+	 *           
+	 */
+	Result delete(String[] scheduleIds);
+
+	/**
+	 * 发布课表
+	 * 
+	 * @param scheduleIds  课表ID数组
+	 *           
+	 */
+	Result doRelease(String[] scheduleIds);
+
+	/**
+	 * 撤回课表
+	 * 
+	 * @param scheduleIds 课表id数组
+	 *            
+	 */
+	Result doCancel(String[] scheduleIds);
+
+	/**
+	 * 查询课表
+	 * 
+	 * @param keyword   搜索文本(课程名称)
+	 *           
+     * @param status  状态
+	 *           
+	 * @param pageSize 页码
+	 *            
+	 * @param pageNum   每页显示行数
+	 *           
+	 * @return 返回课程列表
+	 */
+	List<CourseSchedule> list(String keyword,Short status,Integer pageSize, Integer pageNum);
+
+	/**
+	 * 查询课表个数
+	 * 
+	 * @param keyword 搜索文本
+	 *            
+	 * @return 返回课表总数
+	 */
+	int listCount(String keyword,Short status);
+
+	/**
+	 * 读取课表详情
+	 * 
+	 * @param scheduleId 课表ID
+	 *            
+	 * @return 返回课表列表
+	 */
+	CourseSchedule detail(String scheduleId);
+
+	/**
+	 * 获取课程列表
+	 * @param date
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 * @throws ParseException
+	 */
+	List<CourseSchedule> listTeacherOfSchedule(String date, Integer pageSize, Integer pageNum) throws Exception;
+	
+	/**
+	 * 获取课程列表数量
+	 * @param date
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 * @throws ParseException
+	 */
+	int listTeacherOfScheduleCount(String date, Integer pageSize, Integer pageNum) throws ParseException;
+	
+	/**
+	 * 获取学生课表列表
+	 * @param date
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 * @throws Exception
+	 */
+	List<CourseSchedule> listStudentSchedule(String date, Integer pageSize, Integer pageNum) throws Exception;
+	
+	/**
+	 * 获取学生课表列表数量
+	 * @param date
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 * @throws Exception
+	 */
+	int listStudentScheduleCount(String date, Integer pageSize, Integer pageNum) throws Exception;
+	
+	/**
+	 * 查询有课日期标识
+	 * @param year
+	 * @param month
+	 * @return
+	 */
+	List<Integer> queryDateFlag(int year, int month);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/course/service/impl/CourseScheduleService.java b/src/main/java/com/qxueyou/scc/admin/course/service/impl/CourseScheduleService.java
new file mode 100644
index 0000000..d73ba88
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/course/service/impl/CourseScheduleService.java
@@ -0,0 +1,445 @@
+package com.qxueyou.scc.admin.course.service.impl;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classroom.model.ClassRoom;
+import com.qxueyou.scc.admin.course.model.CourseSchedule;
+import com.qxueyou.scc.admin.course.model.CourseScheduleDetail;
+import com.qxueyou.scc.admin.course.model.CourseScheduleReCls;
+import com.qxueyou.scc.admin.course.service.ICourseScheduleService;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exam.model.ExamInfo;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.user.model.UserTeacher;
+
+@Service
+public class CourseScheduleService extends CommonAppService implements ICourseScheduleService {
+	
+	public final static String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+	
+    public final static String SHORT_DATE_FORMAT = "yyyy-MM-dd";
+    
+    public final static String SHORT_TIME_FORMAT = "HH:mm:ss";
+    
+    public final static String TIME_SPLIT = "-";
+    
+    @Autowired
+	private ITeacherService teacherService;
+
+	@Override
+	public String add(CourseSchedule courseSchedule) throws Exception {
+		TraceUtils.setCreateTrace(courseSchedule);
+		courseSchedule.setOrgId(ClientUtils.getOrgId());
+		courseSchedule.setStatus(CourseSchedule.STATUS_DRAFT);
+		
+		//保存教师信息
+		UserTeacher teacher= teacherService.getTeacherByUserId(ClientUtils.getUserId());
+		
+		if(teacher!=null){
+			courseSchedule.setTeacherId(teacher.getTeacherId());
+			courseSchedule.setTeacherName(teacher.getName());
+		}else{
+			courseSchedule.setTeacherId(ClientUtils.getUserId());
+			courseSchedule.setTeacherName(ClientUtils.getUserName());
+		}
+		
+		Subject subject = this.read(Subject.class, courseSchedule.getSubjectId());
+		
+		if(subject.getType()==Subject.TYPE_PUBLIC_SUBJECT){
+			courseSchedule.setOpenFlag(CourseSchedule.OPEN_TRUE);
+		}else{
+			courseSchedule.setOpenFlag(CourseSchedule.OPEN_FALSE);
+		}
+		
+		this.insert(courseSchedule);
+		
+		//生成关联关系
+		List<String> lstClassIds= QBeanUtils.listPropertyVal(courseSchedule.getReClasses(), "classId");
+		this.doClearAndAddReClass(courseSchedule.getScheduleId(),lstClassIds==null?null:lstClassIds.toArray(new String[lstClassIds.size()]));
+		
+		//生成明细
+		this.doCreateScheduleDetail(courseSchedule);
+		
+		return courseSchedule.getScheduleId();
+	}
+
+	@Override
+	public Result update(CourseSchedule courseSchedule) throws Exception {
+		CourseSchedule newCourseSchedule = read(CourseSchedule.class, courseSchedule.getScheduleId());
+
+		if (newCourseSchedule == null) {
+			return new Result(false, "课表不存在");
+		}
+
+		TraceUtils.setUpdateTrace(newCourseSchedule);
+		newCourseSchedule.setSubjectId(courseSchedule.getSubjectId());
+		newCourseSchedule.setRoomId(courseSchedule.getRoomId());
+		newCourseSchedule.setMark(courseSchedule.getMark());
+		newCourseSchedule.setBeginTime(courseSchedule.getBeginTime());
+		newCourseSchedule.setEndTime(courseSchedule.getEndTime());
+		newCourseSchedule.setMonTime(courseSchedule.getMonTime());
+		newCourseSchedule.setTueTime(courseSchedule.getTueTime());
+		newCourseSchedule.setWedTime(courseSchedule.getWedTime());
+		newCourseSchedule.setThuTime(courseSchedule.getThuTime());
+		newCourseSchedule.setFriTime(courseSchedule.getFriTime());
+		newCourseSchedule.setSatTime(courseSchedule.getSatTime());
+		newCourseSchedule.setSumTime(courseSchedule.getSumTime());
+		
+		//保存教师信息
+		UserTeacher teacher= teacherService.getTeacherByUserId(ClientUtils.getUserId());
+				
+		if(teacher!=null){
+			courseSchedule.setTeacherId(teacher.getTeacherId());
+			courseSchedule.setTeacherName(teacher.getName());
+		}else{
+			courseSchedule.setTeacherId(ClientUtils.getUserId());
+			courseSchedule.setTeacherName(ClientUtils.getUserName());
+		}
+		
+		Subject subject = this.read(Subject.class, courseSchedule.getSubjectId());
+		
+		if(subject.getType()==Subject.TYPE_PUBLIC_SUBJECT){
+			courseSchedule.setOpenFlag(CourseSchedule.OPEN_TRUE);
+		}else{
+			courseSchedule.setOpenFlag(CourseSchedule.OPEN_FALSE);
+		}
+		
+		this.save(newCourseSchedule);
+		
+		List<String> lstClassIds= QBeanUtils.listPropertyVal(newCourseSchedule.getReClasses(), "classId");
+		
+		//更新关联关系
+		this.doClearAndAddReClass(courseSchedule.getScheduleId(),lstClassIds==null?null:lstClassIds.toArray(new String[lstClassIds.size()]));
+		
+		//生成明细
+		this.doCreateScheduleDetail(courseSchedule);
+		
+		// 保存课程班级信息
+		return new Result(true);
+	}
+	
+	/**
+	 * 清理并添加直播权限班级
+	 * @param liveId
+	 * @param classIds
+	 */
+	private void doClearAndAddReClass(String scheduleId, String [] classIds) {
+		List<String>  reIdLst =  this.find("select r.reId from CourseScheduleReCls r where r.scheduleId=?",
+					CollectionUtils.newList(scheduleId), String.class);
+
+		//删除关联关系
+		if(reIdLst!=null && reIdLst.size()>0){
+			this.bulkUpdateInLoop("delete from CourseScheduleReCls where reId=?", reIdLst.toArray());  
+		}
+		
+		if(classIds != null && classIds.length > 0){
+			for(String classId:classIds){
+				CourseScheduleReCls re = new CourseScheduleReCls();
+			    TraceUtils.setCreateTrace(re);
+			    re.setClassId(classId);
+			    re.setScheduleId(scheduleId);
+			    save(re);
+			}
+		}
+	}	
+
+	@Override
+	public Result delete(String[] scheduleIds) {
+		Result result = new Result(true);
+		if (scheduleIds != null && scheduleIds.length > 0) {
+			String hql = "update CourseSchedule set deleteFlag = true where scheduleId=?";
+			result = bulkUpdateInLoop(hql, scheduleIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result doRelease(String[] scheduleIds) {
+		if(scheduleIds==null || scheduleIds.length==0){
+			return new Result(false, "没有选择要发布的课表");
+		}
+		
+		List<CourseSchedule> lstCourseSchedule = this.findByComplexHql("from CourseSchedule where scheduleId in (:scheduleIds)", 
+										CollectionUtils.newObjectMap("scheduleIds",scheduleIds), CourseSchedule.class);
+
+		for (CourseSchedule schedule : lstCourseSchedule) {
+			if (CourseSchedule.STATUS_DRAFT != schedule.getStatus()) {
+				return new Result(false, "只有草稿状态的课表,才能发布。");
+			}
+			schedule.setStatus(ClassRoom.STATUS_PUBLISH);
+			TraceUtils.setUpdateTrace(schedule);
+			save(schedule);
+		}
+		
+		return new Result(true);
+	}
+
+	@Override
+	public Result doCancel(String[] scheduleIds) {
+		if(scheduleIds==null || scheduleIds.length==0){
+			return new Result(false, "没有选择要撤回的课表");
+		}
+		
+		List<CourseSchedule> lstCourseSchedule = this.findByComplexHql("from CourseSchedule where scheduleId in (:scheduleIds)", 
+											CollectionUtils.newObjectMap("scheduleIds",scheduleIds), CourseSchedule.class);
+		
+		for (CourseSchedule schedule : lstCourseSchedule) {
+			if (CourseSchedule.STATUS_PUBLISH != schedule.getStatus()) {
+				return new Result(false, "只有发布状态的课表,才能撤回");
+			}
+			schedule.setStatus(ExamInfo.STATUS_DRAFT);
+			TraceUtils.setUpdateTrace(schedule);
+			save(schedule);
+		}
+
+		return new Result(true);
+	}
+	
+	@Override
+	public List<CourseSchedule> list(String keyword, Short status, Integer pageSize, Integer pageNum) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append(" from CourseSchedule c left join fetch c.subject s left join fetch c.classes  where s.name like ? and c.createId=? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+		
+		if(status!=null){
+			hql.append(" and c.status = ? ");
+			params.add(status);
+		}
+		
+		hql.append(" and c.deleteFlag is false order by c.createTime desc");
+		
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, CourseSchedule.class);
+	}
+
+	@Override
+	public int listCount(String keyword,Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append(" from CourseSchedule c left join c.subject s where s.name like ? and c.createId=? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+		
+		if(status!=null){
+			hql.append(" and c.status = ? ");
+			params.add(status);
+		}
+		
+		hql.append(" and c.deleteFlag is false ");
+		
+		return findCount(hql.toString(),params);
+	}
+
+	@Override
+	public CourseSchedule detail(String courseScheduleId) {
+		return this.read(CourseSchedule.class, courseScheduleId);
+	}
+	
+	//查询当前的课表明细信息,
+	@Override
+	public List<CourseSchedule> listTeacherOfSchedule(String date,Integer pageSize, Integer pageNum) throws Exception{
+		
+		SimpleDateFormat sdfFull = new SimpleDateFormat(FULL_DATE_FORMAT);
+		
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from CourseScheduleDetail d left join fetch d.courseSchedule s left join fetch s.subject j left join fetch s.classRoom m  left join fetch s.classes c ");
+		hql.append("  where  d.deleteFlag is false and d.beginTime>=? and d.endTime<=? ");
+		hql.append("  and s.status=? and  s.deleteFlag is false");
+		
+		List<Object> params = CollectionUtils.newList();
+		
+		params.add(sdfFull.parse(date+" 00:00:00"));
+		params.add(sdfFull.parse(date+" 23:59:59"));
+		params.add(CourseSchedule.STATUS_PUBLISH);
+		
+		UserTeacher teacher = ClientUtils.isAdmin() ? null : teacherService.getTeacherByUserId(ClientUtils.getUserId());
+		
+		if(teacher!=null){
+			hql.append(" and s.teacherId =?");
+			params.add(teacher.getTeacherId());
+		}	
+		
+		hql.append(" and  d.deleteFlag is false  order by d.beginTime asc");
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, CourseSchedule.class);
+	}	
+	
+	//查询当前的课表明细信息
+	@Override
+	public int listTeacherOfScheduleCount(String date,Integer pageSize, Integer pageNum) throws ParseException{
+		
+		SimpleDateFormat sdf = new SimpleDateFormat(FULL_DATE_FORMAT);
+		
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append(" from CourseScheduleDetail d left join  d.courseSchedule s where ");
+		hql.append("  d.deleteFlag is false and d.beginTime>=? and d.endTime<=? ");
+		hql.append("  and s.status=?  and  s.deleteFlag is false and  d.deleteFlag is false ");
+
+		List<Object> params = CollectionUtils.newList();
+		params.add(sdf.parse(date + " 00:00:00"));
+		params.add(sdf.parse(date + " 23:59:59"));
+		params.add(CourseSchedule.STATUS_PUBLISH);
+		
+		UserTeacher teacher = ClientUtils.isAdmin() ? null : teacherService.getTeacherByUserId(ClientUtils.getUserId());
+		
+		if(teacher!=null){
+			hql.append(" and s.teacherId =?");
+			params.add(teacher.getTeacherId());
+		}	
+		
+		return findCount(hql.toString(),params);
+	}
+	
+	//查询当前的课表明细信息
+	@Override
+	public List<CourseSchedule> listStudentSchedule(String date,Integer pageSize, Integer pageNum) throws Exception{
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from CourseScheduleDetail d left join fetch d.courseSchedule s left join fetch s.subject j left join fetch s.classRoom m  left join fetch s.classes c ");
+		hql.append(" where d.beginTime>=? and d.endTime<=? ");
+		hql.append(" and (c.classId=? or s.openFlag=?)  and s.status=? ");
+		
+		SimpleDateFormat sdf = new SimpleDateFormat(FULL_DATE_FORMAT);
+	
+		List<Object> params = CollectionUtils.newList();
+		params.add(sdf.parse(date+" 00:00:00"));
+		params.add(sdf.parse(date+" 23:59:59"));
+		params.add(ClientUtils.getClassId());
+		params.add(CourseSchedule.OPEN_TRUE);
+		params.add(CourseSchedule.STATUS_PUBLISH);
+		
+		hql.append(" and d.deleteFlag is false and s.deleteFlag is false order by d.beginTime asc");
+		
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, CourseSchedule.class);
+	}
+	
+	//查询当前的课表明细信息
+	@Override
+	public int listStudentScheduleCount(String date,Integer pageSize, Integer pageNum) throws Exception{
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append(" from CourseScheduleDetail d left join  d.courseSchedule s left join s.classes c ");
+		hql.append(" where  d.beginTime>=? and d.endTime<=? ");
+		hql.append(" and (c.classId=? or s.openFlag=?) and s.status=? ");
+		hql.append(" and d.deleteFlag is false and  s.deleteFlag is false");
+
+		SimpleDateFormat sdfFull = new SimpleDateFormat(FULL_DATE_FORMAT);
+		
+		List<Object> params = CollectionUtils.newList();
+		params.add(sdfFull.parse(date+" 00:00:00"));
+		params.add(sdfFull.parse(date+" 23:59:59"));
+		params.add(ClientUtils.getClassId());
+		params.add(CourseSchedule.OPEN_TRUE);
+		params.add(CourseSchedule.STATUS_PUBLISH);
+		
+		return findCount(hql.toString(),params);
+	}
+
+	
+	//生成明细数据
+	private void doCreateScheduleDetail(CourseSchedule  courseSchedule) throws Exception{
+		SimpleDateFormat sdf = new SimpleDateFormat(SHORT_DATE_FORMAT);
+		String scheduleId = courseSchedule.getScheduleId();
+		
+		//清理旧的关联关系
+		List<String>  detailIdLst =  this.find("select d.detailId from CourseScheduleDetail d where d.scheduleId=?",
+				CollectionUtils.newList(scheduleId), String.class);
+
+		if(detailIdLst!=null && detailIdLst.size()>0){
+			this.bulkUpdateInLoop("delete from CourseScheduleDetail  where detailId=?", detailIdLst.toArray());  
+		}
+			
+		//重新生成新的明细
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(courseSchedule.getBeginTime());
+		cal.set(Calendar.HOUR, 0);
+		cal.set(Calendar.MINUTE, 0);
+		cal.set(Calendar.SECOND, 0);
+		int dayOfWeek = -1;
+		String courseTime = null,strDate = null;
+		String [] arrTime = null;
+		
+		do{
+			dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);			
+			switch(dayOfWeek){
+				case 1 : courseTime =courseSchedule.getSumTime();break;
+				case 2 : courseTime =courseSchedule.getMonTime();break;
+				case 3 : courseTime =courseSchedule.getTueTime();break;
+				case 4 : courseTime =courseSchedule.getWedTime();break;
+				case 5 : courseTime =courseSchedule.getThuTime();break;
+				case 6 : courseTime =courseSchedule.getFriTime();break;
+				case 7 : courseTime =courseSchedule.getSatTime();break;
+				default: break;
+			}
+			
+			if(StringUtils.isNotEmpty(courseTime)){
+				arrTime = courseTime.split(TIME_SPLIT);
+				strDate = sdf.format(cal.getTime());
+				this.insertScheduleDetail(strDate.concat(" ").concat(arrTime[0]).concat(":00"),strDate.concat(" ").concat(arrTime[1]).concat(":00"),courseSchedule.getScheduleId());
+			}
+			
+			cal.add(Calendar.DATE, 1); //+1
+			
+		}while(cal.getTime().getTime()<=courseSchedule.getEndTime().getTime());		
+	}
+	
+	private void insertScheduleDetail(String beginTime,String endTime, String scheduleId) throws ParseException{
+		CourseScheduleDetail detail = new CourseScheduleDetail();
+		SimpleDateFormat sdf = new SimpleDateFormat(FULL_DATE_FORMAT);
+		detail.setBeginTime(sdf.parse(beginTime));
+		detail.setEndTime(sdf.parse(endTime));
+		detail.setScheduleId(scheduleId);
+		detail.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(detail);
+		this.save(detail);
+	}
+		
+	@Override
+	public List<Integer> queryDateFlag(int year ,int month){		
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append(" select day(d.beginTime) from CourseScheduleDetail d left join  d.courseSchedule s ");
+		hql.append(" 	where d.deleteFlag is false and d.beginTime >= ? and d.endTime <= ? ");
+		hql.append(" 	and s.status=? and  s.deleteFlag is false ");
+		
+		Date beginDate=null,endDate=null;
+				
+		Calendar cal = Calendar.getInstance();
+		cal.set(year, month-1, 1, 0 ,0 ,0);
+		beginDate = cal.getTime();
+		cal.clear();
+		cal.set(Calendar.YEAR,year);
+		cal.set(Calendar.MONTH,month-1);
+		cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DATE));
+		cal.set(Calendar.HOUR, 23);
+		cal.set(Calendar.MINUTE, 59);
+		cal.set(Calendar.SECOND, 59);
+		endDate = cal.getTime();
+		
+		List<Object> params = CollectionUtils.newList();
+		params.add(beginDate);
+		params.add(endDate);
+		params.add(CourseSchedule.STATUS_PUBLISH);
+		
+		UserTeacher teacher = ClientUtils.isAdmin() ? null : teacherService.getTeacherByUserId(ClientUtils.getUserId());
+		
+		if(teacher!=null){
+			hql.append(" and s.teacherId =?");
+			params.add(teacher.getTeacherId());
+		}
+		
+		hql.append(" group by day(d.beginTime)");
+		
+		return this.find(hql.toString(), params, Integer.class);
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/examroom/model/ExamRoom.java b/src/main/java/com/qxueyou/scc/admin/examroom/model/ExamRoom.java
new file mode 100644
index 0000000..9637d9e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/examroom/model/ExamRoom.java
@@ -0,0 +1,195 @@
+package com.qxueyou.scc.admin.examroom.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * The persistent class for the class_room database table.
+ * 
+ */
+@Entity
+@Table(name="exam_room")
+@NamedQuery(name="ExamRoom.findAll", query="SELECT c FROM ExamRoom c")
+public class ExamRoom implements Serializable ,ITrace {
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -8815707507227185401L;
+	
+	/*
+	 * 草稿 :0  已发布:1
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	public static final short STATUS_PUBLISH = 1;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "examroom_id", unique = true, nullable = false, length = 32)
+	private String examroomId;
+
+	@Column(name="examroom_name")
+	private String examroomName;
+
+	@Column(name = "room_id", length = 32)
+	private String roomId;
+
+	@Column(name="room_name")
+	private String roomName;
+
+	@Column(name="seats_num")
+	private int seatsNum;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/** 状态 */
+	private short status;
+
+	public ExamRoom() {
+	}
+
+	public String getRoomId() {
+		return this.roomId;
+	}
+
+	public void setRoomId(String roomId) {
+		this.roomId = roomId;
+	}
+
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+
+	public String getExamroomId() {
+		return examroomId;
+	}
+
+	public void setExamroomId(String examroomId) {
+		this.examroomId = examroomId;
+	}
+
+	public String getExamroomName() {
+		return examroomName;
+	}
+
+	public void setExamroomName(String examroomName) {
+		this.examroomName = examroomName;
+	}
+
+	public String getRoomName() {
+		return roomName;
+	}
+
+	public void setRoomName(String roomName) {
+		this.roomName = roomName;
+	}
+
+	public int getSeatsNum() {
+		return seatsNum;
+	}
+
+	public void setSeatsNum(int seatsNum) {
+		this.seatsNum = seatsNum;
+	}
+
+	public boolean isDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/examroom/service/IExamRoomService.java b/src/main/java/com/qxueyou/scc/admin/examroom/service/IExamRoomService.java
new file mode 100644
index 0000000..74460e6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/examroom/service/IExamRoomService.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.admin.examroom.service;
+
+import com.qxueyou.scc.admin.examroom.model.ExamRoom;
+import com.qxueyou.scc.base.model.Result;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IExamRoomService {
+
+	/**
+	 * 新增考场
+	 * 
+	 * @param examRoom 考场
+	 *            
+	 * @return
+	 */
+	String add(ExamRoom examRoom);
+
+	/**
+	 * 修改考场
+	 * 
+	 * @param examRoom 考场
+	 * 
+	 * @return
+	 */
+	Result update(ExamRoom examRoom);
+
+	/**
+	 * 删除考场
+	 * 
+	 * @param roomIds  课表ID数组
+	 *           
+	 */
+	Result delete(String[] roomIds);
+
+	/**
+	 * 发布考场
+	 * 
+	 * @param roomIds  考场ID数组
+	 *           
+	 */
+	Result doRelease(String[] roomIds);
+
+	/**
+	 * 撤回考场
+	 * 
+	 * @param roomIds 考场id数组
+	 *            
+	 */
+	Result doCancel(String[] roomIds);
+
+	/**
+	 * 查询考场
+	 * 
+	 * @param keyword   搜索文本(考场名称)
+	 *           
+     * @param status  状态
+	 *           
+	 * @param pageSize 页码
+	 *            
+	 * @param pageNum   每页显示行数
+	 *           
+	 * @return 返回课程列表
+	 */
+	List<ExamRoom> list(String roomId, String keyword, Short status, Integer pageSize, Integer pageNum);
+
+	/**
+	 * 查询考场个数
+	 *
+	 * @param keyword 搜索文本(考场名称)
+	 *
+	 * @return 返回考场总数
+	 */
+	int listCount(String roomId,String keyword, Short status);
+
+	/**
+	 * 读取考场详情
+	 * 
+	 * @param roomId 考场ID
+	 *            
+	 * @return 返回考场详情信息
+	 */
+	ExamRoom detail(String roomId);
+	
+	/**
+	 * 获取考场ID和名称列表
+	 * @return
+	 */
+	List<Map<String, Object>> queryAllRoomIdAndNames();
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/examroom/service/impl/ExamRoomService.java b/src/main/java/com/qxueyou/scc/admin/examroom/service/impl/ExamRoomService.java
new file mode 100644
index 0000000..9cdf77d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/examroom/service/impl/ExamRoomService.java
@@ -0,0 +1,143 @@
+package com.qxueyou.scc.admin.examroom.service.impl;
+
+import com.qxueyou.scc.admin.examroom.model.ExamRoom;
+import com.qxueyou.scc.admin.examroom.service.IExamRoomService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exam.model.ExamInfo;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ExamRoomService extends CommonAppService implements IExamRoomService {
+
+	@Override
+	public String add(ExamRoom examRoom) {
+		TraceUtils.setCreateTrace(examRoom);
+		examRoom.setStatus(ExamRoom.STATUS_PUBLISH);
+		this.insert(examRoom);
+		return examRoom.getExamroomId();
+	}
+
+	@Override
+	public Result update(ExamRoom examRoom) {
+		ExamRoom newExamRoom = read(ExamRoom.class, examRoom.getExamroomId());
+
+		if (newExamRoom == null) {
+			return new Result(false, "考场不存在");
+		}
+
+		TraceUtils.setUpdateTrace(newExamRoom);
+		newExamRoom.setExamroomName(examRoom.getExamroomName());
+		newExamRoom.setSeatsNum(examRoom.getSeatsNum());
+		return save(newExamRoom);
+	}
+
+	@Override
+	public Result delete(String[] examroomIds) {
+		Result result = new Result(true);
+		if (examroomIds != null && examroomIds.length > 0) {
+			String hql = "update ExamRoom set deleteFlag = true where examroomId=?";
+			result = bulkUpdateInLoop(hql, examroomIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result doRelease(String[] examroomIds) {
+		if(examroomIds==null || examroomIds.length==0){
+			return new Result(false, "没有选择要发布的考场");
+		}
+		
+		List<ExamRoom> lstClsRoom = this.findByComplexHql("from ExamRoom where examroomId in (:examroomIds)",
+										CollectionUtils.newObjectMap("examroomIds",examroomIds), ExamRoom.class);
+
+		for (ExamRoom room : lstClsRoom) {
+			if (ExamInfo.STATUS_DRAFT != room.getStatus()) {
+				return new Result(false, "只有草稿状态的考场,才能发布。");
+			}
+			room.setStatus(ExamRoom.STATUS_PUBLISH);
+			TraceUtils.setUpdateTrace(room);
+			save(room);
+		}
+		
+		return new Result(true);
+	}
+
+	@Override
+	public Result doCancel(String[] examroomIds) {
+		if(examroomIds==null || examroomIds.length==0){
+			return new Result(false, "没有选择要撤回的考场");
+		}
+		
+		List<ExamRoom> lstClsRoom = this.findByComplexHql("from ExamRoom where examroomId in (:examroomIds)",
+											CollectionUtils.newObjectMap("examroomIds",examroomIds), ExamRoom.class);
+		
+		for (ExamRoom room : lstClsRoom) {
+			if (ExamInfo.STATUS_PUBLISH != room.getStatus()) {
+				return new Result(false, "只有发布状态的 考场,才能撤回");
+			}
+			room.setStatus(ExamInfo.STATUS_DRAFT);
+			TraceUtils.setUpdateTrace(room);
+			save(room);
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public List<ExamRoom> list(String roomID, String keyword, Short status, Integer pageSize, Integer pageNum) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append(" from ExamRoom where createId=? and roomId =? ");
+		List<Object> params = CollectionUtils.newList(ClientUtils.getUserId(),roomID);
+		
+		if(status!=null){
+			hql.append(" and status = ? ");
+			params.add(status);
+		}
+		
+		hql.append(" and deleteFlag is false order by createTime desc");
+		
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, ExamRoom.class);
+	}
+
+	@Override
+	public int listCount(String roomID, String keyword, Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append(" from ExamRoom where createId=? and roomId =? ");
+		List<Object> params = CollectionUtils.newList(ClientUtils.getUserId(),roomID);
+		
+		if(status!=null){
+			hql.append(" and status = ? ");
+			params.add(status);
+		}
+		/**
+		 *
+		 */
+		hql.append(" and deleteFlag is false ");
+		
+		return findCount(hql.toString(),params);
+		
+		
+	}
+
+	@Override
+	public ExamRoom detail(String roomId) {
+		return this.read(ExamRoom.class,roomId);
+	}
+	
+	@Override
+	public List<Map<String,Object>> queryAllRoomIdAndNames(){
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("select examroomId as examroomId,examroomName as examroomName from ExamRoom where  status = :status and deleteFlag is false ");
+		
+		return  this.findListWithMapByHql(hql.toString(), CollectionUtils.newObjectMap("status", ExamRoom.STATUS_PUBLISH));
+	}
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/notice/dao/NoticeDAO.java b/src/main/java/com/qxueyou/scc/admin/notice/dao/NoticeDAO.java
new file mode 100644
index 0000000..6639d7e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/notice/dao/NoticeDAO.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.admin.notice.dao;
+
+import com.qxueyou.scc.base.service.ICacheService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public class NoticeDAO {
+
+    @Autowired
+    ICacheService cache;
+
+    public void saveNoticeClasses(String noticeId, List<String> classIds) {
+
+        List<String> origNoticeClasses = cache.lstAll("NoticeClasses_" + noticeId);
+        for (String classId : origNoticeClasses) {
+            cache.lstRemove("ClassNotices_" + classId, noticeId);
+        }
+
+        cache.lstTrim("NoticeClasses_" + noticeId, 1, 0);//clear
+        cache.lstRightPushAll("NoticeClasses_" + noticeId, classIds);
+
+        for (String classId : classIds) {
+            cache.lstRightPush("ClassNotices_" + classId, noticeId);
+        }
+
+    }
+
+    public List<String> getLiveClasses(String noticeId) {
+        return cache.lstAll("NoticeClasses_" + noticeId);
+    }
+
+    public List<String> getClassNotices(String classId) {
+        return cache.lstAll("ClassNotices_" + classId);
+    }
+
+    public void view(String noticeId, String userId) {
+        cache.set("NoticeView_" + noticeId + userId, Boolean.TRUE);
+        cache.incr("NoticeViewCount_" + noticeId);
+    }
+
+    public boolean isView(String noticeId, String userId) {
+        Boolean view = cache.get("NoticeView_" + noticeId + userId);
+        return view == null ? Boolean.FALSE : view;
+    }
+
+    /**
+     * 记录已读的学员
+     *
+     * @param noticeId
+     * @param userId
+     */
+    public void addReadCount(String noticeId, String userId) {
+        cache.lstRemove("noticeReadCount" + noticeId, userId);//删除用户之前查看的记录,避免重复记录;
+        cache.lstRightPush("noticeReadCount" + noticeId, userId);
+    }
+
+    /**
+     * 获取已读的学员人数
+     */
+    public int getReadCount(String noticeId) {
+        List<Object> lstAll = cache.lstAll("noticeReadCount" + noticeId);
+        return lstAll.size();
+    }
+
+    /**
+     * 删除cache的key
+     */
+    public void deleteNoticeForCache(String noticeId) {
+        cache.delete("noticeReadCount" + noticeId);
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/notice/service/INoticeService.java b/src/main/java/com/qxueyou/scc/admin/notice/service/INoticeService.java
new file mode 100644
index 0000000..a5ab9df
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/notice/service/INoticeService.java
@@ -0,0 +1,133 @@
+package com.qxueyou.scc.admin.notice.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.notice.model.Notice;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface INoticeService {
+
+    /**
+     * 新增通知
+     *
+     * @param name     通知名称
+     * @param content  通知介绍
+     * @param type     通知类型
+     * @param classIds 班级ids
+     * @return
+     */
+    Result add(String name, String content, String type, List<String> classIds);
+
+    /**
+     * 修改通知
+     *
+     * @param noticeId 通知ID
+     * @param name     通知名称
+     * @param content  通知介绍
+     * @param type     通知类型
+     * @param classIds 班级ids
+     * @return
+     */
+    Result update(String noticeId, String name, String content, String type, List<String> classIds);
+
+    /**
+     * 查询通知
+     *
+     * @param noticeId 通知Id
+     * @return
+     */
+    Notice read(String noticeId);
+
+    /**
+     * 查询通知
+     *
+     * @param noticeIdLst 通知Id
+     * @return
+     */
+    List<Notice> readByStatus(Collection<String> noticeIdLst, short status);
+
+    /**
+     * 查询通知
+     *
+     * @param keyword  查询关键字
+     * @param pageNum  页码
+     * @param pageSize 每页数据大小
+     * @param sort     排序
+     * @return
+     */
+    List<Notice> list(String keyword, Integer pageNum, Integer pageSize, String createId, String sort);
+
+    /**
+     * 查询通知总数
+     *
+     * @param keyword 查询关键字
+     * @return
+     */
+    int listCount(String keyword, String createId);
+
+    /**
+     * 删除通知
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    Result delete(String noticeId);
+
+    /**
+     * 删除通知
+     *
+     * @param noticeIds 通知ID数组
+     * @return
+     */
+    Result delete(String[] noticeIds);
+
+    /**
+     * 发布通知
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    Result doIssue(String noticeId);
+
+    /**
+     * 发布通知
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    Result doIssue(String[] noticeIds);
+
+    /**
+     * 取消通知
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    Result doCancel(String noticeId);
+
+    /**
+     * 取消通知
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    Result doCancel(String[] noticeIds);
+
+
+    /**
+     * 读取通知班级
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    List<String> getNoticeClasses(String noticeId);
+
+    /**
+     * 查看通知
+     *
+     * @param noticeId 通知ID
+     * @return
+     */
+    Result view(String noticeId);
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/notice/service/impl/NoticeService.java b/src/main/java/com/qxueyou/scc/admin/notice/service/impl/NoticeService.java
new file mode 100644
index 0000000..fc542fd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/notice/service/impl/NoticeService.java
@@ -0,0 +1,198 @@
+package com.qxueyou.scc.admin.notice.service.impl;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.notice.dao.NoticeDAO;
+import com.qxueyou.scc.admin.notice.service.INoticeService;
+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.base.util.TraceUtils;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.notice.model.Notice;
+
+@Service
+public class NoticeService extends CommonAppService implements INoticeService {
+
+    @Autowired
+    NoticeDAO dao;
+    
+	@Autowired
+	IMsgInfoService msgInfoService;
+
+    @Override
+    public Result add(String name, String content, String type, List<String> classIds) {
+
+        Notice notice = new Notice();
+        TraceUtils.setCreateTrace(notice);
+
+        notice.setTitle(name);
+        notice.setContent(content);
+        notice.setNoticeTypeName(type);
+        notice.setStatus(Notice.STATUS_DRAFT);
+
+        save(notice);
+
+        dao.saveNoticeClasses(notice.getNoticeId(), classIds);
+
+        return new  Result(true,"",notice.getNoticeId());
+    }
+
+    @Override
+    public Result update(String noticeId, String name, String content, String type, List<String> classIds) {
+
+        Notice notice = read(noticeId);
+        TraceUtils.setUpdateTrace(notice);
+
+        notice.setTitle(name);
+        notice.setContent(content);
+        notice.setNoticeTypeName(type);
+
+        save(notice);
+
+        dao.saveNoticeClasses(notice.getNoticeId(), classIds);
+
+        return Result.SUCCESS;
+    }
+
+    @Override
+    public Notice read(String noticeId) {
+        return read(Notice.class, noticeId);
+    }
+
+    @Override
+    public List<Notice> readByStatus(Collection<String> noticeIdLst, short status) {
+        if (noticeIdLst.isEmpty()) {
+            noticeIdLst.add("noticeId");
+        }
+        String hql = "from Notice where  noticeId in (:noticeId) and status =:status order by createTime desc";
+        return findByComplexHql(hql, CollectionUtils.newObjectMap("noticeId", noticeIdLst, "status", status),
+                Notice.class);
+    }
+
+    @Override
+    public List<Notice> list(String keyword, Integer pageNum, Integer pageSize, String createId, String sort) {
+        String hql = "from Notice where deleteFlag is false and title like ? and createId=? ";
+        if (sort.equals("desc")) {
+            hql = hql.concat("order by createTime desc");
+        } else {
+            hql = hql.concat("order by createTime asc");
+        }
+
+        return findList(hql, new Pager(pageSize, pageNum), CollectionUtils.newList(keyword + "%", createId),
+                Notice.class);
+    }
+
+    @Override
+    public int listCount(String keyword, String createId) {
+        String hql = "from Notice where deleteFlag is false and title like ? and createId=?";
+
+        return findCount(hql, CollectionUtils.newList(keyword + "%", createId));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public Result delete(String noticeId) {
+        Notice notice = read(noticeId);
+        TraceUtils.setUpdateTrace(notice);
+        notice.setDeleteFlag(true);
+        save(notice);
+
+        dao.saveNoticeClasses(noticeId, Collections.EMPTY_LIST);
+
+        return Result.SUCCESS;
+    }
+
+    @Override
+    public Result delete(String[] noticeIds) {
+        for (String noticeId : noticeIds) {
+            delete(noticeId);
+            dao.deleteNoticeForCache(noticeId);
+        }
+        return Result.SUCCESS;
+    }
+
+    @Override
+    public Result doIssue(String noticeId) {
+        Notice notice = read(noticeId);
+
+        TraceUtils.setUpdateTrace(notice);
+        notice.setStatus(Notice.STATUS_ISSUED);
+        notice.setIssuedTime(new Date());
+
+        save(notice);
+        return Result.SUCCESS;
+    }
+
+    @Override
+    public Result doIssue(String[] noticeIds) {
+        for (String noticeId : noticeIds) {
+            doIssue(noticeId);
+            doSendhMsg(noticeId);
+        }
+        return Result.SUCCESS;
+    }
+    
+    
+    private void doSendhMsg(String noticeId){
+    	Notice  notice = this.read(noticeId);
+    	List<String> lstClassIds= dao.getLiveClasses(noticeId);
+    	
+    	if(lstClassIds == null || lstClassIds.size()==0){
+    		return ;
+    	}
+		//查询直播关联的班级
+		String hql = "select userId from StuStudent  where classId in (:classIds) and deleteFlag is false ";
+		
+		List<String> lstUserIds = this.findByComplexHql(hql, CollectionUtils.newObjectMap("classIds",lstClassIds.toArray(new String[lstClassIds.size()])), String.class);
+		
+		if(lstUserIds!=null && lstUserIds.size()>0){
+			Map<String,String> attrs = CollectionUtils.newStringMap("noticeId",notice.getNoticeId(),"title",notice.getTitle(),
+					"creator",notice.getCreator(),"noticeTypeName",notice.getNoticeTypeName());
+				
+			msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]), 
+											MsgInfo.TYPE_NOTICE," 发布了公告", attrs);
+		}
+	}
+    
+    @Override
+    public Result doCancel(String noticeId) {
+        return status(noticeId, Notice.STATUS_DRAFT);
+    }
+
+    @Override
+    public Result doCancel(String[] noticeIds) {
+        for (String noticeId : noticeIds) {
+            doCancel(noticeId);
+        }
+        return Result.SUCCESS;
+    }
+
+    @Override
+    public List<String> getNoticeClasses(String noticeId) {
+        return dao.getLiveClasses(noticeId);
+    }
+
+    private Result status(String noticeId, short status) {
+        Notice notice = read(noticeId);
+        TraceUtils.setUpdateTrace(notice);
+        notice.setStatus(status);
+        save(notice);
+        return Result.SUCCESS;
+    }
+
+    @Override
+    public Result view(String noticeId) {
+        return Result.SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java b/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
new file mode 100644
index 0000000..9702edb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
@@ -0,0 +1,155 @@
+package com.qxueyou.scc.admin.progress.dao;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.SubjectLectureProgressDetail;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.service.impl.StudyProgressUtils;
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+@Repository
+public class ProgressDAO extends BaseDAO {
+
+	public Progress getProgress(String progressTypeLecture, String targetId, String learnerId) {
+
+		String hql = "from Progress where type=:type and learnerId=:learnerId and targetId=:targetId";
+		Progress progress = findUniqueByHql(hql, CollectionUtils.newObjectMap("type", Progress.PROGRESS_TYPE_LECTURE,
+				"learnerId", learnerId, "targetId", targetId));
+
+		return progress;
+	}
+
+	/**
+	 * 根据targetId和learnerId获取进度
+	 * 
+	 * @param targetId
+	 *            targetId
+	 * @param learnerId
+	 *            学习者id
+	 * @return
+	 */
+	@Cacheable(value = "progress", key = "#targetId+#learnerId")
+	public int[][] getProgress(String targetId, String learnerId) {
+		List<SubjectLectureProgressDetail> lstDetail = this.find("from SubjectLectureProgressDetail where targetId = ? and learnerId = ? and deleteFlag is false", CollectionUtils.newList(targetId, learnerId), SubjectLectureProgressDetail.class);
+		if(lstDetail == null || lstDetail.isEmpty()) {
+			return new int[][] {};
+		}else {
+			 int[][] progress = new  int[lstDetail.size()][2];
+			 int i = 0;
+			 for(SubjectLectureProgressDetail objDetail : lstDetail) {
+				 progress[i++] = new int[] {objDetail.getStart(), objDetail.getEnd()};
+			 }
+			 
+			 return progress;
+		}
+	}
+
+	@CachePut(value = "progress", key = "#targetId+#learnerId")
+	public int[][] mergeProgress(String targetId, String learnerId, int start, int end, int[][] origProgress) {
+		return StudyProgressUtils.merge(origProgress, start, end);
+	}
+
+	/**
+	 * 获取学生的各个节点的学习进度,进度值
+	 * 
+	 * @param parentId
+	 * @param userId
+	 * @return
+	 */
+	public Map<String, Object> getItemProgress(String parentId, String userId) {
+		String getProgressAvgByHql = "select avg(percent) as progressPercent , sum(progressValue) as progressValue"
+				+ "  from  SubjectProgressTreeV  where  parentId =:parentId and id.userId =:userId";
+		List<Map<String, Object>> mapLst = findListWithMapByHql(getProgressAvgByHql,
+				CollectionUtils.newObjectMap("parentId", parentId, "userId", userId));
+		Map<String, Object> map = mapLst.get(0);
+		return map;
+	}
+
+	/**
+	 * 获取当前节点下的父节点
+	 * 
+	 * @param nodeId
+	 * @return
+	 */
+	public SubjectProgressTreeV getSubjectProgressTreeV(String nodeId, String userId) {
+		String hql = "from SubjectProgressTreeV where  id.nodeId =:nodeId and id.userId =:userId";
+		SubjectProgressTreeV subjectProgressTreeV = findUniqueByHql(hql,
+				CollectionUtils.newObjectMap("nodeId", nodeId, "userId", userId));
+		return subjectProgressTreeV;
+	}
+
+	/**
+	 * 根据subjectId获取章节列表
+	 * 
+	 * @param parentId
+	 * @param userId
+	 * @return
+	 */
+	public List<SubjectProgressTreeV> getSubjectChapterTreeVList(String parentId, String userId) {
+		String hql = "from SubjectProgressTreeV where  parentId =:parentId and id.userId =:userId and nodeType='chapter' order by createTime asc";
+		return findByComplexHql(hql, CollectionUtils.newObjectMap("parentId", parentId, "userId", userId),
+				SubjectProgressTreeV.class);
+	}
+
+	/**
+	 * 获取progress 对象
+	 */
+	public Progress getProgressObject(String targetId, String userId) {
+		return findUniqueByHql(
+				"from Progress where targetId =:targetId and learnerId =:userId  and deleteFlag is false",
+				CollectionUtils.newObjectMap("targetId", targetId, "userId", userId));
+	}
+
+	/**
+	 * 记录用户每个课程学习的位置
+	 */
+	@CachePut(value = "lastStudied", key = "#userId + #subjectId + #classId")
+	public Map<String, Object> putStudyById(String userId, String subjectId, String lectureId, String lectureParentId,
+			String classId) {
+		Map<String, Object> map = new HashMap<String, Object>(4);
+		Subject subject = this.read(Subject.class, subjectId);
+		map.put("subjectId", subjectId);
+		map.put("lectureId", lectureId);
+		map.put("lectureParentId", lectureParentId);
+		map.put("classId", classId);
+		map.put("subjectName", subject.getName());
+		return map;
+	}
+
+	@CachePut(value = "lastStudied", key = "#userId")
+	public Map<String, Object> putStudyByUserId(String userId, String subjectId, String lectureId,
+			String lectureParentId, String classId) {
+		Map<String, Object> map = new HashMap<String, Object>(4);
+		map.put("subjectId", subjectId);
+		map.put("lectureId", lectureId);
+		map.put("lectureParentId", lectureParentId);
+		map.put("classId", classId);
+		return map;
+	}
+
+	/**
+	 * 获取用户每个课程上次学习的数据
+	 */
+	@Cacheable(value = "lastStudied", key = "#userId + #subjectId +#classId")
+	public Map<String, Object> getStudyById(String userId, String subjectId, String classId) {
+		return new HashMap<String, Object>();
+	}
+
+	/**
+	 * 获取用户上次学习的数据
+	 */
+	@Cacheable(value = "lastStudied", key = "#userId")
+	public Map<String, Object> getStudyByUserId(String userId) {
+		return new HashMap<String, Object>();
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/model/Progress.java b/src/main/java/com/qxueyou/scc/admin/progress/model/Progress.java
new file mode 100644
index 0000000..6eb4cbc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/model/Progress.java
@@ -0,0 +1,267 @@
+package com.qxueyou.scc.admin.progress.model;
+// Generated 2018-3-19 17:09:33 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * Progress generated by hbm2java
+ */
+@Entity
+@Table(name = "progress")
+public class Progress implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = -1565188126862586738L;
+	private String progressId;
+	private String type;
+	private String tenantId;
+	private String learnerId;
+	private String learnerName;
+	private String targetName;
+	private String targetType;
+	private String targetId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	private BigDecimal progressValue;
+	private Double progressPercent;
+	private String progressUnit;
+	
+	public static final String PROGRESS_TYPE_CLASS = "class";
+	public static final String PROGRESS_TYPE_SUBJECT = "subject";
+	public static final String PROGRESS_TYPE_LECTURE = "lecture";
+	public static final String PROGRESS_TYPE_CHAPTER = "chapter";
+	public static final String PROGRESS_TYPE_RES = "res";
+	
+	public static final String TARGET_TYPE_VIDEO = "res_video";
+	public static final String TARGET_TYPE_AUDIO = "res_audio";
+	public static final String TARGET_TYPE_DOC = "res_doc";
+	
+	public Progress() {
+	}
+
+	public Progress(String progressId, Date createTime, Date updateTime, String creator, String createId,
+			String updator, String updateId, boolean deleteFlag) {
+		this.progressId = progressId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Progress(String progressId, String type, String tenantId, String learnerId, String learnerName,
+			String targetName, String targetType, String targetId, Date createTime, Date updateTime, String creator,
+			String createId, String updator, String updateId, boolean deleteFlag, BigDecimal progressValue,
+			String progressUnit) {
+		this.progressId = progressId;
+		this.type = type;
+		this.tenantId = tenantId;
+		this.learnerId = learnerId;
+		this.learnerName = learnerName;
+		this.targetName = targetName;
+		this.targetType = targetType;
+		this.targetId = targetId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.progressValue = progressValue;
+		this.progressUnit = progressUnit;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "PROGRESS_ID", unique = true, nullable = false, length = 32)
+	public String getProgressId() {
+		return this.progressId;
+	}
+
+	public void setProgressId(String progressId) {
+		this.progressId = progressId;
+	}
+
+	@Column(name = "TYPE", length = 32)
+	public String getType() {
+		return this.type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "LEARNER_ID", length = 128)
+	public String getLearnerId() {
+		return this.learnerId;
+	}
+
+	public void setLearnerId(String learnerId) {
+		this.learnerId = learnerId;
+	}
+
+	@Column(name = "LEARNER_NAME", length = 128)
+	public String getLearnerName() {
+		return this.learnerName;
+	}
+
+	public void setLearnerName(String learnerName) {
+		this.learnerName = learnerName;
+	}
+
+	@Column(name = "TARGET_NAME", length = 128)
+	public String getTargetName() {
+		return this.targetName;
+	}
+
+	public void setTargetName(String targetName) {
+		this.targetName = targetName;
+	}
+
+	@Column(name = "TARGET_TYPE", length = 128)
+	public String getTargetType() {
+		return this.targetType;
+	}
+
+	public void setTargetType(String targetType) {
+		this.targetType = targetType;
+	}
+
+	@Column(name = "TARGET_ID", length = 128)
+	public String getTargetId() {
+		return this.targetId;
+	}
+
+	public void setTargetId(String targetId) {
+		this.targetId = targetId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", nullable = false, length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", nullable = false, length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "PROGRESS_VALUE", precision = 20,scale=6)
+	public BigDecimal getProgressValue() {
+		return this.progressValue;
+	}
+
+	public void setProgressValue(BigDecimal progressValue) {
+		this.progressValue = progressValue;
+	}
+
+	@Column(name = "PROGRESS_UNIT", length = 10)
+	public String getProgressUnit() {
+		return this.progressUnit;
+	}
+
+	public void setProgressUnit(String progressUnit) {
+		this.progressUnit = progressUnit;
+	}
+
+	@Column(name = "PROGRESS_PERCENT", precision = 20,scale=6)
+	public Double getProgressPercent() {
+		return progressPercent;
+	}
+
+	public void setProgressPercent(Double progressPercent) {
+		this.progressPercent = progressPercent;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java b/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
new file mode 100644
index 0000000..7b3a8db
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
@@ -0,0 +1,183 @@
+package com.qxueyou.scc.admin.progress.model;
+// Generated 2018-3-19 17:09:33 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 学习进度明细
+ * 
+ * @author sven
+ *
+ */
+@Entity
+@Table(name = "SUBJECT_LECTURE_PROGRESS_DETAIL")
+public class SubjectLectureProgressDetail implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = -1565188126862586738L;
+	private String detailId;
+	private String progressId;
+	private int start;
+	private int end;
+	private String learnerId;
+	private String targetId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	
+	
+	public SubjectLectureProgressDetail() {
+	}
+
+	@Column(name = "PROGRESS_ID", length = 32)
+	public String getProgressId() {
+		return progressId;
+	}
+
+	public void setProgressId(String progressId) {
+		this.progressId = progressId;
+	}
+
+	public int getStart() {
+		return start;
+	}
+
+
+
+	public void setStart(int start) {
+		this.start = start;
+	}
+
+
+
+	public int getEnd() {
+		return end;
+	}
+
+
+
+	public void setEnd(int end) {
+		this.end = end;
+	}
+
+
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "DETAIL_ID", unique = true, nullable = false, length = 32)
+	public String getDetailId() {
+		return detailId;
+	}
+
+
+	public void setDetailId(String detailId) {
+		this.detailId = detailId;
+	}
+
+
+	@Column(name = "LEARNER_ID", length = 128)
+	public String getLearnerId() {
+		return this.learnerId;
+	}
+
+	public void setLearnerId(String learnerId) {
+		this.learnerId = learnerId;
+	}
+
+
+	@Column(name = "TARGET_ID", length = 128)
+	public String getTargetId() {
+		return this.targetId;
+	}
+
+	public void setTargetId(String targetId) {
+		this.targetId = targetId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", nullable = false, length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", nullable = false, length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeV.java b/src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeV.java
new file mode 100644
index 0000000..14415f7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeV.java
@@ -0,0 +1,105 @@
+package com.qxueyou.scc.admin.progress.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * MySubjectV generated by hbm2java
+ */
+@Entity
+@Table(name = "subject_progress_tree_v")
+public class SubjectProgressTreeV implements java.io.Serializable {
+
+    private static final long serialVersionUID = 1273830629154206698L;
+
+    private SubjectProgressTreeVId id;
+
+    private String parentId;
+    private String nodeType;
+    private String nodeName;
+    private Double percent;
+    private BigDecimal progressValue;
+    private Date createTime;
+
+    public SubjectProgressTreeV() {
+    }
+
+    public SubjectProgressTreeV(SubjectProgressTreeVId id) {
+        this.id = id;
+    }
+
+    @EmbeddedId
+    @AttributeOverrides({
+            @AttributeOverride(name = "nodeId", column = @Column(name = "NODE_ID", length = 32)),
+            @AttributeOverride(name = "userId", column = @Column(name = "USER_ID", nullable = false, length = 32)),
+    })
+    public SubjectProgressTreeVId getId() {
+        return this.id;
+    }
+
+    public void setId(SubjectProgressTreeVId id) {
+        this.id = id;
+    }
+
+    @Column(name = "PARENT_ID")
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    @Column(name = "NODE_TYPE")
+    public String getNodeType() {
+        return nodeType;
+    }
+
+    public void setNodeType(String nodeType) {
+        this.nodeType = nodeType;
+    }
+
+    @Column(name = "PERCENT")
+    public Double getPercent() {
+        return percent;
+    }
+
+    public void setPercent(Double percent) {
+        this.percent = percent;
+    }
+
+    @Column(name = "PROGRESS_VALUE")
+    public BigDecimal getProgressValue() {
+        return progressValue;
+    }
+
+    public void setProgressValue(BigDecimal progressValue) {
+        this.progressValue = progressValue;
+    }
+
+    @Column(name = "NODE_NAME")
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    public void setNodeName(String nodeName) {
+        this.nodeName = nodeName;
+    }
+
+    @Column(name = "CREATE_TIME")
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeVId.java b/src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeVId.java
new file mode 100644
index 0000000..70a6ff3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/model/view/SubjectProgressTreeVId.java
@@ -0,0 +1,70 @@
+package com.qxueyou.scc.admin.progress.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * MySubjectVId generated by hbm2java
+ */
+@Embeddable
+public class SubjectProgressTreeVId implements java.io.Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7879956542709004098L;
+	private String userId;
+	private String nodeId;
+
+	public SubjectProgressTreeVId() {
+	}
+
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "NODE_ID")
+	public String getNodeId() {
+		return this.nodeId;
+	}
+
+	public void setNodeId(String nodeId) {
+		this.nodeId = nodeId;
+	}
+
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof SubjectProgressTreeVId))
+			return false;
+		SubjectProgressTreeVId castOther = (SubjectProgressTreeVId) other;
+
+		return (
+				((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				
+				
+				&& ((this.getNodeId() == castOther.getNodeId()) || (this.getNodeId() != null
+						&& castOther.getNodeId() != null && this.getNodeId().equals(castOther.getNodeId())))
+				);
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		result = 37 * result + (getNodeId() == null ? 0 : this.getNodeId().hashCode());
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java
new file mode 100644
index 0000000..20cbc47
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java
@@ -0,0 +1,24 @@
+package com.qxueyou.scc.admin.progress.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface IDetailProgressService {
+	
+	/**
+	 * 新增学习记录
+	 * @param type 进度类型
+	 * @param targetId 学习目标id
+	 * @param learnerId 学习者id
+	 * @param start 学习开始位置
+	 * @param end 学习结束位置
+	 * @return
+	 */
+	Result addProgress(String targetId,String learnerId,int start,int end);
+	
+	/**
+	 * 返回进度类型
+	 * @return
+	 */
+	String getType();
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java
new file mode 100644
index 0000000..a85b5cf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.admin.progress.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.base.model.Result;
+
+public interface IProgressService {
+
+	/**
+	 * 查询学习进度
+	 * 
+	 * @return
+	 */
+	List<Progress> query(String type, String learnerId, List<String> targetId);
+
+	/**
+	 * 查询学习进度
+	 * 
+	 * @return
+	 */
+	List<Progress> query(String type, List<String> learnerId, String targetId);
+
+	/**
+	 * 查询学习记录
+	 * 
+	 * @param type
+	 *            进度类型
+	 * @param targetId
+	 *            学习目标id
+	 * @param learnerId
+	 *            学习者id
+	 * @return
+	 */
+	Progress query(String type, String targetId, String learnerId);
+
+	/**
+	 * 新增学习记录
+	 * 
+	 * @param type
+	 *            进度类型
+	 * @param targetId
+	 *            学习目标id
+	 * @param start
+	 *            学习开始位置
+	 * @param end
+	 *            学习结束位置
+	 * @return
+	 */
+	Result addProgress(String type, String targetId, int start, int end, String userId);
+	
+	List<SubjectProgressTreeV> getSubjectChapterTreeVList(String parentId,String userId);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java
new file mode 100644
index 0000000..3089db1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java
@@ -0,0 +1,137 @@
+package com.qxueyou.scc.admin.progress.service.impl;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.dao.ProgressDAO;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.service.IDetailProgressService;
+import com.qxueyou.scc.admin.progress.service.IProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+
+@Service
+public class ProgressService extends CommonAppService implements IProgressService {
+	public static final String SUBJECT_PROGRESS_STATISTIC = "subject_progress_statistic";
+
+	private final Logger log = LogManager.getLogger(ProgressService.class);
+
+	@Autowired
+	ICacheService cacheService;
+
+	@Autowired
+	ProgressDAO dao;
+
+	/**
+	 * 各类型课件进度服务实现
+	 */
+	private Map<String, IDetailProgressService> resItemServiceMap = new HashMap<String, IDetailProgressService>(6);
+
+	@Autowired
+	private ApplicationContext appContext;
+
+	@PostConstruct
+	private void init() {
+		addProgressService(appContext.getBean("LectureProgressService", IDetailProgressService.class));
+		addProgressService(appContext.getBean("ChapterProgressService", IDetailProgressService.class));
+		addProgressService(appContext.getBean("SubjectProgressService", IDetailProgressService.class));
+		addProgressService(appContext.getBean("ClassProgressService", IDetailProgressService.class));
+	}
+
+	private void addProgressService(IDetailProgressService service) {
+		resItemServiceMap.put(service.getType(), service);
+	}
+
+	@Override
+	public List<Progress> query(String type, String learnerId, List<String> targetId) {
+		return queryLst(type, learnerId, targetId);
+	}
+
+	@Override
+	public List<Progress> query(String type, List<String> learnerId, String targetId) {
+		return queryLst(type, learnerId, targetId);
+	}
+
+	@Override
+	public Progress query(String type, String targetId, String learnerId) {
+		String hql = "from Progress where type=:type and learnerId=:learnerId and targetId=:targetId";
+		return findUniqueByHql(hql,
+				CollectionUtils.newObjectMap("type", type, "learnerId", learnerId, "targetId", targetId));
+	}
+
+	private List<Progress> queryLst(String type, Object learnerId, Object targetId) {
+		String hql = "from Progress where type=:type and learnerId=:learnerId and targetId=:targetId";
+		return findByComplexHql(hql,
+				CollectionUtils.newObjectMap("type", type, "learnerId", learnerId, "targetId", targetId),
+				Progress.class);
+	}
+
+	@Override
+	public Result addProgress(String type, String targetId, int start, int end, String userId) {
+		String userId_ = StringUtils.isBlank(userId) ? ClientUtils.getUserId() : userId;
+		return resItemServiceMap.get(type).addProgress(targetId, userId_, start, end);
+	}
+
+	@Scheduled(cron = "0/2 * * * * ?")
+	protected void doTimer() {
+		String nodeIdOrUserId = cacheService.lstLeftPop(SUBJECT_PROGRESS_STATISTIC);
+
+		if (StringUtils.isBlank(nodeIdOrUserId)) {
+			return;
+		}
+		String[] ids = nodeIdOrUserId.split(",");
+		String nodeId = ids[0];
+		String userId = ids[1];
+		SubjectProgressTreeV subjectProgressTreeV = null;
+		try {
+
+			subjectProgressTreeV = dao.getSubjectProgressTreeV(nodeId, userId);
+			Map<String, Object> itemProgress = dao.getItemProgress(nodeId, userId);
+			Progress progress = dao.getProgressObject(nodeId, userId);
+			Double progressPercent = Double.valueOf(itemProgress.get("progressPercent").toString());
+			BigDecimal progressValue = new BigDecimal(itemProgress.get("progressValue").toString());
+			if (progress == null) {
+				String nodeType = subjectProgressTreeV.getNodeType();
+				this.addProgress(nodeType, nodeId, 0, 0, userId);
+				cacheService.lstRightPush(SUBJECT_PROGRESS_STATISTIC, nodeIdOrUserId);
+				return;
+			}
+			TraceUtils.setUpdateTrace(progress);
+			progress.setProgressPercent(progressPercent);
+			progress.setProgressValue(progressValue);
+			save(progress);
+
+		} catch (Exception e) {
+			log.error("保存异常", e);
+			return;
+		}
+
+		if (StringUtils.isNotBlank(subjectProgressTreeV.getParentId())) {
+			cacheService.lstRightPush(SUBJECT_PROGRESS_STATISTIC, subjectProgressTreeV.getParentId() + "," + userId);
+		}
+
+	}
+
+	@Override
+	public List<SubjectProgressTreeV> getSubjectChapterTreeVList(String parentId, String userId) {
+		return dao.getSubjectChapterTreeVList(parentId, userId);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
new file mode 100644
index 0000000..9caad71
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
@@ -0,0 +1,178 @@
+package com.qxueyou.scc.admin.progress.service.impl;
+
+
+/**
+ * 学习进度工具计算类
+ * 
+ * @author xiadehu
+ *
+ */
+public class StudyProgressUtils {
+
+	private final static int POS_BEFORE = 0;
+
+	private final static int POS_IN = 1;
+
+	private final static int POS_AFTER = 2;
+
+	/**
+	 * 新的学习进度和原有进度合并共有六种合并动作
+	 */
+	private final static int ACTION_INSERT = 0;
+
+	private final static int ACTION_MERGE_01 = 1;
+
+	private final static int ACTION_MERGE_02 = 2;
+
+	private final static int ACTION_MERGE_11 = 3;
+
+	private final static int ACTION_MERGE_12 = 4;
+
+	private final static int ACTION_CONTINUE = 5;
+
+	/**
+	 * 合并学习进度
+	 * 
+	 * @param orig
+	 *            已学习进度
+	 * @param start
+	 *            开始位置
+	 * @param end
+	 *            结束位置
+	 * @return
+	 */
+	public static int[][] merge(int[][] orig, int start, int end) {
+
+		// 中间合并结果
+		int[][] result = new int[orig.length + 1][2];
+
+		int j = 0;
+		int i = 0;
+		boolean breakFlag = false;
+
+		// 逐一对比判断已有学习进度
+		for (; i < orig.length; i++) {
+
+			int action = action(orig[i], start, end);
+
+			switch (action) {
+			case ACTION_INSERT: {
+				result[j++] = new int[] { start, end };
+				result[j++] = orig[i];
+				breakFlag = true;
+				break;
+			}
+			case ACTION_MERGE_01: {
+				result[j++] = new int[] { start, orig[i][1] };
+				breakFlag = true;
+				break;
+			}
+			case ACTION_MERGE_02:
+				break;
+			case ACTION_MERGE_11: {
+				result[j++] = orig[i];
+				breakFlag = true;
+				break;
+			}
+			case ACTION_MERGE_12: {
+				start = orig[i][0];
+				break;
+			}
+			case ACTION_CONTINUE: {
+				result[j++] = orig[i];
+				break;
+			}
+			}
+
+			if (breakFlag) {
+				break;
+			}
+		}
+
+		// 添加原有学习进度的剩余部分
+		for (i++; i < orig.length; i++) {
+			result[j++] = orig[i];
+		}
+
+		// 如果本次学习终止位置超出以往所有学习进度,则添加到最后
+		if (orig.length == 0 || pos(end, orig[orig.length - 1]) == POS_AFTER) {
+			result[j++] = new int[] { start, end };
+		}
+
+		// 最终合并结果,去掉中间合并结果的多出为空的元素
+		int[][] finalResult = new int[j][2];
+
+		for (int k = 0; k < result.length; k++) {
+			if (result[k][0] == 0 && result[k][1] == 0 && k>0) {
+				break;
+			}
+			finalResult[k] = result[k];
+		}
+
+		return finalResult;
+
+	}
+
+	/**
+	 * 统计学习进度
+	 * 
+	 * @param orig
+	 *            全部学习进度
+	 * @return
+	 */
+	public static int sum(int[][] orig) {
+
+		int sum = 0;
+
+		for (int[] item : orig) {
+			sum += (item[1] - item[0] + 1);
+		}
+		return sum;
+
+	}
+
+	private static int action(int[] segment, int start, int end) {
+		int startPos = pos(start, segment);
+		int endPos = pos(end, segment);
+
+		if (POS_BEFORE == endPos) {
+			return ACTION_INSERT;
+		}
+
+		if (POS_BEFORE == startPos && POS_IN == endPos) {
+			return ACTION_MERGE_01;
+		}
+
+		if (POS_BEFORE == startPos && POS_AFTER == endPos) {
+			return ACTION_MERGE_02;
+		}
+
+		if (POS_IN == startPos && POS_IN == endPos) {
+			return ACTION_MERGE_11;
+		}
+
+		if (POS_IN == startPos && POS_AFTER == endPos) {
+			return ACTION_MERGE_12;
+		}
+
+		if (POS_AFTER == startPos) {
+			return ACTION_CONTINUE;
+		}
+
+		return 0;
+
+	}
+
+	private static int pos(int index, int[] range) {
+		if (index < range[0]) {
+			return POS_BEFORE;
+		}
+		if (index >= range[0] && index <= range[1]) {
+			return POS_IN;
+		}
+		return POS_AFTER;
+	}
+
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java
new file mode 100644
index 0000000..073637e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java
@@ -0,0 +1,37 @@
+package com.qxueyou.scc.admin.progress.service.impl.item;
+
+import java.math.BigDecimal;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.service.IDetailProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+
+@Service("ChapterProgressService")
+public class ChapterProgressService extends CommonAppService implements IDetailProgressService {
+
+	@Override
+	public Result addProgress(String targetId, String learnerId, int start, int end) {
+		Progress p = new Progress();
+		TraceUtils.setCreateTrace(p);
+		p.setLearnerId(learnerId);
+		p.setLearnerName(ClientUtils.getUserName());
+		p.setProgressUnit("s");
+		p.setProgressValue(BigDecimal.ZERO);
+		p.setTargetId(targetId);
+		p.setType(Progress.PROGRESS_TYPE_CHAPTER);
+		p.setProgressPercent(0d);
+		save(p);
+		return new Result(true);
+	}
+
+	@Override
+	public String getType() {
+		return Progress.PROGRESS_TYPE_CHAPTER;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java
new file mode 100644
index 0000000..8135abd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java
@@ -0,0 +1,38 @@
+package com.qxueyou.scc.admin.progress.service.impl.item;
+
+import java.math.BigDecimal;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.service.IDetailProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+
+@Service(value = "ClassProgressService")
+public class ClassProgressService extends CommonAppService implements IDetailProgressService {
+
+	@Override
+	public Result addProgress(String targetId, String learnerId, int start, int end) {
+		Progress p = new Progress();
+		TraceUtils.setCreateTrace(p);
+		p.setLearnerId(learnerId);
+		p.setLearnerName(ClientUtils.getUserName());
+		p.setProgressUnit("s");
+		p.setProgressValue(BigDecimal.ZERO);
+		p.setTargetId(targetId);
+		p.setType(Progress.PROGRESS_TYPE_CLASS);
+		p.setProgressPercent(0d);
+		save(p);
+		return new Result(true);
+	}
+
+	@Override
+	public String getType() {
+
+		return Progress.PROGRESS_TYPE_CLASS;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java
new file mode 100644
index 0000000..f447c80
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java
@@ -0,0 +1,66 @@
+package com.qxueyou.scc.admin.progress.service.impl.item;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.service.IDetailProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+
+@Service("LectureProgressService")
+public class LectureProgressService extends CommonAppService implements IDetailProgressService {
+	
+	@Autowired
+	IClassLectureService lectureService;
+	
+	/**
+	 * 各类型课件进度服务实现
+	 */
+	private Map<String, IDetailProgressService> resItemServiceMap = new HashMap<String, IDetailProgressService>(6);
+	
+	@Autowired
+    private ApplicationContext appContext;
+
+	@PostConstruct
+	private void init() {
+		addLectureProgressService(appContext.getBean("LectureVideoProgressService",IDetailProgressService.class));
+		addLectureProgressService(appContext.getBean("LectureAudioProgressService",IDetailProgressService.class));
+		addLectureProgressService(appContext.getBean("LectureDocProgressService",IDetailProgressService.class));
+	}
+	
+	private void addLectureProgressService(IDetailProgressService service) {
+		resItemServiceMap.put(service.getType(), service);
+	}
+	
+
+	@Override
+	public Result addProgress(String targetId,String learnerId, int start, int end) {
+		ClsSubjectLecture lecture = lectureService.readClsLecture(targetId);
+		
+		String lectureType = null;
+		if(lecture == null) {
+			lectureType = this.read(SubjectLecture.class, targetId).getLectureType();
+		}else {
+			lectureType = lecture.getLectureType();
+		}
+		
+		return resItemServiceMap.get(lectureType).addProgress(targetId, learnerId, start, end);
+		
+	}
+	
+	@Override
+	public String getType() {
+		return Progress.PROGRESS_TYPE_LECTURE;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java
new file mode 100644
index 0000000..652dea4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java
@@ -0,0 +1,37 @@
+package com.qxueyou.scc.admin.progress.service.impl.item;
+
+import java.math.BigDecimal;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.service.IDetailProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+
+@Service("SubjectProgressService")
+public class SubjectProgressService extends CommonAppService implements IDetailProgressService {
+
+	@Override
+	public Result addProgress(String targetId, String learnerId, int start, int end) {
+		Progress p = new Progress();
+		TraceUtils.setCreateTrace(p);
+		p.setLearnerId(learnerId);
+		p.setLearnerName(ClientUtils.getUserName());
+		p.setProgressUnit("s");
+		p.setProgressValue(BigDecimal.ZERO);
+		p.setTargetId(targetId);
+		p.setType(Progress.PROGRESS_TYPE_SUBJECT);
+		p.setProgressPercent(0d);
+		save(p);
+		return new Result(true);
+	}
+
+	@Override
+	public String getType() {
+		return Progress.PROGRESS_TYPE_SUBJECT;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureAudioProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureAudioProgressService.java
new file mode 100644
index 0000000..e0b2ed0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureAudioProgressService.java
@@ -0,0 +1,42 @@
+package com.qxueyou.scc.admin.progress.service.impl.lecture;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.LectureAudioV;
+
+@Service("LectureAudioProgressService")
+public class LectureAudioProgressService extends LectureVideoProgressService {
+
+	private static final int ERR_NO_SECONDS = 501;
+
+	@Override
+	public String getType() {
+		return SubjectLecture.TYPE_AUDIO;
+	}
+
+	/**
+	 * 获取进度百分比
+	 * 
+	 * @param targetId
+	 * @param sum
+	 * @return
+	 */
+	@Override
+	public double getProgressPercent(String targetId, int sum) {
+
+		LectureAudioV lectureAudio = lectureService.readAudioLecture(targetId);
+
+		return Math.min((double) sum / (double) lectureAudio.getSeconds(), 1.0d);
+	}
+
+	@Override
+	public Result checkLecture(String targetId) {
+		LectureAudioV lectureAudio = lectureService.readAudioLecture(targetId);
+		if (lectureAudio.getSeconds() == null) {
+			return new Result(false, ERR_NO_SECONDS);
+		}
+		return new Result(true);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java
new file mode 100644
index 0000000..eb463b0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java
@@ -0,0 +1,137 @@
+package com.qxueyou.scc.admin.progress.service.impl.lecture;
+
+import java.math.BigDecimal;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.dao.ProgressDAO;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.SubjectLectureProgressDetail;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.service.IDetailProgressService;
+import com.qxueyou.scc.admin.progress.service.impl.ProgressService;
+import com.qxueyou.scc.admin.progress.service.impl.StudyProgressUtils;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+
+@Service
+public class LectureCommonProgressService extends CommonAppService implements IDetailProgressService {
+
+	@Autowired
+	ICacheService cacheService;
+
+	@Autowired
+	ProgressDAO dao;
+
+	@Override
+	public Result addProgress(String targetId, String learnerId, int start, int end) {
+
+		if (start > end || start < 0 || end < 0) {
+			return new Result(false, "invalid arguments");
+		}
+
+		int[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId));
+
+		if (!checkLecture(targetId).isSuccess()) {
+			return checkLecture(targetId);
+		}
+
+		int sum = StudyProgressUtils.sum(progress);
+
+		Progress p = dao.getProgress(Progress.PROGRESS_TYPE_LECTURE, targetId, learnerId);
+
+		if (p == null) {
+			p = newProgress(targetId, learnerId, sum);
+		} else {
+			updateProgress(targetId, p, sum);
+		}
+		
+		//保存学习记录明细
+		this.saveProgressDetail(start, end, targetId, p.getProgressId(), learnerId);
+
+		SubjectProgressTreeV subjectProgressTreeV = dao.getSubjectProgressTreeV(targetId, learnerId);
+
+		if(subjectProgressTreeV != null) {
+			cacheService.lstRightPush(ProgressService.SUBJECT_PROGRESS_STATISTIC,
+					subjectProgressTreeV.getParentId() + "," + learnerId);
+		}
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("percent", getProgressPercent(targetId, sum)));
+	}
+
+	protected Result checkLecture(String targetId) {
+		return new Result(true);
+	}
+	
+	/**
+	 * 保存学习记录明细
+	 * 
+	 * @param start
+	 * @param end
+	 * @param targetId
+	 * @param progressId
+	 * @param learnerId
+	 */
+	private void saveProgressDetail(int start, int end, String targetId, String progressId, String learnerId) {
+		SubjectLectureProgressDetail detail = new SubjectLectureProgressDetail();
+		detail.setDeleteFlag(false);
+		detail.setEnd(end);
+		detail.setStart(start);
+		detail.setTargetId(targetId);
+		detail.setProgressId(progressId);
+		detail.setLearnerId(learnerId);
+		
+		TraceUtils.setCreateTrace(detail);
+		
+		this.save(detail);
+	}
+
+	/**
+	 * 获取进度百分比
+	 * 
+	 * @param targetId
+	 * @param sum
+	 * @return
+	 */
+	protected double getProgressPercent(String targetId, int sum) {
+		return 1.00d;
+	}
+
+	@Override
+	public String getType() {
+		return Progress.PROGRESS_TYPE_LECTURE;
+	}
+
+	protected void updateProgress(String targetId, Progress p, int sum) {
+
+		TraceUtils.setUpdateTrace(p);
+		p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
+		p.setProgressPercent(1d);
+
+		save(p);
+
+	}
+
+	protected Progress newProgress(String targetId, String learnerId, int sum) {
+
+		Progress p = new Progress();
+		TraceUtils.setCreateTrace(p);
+
+		p.setLearnerId(learnerId);
+		p.setLearnerName(ClientUtils.getUserName());
+		p.setProgressUnit("s");
+		p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
+		p.setTargetId(targetId);
+		p.setType(Progress.PROGRESS_TYPE_LECTURE);
+		p.setProgressPercent(1d);
+		save(p);
+		
+		return p;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java
new file mode 100644
index 0000000..a743f45
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.admin.progress.service.impl.lecture;
+
+import java.math.BigDecimal;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.LectureDocV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+
+@Service("LectureDocProgressService")
+public class LectureDocProgressService extends LectureCommonProgressService {
+
+	@Autowired
+	ILectureService lectureService;
+
+	@Override
+	public String getType() {
+		return SubjectLecture.TYPE_DOC;
+	}
+
+	/**
+	 * 获取进度百分比
+	 * 
+	 * @param targetId
+	 * @param sum
+	 * @return
+	 */
+	@Override
+	public double getProgressPercent(String targetId, int sum) {
+
+		LectureDocV LectureDoc = lectureService.readDocLecture(targetId);
+
+		return Math.min((double) sum / (double) LectureDoc.getDocPages(), 1.0d);
+	}
+
+	@Override
+	public Progress newProgress(String targetId, String learnerId, int sum) {
+
+		Progress p = new Progress();
+		TraceUtils.setCreateTrace(p);
+
+		p.setLearnerId(learnerId);
+		p.setLearnerName(ClientUtils.getUserName());
+		p.setProgressUnit("s");
+		p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
+		p.setTargetId(targetId);
+		p.setType(Progress.PROGRESS_TYPE_LECTURE);
+		p.setProgressPercent(getProgressPercent(targetId, sum));
+
+		save(p);
+		
+		return p;
+	}
+
+	@Override
+	public void updateProgress(String targetId, Progress p, int sum) {
+
+		TraceUtils.setUpdateTrace(p);
+		p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
+		if(p.getProgressPercent() == null || getProgressPercent(targetId, sum)>p.getProgressPercent()) {
+			p.setProgressPercent(getProgressPercent(targetId, sum));
+		}
+
+		save(p);
+
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java
new file mode 100644
index 0000000..5b507a7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java
@@ -0,0 +1,72 @@
+package com.qxueyou.scc.admin.progress.service.impl.lecture;
+
+import java.math.BigDecimal;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.LectureVideoV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+
+@Service("LectureVideoProgressService")
+public class LectureVideoProgressService extends LectureCommonProgressService {
+
+	@Autowired
+	ILectureService lectureService;
+
+	@Override
+	public String getType() {
+		return SubjectLecture.TYPE_VIDEO;
+	}
+
+	/**
+	 * 获取进度百分比
+	 * 
+	 * @param targetId
+	 * @param sum
+	 * @return
+	 */
+	protected double getProgressPercent(String targetId, int sum) {
+
+		LectureVideoV lectureVideo = lectureService.readVideoLecture(targetId);
+
+		return Math.min((double) sum / (double) lectureVideo.getSeconds(), 1.0d);
+	}
+
+	@Override
+	public Progress newProgress(String targetId, String learnerId, int sum) {
+
+		Progress p = new Progress();
+		TraceUtils.setCreateTrace(p);
+
+		p.setLearnerId(learnerId);
+		p.setLearnerName(ClientUtils.getUserName());
+		p.setProgressUnit("s");
+		p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
+		p.setTargetId(targetId);
+		p.setType(Progress.PROGRESS_TYPE_LECTURE);
+		p.setProgressPercent(getProgressPercent(targetId, sum));
+
+		save(p);
+		
+		return p;
+	}
+
+	@Override
+	public void updateProgress(String targetId, Progress p, int sum) {
+
+		TraceUtils.setUpdateTrace(p);
+		p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
+		if(p.getProgressPercent() == null || getProgressPercent(targetId, sum)>p.getProgressPercent()) {
+			p.setProgressPercent(getProgressPercent(targetId, sum));
+		}
+
+		save(p);
+
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/dao/ExamScoreVDAO.java b/src/main/java/com/qxueyou/scc/admin/score/dao/ExamScoreVDAO.java
new file mode 100644
index 0000000..759c3b4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/dao/ExamScoreVDAO.java
@@ -0,0 +1,24 @@
+package com.qxueyou.scc.admin.score.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+@Repository
+public class ExamScoreVDAO extends BaseDAO {
+
+	public int getExamCount(String classId) {
+
+		String hql = "select count(distinct id.examId) from ExamScoreV where classId=?";
+
+		return this.findCount(hql, CollectionUtils.newList(classId));
+	}
+
+	public int getToSubmitExamCount(String classId) {
+
+		String hql = "from ExamScoreV where classId=? and coalesce(score,-1) = -1";
+
+		return this.findCount(hql, CollectionUtils.newList(classId));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/dao/HomeworkScoreVDAO.java b/src/main/java/com/qxueyou/scc/admin/score/dao/HomeworkScoreVDAO.java
new file mode 100644
index 0000000..6481c54
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/dao/HomeworkScoreVDAO.java
@@ -0,0 +1,44 @@
+package com.qxueyou.scc.admin.score.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+
+@Repository
+public class HomeworkScoreVDAO extends BaseDAO {
+
+	public int getHomeworkCount(String classId) {
+
+		String hql = "select count(distinct id.homeworkId) from HomeworkScoreV where classId=?";
+
+		return this.findCount(hql, CollectionUtils.newList(classId));
+	}
+	
+	public int getHomeworkToAuditCount(String classId) {
+
+		String hql = "from HomeworkScoreV where classId=? and completeStatus=?";
+
+		return this.findCount(hql, CollectionUtils.newList(classId,
+				String.valueOf(ExerciseCompleteInfo.STATUS_COMMIT)));
+	}
+	
+	public int getHomeworkHasAuditCount(String classId) {
+
+		String hql = "from HomeworkScoreV where classId=? and completeStatus=?";
+
+		return this.findCount(hql, CollectionUtils.newList(classId,
+				String.valueOf(ExerciseCompleteInfo.STATUS_CHECKED)));
+	}
+	
+	public int getHomeworkNoSubmitCount(String classId) {
+
+		String hql = "from HomeworkScoreV where classId=? and coalesce(completeStatus,0) in(?,?)";
+
+		return this.findCount(hql, CollectionUtils.newList(classId,
+				String.valueOf(ExerciseCompleteInfo.STATUS_DRAFT),
+				String.valueOf(ExerciseCompleteInfo.STATUS_REDO)));
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/model/Score.java b/src/main/java/com/qxueyou/scc/admin/score/model/Score.java
new file mode 100644
index 0000000..b12e2bc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/model/Score.java
@@ -0,0 +1,242 @@
+package com.qxueyou.scc.admin.score.model;
+// Generated 2018-3-19 17:09:33 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * Score generated by hbm2java
+ */
+@Entity
+@Table(name = "score")
+public class Score implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = -198150936385791334L;
+	private String scoreId;
+	private String type;
+	private String tenantId;
+	private String learnerId;
+	private String learnerName;
+	private String targetName;
+	private String targetType;
+	private String targetId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	private BigDecimal progressValue;
+	private String progressUnit;
+
+	public Score() {
+	}
+
+	public Score(String scoreId, Date createTime, Date updateTime, String creator, String createId, String updator,
+			String updateId, boolean deleteFlag) {
+		this.scoreId = scoreId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Score(String scoreId, String type, String tenantId, String learnerId, String learnerName, String targetName,
+			String targetType, String targetId, Date createTime, Date updateTime, String creator, String createId,
+			String updator, String updateId, boolean deleteFlag, BigDecimal progressValue, String progressUnit) {
+		this.scoreId = scoreId;
+		this.type = type;
+		this.tenantId = tenantId;
+		this.learnerId = learnerId;
+		this.learnerName = learnerName;
+		this.targetName = targetName;
+		this.targetType = targetType;
+		this.targetId = targetId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.progressValue = progressValue;
+		this.progressUnit = progressUnit;
+	}
+
+	@Id
+
+	@Column(name = "SCORE_ID", unique = true, nullable = false, length = 32)
+	public String getScoreId() {
+		return this.scoreId;
+	}
+
+	public void setScoreId(String scoreId) {
+		this.scoreId = scoreId;
+	}
+
+	@Column(name = "TYPE", length = 32)
+	public String getType() {
+		return this.type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "LEARNER_ID", length = 128)
+	public String getLearnerId() {
+		return this.learnerId;
+	}
+
+	public void setLearnerId(String learnerId) {
+		this.learnerId = learnerId;
+	}
+
+	@Column(name = "LEARNER_NAME", length = 128)
+	public String getLearnerName() {
+		return this.learnerName;
+	}
+
+	public void setLearnerName(String learnerName) {
+		this.learnerName = learnerName;
+	}
+
+	@Column(name = "TARGET_NAME", length = 128)
+	public String getTargetName() {
+		return this.targetName;
+	}
+
+	public void setTargetName(String targetName) {
+		this.targetName = targetName;
+	}
+
+	@Column(name = "TARGET_TYPE", length = 128)
+	public String getTargetType() {
+		return this.targetType;
+	}
+
+	public void setTargetType(String targetType) {
+		this.targetType = targetType;
+	}
+
+	@Column(name = "TARGET_ID", length = 128)
+	public String getTargetId() {
+		return this.targetId;
+	}
+
+	public void setTargetId(String targetId) {
+		this.targetId = targetId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", nullable = false, length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", nullable = false, length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "PROGRESS_VALUE", precision = 10)
+	public BigDecimal getProgressValue() {
+		return this.progressValue;
+	}
+
+	public void setProgressValue(BigDecimal progressValue) {
+		this.progressValue = progressValue;
+	}
+
+	@Column(name = "PROGRESS_UNIT", length = 10)
+	public String getProgressUnit() {
+		return this.progressUnit;
+	}
+
+	public void setProgressUnit(String progressUnit) {
+		this.progressUnit = progressUnit;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreV.java b/src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreV.java
new file mode 100644
index 0000000..fc75695
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreV.java
@@ -0,0 +1,109 @@
+package com.qxueyou.scc.admin.score.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * ExamScoreV generated by hbm2java
+ */
+@Entity
+@Table(name = "exam_score_v")
+public class ExamScoreV implements java.io.Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2126959981877903563L;
+
+	private ExamScoreVId id;
+
+	private String subjectId;
+	private String classId;
+	private String userName;
+	private String examName;
+	private BigDecimal score;
+	private Date submitTime;
+
+	public ExamScoreV() {
+	}
+
+	public ExamScoreV(ExamScoreVId id) {
+		this.id = id;
+	}
+
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "examId", column = @Column(name = "EXAM_ID")),
+			@AttributeOverride(name = "userId", column = @Column(name = "USER_ID")),
+			})
+	public ExamScoreVId getId() {
+		return this.id;
+	}
+
+	public void setId(ExamScoreVId id) {
+		this.id = id;
+	}
+
+	@Column(name = "SUBJECT_ID")
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "CLASS_ID")
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "USER_NAME")
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	@Column(name = "EXAM_NAME")
+	public String getExamName() {
+		return examName;
+	}
+
+	public void setExamName(String examName) {
+		this.examName = examName;
+	}
+
+	@Column(name = "SCORE")
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	@Column(name = "SUBMIT_TIME")
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreVId.java b/src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreVId.java
new file mode 100644
index 0000000..7cfe7d5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/model/view/ExamScoreVId.java
@@ -0,0 +1,66 @@
+package com.qxueyou.scc.admin.score.model.view;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * ExamScoreVId generated by hbm2java
+ */
+@Embeddable
+public class ExamScoreVId implements java.io.Serializable {
+
+	private static final long serialVersionUID = -4932822579305027322L;
+	private String examId;
+	private String userId;
+
+	public ExamScoreVId() {
+	}
+
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "EXAM_ID")
+	public String getExamId() {
+		return this.examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof ExamScoreVId))
+			return false;
+		ExamScoreVId castOther = (ExamScoreVId) other;
+
+		return (
+				((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				
+				
+				&& ((this.getExamId() == castOther.getExamId()) || (this.getExamId() != null
+						&& castOther.getExamId() != null && this.getExamId().equals(castOther.getExamId())))
+				);
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		result = 37 * result + (getExamId() == null ? 0 : this.getExamId().hashCode());
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreV.java b/src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreV.java
new file mode 100644
index 0000000..10462b0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreV.java
@@ -0,0 +1,105 @@
+package com.qxueyou.scc.admin.score.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * HomeworkScoreV generated by hbm2java
+ */
+@Entity
+@Table(name = "homework_score_v")
+public class HomeworkScoreV implements java.io.Serializable {
+
+	private static final long serialVersionUID = 1273830629154206698L;
+
+	private HomeworkScoreVId id;
+
+	private String userName;
+	private String homeworkName;
+	private BigDecimal score;
+	private String subjectId;
+	private String classId;
+	private String completeStatus;
+
+	public HomeworkScoreV() {
+	}
+
+	public HomeworkScoreV(HomeworkScoreVId id) {
+		this.id = id;
+	}
+
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "homeworkId", column = @Column(name = "HOMEWORK_ID", length = 32)),
+			@AttributeOverride(name = "userId", column = @Column(name = "USER_ID", length = 32)),
+			})
+	public HomeworkScoreVId getId() {
+		return this.id;
+	}
+
+	public void setId(HomeworkScoreVId id) {
+		this.id = id;
+	}
+
+	@Column(name = "USER_NAME")
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	@Column(name = "HOMEWORK_NAME")
+	public String getHomeworkName() {
+		return homeworkName;
+	}
+
+	public void setHomeworkName(String homeworkName) {
+		this.homeworkName = homeworkName;
+	}
+
+	@Column(name = "SCORE")
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	@Column(name = "SUBJECT_ID")
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "CLASS_ID")
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "COMPLETE_STATUS")
+	public String getCompleteStatus() {
+		return completeStatus;
+	}
+
+	public void setCompleteStatus(String completeStatus) {
+		this.completeStatus = completeStatus;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreVId.java b/src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreVId.java
new file mode 100644
index 0000000..0cba1d6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/model/view/HomeworkScoreVId.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.admin.score.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * HomeworkScoreVId generated by hbm2java
+ */
+@Embeddable
+public class HomeworkScoreVId implements java.io.Serializable {
+
+	private static final long serialVersionUID = -848584025519245095L;
+	private String userId;
+	private String homeworkId;
+
+	public HomeworkScoreVId() {
+	}
+
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "HOMEWORK_ID")
+	public String getHomeworkId() {
+		return this.homeworkId;
+	}
+
+	public void setHomeworkId(String homeworkId) {
+		this.homeworkId = homeworkId;
+	}
+
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof HomeworkScoreVId))
+			return false;
+		HomeworkScoreVId castOther = (HomeworkScoreVId) other;
+
+		return (
+				((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				
+				
+				&& ((this.getHomeworkId() == castOther.getHomeworkId()) || (this.getHomeworkId() != null
+						&& castOther.getHomeworkId() != null && this.getHomeworkId().equals(castOther.getHomeworkId())))
+				);
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		result = 37 * result + (getHomeworkId() == null ? 0 : this.getHomeworkId().hashCode());
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java b/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java
new file mode 100644
index 0000000..6c4d33a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java
@@ -0,0 +1,21 @@
+package com.qxueyou.scc.admin.score.service;
+
+import java.util.Map;
+
+public interface IScoreService {
+
+	/**
+	 * 获取班级考试成绩信息
+	 * @param classId
+	 * @return
+	 */
+	Map<String,Object> queryClassExamScoreInfo(String classId);
+	
+	/**
+	 * 获取班级作业成绩信息
+	 * @param classId
+	 * @return
+	 */
+	Map<String,Object> queryClassHomeworkScoreInfo(String classId);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java b/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java
new file mode 100644
index 0000000..db5c2c9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java
@@ -0,0 +1,46 @@
+package com.qxueyou.scc.admin.score.service.impl;
+
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.score.dao.ExamScoreVDAO;
+import com.qxueyou.scc.admin.score.dao.HomeworkScoreVDAO;
+import com.qxueyou.scc.admin.score.service.IScoreService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+@Service
+public class ScoreService extends CommonAppService implements IScoreService {
+	
+	@Autowired
+	HomeworkScoreVDAO homeworkDao;
+	
+	@Autowired
+	ExamScoreVDAO examDao;
+
+	@Override
+	public Map<String,Object> queryClassExamScoreInfo(String classId) {
+		
+		return CollectionUtils.newObjectMap(
+				"examCount",examDao.getExamCount(classId),
+				"examHasAuditCount",examDao.getExamCount(classId),
+				"examToAuditCount",0,
+				"examNoSubmitCount",examDao.getToSubmitExamCount(classId)
+				);
+		
+	}
+
+	@Override
+	public Map<String,Object> queryClassHomeworkScoreInfo(String classId) {
+		
+		return CollectionUtils.newObjectMap(
+				"homeworkCount",homeworkDao.getHomeworkCount(classId),
+				"homeworkHasAuditCount",homeworkDao.getHomeworkHasAuditCount(classId),
+				"homeworkToAuditCount",homeworkDao.getHomeworkToAuditCount(classId),
+				"homeworkNoSubmitCount",homeworkDao.getHomeworkNoSubmitCount(classId)
+				);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/teacher/dao/TeacherDAO.java b/src/main/java/com/qxueyou/scc/admin/teacher/dao/TeacherDAO.java
new file mode 100644
index 0000000..14ec93b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/teacher/dao/TeacherDAO.java
@@ -0,0 +1,21 @@
+package com.qxueyou.scc.admin.teacher.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+@Repository
+public class TeacherDAO extends BaseDAO {
+
+	public boolean exists(String teacherNo) {
+		return findCount("from UserTeacher where deleteFlag is false and teacherNo = ?",
+				CollectionUtils.newList(teacherNo)) > 0;
+	}
+
+	public boolean exists(String mobilePhone, String exceptTeacherId) {
+		return findCount("from UserTeacher where deleteFlag is false and mobilePhone=? and teacherId!=?",
+				CollectionUtils.newList(mobilePhone, exceptTeacherId)) > 0;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/teacher/service/ITeacherService.java b/src/main/java/com/qxueyou/scc/admin/teacher/service/ITeacherService.java
new file mode 100644
index 0000000..d07dda5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/teacher/service/ITeacherService.java
@@ -0,0 +1,80 @@
+package com.qxueyou.scc.admin.teacher.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.user.model.UserTeacher;
+
+public interface ITeacherService {
+	/**
+	 * 教师管理新增
+	 */
+	Result add(String teacherName, String password, String mobilePhone, String teacherNo);
+
+	/**
+	 * 更新
+	 */
+	Result update(String teacherId, String teacherName, String account, String password, String mobilePhone,
+			String teacherNo);
+
+	/**
+	 * 教师管理显示列表
+	 */
+	List<UserTeacher> lstTeacher(String keyword, Integer pageSize, Integer pageNum);
+
+	/**
+	 * 删除教师
+	 */
+	Result deleteTeacher(String[] teacherIds);
+
+	/**
+	 * 
+	 * @param keyword
+	 * @return
+	 */
+	int findTeacherCount(String keyword);
+
+	/**
+	 * 新增班级获取教师列表
+	 */
+	List<UserTeacher> LstTeacher4Cls();
+
+	/**
+	 * 角色管理获取教师列表
+	 * 
+	 * @param keyword
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<Map<String, Object>> findLstToRole(String keyword, Integer pageSize, Integer pageNum, String roleId);
+
+	/**
+	 * 角色管理获取教师总条数
+	 * 
+	 * @param roleId
+	 * @param keyword
+	 * @return
+	 */
+	int findLstCountToRole(String roleId, String keyword);
+
+	/**
+	 * 获取userId
+	 */
+	String getTeacherIdByUserId(String teacherId);
+
+	/**
+	 * 获取userId
+	 */
+	UserTeacher getTeacherByUserId(String userId);
+	
+	/**
+	 * 获取教师信息
+	 * 
+	 * @param teacherId
+	 * @return
+	 */
+	public Result getTeacherInfo();
+
+}
diff --git a/src/main/java/com/qxueyou/scc/admin/teacher/service/impl/TeacherService.java b/src/main/java/com/qxueyou/scc/admin/teacher/service/impl/TeacherService.java
new file mode 100644
index 0000000..3a00d5e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/admin/teacher/service/impl/TeacherService.java
@@ -0,0 +1,237 @@
+package com.qxueyou.scc.admin.teacher.service.impl;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.QClsClass;
+import com.qxueyou.scc.admin.classes.model.QClsClassReSubject;
+import com.qxueyou.scc.admin.teacher.dao.TeacherDAO;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.student.model.QStuStudent;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.subject.model.QSubject;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRole;
+import com.qxueyou.scc.user.model.UserTeacher;
+import com.qxueyou.scc.user.service.IUserService;
+
+@Service
+public class TeacherService extends CommonAppService implements ITeacherService {
+
+    @Autowired
+    IUserService userService;
+
+    @Autowired
+    TeacherDAO dao;
+
+    /**
+     * 教师管理新增
+     */
+    @Override
+    public Result add(String teacherName, String password, String mobilePhone, String teacherNo) {
+
+        if (dao.exists(teacherNo) || userService.exists(teacherNo)) {
+            return new Result(false, "老师编号已存在或被其他用户占用");
+        }
+
+        User user = userService.insertUser(teacherName, teacherNo, mobilePhone, password, Boolean.FALSE, ClientUtils.getOrgId());
+
+        userService.addRole(user.getUserId(), UserRole.ROLE_TEACHER_ID);
+
+        UserTeacher teacher = new UserTeacher();
+        TraceUtils.setCreateTrace(teacher);
+        teacher.setOrganizationId(ClientUtils.getOrgId());
+        teacher.setName(teacherName);
+        teacher.setMobilePhone(mobilePhone);
+        teacher.setUserId(user.getUserId());
+        teacher.setTeacherNo(teacherNo);
+        save(teacher);
+
+        return new Result(true, "success");
+
+    }
+
+    /**
+     * 更新
+     */
+    @Override
+    public Result update(String teacherId, String teacherName, String account, String password, String mobilePhone,
+                         String teacherNo) {
+        if (StringUtils.isNotEmpty(mobilePhone) && dao.exists(mobilePhone, teacherId)) {
+            return new Result(false, "手机号已存在");
+        }
+
+        UserTeacher teacher = read(UserTeacher.class, teacherId);
+
+        TraceUtils.setUpdateTrace(teacher);
+        teacher.setName(teacherName);
+        teacher.setMobilePhone(mobilePhone);
+        teacher.setTeacherNo(teacherNo);
+        save(teacher);
+
+        User user = read(User.class, teacher.getUserId());
+        user.setAccount(teacherNo);
+        TraceUtils.setCreateTrace(user);
+        save(user);
+        
+        if(StringUtils.isNotEmpty(password)){
+        	userService.updatePassword(teacher.getUserId(), password);
+        }
+
+        return new Result(true, "success");
+    }
+
+    /**
+     * 教师管理显示列表
+     */
+    @Override
+    public List<UserTeacher> lstTeacher(String keyword, Integer pageSize, Integer pageNum) {
+
+        String keyword_ = StringUtils.isEmpty(keyword) ? "" : keyword;
+
+        String hql = "from UserTeacher where name like ? and deleteFlag is false and organizationId = ? order by createTime desc";
+
+        return findList(hql, new Pager(pageSize, pageNum), CollectionUtils.newList(keyword_.concat("%"), ClientUtils.getOrgId()),
+                UserTeacher.class);
+    }
+    
+    /**
+     * 获取教师总条数
+     */
+    @Override
+    public int findTeacherCount(String keyword) {
+
+        String hql = "from UserTeacher where name like :keyword and deleteFlag is false and  organizationId = :organizationId";
+
+        return findCountByComplexHql(hql, CollectionUtils.newObjectMap("keyword", keyword + "%","organizationId",ClientUtils.getOrgId()));
+    }
+
+    @Override
+    public List<Map<String, Object>> findLstToRole(String keyword, Integer pageSize, Integer pageNum, String roleId) {
+        String hql = "select  u.userId as userId ,u.name as teacherName ,u.teacherNo as  teacherNo ,u.mobilePhone as mobilePhone ,u.teacherId as teacherId "
+                + " from UserTeacher u where u.deleteFlag is false and u.name like :keyword and not Exists(select userId from UserReRoleUser re where re.roleId "
+                + "=:roleId and re.deleteFlag is false and re.userId = u.userId) ";
+
+        return findListWithMapByHql(hql, CollectionUtils.newObjectMap("roleId", roleId, "keyword", "%" + keyword + "%"),
+                new Pager(pageSize, pageNum));
+
+    }
+
+    @Override
+    public int findLstCountToRole(String roleId, String keyword) {
+        String hql = " from UserTeacher u where u.deleteFlag is false and u.name like :keyword and not Exists(select userId from UserReRoleUser re where re.roleId "
+                + "=:roleId and re.deleteFlag is false and re.userId = u.userId) ";
+
+        return findCountByComplexHql(hql,
+                CollectionUtils.newObjectMap("roleId", roleId, "keyword", "%" + keyword + "%"));
+    }
+
+    /**
+     * 教师管理 删除教师
+     */
+    @Override
+    public Result deleteTeacher(String[] teacherIds) {
+
+        for (String teacherId : teacherIds) {
+            deleteTeacherInner(teacherId);
+        }
+
+        return new Result(true, "success");
+    }
+
+    public Result deleteTeacherInner(String teacherId) {
+
+        UserTeacher teacher = read(UserTeacher.class, teacherId);
+
+        TraceUtils.setUpdateTrace(teacher);
+        teacher.setDeleteFlag(true);
+
+        save(teacher);
+
+        User user = read(User.class, teacher.getUserId());
+        if (user != null) {
+            deleteAll(CollectionUtils.newList(user));
+        }
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public List<UserTeacher> LstTeacher4Cls() {
+        String hql = "from UserTeacher where  deleteFlag is false and organizationId=? ";
+        return find(hql, CollectionUtils.newList(ClientUtils.getOrgId()), UserTeacher.class);
+    }
+
+    @Override
+    public String getTeacherIdByUserId(String userId) {
+        String hql = "from UserTeacher where userId = ? and deleteFlag is false";
+        UserTeacher userTeacher = findUnique(hql, CollectionUtils.newList(userId), UserTeacher.class);
+        
+        if(userTeacher == null) {
+        	return StringUtils.EMPTY;
+        }
+        
+        return userTeacher.getTeacherId();
+    }
+
+    @Override
+    public UserTeacher getTeacherByUserId(String userId) {
+        String hql = "from UserTeacher where userId = ? and deleteFlag is false";
+        UserTeacher userTeacher = findUnique(hql, CollectionUtils.newList(userId), UserTeacher.class);
+        
+        return userTeacher;
+    }
+    
+    
+    @Override
+    public Result getTeacherInfo() {
+    	QSubject subject = QSubject.subject;
+    	QClsClass clsClass = QClsClass.clsClass;
+    	QClsClassReSubject re = QClsClassReSubject.clsClassReSubject;
+    	QStuStudent student = QStuStudent.stuStudent;
+    	
+    	User u = this.read(User.class, ClientUtils.getUserId());
+    	String teacherId = this.getTeacherIdByUserId(u.getUserId());
+    	if(StringUtils.isEmpty(teacherId)) {
+    		return new Result(false, "当前用户无教师角色信息");
+    	}
+    	
+		long subjectCount = this.getQueryFactory().selectDistinct(subject.subjectId).from(subject)
+				.where(subject.deleteFlag.isFalse().and(subject.createId.eq(u.getUserId())).and(subject.status.eq(Subject.STATUS_ISSUED)).
+						and(subject.type.in(new Integer[] {Subject.TYPE_ORG_SUBJECT, Subject.TYPE_PUBLIC_SUBJECT}))).fetchCount();
+
+		long classCount = this.getQueryFactory().selectDistinct(clsClass.classId).from(subject, clsClass, re)
+				.where(subject.deleteFlag.isFalse().and(subject.teacherId.eq(teacherId))
+						.and(clsClass.deleteFlag.isFalse()).and(re.deleteFlag.isFalse())
+						.and(re.subjectId.eq(subject.subjectId)).and(clsClass.classId.eq(re.classId))
+						.and(clsClass.endTime.after(new Date())))
+				.fetchCount();
+
+		long studentCount = this.getQueryFactory().selectDistinct(student.studentId)
+				.from(subject, clsClass, re, student)
+				.where(subject.deleteFlag.isFalse().and(subject.teacherId.eq(teacherId))
+						.and(clsClass.deleteFlag.isFalse()).and(re.deleteFlag.isFalse())
+						.and(clsClass.endTime.after(new Date())).and(re.subjectId.eq(subject.subjectId))
+						.and(clsClass.classId.eq(re.classId)).and(student.classId.eq(clsClass.classId))
+						.and(student.deleteFlag.isFalse()).and(student.status.eq(StuStudent.STATUS_ACTIVE)))
+				.fetchCount();
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("name", u.getName(), "account", u.getAccount(), "mobilePhone",
+						u.getMobilePhone(), "imgPath", u.getImgPath(), "sex", u.getSex(), "subjectCount", subjectCount,
+						"classCount", classCount, "studentCount", studentCount, "teacherNo", this.read(UserTeacher.class, teacherId).getTeacherNo()));
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/StsCtrl.java b/src/main/java/com/qxueyou/scc/base/StsCtrl.java
new file mode 100644
index 0000000..2f8d49f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/StsCtrl.java
@@ -0,0 +1,283 @@
+package com.qxueyou.scc.base;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.sys.service.IOssService;
+
+/**
+ * aliyun资源临时授权
+ * @author cyq
+ *
+ */
+@Controller
+@RequestMapping(value = "/sts")
+public class StsCtrl {
+	@SuppressWarnings("unused")
+	private static final String M3U8 = "m3u8";
+
+	private static final String MP4 = "mp4";
+	
+	@SuppressWarnings("unused")
+	private static final String AES_VIDEO_KEY = "u9WH6ldpMd29cJ0Z";
+
+	private final Logger log =  LogManager.getLogger(StsCtrl.class);
+	
+	@Autowired
+	IOssService ossService;
+	
+	/**
+	 * 公共数据访问对象
+	 */
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	/**
+	 * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径
+	 * @param videoId
+	 * @param definition
+	 * @return
+	 */
+	@RequestMapping(value="video/m3u8", method=RequestMethod.GET, produces = "application/json;charset=utf-8")
+	public @ResponseBody Result videoM3u8(@RequestParam("videoId") String videoId, String definition) {
+		if (StringUtils.isEmpty(videoId)) {
+			return new Result(false, "参数错误");
+		}
+		
+//		json.put("result", "success");
+//		// 检查缓存中是否有可用的url,如果有,则直接返回
+//		String urlCache = cacheService.get("sts_url_" + resId, String.class);
+//		if (StringUtils.isNotEmpty(urlCache)) {
+//			json.put("url", urlCache);
+		
+		
+		BufferedReader bf = null;
+		ByteArrayOutputStream byteArrOS =null;
+		try {
+			String def = definition;
+			MediaVideo video = commonDAO.read(MediaVideo.class, videoId);
+			
+			if (video == null) {
+				return new Result(false, "资源不存在");
+			}
+			
+			String resId = "";
+			String resUrl = null;
+			JSONObject json = null;
+			
+			//判断是否是mp3等音乐格式文件,如果是则直接返回original地址
+			if(checkIsVoiceMedia(video)){
+				json =  new JSONObject();
+				json.put("result", "success");
+				json.put("url", video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1));
+				json.put("isConver",false);
+				return new Result(true, "", json);
+			}
+			
+			resUrl = this.getM3u8ResUrl(def, video);
+			
+			//判断是否是加密视频,未加密则直接返回视频地址
+			if(StringUtils.isEmpty(video.getSecretKey())){
+				//如果未转码加密,且m3u8视频不存在,则尝试读取MP4视频。
+				if (StringUtils.isEmpty(resUrl)) {
+					resUrl = StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD() : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD();
+					
+					if (StringUtils.isEmpty(resUrl)) {
+						return new Result(false, "资源不存在");
+					}
+				}
+				
+				json =  new JSONObject();
+				json.put("result", "success");
+				json.put("url", video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1));
+				json.put("isConver",false);
+			}else{
+				//如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在
+				if (StringUtils.isEmpty(resUrl)||resUrl.endsWith(MP4)) {
+					return new Result(false, "资源不存在");
+				}
+				
+				resId = resUrl.substring(resUrl.indexOf("/video/") + 1);
+				
+				json = new JSONObject();
+				json.put("result", "success");
+				json.put("url", resId);
+				json.put("isConver",true);
+				
+				
+//				String resDir = resId.substring(0, resId.lastIndexOf('/'));
+				
+				//获取原视频VideoId
+//				String keyAddr = video.getOriginVideoId();
+//				if(StringUtils.isBlank(keyAddr)){
+//					keyAddr = video.getVideoId();
+//				}
+				
+//				// 获取解密key的临时访问权限
+//				if(StringUtils.isNotEmpty(video.getM3u8KeyPath())){
+//					json.put("url", video.getM3u8KeyPath().substring(video.getM3u8KeyPath().indexOf("/video/") + 1));
+//				}else{
+//					String  m3u8KeyPath = resDir + "/" + keyAddr + ".key";
+//				}
+				
+			
+				
+//				String m3u8ResKey = resDir + "/" + uuid + ".m3u8";
+				
+//				InputStream in =  ossService.getObject(resId);
+//				String temp=null;
+//				byteArrOS=new ByteArrayOutputStream();
+//				bf = new BufferedReader(new InputStreamReader(in));
+//				
+//				while ((temp = bf.readLine()) != null) {
+//					if (temp.startsWith("#EXT-X-KEY")) {
+//						temp = temp.replace("_x.key", ".key");
+//					}
+//					temp= temp.concat("\n");
+//					byteArrOS.write(temp.getBytes());
+//				}
+				
+				
+			}
+			return new Result(true, "", json);
+		} catch (Exception e) {
+			log.error(e, e);
+			return new Result(false);
+		}finally{
+			IOUtils.closeQuietly(bf);
+			IOUtils.closeQuietly(byteArrOS);
+		}
+	}
+	
+	
+	/**
+	 * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径
+	 * @param videoId
+	 * @param definition
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	@RequestMapping(value="video/mp4", method=RequestMethod.GET, produces = "application/json;charset=utf-8")
+	public @ResponseBody Result videoMp4(@RequestParam("videoId") String videoId, String definition) {
+		if (StringUtils.isEmpty(videoId)) {
+			return new Result(false, "参数错误");
+		}		
+		
+		BufferedReader bf = null;
+		ByteArrayOutputStream byteArrOS =null;
+		try {
+			String def = definition;
+			MediaVideo video = commonDAO.read(MediaVideo.class, videoId);
+			
+			if (video == null) {
+				return new Result(false, "资源不存在");
+			}
+			
+			String resId = "";
+			String resUrl = null;
+			JSONObject json = null;
+			
+			//判断是否是mp3等音乐格式文件,如果是则直接返回original地址
+			if(checkIsVoiceMedia(video)){
+				json =  new JSONObject();
+				json.put("result", "success");
+				json.put("url", video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1));
+				json.put("isConver",false);
+				return new Result(true, "", json);
+			}
+			
+			resUrl = this.getMp4ResUrl(def, video);
+			
+			//如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放
+			if(StringUtils.isEmpty(resUrl) && video.getOrigUrl().endsWith(MP4)){
+					resUrl =  video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1);
+			}
+			
+			//查看原视频是否是MP4
+			if (StringUtils.isEmpty(resUrl)) {
+				return new Result(false, "资源不存在");
+			}
+			
+			json =  new JSONObject();
+			json.put("result", "success");
+			json.put("url", resUrl.substring(resUrl.indexOf("/video/") + 1));
+			json.put("isConver",false);
+			
+			return new Result(true, "", json);
+		} catch (Exception e) {
+			log.error(e, e);
+			return new Result(false);
+		}finally{
+			IOUtils.closeQuietly(bf);
+			IOUtils.closeQuietly(byteArrOS);
+		}
+	}
+	
+	
+	/**
+	 * 获取resurl
+	 * 
+	 * @param def
+	 * @param video
+	 * @return
+	 */
+	private String getM3u8ResUrl(String def, MediaVideo video){
+		return StringUtils.isNotEmpty(video.getIosHD()) ? video.getIosHD() : StringUtils.isNotEmpty(video.getIosSD()) ? video.getIosSD() : video.getIosLD();
+	}
+	
+	/**
+	 * 获取resurl
+	 * 
+	 * @param def
+	 * @param video
+	 * @return
+	 */
+	private String getMp4ResUrl(String def, MediaVideo video){
+		return StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD() : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD(): video.getAndroidLD();
+	}
+	
+	/**
+	 * 判断是否是音频media,精确判断需要枚举音频格式
+	 * @return
+	 */
+	private  boolean checkIsVoiceMedia(MediaVideo media){
+		if(media==null || StringUtils.isEmpty(media.getOrigUrl())){
+			return false;
+		}
+		
+		return !(StringUtils.isNotEmpty(media.getAndroidHD())
+				||StringUtils.isNotEmpty(media.getAndroidSD())
+				||StringUtils.isNotEmpty(media.getAndroidLD())
+				||StringUtils.isNotEmpty(media.getIosHD())
+				||StringUtils.isNotEmpty(media.getIosSD())
+				||StringUtils.isNotEmpty(media.getIosLD()));
+	}
+	
+	/**
+	 * 测试接口专用
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value="test", method=RequestMethod.GET)
+	public @ResponseBody String test(HttpServletRequest request, HttpServletResponse response) {
+		return null;
+	}	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/dao/AbstractRedisTemplate.java b/src/main/java/com/qxueyou/scc/base/dao/AbstractRedisTemplate.java
new file mode 100644
index 0000000..1c4e455
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/dao/AbstractRedisTemplate.java
@@ -0,0 +1,472 @@
+package com.qxueyou.scc.base.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.base.util.ReisUtils;
+
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.ShardedJedis;
+
+public abstract class AbstractRedisTemplate {
+	// lock script
+	private static String SET_NX_SCRIPT = "local key = KEYS[1] local ttl = KEYS[2] "
+			+ "local content = KEYS[3] local lockSet = redis.call('setnx', key, content) "
+			+ "if lockSet == 1 then redis.call('expire', key, ttl) end return lockSet ";
+
+	protected abstract ShardedJedis getJedisClient();
+
+	protected abstract void closeJedisClient(ShardedJedis jedisClient);
+
+	public void set(String key, String value) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			this.getJedisClient().set(key, value);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	/**
+	 * 设置过期时间的set方法
+	 * 
+	 * @param key
+	 *            键
+	 * @param value
+	 *            value
+	 * @param timeout
+	 *            过期时间 单位(s)
+	 */
+	public void setex(String key, String value, int timeout) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			client.setex(key, timeout, value);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public boolean exists(String key) {
+		ShardedJedis client = null;
+		boolean result = false;
+		try {
+			client = this.getJedisClient();
+			result = client.exists(key);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+
+	public boolean expire(String key, int secondTimeOut) {
+		ShardedJedis client = null;
+		Long ex = 0L;
+		try {
+			client = this.getJedisClient();
+			ex = client.expire(key, secondTimeOut);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return ex.intValue() == 1;
+	}
+
+	public boolean expireAt(String key, long expireAt) {
+		int timeOut = (int)(expireAt - System.currentTimeMillis()) / 1000;
+		return expire(key, timeOut);
+	}
+
+	/** 根据键获取字符串值 */
+	public String get(String key) {
+		ShardedJedis client = null;
+		String value = "";
+		try {
+			client = this.getJedisClient();
+			value = client.get(key);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return value;
+	}
+
+	/** 获取并删除键 */
+	public String getAndDel(String key) {
+		ShardedJedis client = null;
+		String value = "";
+		try {
+			client = this.getJedisClient();
+			value = client.get(key);
+			client.del(key);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return value;
+	}
+
+	/** 删除键 */
+	public void del(String key) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			client.del(key);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	/** 获取并删除键 */
+	public void del(String[] keys) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			for (String strKey : keys) {
+				if (StringUtils.isNotEmpty(strKey)) {
+					client.del(strKey.getBytes());
+				}
+			}
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public long incr(String key) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.incr(key);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public long decr(String key) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.decr(key);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public <T> void setList(String key, List<T> lst) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			client.set(key.getBytes(), ReisUtils.serialize(lst));
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public <T> List<T> getList(String key) {
+		ShardedJedis client = null;
+		byte[] bytesArr = null;
+		List<T> result = null;
+		try {
+			client = this.getJedisClient();
+			bytesArr = client.get(key.getBytes());
+			result = (List<T>) ReisUtils.unserialize(bytesArr);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+	
+	public List<String> getStrList(String key) {
+		ShardedJedis client = null;
+		List<String> result = null;
+		try {
+			client = this.getJedisClient();
+			result = client.lrange(key, 0, client.llen(key));
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+	
+	public void setMap(String key, Map<String,String> map) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			client.hmset(key, map);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+	
+	public List<String> getMap(String key, String... mKey) {
+		ShardedJedis client = null;
+		List<String> result = null;
+		try {
+			client = this.getJedisClient();
+			result = client.hmget(key, mKey);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+
+	public String hget(String key, String field) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.hget(key, field);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public <T> Long hset(String key, String field, T value) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.hset(key.getBytes(), field.getBytes(), ReisUtils.serialize(value));
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public Long hdel(String key, String... field) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.hdel(key, field);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public Long hdel(String key, byte[]... field) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.hdel(key.getBytes(), field);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public <T> T get(String key, Class<T> cls) {
+		ShardedJedis client = null;
+		T result = null;
+		try {
+			client = this.getJedisClient();
+			byte[] obj = client.get(key.getBytes());
+			if (obj == null || obj.length==0) {
+				return null;
+			}
+			result = (T)ReisUtils.unserialize(obj);
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+
+	public void setex(String key, Object value, int timeout) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			client.setex(key.getBytes(), timeout, ReisUtils.serialize(value));
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	/**
+	 * @param key
+	 * @param value
+	 * @return
+	 */
+	public long setnx(String key, String value) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			return client.setnx(key, value);
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+
+	public boolean setNxEx(String key, String value, long seconds) {
+		Jedis jedis = null;
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			jedis = client.getShard(key);
+			long a = ((Long) jedis.eval(SET_NX_SCRIPT, 3, key, String.valueOf(seconds), value)).longValue();
+			return a == 1L;
+		} finally {
+			if (jedis != null) {
+				jedis.close();
+			}
+			this.closeJedisClient(client);
+		}
+	}
+
+	/**
+	 * 多长时间内尝试获取锁
+	 * 
+	 * @param key
+	 * @param timeOut
+	 * @return
+	 * @throws Exception
+	 */
+	public boolean lock(String key, int timeOut) throws Exception {
+		long waitEndTime = System.currentTimeMillis() + (timeOut * 1000);
+		String lockKey = "JedisLock_".concat(key);
+		while (!this.setNxEx(lockKey, "1", 60 * 60)) {
+			if (waitEndTime < System.currentTimeMillis()) {
+				return false;
+			}
+			try {
+				// 每隔200ms秒尝试获取锁
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				throw e;
+			}
+		}
+		return true;
+	}
+
+	public boolean tryLock(String key) {
+		String lockKey = "JedisLock_".concat(key);
+		return this.setNxEx(lockKey, "1", 30 * 60);
+	}
+
+	protected boolean tryLock(String key, long lockSeconds) {
+		String lockKey = "JedisLock_".concat(key);
+		return this.setNxEx(lockKey, "1", lockSeconds);
+	}
+
+	/**
+	 * 
+	 * @param key
+	 * @return
+	 */
+	public boolean release(String key) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			String lockKey ="JedisLock_".concat(key);
+			return client.del(lockKey) == 1;
+		} finally {
+			this.closeJedisClient(client);
+		}
+	}
+	
+
+	public void lpush(String key,String value){
+		ShardedJedis client = null;
+		try{
+			client = this.getJedisClient();
+			client.lpush(key, value);
+		}finally{
+			this.closeJedisClient(client);
+		}
+	}
+	
+	public void rpush(String key,String str){
+		ShardedJedis client = null;
+		try{
+			client = this.getJedisClient();
+			client.rpush(key,str);
+		}finally{
+			this.closeJedisClient(client);
+		}
+	}
+	
+	public<T> void rpush(String key,T t){
+		ShardedJedis client = null;
+		try{
+			client = this.getJedisClient();
+			client.rpush(key.getBytes(),ReisUtils.serialize(t));
+		}finally{
+			this.closeJedisClient(client);
+		}
+	}
+	
+	public String rpop(String key){
+		ShardedJedis client = null;
+		String str = null;
+		try{
+			client = this.getJedisClient();
+			str = client.rpop(key);
+		}finally{
+			this.closeJedisClient(client);
+		}
+		return str;
+	}
+	
+	
+	public String lpop(String key){
+		ShardedJedis client = null;
+		String str = null;
+		try{
+			client = this.getJedisClient();
+			str = client.lpop(key);
+		}finally{
+			this.closeJedisClient(client);
+		}
+		return str;
+	}
+	
+
+	/*public List<String> lrange(String key,Long start,Long end){
+		ShardedJedis client = null;
+		List<String> list = null;
+		try{
+			client = this.getJedisClient();
+	
+			list = client.lrange(key, start, end);
+		}finally{
+			this.closeJedisClient(client);
+		}
+		return list;
+	}*/
+	
+	public<T> List<T> lrange(String key,Long start,Long end){
+		ShardedJedis client = null;
+		List<byte[]> list = null;
+		List<T> list1 = new ArrayList<T>();
+		try{
+			client = this.getJedisClient();
+	
+			list = client.lrange(key.getBytes(), start, end);
+			for(int i = 0;i < list.size();i++){
+				@SuppressWarnings("unchecked")
+				T t = (T) ReisUtils.unserialize(list.get(i));
+				list1.add(t);
+			}
+		}finally{
+			this.closeJedisClient(client);
+		}
+		return list1;
+	}
+	
+	/**
+	 * 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
+	 * 
+	 * @param key
+	 * @param start
+	 * @param end
+	 * @return
+	 */
+	public String ltrim(String key,Long start,Long end){
+		ShardedJedis client = null;
+		String result = null;
+		try{
+			client = this.getJedisClient();
+			result = client.ltrim(key.getBytes(), start, end);
+		}finally{
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java b/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
new file mode 100644
index 0000000..5335a03
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
@@ -0,0 +1,810 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.base.dao;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.transform.Transformers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.orm.hibernate4.HibernateCallback;
+import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 基础DAO类,自动注入sessionFactory
+ *
+ * @author 夏德虎
+ * @since JDK1.6
+ * @history 2010-07-28 夏德虎 新建
+ */
+public class BaseDAO extends HibernateDaoSupport {
+	
+	/** 注释 rawtypes  */
+	private static final String RAW_TYPES = "rawtypes";
+	
+    /**
+     * 注入sessionFactory
+     *
+     * @param sessionFactory
+     */
+    @Autowired(required = false)
+    public void setSessionfactory(SessionFactory sessionFactory) {
+        this.setSessionFactory(sessionFactory);
+    }
+
+    /**
+     * 读取对象
+     *
+     * @param <T> 泛型类型
+     * @param clz VO CLASS类型
+     * @param key VO 主键
+     * @return 查找到的结果,如果没找到,返回null
+     */
+    public <T> T read(Class<T> clz, Serializable key) {
+    	if(key==null){
+    		return null;
+    	}
+        return clz.cast(this.getHibernateTemplate().get(clz, key));
+    }
+
+    /**
+     * 保存对象
+     */
+    public void update(Object obj) {
+        this.getHibernateTemplate().update(obj);
+    }
+    
+    /**
+     * 保存对象
+     */
+    public void save(Object obj) {
+        this.getHibernateTemplate().save(obj);
+    }
+
+    /**
+     * 保存或更新对象
+     */
+    public void saveOrUpdate(Object obj) {
+        this.getHibernateTemplate().saveOrUpdate(obj);
+    }
+
+    /**
+     * 保存或更新集合对象
+     */
+    public void saveOrUpdateAll(@SuppressWarnings(RAW_TYPES) Collection collection) {
+        for(Object obj:collection){
+        	this.getHibernateTemplate().saveOrUpdate(obj);
+        }
+    }
+
+    /**
+     * 保存或更新对象
+     */
+    public void deleteAll(@SuppressWarnings(RAW_TYPES) Collection col) {
+        this.getHibernateTemplate().deleteAll(col);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+	public <T> List<T> find(String hql, Class<T> cls) {
+        return find(hql,Collections.EMPTY_LIST,cls);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	public <T> List<T> find(final String hql,final List<Object> args,final Class<T> cls) {
+    	return this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() {
+
+            @SuppressWarnings("unchecked")
+			public List<T> doInHibernate(Session session) {
+                Query query = session.createQuery(hql);
+                int i = 0;
+                for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+                query.setFirstResult(0);
+                query.setMaxResults(Integer.MAX_VALUE);
+                return query.list();
+            }
+        });
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型 
+     * @return
+     */
+	@SuppressWarnings("unchecked")
+	public List<Object[]> findwithRawResult(String hql, List<Object> args) {
+        return (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+    }
+    
+    /**
+     * 根据hql查询,返回列表数据总数
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCount(final String hql, final List<Object> args) {
+    	return getHibernateTemplate().execute(new HibernateCallback<Integer>() {
+    		 
+            @Override
+            public Integer doInHibernate(Session session){
+            	
+            	Query query = session.createQuery(hql.trim().startsWith("from")?"select count(1) ".concat(hql):hql);
+            	int i = 0;
+            	for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+            	
+            	if(null != query.uniqueResult()){
+            		return ((Long)query.uniqueResult()).intValue();
+            	}else{
+            		return 0 ;
+            	}
+            }
+        });
+    }
+	
+	 /**
+     * 根据hql查询,返回列表数据总数
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCountBySql(final String sql, final List<Object> args) {
+    	return getHibernateTemplate().execute(new HibernateCallback<Integer>() {
+    		 
+            @Override
+            public Integer doInHibernate(Session session){
+            	
+            	Query query = session.createSQLQuery(sql.trim().startsWith("from")?"select count(1) ".concat(sql):sql);
+            	int i = 0;
+            	for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+            	
+            	if(null != query.uniqueResult()){
+            		return ((BigInteger)query.uniqueResult()).intValue();
+            	}else{
+            		return 0 ;
+            	}
+            }
+        });
+    }
+    
+    /**
+     * 根据hql查询,返回列表分页数据
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({ "unchecked" })
+	public <T> List<T> findList(final String hql, final Pager page, final List<Object> args,Class<T> cls) {
+        return this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() {
+
+            public List<T> doInHibernate(Session session) {
+                Query query = session.createQuery(hql);
+                int i = 0;
+                for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+                query.setFirstResult(page.getPageSize()*(page.getPageNum()-1));
+                query.setMaxResults(page.getPageSize());
+                return query.list();
+            }
+        });
+    }
+    
+    /**
+     * 根据hql查询,返回唯一的数据
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({ RAW_TYPES, "unchecked" })
+	public <T> T findUnique(final String hql, final List<Object> args,Class<T> cls) {
+        return  (T)this.getHibernateTemplate().execute(new HibernateCallback() {
+
+            public Object doInHibernate(Session session) {
+                Query query = session.createQuery(hql);
+                int i = 0;
+                for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+                query.setFirstResult(0);
+                query.setMaxResults(1);
+                List result =  query.list();
+                return result.isEmpty()?null:result.get(0);
+            }
+
+        });
+    }
+
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({ RAW_TYPES})
+    public List findBySql(final String sql, final List args) {
+        return this.getHibernateTemplate().execute(new HibernateCallback<List>() {
+
+            public List doInHibernate(Session session) {
+                SQLQuery query = session.createSQLQuery(sql);
+                int i = 0;
+                for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+                return query.list();
+            }
+
+        });
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({ RAW_TYPES})
+    public List findByPageSql(final String sql, final List args, final Pager pager) {
+        return this.getHibernateTemplate().execute(new HibernateCallback<List>() {
+
+            public List doInHibernate(Session session) {
+                SQLQuery query = session.createSQLQuery(sql);
+                int i = 0;
+                for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+                query.setFirstResult(pager.getPageSize()*(pager.getPageNum()-1));
+	            query.setMaxResults(pager.getPageSize());
+                return query.list();
+            }
+
+        });
+    }
+    
+    
+    /**
+     * hql只含单一参数
+     *
+     * @param hql 查询语句
+     * @param args 参数数组
+     * @param cls 返回类型
+     * @return
+     */
+    public Result bulkUpdateInLoop(String hql, Object args[]) {
+    	int iCount = 0;
+        for(Object arg:args){
+        	iCount += getHibernateTemplate().bulkUpdate(hql, arg);
+        }
+        Map<String,Object> attrs = new HashMap<String,Object>(1);
+        attrs.put("doCount", iCount);
+        Result result = new Result(true);
+        result.setData(attrs);
+    	return result;
+    }
+    
+    /**
+     * hql只含单一参数
+     *
+     * @param hql 查询语句
+     * @param args 参数数组
+     * @param cls 返回类型
+     * @return
+     */
+    public Result bulkUpdate(String hql, Object args[]) {
+        int count = getHibernateTemplate().bulkUpdate(hql, args);      
+        Map<String,Object> attrs = new HashMap<String,Object>(1);
+        attrs.put("doCount", count);
+        Result result = new Result(true);
+        result.setData(attrs);
+    	return result;
+    }
+    
+    /**
+     * 存储过程语句
+     *
+     * @param hql call 存储语句 sql语句
+     * @param args 参数数组
+     * @return
+     */
+	public Result executeProduce(final String sql, final Object args[]) {
+    	
+    	Integer result = getHibernateTemplate().execute(new HibernateCallback<Integer>(){
+
+			@Override
+			public Integer doInHibernate(Session session)
+					throws HibernateException {
+				
+				Query query = session.createSQLQuery("{ "+sql+" }");
+				for(int i=0;i<args.length;i++){
+					query.setParameter(i, args[i]);
+				}
+                return query.executeUpdate();
+			}
+        	
+        });
+        return new Result(true,String.valueOf(result));
+    }
+    
+    /**
+     * 执行sql删除
+     *
+     * @param hql 查询语句
+     * @param args 参数数组
+     * @return
+     */
+	public int executeSqlDelete(final String sql, final Object args[]) {
+    	
+    	return getHibernateTemplate().execute(new HibernateCallback<Integer>(){
+
+			@Override
+			public Integer doInHibernate(Session session)
+					throws HibernateException {
+				
+				Query query = session.createSQLQuery(sql);
+				for(int i=0;i<args.length;i++){
+					query.setParameter(i, args[i]);
+				}
+                return query.executeUpdate();
+			}
+        	
+        });
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({RAW_TYPES, "unchecked" })
+    public List<Object[]> findRawByComplexHql(final String hql, final Map<String, Object> map) {
+    	// 查询结果
+        return  (List<Object[]>)this.getHibernateTemplate().execute(new HibernateCallback<List>() {
+            public List doInHibernate(Session session) {
+                Query query = session.createQuery(hql);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                            query.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                            query.setParameterList(string, (Object[])obj);  
+                        }else{  
+                            query.setParameter(string, obj);  
+                        }  
+                    }  
+                }  
+                return query.list();
+            }
+
+        });
+    }   
+    
+    /**
+     * 根据hql查询,返回列表数据总数
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCountByComplexHql(final String hql, final Map<String, Object> map) {
+    	return getHibernateTemplate().execute(new HibernateCallback<Integer>() {
+    		 
+            @Override
+            public Integer doInHibernate(Session session){
+            	
+            	Query queryHql = session.createQuery(hql.trim().startsWith("from")?"select count(1) ".concat(hql):hql);
+            	
+            	if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                        	queryHql.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                        	queryHql.setParameterList(string, (Object[])obj);  
+                        }else{  
+                        	queryHql.setParameter(string, obj);  
+                        }  
+                    }  
+            	}
+            	
+            	if(null != queryHql.uniqueResult()){
+            		return ((Long)queryHql.uniqueResult()).intValue();
+            	}else{
+            		return 0 ;
+            	}
+            }
+        });
+    }
+	
+	 /**
+     * 根据sql查询,返回列表数据总数
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCountByComplexSql(final String hql, final Map<String, Object> map) {
+    	return getHibernateTemplate().execute(new HibernateCallback<Integer>() {
+    		 
+            @Override
+            public Integer doInHibernate(Session session){
+            	
+            	Query querySql = session.createSQLQuery(hql.trim().startsWith("from")?"select count(1) ".concat(hql):hql);
+            	
+            	if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                        	querySql.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                        	querySql.setParameterList(string, (Object[])obj);  
+                        }else{  
+                        	querySql.setParameter(string, obj);  
+                        }  
+                    }  
+            	}
+            	
+            	if(null != querySql.uniqueResult()){
+            		return ((BigInteger)querySql.uniqueResult()).intValue();
+            	}else{
+            		return 0 ;
+            	}
+            }
+        });
+    }
+	
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    public <T> List<T> findByComplexHql(final String hql, final Map<String, Object> map, Class<T> cls) {
+    	Pager page = new Pager();
+    	page.setPageSize(Integer.MAX_VALUE);
+    	page.setPageNum(1);
+        return findByComplexHql(hql, page, map, cls);
+    }
+    
+    /**
+     * 复杂hql
+     * @param sql
+     * @param map
+     * @param cls
+     * @return
+     */
+    public <T> T findUniqueByHql(final String hql, final Map<String, Object> map){
+    	// 查询结果
+        List<T> lst =  this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() {
+        	
+            @SuppressWarnings("unchecked")
+			public List<T> doInHibernate(Session session) {
+                Query queryHql = session.createQuery(hql);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                        	queryHql.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                        	queryHql.setParameterList(string, (Object[])obj);  
+                        }else{  
+                        	queryHql.setParameter(string, obj);  
+                        }  
+                    }  
+                }  
+                queryHql.setFirstResult(0);
+                queryHql.setMaxResults(1);
+                
+                List<?> r = queryHql.list();
+                
+                List<T> lst = new ArrayList<T>(r.size());
+                for(Object o:r) {
+                	lst.add((T)o);
+                }
+                return lst;
+            }
+
+        });
+        
+        return lst.isEmpty()?null:lst.get(0);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @return
+     */
+    public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> map) {
+    	Pager page = new Pager();
+    	page.setPageNum(1);
+    	page.setPageSize(Integer.MAX_VALUE);
+    	
+        return findListWithMapByHql(hql,map,page);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> map,final Pager page) {
+    	// 查询结果
+        List<Map<String,Object>> lst =  getHibernateTemplate().execute(new HibernateCallback<List<Map<String,Object>>>() {
+			public List<Map<String,Object>> doInHibernate(Session session) {
+                Query query = session.createQuery(hql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                            query.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                            query.setParameterList(string, (Object[])obj);  
+                        }else{  
+                            query.setParameter(string, obj);  
+                        }  
+                    }
+                }  
+                query.setFirstResult(page.getPageSize()*(page.getPageNum()-1));
+                query.setMaxResults(page.getPageSize());
+                return query.list();
+            }
+
+        });
+        
+        return lst;
+    }
+    
+    /**
+     * 根据hql查询,并返回唯一一条结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({RAW_TYPES })
+    public <T> T findUniqueByComplexHql(final String hql, final Map<String, Object> map, Class<T> cls) {
+    	// 查询结果
+        List<T> lst =  this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() {
+            public List doInHibernate(Session session) {
+                Query query = session.createQuery(hql);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                            query.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                            query.setParameterList(string, (Object[])obj);  
+                        }else{  
+                            query.setParameter(string, obj);  
+                        }  
+                    }  
+                }  
+                query.setFirstResult(0);
+                query.setMaxResults(1);
+                return query.list();
+            }
+
+        });
+        
+        return lst.isEmpty()?null:cls.cast(lst.get(0));
+    }
+
+    
+    /**
+     * 根据Sql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    public <T> List<T> findByComplexSql(final String sql, final Map<String, Object> map, Class<T> cls) {
+    	Pager page = new Pager();
+    	page.setPageSize(Integer.MAX_VALUE);
+    	page.setPageNum(1);
+        return findByComplexSql(sql, page, map, cls);
+    }
+    
+    
+    /**
+     * 根据Sql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({RAW_TYPES, "unchecked" })
+    public List<Object[]> findRawByComplexSql(final String sql, final Map<String, Object> map) {
+    	// 查询结果
+        return  (List<Object[]>)this.getHibernateTemplate().execute(new HibernateCallback<List>() {
+            public List doInHibernate(Session session) {
+                SQLQuery query = session.createSQLQuery(sql);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                            query.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                            query.setParameterList(string, (Object[])obj);  
+                        }else{  
+                            query.setParameter(string, obj);  
+                        }  
+                    }  
+                }  
+                return query.list();
+            }
+
+        });
+        
+     
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({RAW_TYPES })
+    public <T> List<T> findByComplexHql(final String hql,final Pager page, final Map<String, Object> map, Class<T> cls) {
+    	// 查询结果
+        List lst =  this.getHibernateTemplate().execute(new HibernateCallback<List>() {
+            public List doInHibernate(Session session) {
+                Query queryHql = session.createQuery(hql);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                        	queryHql.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                        	queryHql.setParameterList(string, (Object[])obj);  
+                        }else{  
+                        	queryHql.setParameter(string, obj);  
+                        }  
+                    }  
+                }  
+                queryHql.setFirstResult(page.getPageSize()*(page.getPageNum()-1));
+                queryHql.setMaxResults(page.getPageSize());
+                return queryHql.list();
+            }
+
+        });
+        
+        // 组装结果
+        List<T> result = new ArrayList<T>();
+        for (Object obj : lst) {
+            result.add(cls.cast(obj));
+        }
+        return result;
+    }
+    
+    /**
+     * 根据Sql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({RAW_TYPES })
+    public <T> List<T> findByComplexSql(final String sql,final Pager page, final Map<String, Object> map, Class<T> cls) {
+    	// 查询结果
+        List lst =  this.getHibernateTemplate().execute(new HibernateCallback<List>() {
+            public List doInHibernate(Session session) {
+            	 SQLQuery querySql = session.createSQLQuery(sql);
+                if (map != null) {  
+                    Set<String> keySet = map.keySet();  
+                    for (String string : keySet) {  
+                        Object obj = map.get(string);  
+                        //这里考虑传入的参数是什么类型,不同类型使用的方法不同  
+                        if(obj instanceof Collection<?>){  
+                        	querySql.setParameterList(string, (Collection<?>)obj);  
+                        }else if(obj instanceof Object[]){  
+                        	querySql.setParameterList(string, (Object[])obj);  
+                        }else{  
+                        	querySql.setParameter(string, obj);  
+                        }  
+                    }  
+                }  
+                querySql.setFirstResult(page.getPageSize()*(page.getPageNum()-1));
+                querySql.setMaxResults(page.getPageSize());
+                return querySql.list();
+            }
+
+        });
+        
+        // 组装结果
+        List<T> result = new ArrayList<T>();
+        for (Object obj : lst) {
+            result.add(cls.cast(obj));
+        }
+        return result;
+    }
+    
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/base/dao/CommonDAO.java b/src/main/java/com/qxueyou/scc/base/dao/CommonDAO.java
new file mode 100644
index 0000000..708a820
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/dao/CommonDAO.java
@@ -0,0 +1,56 @@
+/******************************************************************************
+O * Copyright (C) 2014 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.base.dao;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.sys.model.SysConfig;
+import com.qxueyou.scc.sys.model.SysDictionary;
+
+@Repository(value="commonDao")
+/**
+ * 通用DAO类
+ *
+ * @author  夏德虎
+ * @since   JDK1.7
+ * @history 2014-11-18 夏德虎 新建
+ */
+public class CommonDAO extends BaseDAO{
+	
+	/**
+	 * 根据配置key查询value值 
+	 * @param key
+	 * @return
+	 */
+	public String queryConfigValue(String key){
+		String hql = "from SysConfig where configKey=?";
+		
+		List<SysConfig> lstConfig =  this.find(hql, 
+				CollectionUtils.newList(key), SysConfig.class);
+		
+		if(lstConfig.isEmpty()){
+			return null;
+		}
+		
+		return lstConfig.get(0).getValue();
+	}
+	
+	/**
+	 * 根据字典类型查询字典内容的list
+	 * @param dicType
+	 * @return
+	 */
+	public List<SysDictionary> queryDictConfigMap(String dicType){
+		String hql = "from SysDictionary where typeId = (select dictionaryTypeId from SysDictionaryType where type = ? ) and status=1";
+		
+		return this.find(hql, CollectionUtils.newList(dicType), SysDictionary.class);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/dao/CommonRedisCache.java b/src/main/java/com/qxueyou/scc/base/dao/CommonRedisCache.java
new file mode 100644
index 0000000..e6724cf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/dao/CommonRedisCache.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.base.dao;
+
+
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import redis.clients.jedis.ShardedJedis;
+
+/***
+ * redis常用操作类
+ * 
+ * @author kevin
+ * @date 2017-05-15 17:00
+ */
+@Repository(value="CommonRedisCache")
+ public class CommonRedisCache extends CommonRedisTemplate {
+	
+	private static final Logger log = LogManager.getLogger(CommonRedisCache.class);
+	
+	@Autowired
+	private ReidsSharedPoolWrapper reidsSharedPoolWrapper ;
+	
+	protected ShardedJedis getJedisClient() {
+		ShardedJedis jedisClient = null;
+		try {
+			if (reidsSharedPoolWrapper != null) {
+				jedisClient = reidsSharedPoolWrapper.getResource();
+			}
+		} catch (Exception e) {
+			log.error("获取redisClient异常!");
+		}
+		return jedisClient;
+	}
+
+	protected void closeJedisClient(ShardedJedis jedisClient) {
+		try {
+			if (jedisClient != null) {
+				jedisClient.close();
+			}
+		} catch (Exception e) {
+			log.error("关闭redis连接失败");
+		}
+	}
+
+	public void setReidsSharedPoolWrapper(ReidsSharedPoolWrapper reidsSharedPoolWrapper) {
+		this.reidsSharedPoolWrapper = reidsSharedPoolWrapper;
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/dao/CommonRedisTemplate.java b/src/main/java/com/qxueyou/scc/base/dao/CommonRedisTemplate.java
new file mode 100644
index 0000000..0817cf0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/dao/CommonRedisTemplate.java
@@ -0,0 +1,51 @@
+package com.qxueyou.scc.base.dao;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import redis.clients.jedis.ShardedJedis;
+
+/***
+ * redis常用操作类
+ * 
+ * @author kevin
+ * @date 2017-05-15 17:00
+ */
+@Repository(value="commonRedisTemplate")
+ public class CommonRedisTemplate extends AbstractRedisTemplate {
+	
+	private static final Logger log = LogManager.getLogger(CommonRedisTemplate.class);
+	
+	@Autowired
+	private ReidsSharedPoolWrapper reidsSharedPoolWrapper ;
+	
+	protected ShardedJedis getJedisClient() {
+		ShardedJedis jedisClient = null;
+		try {
+			if (reidsSharedPoolWrapper != null) {
+				jedisClient = reidsSharedPoolWrapper.getResource();
+			}
+		} catch (Exception e) {
+			log.error("获取redisClient异常!");
+		}
+		return jedisClient;
+	}
+
+	protected void closeJedisClient(ShardedJedis jedisClient) {
+		try {
+			if (jedisClient != null) {
+				jedisClient.close();
+			}
+		} catch (Exception e) {
+			log.error("关闭redis连接失败");
+		}
+	}
+
+	public void setReidsSharedPoolWrapper(ReidsSharedPoolWrapper reidsSharedPoolWrapper) {
+		this.reidsSharedPoolWrapper = reidsSharedPoolWrapper;
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/dao/ReidsSharedPoolWrapper.java b/src/main/java/com/qxueyou/scc/base/dao/ReidsSharedPoolWrapper.java
new file mode 100644
index 0000000..d2ef66d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/dao/ReidsSharedPoolWrapper.java
@@ -0,0 +1,18 @@
+package com.qxueyou.scc.base.dao;
+
+import org.springframework.stereotype.Component;
+
+import redis.clients.jedis.ShardedJedis;
+import redis.clients.jedis.ShardedJedisPool;
+
+
+@Component
+public final class ReidsSharedPoolWrapper{
+	
+	private ShardedJedisPool shardedJedisPool;
+	
+	public ShardedJedis getResource(){
+		return shardedJedisPool.getResource();
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/JgwOracleDialect.java b/src/main/java/com/qxueyou/scc/base/handler/JgwOracleDialect.java
new file mode 100644
index 0000000..fb7b243
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/JgwOracleDialect.java
@@ -0,0 +1,21 @@
+package com.qxueyou.scc.base.handler;
+
+import java.sql.Types;
+
+import org.hibernate.dialect.Oracle10gDialect;
+import org.hibernate.type.StandardBasicTypes;
+
+public class JgwOracleDialect extends Oracle10gDialect {	
+	
+	public JgwOracleDialect(){
+		super();
+		registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());  
+		 
+//		registerHibernateType(Types.CHAR, StandardBasicTypes.STRING.getName());          
+//		registerHibernateType(Types.LONGNVARCHAR, StandardBasicTypes.STRING.getName());  
+//		registerHibernateType(Types.DECIMAL, StandardBasicTypes.DOUBLE.getName());        
+//		registerHibernateType(Types.NCLOB, StandardBasicTypes.STRING.getName());  
+	}
+
+}
+
diff --git a/src/main/java/com/qxueyou/scc/base/handler/MatchAgainstFunction.java b/src/main/java/com/qxueyou/scc/base/handler/MatchAgainstFunction.java
new file mode 100644
index 0000000..4c01561
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/MatchAgainstFunction.java
@@ -0,0 +1,50 @@
+package com.qxueyou.scc.base.handler;
+
+import java.util.List;
+
+import org.hibernate.QueryException;
+import org.hibernate.dialect.function.SQLFunction;
+import org.hibernate.engine.spi.Mapping;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.type.Type;
+
+public class MatchAgainstFunction implements SQLFunction {
+
+	@Override
+	public Type getReturnType(Type paramType, Mapping paramMapping) throws QueryException {
+		return null;
+	}
+
+	@Override
+	public boolean hasArguments() {
+		return true;
+	}
+
+	@Override
+	public boolean hasParenthesesIfNoArguments() {
+		return false;
+	}
+
+	@SuppressWarnings("rawtypes")
+	@Override
+	public String render(Type paramType, List args, SessionFactoryImplementor paramSessionFactoryImplementor)
+			throws QueryException {
+		StringBuffer buf = new StringBuffer();
+
+		buf.append("MATCH(");
+
+		for (int i = 0; i < args.size() - 1; i++) {
+			buf.append(args.get(i));
+			if (i < args.size() - 2)
+				buf.append(",");
+		}
+		buf.append(")");
+
+		buf.append(" AGAINST(");
+		buf.append(args.get(args.size() - 1));
+		buf.append(" in boolean mode) ");
+
+		return buf.toString();
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/PerformanceMonitor.java b/src/main/java/com/qxueyou/scc/base/handler/PerformanceMonitor.java
new file mode 100644
index 0000000..c5435d5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/PerformanceMonitor.java
@@ -0,0 +1,31 @@
+package com.qxueyou.scc.base.handler;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Order(80)
+@Aspect
+@Component
+public class PerformanceMonitor {
+	
+	private static final Logger logger = LogManager.getLogger("PerformanceMonitor");  
+
+	@Pointcut("execution(* com.iqtogether.qxueyou..*Service.*(..))")  
+    public void pointCutMethod() {  
+    }  
+	
+	@Around("pointCutMethod()")    
+    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
+        long begin = System.currentTimeMillis();  
+        Object o = pjp.proceed();
+        long end = System.currentTimeMillis();
+        logger.debug("{}:{}",pjp.getTarget().getClass()+"."+pjp.getSignature().getName(),(end-begin));  
+        return o;    
+    }  
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QCacheCleaner.java b/src/main/java/com/qxueyou/scc/base/handler/QCacheCleaner.java
new file mode 100644
index 0000000..febdb72
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QCacheCleaner.java
@@ -0,0 +1,21 @@
+package com.qxueyou.scc.base.handler;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface QCacheCleaner {
+	//阀值(暂不用)
+	public int threshold() default 0;
+	 
+	//需要清理的keyTag
+	public String clearBucket() default "";
+	
+	//tag分割正则表达式
+	public String bucketSplitReg() default "";	 
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QCacheMonitor.java b/src/main/java/com/qxueyou/scc/base/handler/QCacheMonitor.java
new file mode 100644
index 0000000..51c599c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QCacheMonitor.java
@@ -0,0 +1,421 @@
+package com.qxueyou.scc.base.handler;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.qxueyou.scc.base.model.CacheConstants;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.FreeMarkerMd5MethodDefine;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import reactor.util.IoUtils;
+
+@Order(100)
+@Aspect
+@Component
+public class QCacheMonitor {
+	private static final Logger logger = LogManager.getLogger("QCacheMonitor");
+
+	private static int MAX_KEY_LENGTH = 250;
+
+	private static FreeMarkerMd5MethodDefine md5MethodObj = new FreeMarkerMd5MethodDefine();
+
+	private static Pattern argPattern = Pattern.compile("\\$\\{arg([0-9])\\}");
+	
+	//判断当前线程是否已经执行过目标方法的标志
+	private final ThreadLocal<Map<String, Object>> targetMethodResult = new ThreadLocal<Map<String, Object>>();
+	
+	private Configuration cfg;
+
+	/** 缓存 **/
+	@Autowired
+	ICacheService cache;
+
+	@Autowired
+	QCacheRedis qCacheRedis;
+
+	@Pointcut("execution(@com.iqtogether.qxueyou..QCache* * *(..))")
+	public void pointCutMethod() {
+
+	}
+
+	@PostConstruct
+	private void initFreeMarkerCfg() throws Exception {
+		cfg = new Configuration(Configuration.VERSION_2_3_21);
+		cfg.setTemplateUpdateDelay(10);
+		cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(1000, 200));
+		cfg.setDefaultEncoding("UTF-8");
+		cfg.setLocale(java.util.Locale.CHINA);
+		cfg.setClassicCompatible(true);
+	}
+
+	@Around("pointCutMethod()" )
+	public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
+		MethodSignature methodSignature = null;
+		QCacheReader annoQCacheReader = null;
+		QCacheCleaner annoQCacheCleaner = null;
+		String excuteMethodKey = null;
+		try {
+			//test();
+			methodSignature = (MethodSignature) pjp.getSignature();
+			
+			excuteMethodKey = this.getExecuteMethodKey(pjp);
+			
+			//读取缓存的注解
+			annoQCacheReader = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QCacheReader.class);
+			//清理缓存注解
+			annoQCacheCleaner = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QCacheCleaner.class);
+			
+			if(annoQCacheReader!=null && annoQCacheCleaner==null){
+				this.processReadCache(pjp, annoQCacheReader, methodSignature);
+			}
+			
+			if(annoQCacheReader==null && annoQCacheCleaner!=null){
+				this.processCleanCache(pjp, annoQCacheCleaner, methodSignature);
+			}
+			
+			if(annoQCacheReader!=null && annoQCacheCleaner!=null){
+				this.processCleanCache(pjp, annoQCacheCleaner, methodSignature);
+				this.processReadCache(pjp, annoQCacheReader, methodSignature);
+			}
+		} catch (Exception e) {
+			logger.error("缓存处理失败,msg=" + e.getMessage(), e);
+		}
+		
+		return clearAndReturnMethodResult(pjp,excuteMethodKey);
+	}
+	
+	private void processReadCache(ProceedingJoinPoint pjp, QCacheReader qCacheReader, MethodSignature methodSignature)
+			throws Exception {
+		Object result = null;
+		String strCacheKey = null;
+		int expireTime = 0;
+		try {
+			expireTime = this.getCacheTimeSecond(qCacheReader);
+			
+			strCacheKey = this.checkAndGenerateCacheKey(pjp.getTarget().getClass(), qCacheReader.cacheKey(), methodSignature,
+					converToParamMap(pjp.getArgs()));
+			//执行方法对应的key值
+			String excuteMethodKey =  this.getExecuteMethodKey(pjp);
+
+			if (StringUtils.isNotEmpty(strCacheKey)) {
+				String strBucketKey = qCacheReader.bucket();
+				
+				if (StringUtils.isEmpty(strBucketKey)) {
+					strBucketKey = strCacheKey;
+				}
+				result = qCacheRedis.annocacheHget(CacheConstants.QXY_SERVICE_CACHE_NS + strBucketKey,
+						strCacheKey, methodSignature.getMethod().getReturnType());
+				if (result == null) {
+					executeTargetMethod(pjp,excuteMethodKey);
+					if (targetMethodResult.get()!=null && targetMethodResult.get().containsKey(excuteMethodKey)) {
+						qCacheRedis.annocacheHset(CacheConstants.QXY_SERVICE_CACHE_NS + strBucketKey, strCacheKey,
+								targetMethodResult.get().get(excuteMethodKey), expireTime);
+					}
+				}else{
+					//如果result存在,则直接放入targetMethodResult中
+					Map<String,Object> map = new HashMap<String,Object>();
+					map.put(excuteMethodKey, result);
+					targetMethodResult.set(map);
+				}
+			} else {
+				executeTargetMethod(pjp,excuteMethodKey);
+			}
+		} catch (Throwable e) {
+			throw new Exception("添加缓存发生异常,strCacheKey=" + strCacheKey, e);
+		}
+	}
+
+	private void processCleanCache(ProceedingJoinPoint pjp, QCacheCleaner qCacheCleaner, MethodSignature methodSignature)
+			throws Exception {
+		String[] strClearBucketArr = null;
+		String clearBucket = null;
+		try {
+			clearBucket =  this.checkAndGenerateCacheKey(pjp.getTarget().getClass(), qCacheCleaner.clearBucket(), methodSignature,
+					converToParamMap(pjp.getArgs()));
+			if (StringUtils.isNotEmpty(clearBucket)){
+				if(StringUtils.isNotEmpty(qCacheCleaner.bucketSplitReg())) {
+					strClearBucketArr = clearBucket.split(qCacheCleaner.bucketSplitReg());
+				}else{
+					strClearBucketArr =new String[]{clearBucket};
+				}
+			}
+			if (strClearBucketArr != null && strClearBucketArr.length > 0) {
+				for (int i = 0; i < strClearBucketArr.length; i++) {
+					strClearBucketArr[i] = CacheConstants.QXY_SERVICE_CACHE_NS.concat(strClearBucketArr[i]);
+				}
+				logger.info("清理的bucket:"+ArrayUtils.toString(strClearBucketArr));
+				this.qCacheRedis.del(strClearBucketArr);
+			}
+		} catch (Throwable e) {
+			logger.error("清理缓存发生异常,strClearBucketArr" + ArrayUtils.toString(strClearBucketArr, ""), e);
+		}
+	}
+
+	private String checkAndGenerateCacheKey(Class<?> targetClass, String key, MethodSignature methodSignature,
+			Map<String, Object> paramMap) throws Exception {
+		String strNewKey = null;
+
+		if (StringUtils.isNotEmpty(key)) {
+			logger.info("处理前的key:" + key);
+
+			// 对部分参数进行替换处理
+			strNewKey = replaceArgInfo(key, paramMap);
+			// freeMarker解析cackeKey
+			strNewKey = parseCacheKey(strNewKey, targetClass, methodSignature, paramMap);
+
+			logger.info("处理后的key:" + strNewKey);
+			if (strNewKey.length() > MAX_KEY_LENGTH) {
+				throw new Exception("Service缓存时Key过长,大于250个字符");
+			}
+		}
+		return strNewKey;
+	}
+
+	private String parseCacheKey(String strCacheKey, Class<?> targetClass, MethodSignature methodSignature,
+			Map<String, Object> paramMap) throws Exception {
+		Map<String, Object> data = null;
+		Reader in = null;
+		String templateName = null;
+		Template template = null;
+		ByteArrayOutputStream stream = null;
+		Writer out = null;
+		try {
+			data = new HashMap<String, Object>();
+			if(paramMap!=null){
+				data.putAll(paramMap);
+			}
+			
+			data.put("md5", md5MethodObj);
+			data.put("clzName", targetClass.getName());
+			data.put("methodName", methodSignature.getMethod().getName());
+			data.put("classId", ClientUtils.getClassId());
+			data.put("userId", ClientUtils.getUserId());
+			data.put("orgId", ClientUtils.getOrgId());
+
+			in = new StringReader(strCacheKey);
+			templateName = targetClass.getName().concat(".").concat(methodSignature.getMethod().getName());
+			template = new Template(templateName, in, cfg);
+			stream = new ByteArrayOutputStream();
+			out = new OutputStreamWriter(stream);
+			template.process(data, out);
+			out.flush();
+			return new String(stream.toByteArray(), "UTF-8");
+		} catch (Exception e) {
+			logger.error("使用freemark解析cacheKey失败", e);
+			throw e;
+		} finally {
+			IoUtils.closeQuietly(stream);
+			IoUtils.closeQuietly(out);
+		}
+	}
+
+	private String replaceArgInfo(String strCacheKey, Map<String, Object> paramMap) throws Exception {
+		StringBuffer sbBuffer = new StringBuffer(1024);
+		Matcher matcher = null;
+		String strParamName = null;
+		Class<?> paramClz = null;
+
+		logger.info("替换前的key:" + strCacheKey);
+		if (StringUtils.isNotEmpty(strCacheKey) && paramMap != null && !paramMap.isEmpty()) {
+			matcher = argPattern.matcher(strCacheKey);
+			while (matcher.find()) {
+				strParamName = "arg" + matcher.group(1);
+				// 参数类型判断
+				if (paramMap.containsKey(strParamName)) {
+					if(paramMap.get(strParamName)!=null){
+						paramClz = paramMap.get(strParamName).getClass();
+						if (paramClz.isAssignableFrom(java.lang.Object.class)) {
+							throw new Exception("错误:缓存参数类型不能是Object.class类型的对象");
+						} else if (paramClz.isAssignableFrom(java.util.List.class) || paramClz.isArray()) {
+							matcher.appendReplacement(sbBuffer, "<#list " + strParamName + " as node>_${node}</#list>");
+						} else if (paramClz.isAssignableFrom(java.util.Map.class)) {
+							matcher.appendReplacement(sbBuffer, "<#list " + strParamName + "?keys as key>_${key}:${"
+									+ strParamName + "['${key}']}</#list>");
+						} else if (paramClz.isAssignableFrom(java.util.Date.class)) {
+							matcher.appendReplacement(sbBuffer, "${date?datetime}");
+						}
+					}
+				} else {
+					throw new Exception("错误:参数表达式中存在不合法的参数");
+				}
+			}
+			matcher.appendTail(sbBuffer);
+			logger.info("替换后的key:" + sbBuffer.toString());
+			return sbBuffer.toString();
+		}else{
+			return strCacheKey;
+		}
+		
+	}
+
+	private Map<String, Object> converToParamMap(Object[] paramObjects) {
+		Map<String, Object> paramMap = null;
+		if (paramObjects != null && paramObjects.length > 0) {
+			paramMap = new HashMap<String, Object>(paramObjects.length);
+			for (int i = 0; i < paramObjects.length; i++) {
+				paramMap.put("arg" + i, paramObjects[i]);
+			}
+		}
+		return paramMap;
+	}
+
+	private int getCacheTimeSecond(QCacheReader cacheAnno) throws Exception {
+		int expireTime = 0;
+		switch (cacheAnno.timeUnit()) {
+		case MINUTE:
+			expireTime = cacheAnno.cacheTime() * 60;
+			break;
+		case HOUR:
+			expireTime = cacheAnno.cacheTime() * 60 * 60;
+			break;
+		case DAY:
+			expireTime = cacheAnno.cacheTime() * 24 * 60 * 60;
+			break;
+		default:
+			expireTime = cacheAnno.cacheTime();
+			break;
+		}
+		return expireTime;
+	}
+	
+	/**
+	 * 执行目标方法,只允许执行一次,并保存当前结果
+	 * @param pjp
+	 * @param key
+	 * @throws Throwable
+	 */
+	private void executeTargetMethod(ProceedingJoinPoint pjp ,String key) throws Throwable{
+		String excuteMethodKey= key;
+		if(StringUtils.isEmpty(excuteMethodKey)){
+			excuteMethodKey = this.getExecuteMethodKey(pjp);
+		}
+		//是否需要判断是否是void方法
+		if(targetMethodResult.get()==null || !targetMethodResult.get().containsKey(excuteMethodKey)){
+			Map<String,Object> map = new HashMap<String,Object>();
+			map.put(excuteMethodKey, pjp.proceed());
+			targetMethodResult.set(map);
+		}
+	}
+	
+	/**
+	 * 返回并清理ThreadLocal<Map<String, Object>>的MAP中的KEY
+	 * @param pjp
+	 * @param key
+	 * @throws Throwable
+	 */
+	private Object clearAndReturnMethodResult(ProceedingJoinPoint pjp ,String key) throws Throwable{
+		Object result = null;
+		String excuteMethodKey= key;
+		if(StringUtils.isEmpty(excuteMethodKey)){
+			excuteMethodKey = getExecuteMethodKey(pjp);
+		}
+		//是否需要判断是否是void方法(TODO)
+		if(targetMethodResult.get()!=null && targetMethodResult.get().containsKey(excuteMethodKey)){
+			result =targetMethodResult.get().get(excuteMethodKey);
+			targetMethodResult.get().remove(excuteMethodKey);
+		}else{
+			result = pjp.proceed();
+		}
+		return result;
+	}
+	
+	/**
+	 * 返回当前目标方法的执行结果存储在ThreadLocal<Map<String, Object>>的MAP中的KEY
+	 * @param pjp
+	 * @return key
+	 */
+	private String getExecuteMethodKey(ProceedingJoinPoint pjp){
+		MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
+		StringBuffer sBuffer = new StringBuffer(512);
+		sBuffer.append(Thread.currentThread().getId());
+		sBuffer.append('.');
+		sBuffer.append(pjp.getTarget().getClass().getName());
+		sBuffer.append('.');
+		sBuffer.append(methodSignature.getMethod().getName());
+		return sBuffer.toString();
+	}
+	
+
+//	public void test() {
+//		
+//		ExecutorService es = null;
+//		
+//		try {
+//			int j =0;
+//			int size = 1000;
+//			while (size>0) {
+//				long start = System.currentTimeMillis();
+//				++j;
+//				size=size-50;
+//				
+//				this.annoCacheRedis.del("testhget");
+//				es = Executors.newFixedThreadPool(1000);
+//				System.out.println("testReisConn");
+//				for (int i = 0; i < 1000; i++) {
+//					es.execute(new TestThread());
+//				}
+//				es.shutdown();
+//				if(es.awaitTermination(1, java.util.concurrent.TimeUnit.HOURS)){
+//					System.out.println("线程执行完成");	
+//				}
+//				long end = System.currentTimeMillis();
+//				System.out.println(start-end);
+//			}
+//		}catch (Exception e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		
+//	}
+//	
+//	
+//	static class TestThread implements Runnable{
+//		public void run() {
+//			CommonRedisTemplate commonTemplate = null;
+//			ShardedJedis sjedisJedis = null;
+//			try {
+//				 commonTemplate = SpringUtil.getBean("commonRedisTemplate",CommonRedisTemplate.class);
+//					for(int i=0;i<1;i++){
+//						sjedisJedis = commonTemplate.getJedisClient();
+//						sjedisJedis.incr("testincr1");
+//						sjedisJedis.hset("testhget", String.valueOf(Thread.currentThread().getName().concat(String.valueOf(i))), "1234567890");
+//						sjedisJedis.hget("testhget", String.valueOf(Thread.currentThread().getName().concat(String.valueOf(i))));
+//					}
+//			} catch (Exception e) {
+//				e.printStackTrace();
+//			}finally {
+//				commonTemplate.closeJedisClient(sjedisJedis);
+//			}
+//		}
+//		
+//	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QCacheReader.java b/src/main/java/com/qxueyou/scc/base/handler/QCacheReader.java
new file mode 100644
index 0000000..a7059de
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QCacheReader.java
@@ -0,0 +1,33 @@
+package com.qxueyou.scc.base.handler;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface QCacheReader {
+	//缓存时间单位枚举(秒,分,时)
+	public enum TimeUnit{SECOND,MINUTE,HOUR,DAY};
+		
+	public enum ClearStrategy {KEY,TAG};
+	
+	 //缓存的KEY
+	public String cacheKey();
+	
+	//标签 方便多数据的清理
+	public String bucket() default "";
+	
+	//阀值(暂不用)
+	public int threshold() default 0;
+	
+	//缓存时长
+	public int cacheTime() default 60;
+	 
+	//缓存时间单位(默认秒)
+	public TimeUnit timeUnit() default TimeUnit.SECOND;
+	 
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QCacheRedis.java b/src/main/java/com/qxueyou/scc/base/handler/QCacheRedis.java
new file mode 100644
index 0000000..47ef3e4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QCacheRedis.java
@@ -0,0 +1,86 @@
+package com.qxueyou.scc.base.handler;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.dao.CommonRedisTemplate;
+
+import redis.clients.jedis.ShardedJedis;
+
+@Repository(value="qCacheRedis")
+public class QCacheRedis extends CommonRedisTemplate{
+	
+	private static String BUCKET_HEADER_KEY="bucketHeaderKey";
+	
+	@SuppressWarnings("unchecked")
+	public <T> T annocacheHget(String bucket,String cachekey, Class<T> cls) {
+		ShardedJedis client = null;
+		T result = null;
+		try {
+			client = this.getJedisClient();
+			byte [] arrBytes =  client.hget(bucket.getBytes(), cachekey.getBytes());
+			String strJson =null;
+			Object obj = null;
+			if(arrBytes!=null){
+				strJson = new String(arrBytes);
+				obj = JSON.parse(strJson);
+			}
+//			Object obj = ReisUtils.unserialize(client.hget(bucket.getBytes(), cachekey.getBytes()));
+			if(obj!=null){
+				Map<String, Object> valueMap =(Map<String, Object>)obj;
+				//判断是否过期
+				if(checkIsExpire((Long)valueMap.get("expireTime"))){
+					//删除键
+					client.hdel(bucket.getBytes(), cachekey.getBytes());
+					result = null;
+				}else{
+					result = JSONObject.toJavaObject((JSON)valueMap.get("target"), cls);
+				}
+			}
+		} finally {
+			this.closeJedisClient(client);
+		}
+		return result;
+	}
+	
+	public Long annocacheHset(String bucket, String cachekey, Object value,int timeout) {
+		ShardedJedis client = null;
+		try {
+			client = this.getJedisClient();
+			if(!client.exists(bucket.getBytes())){
+				client.hsetnx(bucket.getBytes(), BUCKET_HEADER_KEY.getBytes(), "".getBytes());
+			}
+			Map<String, Object> valueMap = new HashMap<String,Object>();
+			
+			if(timeout>=0){
+				valueMap.put("expireTime", Calendar.getInstance().getTime().getTime() + timeout * 1000);
+			}else{
+				valueMap.put("expireTime", -1L);
+			}
+			
+			valueMap.put("target",value);
+			
+			String strJsonString = JSON.toJSONString(valueMap);
+			
+			return client.hset(bucket.getBytes(), cachekey.getBytes(), strJsonString.getBytes());
+		}finally {
+			this.closeJedisClient(client);
+		}
+	}
+	
+	/** 校验是否过期 */
+	private boolean checkIsExpire(long expireTime){
+		//负数表示永不过期
+		if(expireTime>0){
+			return new Date(expireTime).compareTo(Calendar.getInstance().getTime())==-1;	
+		}else{
+			return false;
+		}
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QLog.java b/src/main/java/com/qxueyou/scc/base/handler/QLog.java
new file mode 100644
index 0000000..3f7a28c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QLog.java
@@ -0,0 +1,29 @@
+package com.qxueyou.scc.base.handler;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface QLog {
+	//日志类型枚举 SYS:系统,BUSINESS:业务
+	public enum LogType{SYS,BUSINESS};
+	
+	 //日志类型
+	public LogType type() default LogType.BUSINESS;
+	
+	//日志内容
+	public String content() default "";
+	
+	//描述信息
+	public String desp() default "";
+	
+	//模块
+	public String module() default "";
+	
+	 
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QLogMonitor.java b/src/main/java/com/qxueyou/scc/base/handler/QLogMonitor.java
new file mode 100644
index 0000000..1170edc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QLogMonitor.java
@@ -0,0 +1,234 @@
+package com.qxueyou.scc.base.handler;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.core.annotation.Order;
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.ParserContext;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import com.alibaba.fastjson.JSON;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.RequestClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.ISysLogService;
+
+@Order(90)
+@Aspect
+@Component
+public class QLogMonitor {
+
+	private static final Logger logger = LogManager.getLogger("QLogMonitor");
+
+	@Autowired
+	ISysLogService logService;
+
+	@Pointcut("execution(public * com.iqtogether.qxueyou..action.*Controller.*(..))")
+	public void pointCutMethod() {
+	}
+
+	@Before("pointCutMethod()")
+	public void doAfter(JoinPoint joinPoint) throws Throwable {
+		ServletRequestAttributes servletWebRstRequest = null;
+		HttpServletRequest request = null;
+		MethodSignature methodSignature = null;
+		String userAgent = null;
+		String ip = null;
+		String strContent = null;
+		String strDesp = null;
+		String strModule = "";
+		QLog.LogType qLogType = QLog.LogType.SYS;
+		short sLogType = -1;
+		QLog qLog = null;
+		try {
+			methodSignature = (MethodSignature) joinPoint.getSignature();
+			if (RequestContextHolder.getRequestAttributes() != null) {
+				servletWebRstRequest = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+				request = servletWebRstRequest.getRequest();
+				userAgent = request.getHeader("user-agent");
+				if(StringUtils.isNotEmpty(userAgent) && userAgent.length()>255){
+					userAgent = userAgent.substring(0,255);
+				}
+				ip = RequestClientUtils.getRemoteIP(request);
+			}
+			
+			qLog = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QLog.class);
+			if (qLog != null) {
+				strContent = parserSpel(qLog.content(), joinPoint);
+				strDesp = parserSpel(qLog.desp(), joinPoint);
+				strModule = parserSpel(qLog.module(), joinPoint);
+				qLogType = qLog.type();
+			}
+			// 默认为参数相关信息
+			if (StringUtils.isEmpty(strContent)) {
+				strContent = createDefaultContentInfo(joinPoint, methodSignature);
+			}
+			// 默认为请求的URI信息
+			if(StringUtils.isEmpty(strDesp) && request!=null){
+				strDesp =request.getRequestURI();
+			}
+			// 默认为:控制器模块注解value值+方法名
+			if (StringUtils.isEmpty(strModule)) {
+				strModule = createDefaultModuleInfo(joinPoint);
+			}
+			
+			sLogType = (short) (QLog.LogType.SYS.equals(qLogType) ? 0 : 1);
+
+			this.saveLog(strContent, strDesp, strModule.toUpperCase(), sLogType, ip,userAgent);
+		} catch (Exception e) {
+			logger.error("记录action操作日志发生异常!,errMsg:" + e.getMessage(), e);
+		}
+	}
+
+	private String createDefaultModuleInfo(JoinPoint joinPoint) {
+		String strModule = "";
+		RequestMapping classReqMap = AnnotationUtils.findAnnotation(joinPoint.getTarget().getClass(),
+				RequestMapping.class);
+		if (classReqMap != null && classReqMap.value() != null && classReqMap.value().length > 0
+				&& StringUtils.isNotEmpty(classReqMap.value()[0])) {
+			if (classReqMap.value()[0].startsWith("/")) {
+				strModule = classReqMap.value()[0].substring(1);
+			}
+			if (StringUtils.isNotEmpty(strModule)) {
+				strModule = strModule.concat("_").concat(joinPoint.getSignature().getName());
+			} else {
+				strModule = "ROOT".concat("_").concat(joinPoint.getSignature().getName());
+			}
+			strModule = strModule.replaceAll("/", "_");
+		}
+		
+		if(StringUtils.isNotEmpty(strModule) && strModule.length()>64){
+			strModule = strModule.substring(0, 64);
+		}
+		return strModule;
+	}
+
+	private String createDefaultContentInfo(JoinPoint joinPoint, MethodSignature methodSignature) {
+		String strDesp="";
+		if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) {
+			Map<String, Object> parmaMap = new HashMap<String, Object>(joinPoint.getArgs().length);
+			for (int i = 0; i < joinPoint.getArgs().length; i++) {
+				if (joinPoint.getArgs()[i] == null) {
+					parmaMap.put(methodSignature.getParameterNames()[i], "");
+				} else {
+					if (this.checkParam(joinPoint.getArgs()[i].getClass())) {
+						parmaMap.put(methodSignature.getParameterNames()[i], joinPoint.getArgs()[i]);
+					}
+				}
+			}
+			if (!parmaMap.isEmpty()) {
+				strDesp = JSON.toJSONString(parmaMap);
+				if (strDesp.length() > 250) {
+					strDesp = strDesp.substring(0, 250).concat("..");
+				}
+			}
+		}
+		return strDesp;
+	}
+
+	private void saveLog(String content, String desp, String module, short type, String ip,String userAgent) {
+		SysLog lg = new SysLog();
+		TraceUtils.setCreateActiveTrace(lg);
+		lg.setUserId(ClientUtils.getUserId());
+		lg.setUserName(ClientUtils.getUserName());
+		lg.setDeleteFlag(Boolean.FALSE);
+		lg.setContent(content);
+		lg.setDesp(desp);
+		lg.setModule(module);
+		lg.setType(type);
+		lg.setIp(ip);
+		lg.setUserAgent(userAgent);
+		logService.insertLog(lg);
+	}
+
+	private boolean checkParam(Class<?> paramClz) {
+		if (paramClz.isPrimitive()) {
+			return true;
+		} else if (Byte.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Character.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Boolean.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Short.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Integer.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Long.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Float.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Double.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (String.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Map.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (List.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (Collection.class.isAssignableFrom(paramClz)) {
+			return true;
+		} else if (paramClz.isArray()) {
+			return true;
+		} else if (Serializable.class.isAssignableFrom(paramClz)) {
+			return true;
+		}
+		return false;
+	}
+
+	private String parserSpel(String strTemplate, JoinPoint joinPoint) {
+		MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+		ExpressionParser parser = new SpelExpressionParser();
+		EvaluationContext ctx = new StandardEvaluationContext();
+		// 设置变量
+		if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) {
+			for (int i = 0; i < joinPoint.getArgs().length; i++) {
+				if (joinPoint.getArgs()[i] != null && this.checkParam(joinPoint.getArgs()[i].getClass())) {
+					ctx.setVariable(methodSignature.getParameterNames()[i], joinPoint.getArgs()[i]);
+				}
+			}
+		}
+		String parsedString = parser.parseExpression(strTemplate, new ParserContext() {
+			@Override
+			public boolean isTemplate() {
+				return true;
+			}
+
+			@Override
+			public String getExpressionSuffix() {
+				return "}";
+			}
+
+			@Override
+			public String getExpressionPrefix() {
+				return "{";
+			}
+		}).getValue(ctx, String.class);
+		
+		return parsedString;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QXueyouExceptionHandler.java b/src/main/java/com/qxueyou/scc/base/handler/QXueyouExceptionHandler.java
new file mode 100644
index 0000000..6df277b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QXueyouExceptionHandler.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.base.handler;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * Spring MVC 异常处理类
+ * @author 德虎
+ *
+ */
+@ControllerAdvice
+public class QXueyouExceptionHandler {
+
+	private static Logger log = LogManager.getLogger("QXueyouExceptionHandler");
+
+	@ExceptionHandler(value = Exception.class)
+	public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e)
+			throws Exception {
+
+		long exepCode = System.currentTimeMillis();
+		log.error(req.getRequestURL() + ",诊断代码:" + exepCode + ":" + e.getMessage(), e);
+
+		if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
+			throw e;
+		}
+
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("exepCode", String.valueOf(exepCode));
+		mav.setViewName("error");
+
+		return mav;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/handler/QxueyouMysqlDialect.java b/src/main/java/com/qxueyou/scc/base/handler/QxueyouMysqlDialect.java
new file mode 100644
index 0000000..e9d0694
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/handler/QxueyouMysqlDialect.java
@@ -0,0 +1,13 @@
+package com.qxueyou.scc.base.handler;
+
+import org.hibernate.dialect.MySQLDialect;
+import org.hibernate.dialect.function.SQLFunctionTemplate;
+import org.hibernate.type.LongType;
+
+public class QxueyouMysqlDialect extends MySQLDialect {
+	
+	public QxueyouMysqlDialect(){
+		super();
+		registerFunction("distance", new SQLFunctionTemplate(new LongType(), "F_DISTANCE(?1,?2,?3,?4)"));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/ApiResult.java b/src/main/java/com/qxueyou/scc/base/model/ApiResult.java
new file mode 100644
index 0000000..6f9b32d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/ApiResult.java
@@ -0,0 +1,106 @@
+package com.qxueyou.scc.base.model;
+
+/**
+ * api专用返回结果model
+ * @author cyq
+ *
+ */
+public class ApiResult {
+	
+	/**
+	 * 返回结果的枚举
+	 * @author cyq
+	 *
+	 */
+	public enum ResultCode {
+		Success(1),						// 成功
+		UserNotExist(40001),			// 用户不存在
+		PasswordInvalid(40002),			// 密码不正确
+		TokenInvalid(50001),			// Token无效
+		ParamInvalid(60001),			// 参数无效
+		SystemException(60002),			// 系统异常
+		DataNotExist(60003);			// 数据不存在
+		
+		private Integer resultCode;
+
+		ResultCode(int code) {
+			this.resultCode = code;
+		}
+		
+		public Integer getCode() {
+			return resultCode;
+		}
+	}
+	
+	
+	private boolean result;
+	
+	/**
+	 * 40001用户不存在
+	 * 40002密码错误
+	 * 50001token无效
+	 * 60001参数错误
+	 * 60001系统异常
+	 * 60003数据不存在
+	 */
+	private int code = 1;
+	
+	private Object data;
+	
+	public ApiResult (boolean result) {
+		this.result = result;
+	}
+	
+	public ApiResult (boolean result, int code) {
+		this.result = result;
+		this.code = code;
+	}
+
+	public ApiResult (boolean result, ResultCode code) {
+		this.result = result;
+		this.code = code.getCode();
+	}
+	
+	public ApiResult (boolean result, int code, Object data) {
+		this.result = result;
+		this.code = code;
+		this.data = data;
+	}
+	
+	public static ApiResult resultTrue() {
+		return new ApiResult(true);
+	}
+	
+	public static ApiResult resultTrue(Object data) {
+		return new ApiResult(true, 1, data);
+	}
+	
+	public static ApiResult resultFalse(int code) {
+		return new ApiResult(false, code);
+	}
+
+	public boolean isResult() {
+		return result;
+	}
+
+	public void setResult(boolean result) {
+		this.result = result;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	public Object getData() {
+		return data;
+	}
+
+	public void setData(Object data) {
+		this.data = data;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/BaseVO.java b/src/main/java/com/qxueyou/scc/base/model/BaseVO.java
new file mode 100644
index 0000000..bb6dd53
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/BaseVO.java
@@ -0,0 +1,11 @@
+package com.qxueyou.scc.base.model;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+public class BaseVO {
+	
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/CacheConstants.java b/src/main/java/com/qxueyou/scc/base/model/CacheConstants.java
new file mode 100644
index 0000000..b31bf9c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/CacheConstants.java
@@ -0,0 +1,206 @@
+package com.qxueyou.scc.base.model;
+
+
+/**
+ * 缓存常量实体类
+ * @author ody.yuan
+ *
+ */
+public class CacheConstants {
+	/** 业务缓存模块,通过模块删除对应的key
+	 *  1.app机构介绍
+	 *  2.
+	 *   */
+	public static final int CACHE_MODULE_H5_ORG_INFO = 1 ;
+	
+	/** 手机短信最小间隔时间-缓存前缀 */
+	public static final String SMS_MB_MIN_INTERVAL_PREFIX = "SMS_MB_MIN_INTERVAL_";
+	
+	/** 手机短信最小间隔时间-缓存时间 */
+	public static final Integer SMS_MB_MIN_INTERVAL_CACHE_TIME = 60;
+	
+	/** 手机、IP短信最小间隔时间-缓存时间 */
+	public static final Integer SMS_MB_IP_DAY_MAX_CACHE_TIME = 24 * 60 * 60 ;
+	
+	/** 手机短信同一天最多次数-缓存前缀 */
+	public static final String SMS_MB_DAY_MAX_PREFIX = "SMS_MB_DAY_MAX_";
+	
+	/** 缓存当天发送短信次数 */
+	public static final String SMS_DAY_NUM = "SMS_DAY_NUM_";
+	
+	/** 手机短信同一天最多次数-最大次数 */
+	public static final Integer SMS_MB_DAY_MAX_TIME = 15;
+	
+	/** IP短信同一天最多次数 -缓存前缀*/
+	public static final String SMS_IP_DAY_MAX_PREFIX = "SMS_IP_DAY_MAX_";
+	
+	/** IP短信同一天最多次数-最大次数 */
+	public static final Integer SMS_IP_DAY_MAX_TIME = 20;
+	
+	/** 机构层级删除缓存orgIds 缓存前缀 */
+	public static final String ORG_DELETE_ORGIDS_PREFIX = "ORG_DEL_ORG_IDS_";
+	
+	/** 机构层级删除缓存classIds 缓存前缀 */
+	public static final String ORG_DELETE_CLASSIDS_PREFIX = "ORG_DEL_CLS_IDS_";
+	
+	/** 机构层级删除缓存classIds 缓存时间 3小时 */
+	public static final Integer ORG_DELETE_ORG_CLASS_IDS_TIME = 60 * 60 * 3;
+	
+	/** 用户唯一编码:数字水印 */
+	public static final String USER_UNIQUE_CODE_PREFIX = "USER_UNIQUE_CODE_MAIN_WEB";
+	
+	/** 用户唯一编码:数字水印 */
+	public static final Integer USER_UNIQUE_CODE_MAX_TIME = 60 * 60 * 24 ;
+	
+	/** 抽奖间隔缓存前缀 */
+	public static final String LOTTERY_MAX_INTERNAL_PREFIX = "LOTTERY_MAX_INTERNAL_PREFIX_ID_";
+	
+	/** 抽奖间隔缓存时间 */
+	public static final Integer LOTTERY_MAX_INTERNAL_TIME = 5 ;
+	
+	/** 流量班级对应机构ID */
+	public static final String FLOW_CLASS_ORG_ID_PREFIX = "FLOW_CLASS_ORG_ID_";
+	
+	/** 流量班级对应顶层机构ID */
+	public static final String FLOW_ORG_TOP_ORG_ID_PREFIX = "FLOW_ORG_TOP_ORG_ID_";
+	
+	/** 流量班级对应机构层级编码 */
+	public static final String FLOW_ORG_CODE_ORG_ID_PREFIX = "FLOW_ORG_CODE_ORG_ID_";
+	
+	/** 流量班级对应顶层机构ID */
+	public static final String FLOW_ORG_CLASS_ID_PREFIX = "FLOW_ORG_CLASS_ID_";
+	
+	/** 流量班级对应视频名 */
+	public static final String FLOW_ORG_VIDEO_NAME_PREFIX = "FLOW_ORG_VIDEO_NAME_";
+	
+	/** 流量班级对应直播名 */
+	public static final String FLOW_ORG_LIVE_NAME_PREFIX = "FLOW_ORG_LIVE_NAME_";
+	
+	/** 流量班级对应顶层机构、机构ID缓存时间  5min */
+	public static final Integer FLOW_CLASS_TOP_ORG_ID_TIME = 60 * 5 ;
+	
+	/** 机构人民币账户是否合法 */
+	public static final String FLOW_ORG_RMB_ACCOUNT_VALIDATE_PREFIX = "FLOW_ORG_RMB_ACCOUNT_VALIDATE_ORG_ID_";
+	
+	/** 流量班级对应顶层机构、机构ID缓存时间  1 HOUR */
+	public static final Integer FLOW_ORG_RMB_ACCOUNT_VALIDATE_TIME = 60 * 60  ;
+	
+	/** 激活学员:缓存班级key前缀 */
+	public static final String USER_REG_ACT_CLASS= "USER_REG_ACT_CLASS_INFO";
+	
+	/** 激活学员:缓存班级 */
+	public static final Integer USER_REG_ACT_CLASS_MAX_TIME = 60 * 60 * 1 ;
+	
+	/** 基础数据缓存:地址省 */
+	public static final String BASE_DATA_PROVICE_PREFIX = "BASE_DATA_PROVICE_PREFIX";
+	
+	/** 基础数据缓存:地址市 */
+	public static final String BASE_DATA_CITY_PREFIX = "BASE_DATA_CITY_";
+	
+	/** 基础数据缓存:非高校公共科目 */
+	public static final String BASE_DATA_COURSE_CATEGORY_PREFIX = "BASE_DATA_COURSE_CATEGORY_";
+	
+	/** 基础数据缓存:非高校公共科目(直播慧眼端) */
+	public static final String BASE_DATA_COURSE_CATEGORY_LIVE_PREFIX = "BASE_DATA_COURSE_CATEGORY_LIVE_";
+	
+	/** 基础数据缓存时长:一天 */
+	public static final Integer BASE_DATA_TIME = 60 * 60 * 24 ;
+	
+	/** 业务数据缓存:机构介绍(App接口) */
+	public static final String BUSINESS_DATA_ORG_INFO_PREFIX = "BUSINESS_DATA_ORG_INFO_PREFIX_";
+	
+	/** 业务数据缓存时长:一小时 */
+	public static final Integer BUSINESS_DATA_TIME = 60 * 60 ;
+	
+	/** 签到:缓存签到主表前缀 */
+	public static final String SCH_SIGN_ID_PREFIX = "SCH_SIGN_ID_";
+	
+	/** 签到:缓存签到时长 , 10min */
+	public static final Integer SCH_SIGN_ID_TIME = 60 * 10 ;
+	
+	/** 签到:缓存签到第一页明细前缀 */
+	public static final String SCH_SIGN_STATISTICS_FIRST_PAGE_PREFIX = "SCH_SIGN_STATISTICS_FIRST_PAGE_";
+	
+	/** 签到:缓存签到第一页明细时长 , 10min */
+	public static final Integer SCH_SIGN_STATISTICS_FIRST_PAGE_TIME = 60 * 10 ;
+	
+	/** 签到:缓存签到活动主表前缀 */
+	public static final String SCH_SIGN_ACTIVITY_PREFIX = "SCH_SIGN_ACTIVITY_";
+	
+	/** 签到:缓存签到活动时长 , 10min */
+	public static final Integer SCH_SIGN_ACTIVITY_TIME = 60 * 10 ;
+	
+	/** 签到:缓存签到机构前缀 */
+	public static final String SCH_SIGN_ORG_PREFIX = "SCH_SIGN_ORG_";
+	
+	/** 签到:缓存签到机构时长 , 10min */
+	public static final Integer SCH_SIGN_ORG_TIME = 60 * 10 ;
+	
+	/** 签到:缓存签到活动第一页明细前缀 */
+	public static final String SCH_SIGN_STATISTICS_FIRST_ACTPAGE_PREFIX = "SCH_SIGN_STATISTICS_FIRST_PAGE_";
+	
+	/** 签到:缓存签到活动第一页明细时长 , 10min */
+	public static final Integer SCH_SIGN_STATISTICS_FIRST_ACTPAGE_TIME = 60 * 10 ;
+	
+	/** 获取地址:调用百度IP缓存Key:已达当日最大上限 */
+	public static final String USER_OPERATE_LAT_LNG_MAX = "USER_OPERATE_IP_LAT_LNG_MAX_NUM";
+	
+	/** 获取地址:调用百度IP缓存Key:获取地址失败 */
+	public static final String USER_OPERATE_LAT_LNG_FAIL = "USER_OPERATE_IP_LAT_LNG_FAIL_";
+	
+	/** 签到:缓存签到活动第一页明细时长 , 24小时 */
+	public static final Integer USER_OPERATE_LAT_LNG_TIME = 60 * 60 * 24 ;
+	
+	/** 配置项:配置项缓存前缀 */
+	public static final String QXY_SYSCONFIG_CACHE_PREFIX = "QXY_SYSCONFIG_CACHE_";
+	
+	/** 积分上限配置项时长 */
+	public static final Integer QXY_SYSCONFIG_SCORE_CACHE_TIME = 60 * 60 ;
+	
+	/** 个人当日积分缓存前缀 */
+	public static final String QXY_DAY_SCORE_RECORD_PREFIX = "QXY_DAY_SCORE_RECORD_";
+	
+	/** 个人当日积分缓存时长 */
+	public static final Integer QXY_DAY_SCORE_RECORD_TIME = 60 * 60 * 24 ;
+	
+	/** 个人当日登录积分前缀 */
+	public static final String QXY_DAY_LOGIN_SCORE_RECORD_PREFIX = "QXY_DAY_LOGIN_SCORE_RECORD_";
+	
+	/** 个人当日登录积分缓存时长 */
+	public static final Integer QXY_DAY_LOGIN_SCORE_RECORD_TIME = 60 * 60 * 24 ;
+	
+	/** 个人当日签到积分前缀 */
+	public static final String QXY_DAY_SIGN_SCORE_RECORD_PREFIX = "QXY_DAY_SIGN_SCORE_RECORD_";
+	
+	/** 个人当日签到积分缓存时长 */
+	public static final Integer QXY_DAY_SIGN_SCORE_RECORD_TIME = 60 * 60 * 24 ;
+	
+	
+	/** app首页:推荐讲义缓存前缀 */
+	public static final String APP_INDEX_HANDOUT_RECOMMEND_PREFIX = "APP_INDEX_HANDOUT_RECOMMEND_CLASSID_";
+	
+	/** app首页:推荐视频缓存前缀 */
+	public static final String APP_INDEX_VIDEO_RECOMMEND_PREFIX = "APP_INDEX_VIDEO_RECOMMEND_CLASSID_";
+	
+	/** app首页:推荐直播缓存前缀 */
+	public static final String APP_INDEX_LIVE_RECOMMEND_PREFIX = "APP_INDEX_LIVE_RECOMMEND_CLASSID_";
+	
+	/** app首页:推荐讲义、直播及直播缓存时间  一天 */
+	public static final Integer APP_INDEX_CONTENT_RECOMMEND_PREFIX = 60 * 60 * 24 ;
+	
+	/** ping++ 消息处理错误次数缓存前缀 */
+	public static final String PINGPP_MQ_EXCEPTION_COUNT_PREFIX = "PINGPP_MQ_EXCEPTION_COUNT_" ;
+	
+	/** ping++ 消息处理错误次数缓存时间*/
+	public static final Integer PINGPP_MQ_EXCEPTION_COUNT_TIME = 60 * 60 ;
+	
+	/** 订单防止重复执行  缓存前缀 */
+	public static final String GLOBAL_TRANS_ORDER_ID_PREFIX = "GLOBAL_TRANS_ORDER_ID_" ;
+	
+	/** 订单防止重复执行  缓存时间*/
+	public static final Integer GLOBAL_TRANS_ORDER_ID_TIME = 60 ;
+	
+	/** 服务层缓存空间  缓存前缀*/
+	public static final String QXY_SERVICE_CACHE_NS ="QXU_SERVICE_CACHE_NS_";
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/Constants.java b/src/main/java/com/qxueyou/scc/base/model/Constants.java
new file mode 100644
index 0000000..0c8523c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/Constants.java
@@ -0,0 +1,396 @@
+package com.qxueyou.scc.base.model;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+/**
+ * 常量实体类
+ * @author zhiyong
+ *
+ */
+public class Constants {
+	/** 实体类 */
+	
+	/** int型常量  */
+	public static final int INT_0 = 0;
+	
+	public static final int INT_1 = 1;
+	
+	/**定时发送消息类型 :1、修改班级进度*/
+	public static final String MSG_TYPE_CLASS_PROGRESS = "progress";
+	
+	/** 虚拟一个 错题 收藏本的groupId */
+	public static final String EXERCISE_FAULT_GROUP_ID="faultExercise001";
+	
+	public static final String EXERCISE_FAVOR_GROUP_ID="favorExercise001";
+	
+	/** 错题 收藏本类型 */
+	public static final String EXERCISE_TYPE_FAULT="fault";
+	
+	public static final String EXERCISE_TYPE_FAVORT="favor";
+	
+	/** android app version */
+	public static final String CONFIG_ANDROID_APP_VERSION="appVersion";
+	
+	/** android app versionCODE */
+	public static final String CONFIG_ANDROID_APP_VERSION_CODE="appVersionCode";
+	
+	/**下载路径 */
+	public static final String CONFIG_ANDROID_APP_DOWNLOAD_URL="appVersionDownloadUrl";
+	
+	/** android app version tips*/
+	public static final String CONFIG_APP_VERSION_TIPS="versionTips";
+	
+	/** android live app version */
+	public static final String CONFIG_LIVE_ANDROID_APP_VERSION="appVersionLive";
+	
+	/** android live app versionCODE */
+	public static final String CONFIG_LIVE_ANDROID_APP_VERSION_CODE="appVersionCodeLive";
+	
+	/** android live app version tips*/
+	public static final String CONFIG_LIVE_ANDROID_APP_VERSION_TIPS="versionTipsLive";
+	
+	/** android live app version url*/
+	public static final String CONFIG_LIVE_ANDROID_APP_VERSION_URL="versionUrlLive";
+	
+	/** android live app version md5*/
+	public static final String CONFIG_LIVE_ANDROID_APP_VERSION_MD5="versionMd5Live";
+	
+	/** ios app version code */
+	public static final String CONFIG_IOS_APP_VERSION_CODE="iosAppVersion_code";
+	
+	/** ios app version no. */
+	public static final String CONFIG_IOS_APP_VERSION_NO="iosAppVersion_no";
+	
+	/** score day max limit  */
+	public static final String CONFIG_QXY_SCORE_DYA_LIMIT = "scoreDayLimit";
+	
+	/** 游客班级id */
+	public static final String VISITOR_CLASS_ID="1";
+	
+	/** 游客用户id */
+	public static final String VISITOR_USER_ID="visitor_001";
+	
+	/** 游客手机号 */
+	public static final String VISITOR_USER_PHONE="0000";
+	
+	/** 选课报名 不限值 */
+	public static final String NOT_LIMIT_VALUE="00";
+	
+	/** 报名码 */
+	public static final String USER_SALES_CODE="qxueyou";
+	
+	/** 报名码来源微信 */
+	public static final String USER_SALES_CODE_WEIXIN="qxueyou_weixin";
+	
+	/** 签到码时效性是否开启 */
+	public static final boolean SIGN_CODE_VALIDATE_FLAG = false;
+	
+	/** boolean:false  */
+	public static final boolean BOOLEAN_FLAG_FALSE = false;
+	
+	/** boolean:true */
+	public static final boolean BOOLEAN_FLAG_TRUE = true;
+	
+	/** 签到码时效性开启时的具体值,前后几天 */
+	public static final Integer SIGN_CODE_VALIDATE_VALUE = 1;
+	
+	/** 文档处理URL */
+	public static final String CONFIG_DOC_DEAL_URL = "docdealUrl";
+	
+	/** 积分,QXUEYOU积分账户userId  */
+	public static final String COMMON_TRASACT_USER_ID = "admin.qie";
+	
+	/** Q学友机构编码  */
+	public static final String QXUEYOU_ORG_CODE = "QIE";
+	
+	/** 登录有效获取积分额度 */
+	public static final BigDecimal SCORE_LOGIN_VALUE = BigDecimal.ONE;
+	
+	/** 习题纠错有效获取积分额度 */
+	public static final BigDecimal SCORE_EXE_CORRECTION_VALUE = new BigDecimal("2");
+	
+	/** 习题纠错被处理有效获取积分额度 */
+	public static final BigDecimal SCORE_EXECORREC_DEAL_VALUE = new BigDecimal("3");
+	
+	/** APP签到有效获取积分额度 */
+	public static final BigDecimal SCORE_SIGN_VALUE = new BigDecimal("4");
+	
+	/** 评论有效获取积分额度 */
+	public static final BigDecimal SCORE_COMMENT_VALUE = new BigDecimal("2");
+	
+	/** 赞评论有效获取积分额度 */
+	public static final BigDecimal SCORE_COMMENT_PRAISE_VALUE = BigDecimal.ONE;
+	
+	/** 评论被赞有效获取积分额度 */
+	public static final BigDecimal SCORE_COMMENT_PRAISED_VALUE = BigDecimal.ONE;
+	
+	/**发布问题有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_NEWQUESTION_VALUE = new BigDecimal("2");
+	
+	/**回答问题有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_ANSWER_VALUE = new BigDecimal("2");
+	
+	/**点赞问题或答案或人有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_PRAISE_VALUE = BigDecimal.ONE;
+	
+	/**被点赞问题或答案或人有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_PRAISED_VALUE = new BigDecimal("2");
+	
+	/**分享问题或答案或人有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_SHARE_VALUE = new BigDecimal("5");
+	
+	/**被分享问题或答案或人有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_SHARED_VALUE = new BigDecimal("2");
+	
+	/**回复答案有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_REPLY_VALUE = BigDecimal.ONE;
+	
+	/**被回复答案有效获取积分额度*/
+	public static final BigDecimal SCORE_QA_REPLYED_VALUE = BigDecimal.ONE;
+	
+	/**  刷新统计缓存键值 :根据groupId 统计按钮的统计 */
+	public static final String REFRESH_STATIS_GROUPID_CACHE_KEY = "refresh_statis_groupid_cache_key";
+	
+	/**  刷新统计缓存键值 :根据groupId 学员提交数据的统计 */
+	public static final String REFRESH_STATIS_GROUPID_LSTNEWANSWERU_CACHE_KEY = "refresh_statis_groupid_lstnewansweru_cache_key";
+	
+	/**  刷新统计练习组班级正确率缓存键值*/
+	public static final String EXER_GROUP_ACCURACY_CACHE_KEY = "exer_group_accuracy_cache_key";
+	
+	/**  刷新统计练习统计分析结果缓存键值*/
+	public static final String EXER_ITEM_STATISTICAL_CACHE_KEY = "exer_item_statistical_cache_key";
+	
+	/**  后台登录:获取菜单缓存 */
+	public static final String WEB_LOGIN_MENU_CACHE_KEY = "web_login_menu_cache_key";
+	
+	/**  系统app自定义菜单基础数据 :获取菜单缓存 */
+	public static final String SYS_APP_COMMON_MENU_CACHE_KEY = "sys_app_common_menu_cache_key";
+	
+	/**  后台登录:获取用户菜单缓存 */
+	public static final String WEB_USER_MENU_CACHE_KEY = "web_user_menu_cache_key";
+	
+	/**  团购课程值*/
+	public static final String PURCHASE_COURSE = "purchase_course";
+	
+	/**  课程表背景颜色  透明度 */
+	public static final String SCHEDULE_COLOR_TRANSPARENT = "255";
+	
+	/** 练习来源(1:练习题库 2:考试题库  3:家庭作业) */
+	public static final String EXERCISE_SOURCE_EXERICSE = "1";
+	
+	public static final String EXERCISE_SOURCE_EXAMS = "2";
+	
+	public static final String EXERCISE_SOURCE_HOMEWORK = "3";
+	
+	/** 做题方式(1:未做题优先  2:错题优先) */
+	public static final String EXERCISE_STRATEGY_NO_DO = "1";
+	
+	public static final String EXERCISE_STRATEGY_FAULT = "2";
+	
+	/** 问答排名CACHE key */
+	public static final String QA_HOT_RANK_CACHE_KEY="qa_hot_rank_cache_key";
+	
+	/** 百度推广报名码 */
+	public static final String USER_SALES_CODE_BAIDU="qxy_groupbuy_baidu";
+	
+	
+	/** 注册service */
+	
+	/** 学生 */
+	public static final String REG_ROLE_STUDENT="student";
+	
+	/** 班主任 */
+	public static final String REG_ROLE_CHARGER="charger";
+	
+	/** 讲师 */
+	public static final String REG_ROLE_TEACHER="teacher";
+	
+	/** 销售人员*/
+	public static final String REG_ROLE_SALESMAN="salesman";
+	
+	/** 管理员*/
+	public static final String REG_ROLE_ADMIN="admin";
+	
+	/** 游客 */
+	public static final String REG_ROLE_VISITOR="visitor";
+	
+	/** 后台 */
+	public static final String REG_TYPE_BACKSTAGE="backstage";
+	
+	/** 微信*/
+	public static final String REG_TYPE_WEIXIN="weixin";
+	
+	/** APP */
+	public static final String REG_TYPE_APP="app";
+	
+	/** 网页端(课程超市) */
+	public static final String REG_TYPE_WEB="web";
+	
+	/** sdk */
+	public static final String REG_TYPE_SDK="sdk";
+	
+	/** 内容分享 、课程分享、直播互动*/
+	public static final String REG_TYPE_CONTENT_SHARE="content_share";
+	
+	/** 增加学员*/
+	public static final String REG_MODE_ADD="add";
+	
+	/** 激活*/
+	public static final String REG_MODE_ACTIVATION="activation";
+	
+	/** 冻结*/
+	public static final String REG_MODE_FROZEN="frozen";
+	
+	/** 授权 */
+	public static final String REG_MODE_AUTHOR="author";
+	
+	/** 报名 */
+	public static final String REG_MODE_SIGNUP="signup";
+	
+	/** 注册*/
+	public static final String REG_MODE_REGIST="regist";
+	
+	/** 生成用户*/
+	public static final String REG_MODE_GENERATE="generate";
+	
+	/** 编辑用户*/
+	public static final String REG_MODE_EDIT="edit";
+	
+	/** 加入班级(活动)*/
+	public static final String REG_MODE_JOIN="join";
+	
+	/** IMEI加入班级*/
+	public static final String REG_MODE_IMEI_JOIN="imei_join";
+	
+	/** 不加入班级(活动)*/
+	public static final String REG_MODE_NOT_JOIN="not_join";
+	
+	/** 微信加入当前机构体验班 */
+	public static final String REG_MODE_WX_VISITOR="wx_visitor";
+	
+	/** 不加入班级(内容分享、课程分享、直播互动)    wx端       */
+	public static final String REG_MODE_NOT_CLASS_SHARE_WX ="share_wx";
+	
+	/** 不加入班级(直播互动)    其他:PC、手机浏览器       */
+	public static final String REG_MODE_NOT_CLASS_OTHER="other";
+	
+	/** Q学友账号用户初始化key  */
+	public static final String QXUEYOU_ACCOUNT_MAX_VALUE = "qxy_account_max_value";
+	
+	/** Q学友账号用户初始化值  */
+	public static final int QXUEYOU_ACCOUNT_INIT_VALUE = 20000;
+	
+	/** Q学友账号用户初始化值  */
+	public static final String WEIXIN_MICRO_DOMAIN = "wx";
+	
+	/** ffmpeg转码及截图缓存的key  */
+	public static final String FFMPEG_VIDEO_LIST_KEY_PREFIX = "qxueyou-ffmpeg-transcode-list-";
+	
+	/** ffmpeg转码及截图缓存的key  */
+	public static final String FFMPEG_VIDEO_TRANSCODEING_KEY_PREFIX = "qxueyou-ffmpeg-transcode-executing-";
+	
+	/** ffmpeg转码及截图临时存放oss原始video及转码文件的路径  */
+	public static final String FFMPEG_VIDEO_FILE_DIR = "/usr/qxueyou/ossVideo/";
+	
+	/** 获取媒体信息缓存服务  默认缓存时间1天 */
+	public static final Integer FFMPEG_TRANS_LIST_CACHE_TIME = 86400;
+	
+	/** 使用ffmpeg转码 */
+	public static final String VIDEO_TRANS_TYPE_FFMPEG = "1";
+	
+	/** 视频默认封面    */
+	public static final String VIDEO_DEFAULT_IMG = "/web/res/img/app/sys-video-home.png";
+	
+	/**流米回调 结果标识 成功  */
+	public static final String FLOW_ORDER_SUCCESS = "成功";
+	
+	/** 流米回调结果标识 失败  */
+	public static final String FLOW_ORDER_FAILED = "失败";
+	
+	/** 默认缓存登录信息时长:三小时  */
+	public static final int SYS_DEFAULT_LOGOUT_TIME = 3 * 60 * 60;
+	
+	/** 练习成绩统计更新时间,5分钟更新一次   */
+	public static final int EXE_STATIS_UPDATE_MINUTES = 300;
+	
+	/** 后台登录:获取菜单缓存 更新时间,5秒钟更新一次   */
+	public static final int WEB_LOGIN_MENU_UPDATE_MINUTES = 5;
+	
+	/** 后台登录:获取菜单缓存 更新时间,一天   */
+	public static final int WEB_USER_MENU_UPDATE_MINUTES = 86400;
+	
+	/** SysLog module */
+	public static final String LOG_MODULE_SIGN_PRAISE = "MODULE_SIGN_PRAISE";
+	
+	/** 二维码直播模板配置  */
+	public static final String DICT_LIVE_QR_TEMPLATE = "LIVE_QR_TEMPLATE";
+	
+	public static final String DEVICE_ANDROID = "android";
+	
+	public static final String DEVICE_IOS = "ios";
+	
+	/** 学情监控常量:专业、用户、练习、账号、校区、视频、班级、讲义、通用(可用账号—+学员)  */
+	public static final Map<String,String> LEARING_MONITOR_MAP = CollectionUtils.newStringMap(
+			"MAJOR","1",
+			"USER","2",
+			"EXERCISE","3",
+			"ACCOUNT","4",
+			"CAMPUS","5",
+			"VIDEO","6",
+			"CLASS","7",
+			"HANDOUT","8",
+			"COMMON","9");
+	
+	/** 消息队列:同时接收消息线程数  1,5,10*/
+	public static final int ONS_CONSUME_THREAD_NUMS_ONE = 1 ;
+	
+	public static final int ONS_CONSUME_THREAD_NUMS_FIVE = 5 ;
+	
+	public static final int ONS_CONSUME_THREAD_NUMS_TEN = 10 ;
+	
+	/** ping++ 消息处理错误重发次数 */
+	public static final Integer PINGPP_MQ_EXCEPTION_COUNT = 2 ;
+	
+	/** 活动报名来源  */
+	public static final String ACTIVITYS_REG_IMPORT = "后台导入" ;
+	
+	public static final String ACTIVITYS_REG_WEIXIN = "微信报名" ;
+	
+	/**-------- 登录平台------  */
+	/** APP  */
+	public static final String LOGIN_PLATFORM_APP = "app" ;
+	
+	/** web后台  */
+	public static final String LOGIN_PLATFORM_WEB = "web" ;
+	
+	/** Q慧眼 直播  */
+	public static final String LOGIN_PLATFORM_APP_LIVE = "qLive" ;
+	
+	/** PC  */
+	public static final String LOGIN_PLATFORM_PC = "pc" ;
+	
+	/** 微信  */
+	public static final String LOGIN_PLATFORM_WEIXIN = "weixin" ;
+	
+
+	
+	/** 练习导入解析,分割参数的值  */
+	public static final String EXERCISE_PARSE_SPLIT_VALUE = " $ML-EP-V1$ " ;
+	
+	/** 练习导入解析,结果的值  */
+	public static final String EXERCISE_PARSE_CONTENT_VALUE_VALUE = "c" ;
+	
+	/** 练习导入解析,结果的键  */
+	public static final String EXERCISE_PARSE_RESULT_CODE_VALUE = "k" ;
+	
+	/** 练习导入解析,结果的值  */
+	public static final String EXERCISE_PARSE_RESULT_VALUE_VALUE = "v" ;
+	
+	public static final String EXERCISE_PARSE_PY_URL = "py-exercise-parse-url" ;
+	
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/model/ExcelExportParam.java b/src/main/java/com/qxueyou/scc/base/model/ExcelExportParam.java
new file mode 100644
index 0000000..24f92d7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/ExcelExportParam.java
@@ -0,0 +1,116 @@
+package com.qxueyou.scc.base.model;
+
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+
+/**
+ * 导出excel时的参数
+ * 
+ */
+public class ExcelExportParam<T> implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	//导出文件名称
+	private String fileName;
+	
+	//sheet页名称
+	private String title;
+	
+	//导出的题头
+	private String[] headers;
+	
+	//需要导出的内容
+	private Collection<T> colData;
+	
+	//输出流
+	private OutputStream out;
+	
+	//如果需要格式化日期,默认"yyyy-MM-dd"
+	private String pattern;
+	
+	//数字类型是否使用需要格式化
+	private boolean numberFormat;
+	
+	//导出指定列
+    private List<String> lstColumn;
+	
+	//指定各列宽度
+    private List<Integer> lstColumnWidth;
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String[] getHeaders() {
+		return headers;
+	}
+
+	public void setHeaders(String[] headers) {
+		this.headers = headers;
+	}
+
+	public Collection<T> getColData() {
+		return colData;
+	}
+
+	public void setColData(Collection<T> colData) {
+		this.colData = colData;
+	}
+
+	public OutputStream getOut() {
+		return out;
+	}
+
+	public void setOut(OutputStream out) {
+		this.out = out;
+	}
+
+	public String getPattern() {
+		return pattern;
+	}
+
+	public void setPattern(String pattern) {
+		this.pattern = pattern;
+	}
+
+	public List<String> getLstColumn() {
+		return lstColumn;
+	}
+
+	public void setLstColumn(List<String> lstColumn) {
+		this.lstColumn = lstColumn;
+	}
+
+	public boolean getNumberFormat() {
+		return numberFormat;
+	}
+
+	public void setNumberFormat(boolean numberFormat) {
+		this.numberFormat = numberFormat;
+	}
+
+	public List<Integer> getLstColumnWidth() {
+		return lstColumnWidth;
+	}
+
+	public void setLstColumnWidth(List<Integer> lstColumnWidth) {
+		this.lstColumnWidth = lstColumnWidth;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/model/FileMeta.java b/src/main/java/com/qxueyou/scc/base/model/FileMeta.java
new file mode 100644
index 0000000..810e2e5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/FileMeta.java
@@ -0,0 +1,50 @@
+package com.qxueyou.scc.base.model;
+
+public class FileMeta {
+	
+	private String fileName ;
+    private String fileSize ;
+    private String fileType ;
+    private String fileId ;
+    private String path ;
+    
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getFileSize() {
+		return fileSize;
+	}
+
+	public void setFileSize(String fileSize) {
+		this.fileSize = fileSize;
+	}
+
+	public String getFileType() {
+		return fileType;
+	}
+
+	public void setFileType(String fileType) {
+		this.fileType = fileType;
+	}
+
+	public String getFileId() {
+		return fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	public void setPath(String path) {
+		this.path = path;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/model/FilePathConstants.java b/src/main/java/com/qxueyou/scc/base/model/FilePathConstants.java
new file mode 100644
index 0000000..b968d1d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/FilePathConstants.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.base.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * app及后台默认图片设置
+ * @author ody.yuan
+ *
+ */
+public class FilePathConstants {
+	
+	/** 点播视频默认封面    */
+	public static final String VIDEO_DEFAULT_IMG = "/web/res/img/app/sys-video-home.png";
+	
+	/** 直播视频默认封面    */
+	public static final String VIDEO_LIVE_DEFAULT_IMG = "/web/res/img/app/sys-video-live.png";
+	
+	/** 班级默认图标    */
+	public static final String CLASS_DEFAULT_IMG = "/web/res/img/app/course-detail-default-cover.png";
+	
+	/** 课程表默认图标    */
+	public static final String SCHEDULE_DEFAULT_IMG = "/web/res/img/app/default-schedule-info.png";
+	
+	/** 机构默认图标    */
+	public static final String ORG_DEFAULT_IMG = "/web/res/img/app/org-log.png";
+	
+	/** 班级通知、学校通知默认图标    */
+	public static final String NOTICE_DEFAULT_IMG = "/web/res/img/app/notice-default.png";
+	
+	/** 固定默认评估图标    */
+	public static final String EVALUATE_DEFAULT_IMG = "/web/res/img/app/evaluate-default.png";
+	
+	/** 固定默认用户图标    */
+	public static final String USER_DEFAULT_IMG = "/web/res/img/user/user-default-square.png";
+	
+	/** 所有图片    */
+	public static final Map<Integer, String> USER_DEFAULT_IMG_MAP = new HashMap<Integer, String>();
+	static{
+		USER_DEFAULT_IMG_MAP.put(0, "/web/res/img/user/user-default-square.png");
+		USER_DEFAULT_IMG_MAP.put(1, "/web/res/img/user/user-default-square1.png");
+		USER_DEFAULT_IMG_MAP.put(2, "/web/res/img/user/user-default-square2.png");
+		USER_DEFAULT_IMG_MAP.put(3, "/web/res/img/user/user-default-square3.png");
+		USER_DEFAULT_IMG_MAP.put(4, "/web/res/img/user/user-default-square4.png");
+		USER_DEFAULT_IMG_MAP.put(5, "/web/res/img/user/user-default-square5.png");
+	}
+	
+	/** 随机获取头像  **/
+	public static String getUserDefaultImg(){
+		return USER_DEFAULT_IMG_MAP.get((int)(Math.random()*6));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/FlowPrice.java b/src/main/java/com/qxueyou/scc/base/model/FlowPrice.java
new file mode 100644
index 0000000..1ca52ce
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/FlowPrice.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.base.model;
+
+/**
+ * 流量定价实体类
+ * @author zhanglinqing
+ *
+ */
+public class FlowPrice {
+	
+	/** 流量规格值 */
+	public static final int FLOW_VALUE_10 = 10;
+	public static final int FLOW_VALUE_30 = 30;
+	public static final int FLOW_VALUE_70 = 70;
+	public static final int FLOW_VALUE_150 = 150;
+	public static final int FLOW_VALUE_500 = 500;
+	public static final int FLOW_VALUE_1024 = 1024;
+	public static final int FLOW_VALUE_2048 = 2048;
+	public static final int FLOW_VALUE_3072 = 3072;
+	public static final int FLOW_VALUE_4096 = 4096;
+	
+	/** 流量定价值 */
+	public static final double FLOW_PRICING_VALUE_10 = 0.2400;
+	public static final double FLOW_PRICING_VALUE_30 = 0.0800;
+	public static final double FLOW_PRICING_VALUE_70 = 0.1000;
+	public static final double FLOW_PRICING_VALUE_150 = 0.1000;
+	public static final double FLOW_PRICING_VALUE_500 = 0.0229;
+	public static final double FLOW_PRICING_VALUE_1024 = 0.0305;
+	public static final double FLOW_PRICING_VALUE_2048 = 0.0156;
+	public static final double FLOW_PRICING_VALUE_3072 = 0.0234;
+	public static final double FLOW_PRICING_VALUE_4096 = 0.0234;
+	
+	/** 折后售价 */
+	public static final double FLOW_PRICE_10 = 2.4;
+	public static final double FLOW_PRICE_30 = 4;
+	public static final double FLOW_PRICE_70 = 8;
+	public static final double FLOW_PRICE_150 = 16;
+	public static final double FLOW_PRICE_500 = 24;
+	public static final double FLOW_PRICE_1024 = 40;
+	public static final double FLOW_PRICE_2048 = 56;
+	public static final double FLOW_PRICE_3072 = 80;
+	public static final double FLOW_PRICE_4096 = 104;
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/ITrace.java b/src/main/java/com/qxueyou/scc/base/model/ITrace.java
new file mode 100644
index 0000000..5b1f72d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/ITrace.java
@@ -0,0 +1,34 @@
+package com.qxueyou.scc.base.model;
+
+import java.util.Date;
+
+public interface ITrace {
+
+	public abstract String getCreateId();
+
+	public abstract void setCreateId(String createId);
+
+	public abstract Date getCreateTime();
+
+	public abstract void setCreateTime(Date createTime);
+
+	public abstract String getCreator();
+
+	public abstract void setCreator(String creator);
+
+	public abstract boolean getDeleteFlag();
+
+	public abstract void setDeleteFlag(boolean deleteFlag);
+
+	public abstract String getUpdateId();
+
+	public abstract void setUpdateId(String updateId);
+
+	public abstract Date getUpdateTime();
+
+	public abstract void setUpdateTime(Date updateTime);
+
+	public abstract String getUpdator();
+
+	public abstract void setUpdator(String updator);
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/MsgTypeConstants.java b/src/main/java/com/qxueyou/scc/base/model/MsgTypeConstants.java
new file mode 100644
index 0000000..4023fd5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/MsgTypeConstants.java
@@ -0,0 +1,22 @@
+package com.qxueyou.scc.base.model;
+
+
+/**
+ * 消息类型常量实体类
+ * @author ody.yuan
+ *
+ */
+public class MsgTypeConstants {
+	
+	/** 直播:生成回放 */
+	public static final String LIVE_DOWN_LOAD_VIDEO = "DOWN_LOAD_RECORD";
+	
+	/** 直播:编辑 -生成回放 */
+	public static final String LIVE_EDIT_GENERATE_VIDEO = "EDIT_GENERATE_VIDEO";
+	
+	/** 直播:重新初始化(预处理)*/
+	public static final String LIVE_REPLAY_DATA_INIT = "REPLAY_DATA_INIT";
+	
+	/** 直播:上传视频截图*/
+	public static final String LIVE_REPLAY_SCREENSHOT = "REPLAY_SCREENSHOT";
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/Pager.java b/src/main/java/com/qxueyou/scc/base/model/Pager.java
new file mode 100644
index 0000000..7169ea9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/Pager.java
@@ -0,0 +1,96 @@
+package com.qxueyou.scc.base.model;
+
+public class Pager {
+	
+	/*
+	 * 每页显示条数
+	 */
+	private int pageSize;
+	
+	/*
+	 * 当前页码
+	 */
+	private int pageNum;
+	
+	/*
+	 * 记录总数
+	 */
+	private int totalCount;
+	
+	public Pager(){
+		//constructor
+	}
+	
+	public Pager(int pageSize,int pageNum){
+		this.pageSize=pageSize;
+		this.pageNum=pageNum;
+	}
+	
+	public int getPageSize() {
+		return pageSize <= 0?Integer.MAX_VALUE:pageSize;
+	}
+
+	public void setPageSize(int pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public int getPageNum() {
+		return pageNum <= 0?1:pageNum;
+	}
+	
+	public int getOffset() {
+		return pageNum <= 1?0:(pageNum-1)*this.getPageSize();
+	}
+
+	public void setPageNum(int pageNum) {
+		this.pageNum = pageNum;
+	}
+
+	public int getTotalCount() {
+		return totalCount;
+	}
+
+	public void setTotalCount(int totalCount) {
+		this.totalCount = totalCount;
+	}
+
+	/**
+	 * 计算总页数
+	 * @return
+	 */
+	public int getPageCount(){
+		return totalCount%pageSize>0?totalCount/pageSize+1:totalCount/pageSize;
+	}
+	
+	/**
+	 * 计算分页栏起始页
+	 * @return
+	 */
+	public int getPageDispayStart(){
+
+		int startGap = Math.min(pageNum-1,2);
+		int endGap = Math.min(getPageCount()-pageNum,2);
+		
+		if(startGap<=endGap){
+			return Math.max(pageNum-startGap,1);
+		}else{
+			return Math.max(pageNum-(4-endGap),1);
+		}
+		
+	}
+	
+	/**
+	 * 计算分页栏结束页
+	 * @return
+	 */
+	public int getPageDispayEnd(){
+		int startGap = Math.min(pageNum-1,2);
+		int endGap = Math.min(getPageCount()-pageNum,2);
+		
+		if(startGap<=endGap){
+			return Math.min(pageNum+(4-startGap),getPageCount());
+		}else{
+			return Math.min(pageNum+endGap,getPageCount());
+		}
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/PaginationData.java b/src/main/java/com/qxueyou/scc/base/model/PaginationData.java
new file mode 100644
index 0000000..34e9318
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/PaginationData.java
@@ -0,0 +1,129 @@
+package com.qxueyou.scc.base.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 后端分页时使用,接收前端传来分页信息
+ * @author ody.yuan
+ *
+ */
+@ApiModel(description="接收前台分页、查询和排序")
+public class PaginationData {
+	
+	//从第几条记录开始(从0开始)
+	@ApiModelProperty(name="从第几条记录开始(从0开始)",  value="offset")
+	private Integer offset;
+	
+	//每页显示记录数
+	@ApiModelProperty(name="每页显示记录数",  value="limit")
+	private Integer limit;
+	
+	//排序字段
+	@ApiModelProperty(name="排序字段", example="createTime",  value="sort")
+	private String sort;
+	
+	//排序方式,默认升序
+	@ApiModelProperty(name="排序方式,默认升序", example="desc",  value="order")
+	private String order = "asc";
+	
+	//总记录数
+	@ApiModelProperty(name="总记录数",  value="total")
+	private Integer total;
+	
+	//查询输入框
+	@ApiModelProperty(name="查询输入框",  value="keyword")
+	private String keyword = "";
+	
+	//查询输入框
+	@ApiModelProperty(name="查询输入框",  value="search")
+	private String search = "";
+	
+	/*
+	 * 每页显示条数
+	 */
+	@ApiModelProperty(name="每页显示记录数",  value="pageSize")
+	private Integer pageSize;
+	
+	/*
+	 * 当前页码
+	 */
+	@ApiModelProperty(name="从第几条记录开始(从0开始)",  value="pageNum")
+	private Integer pageNum;
+	
+	public String getKeyword() {
+		return keyword;
+	}
+
+	public void setKeyword(String keyword) {
+		this.keyword = keyword;
+	}
+
+	public Integer getPageSize() {
+		return pageSize == null?Integer.MAX_VALUE:pageSize;
+	}
+
+	public void setPageSize(Integer pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public Integer getPageNum() {
+		return pageNum == null || pageNum == 0?1:pageNum;
+	}
+
+	public void setPageNum(Integer pageNum) {
+		this.pageNum = pageNum;
+	}
+
+	public PaginationData(){
+	}
+		
+	public Integer getOffset() {
+		return offset;
+	}
+
+	public void setOffset(Integer offset) {
+		this.offset = offset;
+	}
+
+	public Integer getLimit() {
+		return limit;
+	}
+
+	public void setLimit(Integer limit) {
+		this.limit = limit;
+	}
+
+	public String getSort() {
+		return sort;
+	}
+
+	public void setSort(String sort) {
+		this.sort = sort;
+	}
+
+	public String getOrder() {
+		return order;
+	}
+
+	public void setOrder(String order) {
+		this.order = order;
+	}
+
+	public Integer getTotal() {
+		return total;
+	}
+
+	public void setTotal(Integer total) {
+		this.total = total;
+	}
+
+	public String getSearch() {
+		return search;
+	}
+
+	public void setSearch(String search) {
+		this.search = search;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/Param.java b/src/main/java/com/qxueyou/scc/base/model/Param.java
new file mode 100644
index 0000000..f1c6338
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/Param.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.base.model;
+
+/**
+ * 查询参数
+ * @author ody.yuan
+ *
+ */
+public class Param {
+	
+	//查询字段
+	private String name;
+	
+	//
+	private String code;
+	
+	//查询值
+	private String value;
+	
+	public Param(){
+	}
+	
+	public Param(String name,String code,String value){
+		this.name = name;
+		this.code = code;
+		this.value = value;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/model/Result.java b/src/main/java/com/qxueyou/scc/base/model/Result.java
new file mode 100644
index 0000000..8bd5e5d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/Result.java
@@ -0,0 +1,146 @@
+package com.qxueyou.scc.base.model;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 操作结果类 接口统一返回数据类型
+ * 
+ * {
+	 * 	"result": 返回结果(boolean值),
+	 *  "data": 返回数据(object),
+	 *  "msg": 返回消息,
+ * }
+ * 
+ * @author zhiyong
+ *
+ */
+public class Result implements Serializable  {
+	
+	private static final long serialVersionUID = -9024761391789730558L;
+
+	/** 成功:true,失败:false */
+	private boolean success;
+	
+	/** 返回编码 */
+	private int resultCode ;
+	
+	/** 返回消息 */
+	private String msg;
+	
+	/** 结果数据  */
+	private Object data;
+	
+	/**
+	 * 非法请求状态码
+	 */
+	public static final int CODE_FORBIDDEN = 403;
+	
+	public static final Result SUCCESS = new Result(true);
+	
+	public static final Result FAIL = new Result(false);
+	
+	public Result() {
+		super();
+	}
+
+	public Result(boolean success){
+		this.success=success;
+	}
+	
+	public Result( boolean success,int resultCode ){
+		this.success=success;
+		this.resultCode = resultCode ;
+	}
+	
+	public Result( boolean success,int resultCode,String msg){
+		this.success=success;
+		this.resultCode = resultCode ;
+		this.msg=msg;
+	}
+	
+	public Result(boolean success,String msg){
+		this.success=success;
+		this.msg=msg;
+	}
+	
+	public Result(boolean success,String msg, Object data){
+		this.success=success;
+		this.msg=msg;
+		this.data=data;
+	}
+	
+	public boolean isSuccess() {
+		return success;
+	}
+
+	public void setSuccess(boolean success) {
+		this.success = success;
+	}
+	
+	public void setResult(boolean success) {
+		this.success = success;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public Object getData() {
+		return data;
+	}
+	
+	public void setData(Object data) {
+		this.data = data;
+	}
+
+
+	public int getResultCode() {
+		return resultCode;
+	}
+
+	public void setResultCode(int resultCode) {
+		this.resultCode = resultCode;
+	}
+	
+	@SuppressWarnings("rawtypes")
+	public Object getData(String key) {
+		
+		if(data!=null && Map.class.isAssignableFrom(data.getClass())) {
+			return ((Map)data).get(key);
+		}
+		
+		return null;
+	}
+	
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public <T> T getDataT(String key) {
+		
+		if(data!=null && Map.class.isAssignableFrom(data.getClass())) {
+			return (T)((Map)data).get(key);
+		}
+		
+		return null;
+	}
+	
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	public void addData(String key,Object value) {
+		
+		if(data!=null && Map.class.isAssignableFrom(data.getClass())) {
+			((Map)data).put(key, value);
+			return;
+		}
+
+		Map<String,Object> map = new HashMap<String,Object>(1);
+		map.put(key, value);
+		
+		this.data = map;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/ResultJson.java b/src/main/java/com/qxueyou/scc/base/model/ResultJson.java
new file mode 100644
index 0000000..2b59486
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/ResultJson.java
@@ -0,0 +1,90 @@
+package com.qxueyou.scc.base.model;
+
+import java.io.Serializable;
+
+/**
+ * 操作结果类 接口统一返回数据类型
+ * 
+ * {
+	 * 	"result": 返回结果(boolean值),
+	 *  "data": 返回数据(object),
+	 *  "msg": 返回消息,
+ * }
+ * 
+ * @author zhiyong
+ *
+ */
+public class ResultJson implements Serializable  {
+	
+	private static final long serialVersionUID = -9024761391789730558L;
+
+	/** 成功:true,失败:false */
+	private boolean result;
+	
+	/** 返回编码 */
+	private int resultCode ;
+	
+	/** 返回消息 */
+	private String msg;
+	
+	/** 结果数据  */
+	private Object data;
+	
+	public ResultJson() {
+		super();
+	}
+
+	public ResultJson(boolean result){
+		this.result=result;
+	}
+	
+	public ResultJson( boolean result,int resultCode ){
+		this.result=result;
+		this.resultCode = resultCode ;
+	}
+	
+	public ResultJson(boolean result,String msg){
+		this.result=result;
+		this.msg=msg;
+	}
+	
+	public ResultJson(boolean result,String msg, Object data){
+		this.result=result;
+		this.msg=msg;
+		this.data=data;
+	}
+	
+	public boolean isResult() {
+		return result;
+	}
+
+	public void setResult(boolean result) {
+		this.result = result;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public Object getData() {
+		return data;
+	}
+
+	public void setData(Object data) {
+		this.data = data;
+	}
+
+	public int getResultCode() {
+		return resultCode;
+	}
+
+	public void setResultCode(int resultCode) {
+		this.resultCode = resultCode;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/TransactException.java b/src/main/java/com/qxueyou/scc/base/model/TransactException.java
new file mode 100644
index 0000000..d466158
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/TransactException.java
@@ -0,0 +1,32 @@
+package com.qxueyou.scc.base.model;
+
+/**
+ * 自定义事务异常
+ * @author zhiyong
+ *
+ */
+public class TransactException extends RuntimeException {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1549313847632989095L;
+
+	private Result result;
+	
+	public TransactException(Result result) {
+		super();
+		this.result = result;
+	}
+
+	public Result getResult() {
+		return result;
+	}
+
+	public void setResult(Result result) {
+		this.result = result;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/UserCipher.java b/src/main/java/com/qxueyou/scc/base/model/UserCipher.java
new file mode 100644
index 0000000..cd55533
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/UserCipher.java
@@ -0,0 +1,181 @@
+package com.qxueyou.scc.base.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Table(name = "user_cipher")
+public class UserCipher implements Serializable, ITrace {
+
+	private static final long serialVersionUID = 898178024362728710L;
+
+	// 用户ID
+	@Id
+	@Column(name = "user_id", unique = true, nullable = false, length = 32)
+	private String userId;
+	
+	// RSA密钥模
+	@Column(name = "MODULUS", length = 255)
+	private String modulus;
+	
+	// RSA公钥指数
+	@Column(name = "PUBLIC_EXPONENT", length = 255)
+	private String publicExponent;
+	
+	// RSA私钥指数
+	@Column(name = "PRIVATE_EXPONENT", length = 255)
+	private String privateExponent;
+	
+	@Column(name = "AES_KEY", length = 32)
+	private String aesKey;
+	
+
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name = "DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getModulus() {
+		return modulus;
+	}
+
+	public void setModulus(String modulus) {
+		this.modulus = modulus;
+	}
+
+	public String getPublicExponent() {
+		return publicExponent;
+	}
+
+	public void setPublicExponent(String publicExponent) {
+		this.publicExponent = publicExponent;
+	}
+
+	public String getPrivateExponent() {
+		return privateExponent;
+	}
+
+	public void setPrivateExponent(String privateExponent) {
+		this.privateExponent = privateExponent;
+	}
+
+	public String getAesKey() {
+		return aesKey;
+	}
+
+	public void setAesKey(String aesKey) {
+		this.aesKey = aesKey;
+	}
+
+	@Override
+	public String getCreateId() {
+		return createId;
+	}
+
+	@Override
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Override
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	@Override
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Override
+	public String getCreator() {
+		return creator;
+	}
+
+	@Override
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	@Override
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	@Override
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Override
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	@Override
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Override
+	public String getUpdator() {
+		return updator;
+	}
+
+	@Override
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/UserInfoWrapper.java b/src/main/java/com/qxueyou/scc/base/model/UserInfoWrapper.java
new file mode 100644
index 0000000..dabd02b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/UserInfoWrapper.java
@@ -0,0 +1,421 @@
+package com.qxueyou.scc.base.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.sys.model.SysMenu;
+import com.qxueyou.scc.user.model.User;
+
+/**
+ * 保存用户缓存信息
+ * @author 德虎
+ *
+ */
+public class UserInfoWrapper implements Serializable{
+
+	private static final long serialVersionUID = 5715001537102570184L;
+
+	private List<SysMenu> menus = new ArrayList<SysMenu>(10);
+
+	private boolean admin = false;
+
+	/** 用户信息map */
+	private final Map<String,Object> currentUser = new HashMap<String,Object>(10);
+
+	/** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
+	public final static String INF_ROLE = "role";
+
+	/** "roleId":session中UserInfoWrapper保存的key */
+	public static final String SESSION_USER_INFO_KEY = "SESSION_USER_INFO_KEY";
+
+	/**保存当前在线用户ID与sessionID*/
+	public static final String REDIS_USER_ONLINE_MAP_KEY="redis.user.online.map.key";
+
+	/** "roleId":角色ID */
+	public final static String INF_ROLE_ID = "roleId";
+
+	/** "roleIsAdmin":是否为管理员 */
+	public final static String INF_ROLE_IS_ADMIN = "roleIsAdmin";
+
+	/** "roleValue":"角色值" */
+	public final static String INF_ROLE_VALUE = "roleValue";
+
+	/** "roleValue":"角色" */
+	public final static String INF_ROLE_ENAME = "roleEname";
+
+	/** "userId":"用户ID" */
+	public final static String INF_USER_ID = "userId";
+
+	/** "userName":"用户名" */
+	public final static String INF_USER_NAME = "userName";
+
+	/** "userNickName":"用户昵称" */
+	public final static String INF_USER_NICK_NAME = "userNickName";
+
+	/** "userMobilePhone":"手机号" */
+	public final static String INF_USER_MOBILE_PHONE = "userMobilePhone";
+
+	/** "userAccount":"帐号" */
+	public final static String INF_USER_ACCOUNT = "userAccount";
+
+	/** "userHeadImg":"头像" */
+	public final static String INF_USER_HEAD_IMG = "userHeadImg";
+
+	/** "orgId":"机构ID" */
+	public final static String INF_ORG_ID = "orgId";
+
+	/** "topOrgId":"最上层机构ID" */
+	public final static String INF_TOP_ORG_ID = "topOrgId";
+
+	/** "orgName":"机构名称" */
+	public final static String INF_ORG_NAME = "orgName";
+
+	/** "orgShortName":"机构简称" */
+	public final static String INF_ORG_SHORT_NAME = "orgShortName";
+
+	/** "orgCode":"机构代码" */
+	public final static String INF_ORG_CODE = "orgCode";
+
+	/** "orgType":"机构类型" */
+	public final static String INF_ORG_TYPE = "orgType";
+
+	/** "orgLogPath":"机构LOGO" */
+	public final static String INF_ORG_LOGO_PATH = "orgLogPath";
+
+	/** "courseId":"科目ID" */
+	public final static String INF_COURSE_ID = "courseId";
+
+	/** "courseCode":"科目代码" */
+	public final static String INF_COURSE_CODE = "courseCode";
+
+	/** "courseName":"科目名称" */
+	public final static String INF_COURSE_NAME = "courseName";
+
+	/** "courseType":"科目类型" */
+	public final static String INF_COURSE_TYPE = "courseType";
+
+	/** "classId":"班级ID" */
+	public final static String INF_CLASS_ID = "classId";
+
+	/** "className":"班级名" */
+	public final static String INF_CLASS_NAME = "className";
+
+	/** "classCharger":"班主任" */
+	public final static String INF_CLASS_CHARGER = "classCharger";
+
+	/** "teacher":"讲师" */
+	public final static String ROLE_TEACHER = "teacher";
+
+	/** "assistantTeacher":"助理讲师" */
+	public final static String ROLE_ASSISTANT_TEACHER = "assistantTeacher";
+
+	/** "salesman":"销售" */
+	public final static String ROLE_SALESMAN = "salesman";
+
+	/** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
+	public final static String ROLE_CHARGER = "charger";
+
+	/** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
+	public final static String ROLE_ADMIN = "admin";
+
+	/** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
+	public final static String ROLE_STUDENT = "student";
+
+	/** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
+	public final static String ROLE_CUSTOM = "custom";
+
+	/** "buttonPrivilege":"" */
+	public final static String INF_BUTTON_PRIVILEGE_EDIT = "buttonPrivilege";
+
+	/** "loginIp":"登录IP" */
+	public final static String INF_LOGIN_IP = "loginIp";
+
+	/** "loginPlatForm":"登录平台" */
+	public final static String INF_LOGIN_PLAT_FORM = "loginPlatForm";
+
+	/** "loginCacheIpFlag":"是否需要在过滤器对当前用户增加缓存(用于保证一个用户只能在一个IP上登录)" */
+	public final static String INF_LOGIN_CACHE_IP_FLAG = "loginCacheIpFlag";
+
+	/** "rolesKey":"",  */
+	String[] rolesKey = new String[]{"admins","chargers","teachers","salesmen","students","customs","assistantTeachers"};
+
+	/** "roles":"" */
+	private final Map<String,List<Map<String,Object>>> roles = new HashMap<String,List<Map<String,Object>>>(5);
+
+	/**
+	 * 根据key值获取当前用户信息
+	 * @param key
+	 * @return
+	 */
+	public String getInfo(String key){
+		return (String)(currentUser.get(key));
+	}
+
+	/**
+	 * 获取当前用户角色
+	 * @param key
+	 * @return
+	 */
+	public String getCurrentRole(){
+		return getInfo(INF_ROLE);
+	}
+
+	/**
+	 * 获取当前用户角色ID
+	 * @param key
+	 * @return
+	 */
+	public String getCurrentRoleId(){
+		return getInfo(INF_ROLE_ID);
+	}
+
+	/**
+	 * 获取当前用户角色值
+	 * @param key
+	 * @return
+	 */
+	public String getCurrentRoleValue(){
+		return getInfo(INF_ROLE_VALUE);
+	}
+
+	/**
+	 * 根据key值设置当前用户信息
+	 * @param key
+	 * @return
+	 */
+	public void setInfo(String key,Object value){
+		currentUser.put(key,value);
+	}
+
+	/**
+	 * 设置用户信息
+	 * @param key
+	 * @return
+	 */
+	public void setUser(User user){
+		currentUser.put(INF_USER_ID, user.getUserId());
+		currentUser.put(INF_USER_NAME, user.getName());
+		currentUser.put(INF_USER_NICK_NAME, user.getName());
+		currentUser.put(INF_USER_MOBILE_PHONE, user.getMobilePhone());
+		currentUser.put("email", user.getEmail());
+		currentUser.put("imei", user.getImei());
+		currentUser.put("age", String.valueOf(user.getAge()));
+		currentUser.put(INF_USER_HEAD_IMG, user.getImgPath());
+	}
+
+	/**
+	 * 设置机构信息
+	 * @param key
+	 * @return
+	 */
+	public void setOrg(Organization org){
+
+		if(org==null){
+			currentUser.put(INF_ORG_ID, null);
+			currentUser.put(INF_TOP_ORG_ID, null);
+			currentUser.put(INF_ORG_NAME, null);
+			currentUser.put(INF_ORG_CODE, null);
+			currentUser.put(INF_ORG_LOGO_PATH, null);
+			currentUser.put(INF_ORG_SHORT_NAME, null);
+			return;
+		}
+
+		currentUser.put(INF_ORG_ID, org.getOrganizationId());
+		currentUser.put(INF_TOP_ORG_ID, org.getTopOrganizationId());
+		currentUser.put(INF_ORG_NAME, org.getName());
+		currentUser.put(INF_ORG_SHORT_NAME, org.getShortName());
+		currentUser.put(INF_ORG_CODE, org.getCode());
+		currentUser.put(INF_ORG_LOGO_PATH, org.getLogoPath());
+	}
+
+	/**
+	 * 设置班级信息
+	 * @param key
+	 * @return
+	 */
+	public void setClass(ClsClass cls){
+		if(cls==null){
+			currentUser.put(INF_CLASS_ID, null);
+			currentUser.put(INF_CLASS_NAME, null);
+			currentUser.put(INF_CLASS_CHARGER, null);
+			return;
+		}
+
+		currentUser.put(INF_CLASS_ID, cls.getClassId());
+		currentUser.put(INF_CLASS_NAME, cls.getName());
+		currentUser.put(INF_CLASS_CHARGER, cls.getClassCharger());
+		System.out.println(cls.getClassId());
+	}
+
+	/**
+	 * 设置科目信息
+	 * @param key
+	 * @return
+	 */
+	public void setCource(OrgCollegeCourse cource){
+
+		if(cource==null){
+			currentUser.put(INF_COURSE_ID, null);
+			currentUser.put(INF_COURSE_CODE, null);
+			currentUser.put(INF_COURSE_NAME, null);
+			return;
+		}
+
+		//currentUser.put(INF_COURSE_ID, cource.getCourseId());
+		currentUser.put(INF_COURSE_ID, cource.getCollegeCourseId());
+		currentUser.put(INF_COURSE_CODE, cource.getCode());
+		currentUser.put(INF_COURSE_NAME, cource.getName());
+
+	}
+
+	/**
+	 * 设置当前客户是否编辑过角色的按钮权限信息
+	 * @param key
+	 * @return
+	 */
+	public void setButtonPrivilegeEdit(Boolean flag){
+
+		if(flag==null){
+			currentUser.put(INF_BUTTON_PRIVILEGE_EDIT, false);
+			return;
+		}
+
+		currentUser.put(INF_BUTTON_PRIVILEGE_EDIT, flag);
+
+	}
+
+	/**
+	 * 获取当前用户角色是否处理过按钮权限
+	 * @param key
+	 * @return
+	 */
+	public Boolean getButtonPrivilegeEdit(){
+		return (Boolean)(currentUser.get(INF_BUTTON_PRIVILEGE_EDIT));
+	}
+
+	/**
+	 * 设置用户登录IP信息
+	 * @param cacheIpFlag 是否需要缓存
+	 * @param ip
+	 */
+	public void setLoginInfo(boolean cacheIpFlag,String ip, String platForm){
+		currentUser.put(INF_LOGIN_CACHE_IP_FLAG, cacheIpFlag);
+		currentUser.put(INF_LOGIN_IP, ip);
+		currentUser.put(INF_LOGIN_PLAT_FORM, platForm);
+	}
+
+	/**
+	 * 获取当前用户登录IP
+	 * @param key
+	 * @return
+	 */
+	public String getCurrentLoginIp(){
+		return (String)(currentUser.get(INF_LOGIN_IP));
+	}
+
+	/**
+	 * 获取当前用户是否需要缓存
+	 * @param key
+	 * @return
+	 */
+	public Boolean getCurrentLoginCacheIpFlag(){
+		return (Boolean)(currentUser.get(INF_LOGIN_CACHE_IP_FLAG));
+	}
+
+	/**
+	 * 获取当前登录平台
+	 * @param key
+	 * @return
+	 */
+	public String getCurrentLoginPlatForm(){
+		return (String)(currentUser.get(INF_LOGIN_PLAT_FORM));
+	}
+
+	/**
+	 * 添加角色
+	 * @param key
+	 * @param value
+	 * @return
+	 */
+	public void addRole(String key,List<Map<String,Object>> value){
+		roles.put(key, value);
+	}
+
+	/**
+	 * 获取最高优先级角色
+	 * @return
+	 */
+	public List<Map<String,Object>> getDefaultRole(){
+
+		for(String role:rolesKey){
+			if(roles.containsKey(role)){
+				return roles.get(role);
+			}
+		}
+
+		return null;
+
+	}
+
+	/**
+	 * 获取指定角色的信息
+	 * @return
+	 */
+	public List<Map<String,Object>> getRoleInfo(String roleKey){
+
+		for(String role:rolesKey){
+			if(role.equals(roleKey)){
+				return roles.get(role);
+			}
+		}
+
+		return null;
+
+	}
+
+	/**
+	 * 获取最高优先级角色名字
+	 * @return
+	 */
+	public String getDefaultRoleName(){
+
+		for(String role:rolesKey){
+			if(roles.containsKey(role)){
+				return role;
+			}
+		}
+
+		return null;
+
+	}
+
+	/**
+	 * 获取所有菜单
+	 * @return
+	 */
+	public List<SysMenu> getMenus() {
+		return menus;
+	}
+
+	/**
+	 * 设置所有菜单
+	 * @return
+	 */
+	public void setMenus(List<SysMenu> menus) {
+		this.menus = menus;
+	}
+
+	public boolean isAdmin() {
+		return admin;
+	}
+
+	public void setAdmin(boolean admin) {
+		this.admin = admin;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/WbCacheKey.java b/src/main/java/com/qxueyou/scc/base/model/WbCacheKey.java
new file mode 100644
index 0000000..b536446
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/WbCacheKey.java
@@ -0,0 +1,122 @@
+package com.qxueyou.scc.base.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 微商缓存表
+ * @author zhiyong
+ *
+ */
+@Entity
+@Table(name="wb_cache_key")
+@NamedQuery(name="WbCacheKey.findAll", query="SELECT m FROM WbCacheKey m")
+public class WbCacheKey implements Serializable {
+	
+	private static final long serialVersionUID = -3808487318187993941L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="cache_key_id", unique=true, nullable=false, length=32)
+	private String cacheKeyId;
+
+	@Column(name="cache_key", length=255)
+	private String cacheKey;
+
+	/** 课程id  */
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	/** 对象id  */
+	@Column(name="object_id", length=32)
+	private String objectId;
+
+	/**  对象type 1:机构 2:班级 */
+	@Column(name="OBJECT_TYPE")
+	private int objectType;
+	
+	public static final int OBJECT_TYPE_ORG = 1;
+	
+	public static final int OBJECT_TYPE_CLASS = 2;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getCacheKeyId() {
+		return cacheKeyId;
+	}
+
+	public void setCacheKeyId(String cacheKeyId) {
+		this.cacheKeyId = cacheKeyId;
+	}
+
+	public String getCacheKey() {
+		return cacheKey;
+	}
+
+	public void setCacheKey(String cacheKey) {
+		this.cacheKey = cacheKey;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getObjectId() {
+		return objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	public int getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(int objectType) {
+		this.objectType = objectType;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/model/WeixinContants.java b/src/main/java/com/qxueyou/scc/base/model/WeixinContants.java
new file mode 100644
index 0000000..c16aff7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/WeixinContants.java
@@ -0,0 +1,19 @@
+package com.qxueyou.scc.base.model;
+
+/**
+ * 微信发送公用实体类
+ * @author ody
+ *
+ */
+public class WeixinContants {
+	
+	/** 报名成功消息模板 */
+	public static final String TEMPLATE_REGISTRATION_SUCCESS = "-qY8x7f_2vUf_vle1O6kxHL5iWeTD-eSCUSmzfTfwWs";
+	
+	/** 学校通知消息模板 */
+	public static final String TEMPLATE_ORG_NOTICE = "MI4bTdEoElJy5BaCWm_9P-tvAftVwFmvTZm8Bq0lV-s";
+	
+	/** 班级通知消息模板 */
+	public static final String TEMPLATE_CLASS_NOTICE = "Qm9Vbypj6y7-x6_jI2TudmqxjPs7krxr9OsYYg3Nt3A";
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/model/WxTemplateMsg.java b/src/main/java/com/qxueyou/scc/base/model/WxTemplateMsg.java
new file mode 100644
index 0000000..d89f344
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/model/WxTemplateMsg.java
@@ -0,0 +1,110 @@
+package com.qxueyou.scc.base.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 微信模板消息
+ * @author 德虎
+ */
+public class WxTemplateMsg  extends BaseVO {
+	
+	private static final String DEFAULT_COLOR = "#173177";
+
+	private String toUser;
+	
+	private String templateId;
+	
+	private String url;
+	
+	private Map<String,Pair> data = new HashMap<String,Pair>(3);
+	
+	public WxTemplateMsg(){};
+	
+	public String getToUser() {
+		return toUser;
+	}
+
+	public void setToUser(String toUser) {
+		this.toUser = toUser;
+	}
+
+	public String getTemplateId() {
+		return templateId;
+	}
+
+	public void setTemplateId(String templateId) {
+		this.templateId = templateId;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+	
+	public String toJSON(){
+		
+		StringBuilder bd = new StringBuilder(300);
+		
+		bd.append('{');
+		
+		bd.append("\"touser\":\"").append(this.toUser).append("\",");
+		bd.append("\"template_id\":\"").append(this.templateId).append("\",");
+		bd.append("\"url\":\"").append(this.url).append("\",");
+		
+		bd.append("\"data\":{");
+		
+		for(String key:data.keySet()){
+			bd.append("\"").append(key).append("\":{");
+			bd.append("\"value\":\"").append(data.get(key).getValue()).append("\",");
+			bd.append("\"color\":\"").append(data.get(key).getColor()).append("\"");
+			bd.append("},");
+		}
+		
+		bd.deleteCharAt(bd.length()-1);
+		
+		bd.append("}");
+		bd.append("}");
+		return bd.toString();
+	}
+
+
+	class Pair{
+		String value;
+		String color;
+		
+		Pair(String value,String color){
+			this.value=value;
+			this.color=color;
+		}
+
+		public String getValue() {
+			return value;
+		}
+
+		public void setValue(String value) {
+			this.value = value;
+		}
+
+		public String getColor() {
+			return color;
+		}
+
+		public void setColor(String color) {
+			this.color = color;
+		}
+		
+	}
+	
+	public void addData(String name,String value){
+		addData(name,value,DEFAULT_COLOR);
+	}
+	
+	public void addData(String name,String value,String color){
+		data.put(name, new Pair(value,color));
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/IBaseJpaRepository.java b/src/main/java/com/qxueyou/scc/base/service/IBaseJpaRepository.java
new file mode 100644
index 0000000..8fec3e1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/IBaseJpaRepository.java
@@ -0,0 +1,17 @@
+package com.qxueyou.scc.base.service;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.querydsl.QueryDslPredicateExecutor;
+import org.springframework.data.repository.NoRepositoryBean;
+
+/**
+ * jpa 鍩虹Repository
+ * @author zhiyong
+ *
+ * @param <T>
+ */
+@NoRepositoryBean
+public interface IBaseJpaRepository<T> extends JpaRepository<T, String>,JpaSpecificationExecutor<T>, QueryDslPredicateExecutor<T> {  
+	
+}  
diff --git a/src/main/java/com/qxueyou/scc/base/service/ICacheService.java b/src/main/java/com/qxueyou/scc/base/service/ICacheService.java
new file mode 100644
index 0000000..ba3e781
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/ICacheService.java
@@ -0,0 +1,183 @@
+package com.qxueyou.scc.base.service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 缓存服务接口
+ * 
+ * @author 德虎
+ *
+ */
+public interface ICacheService {
+
+	/**
+	 * 根据key值获取指定类型对象
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @param cls
+	 *            对象类型
+	 * @return
+	 */
+	<T> T get(String key, Class<T> cls);
+
+	/**
+	 * 根据key值获取指定类型对象
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @return
+	 */
+	<T> T get(String key);
+
+	Long getIncrValue(String key);
+
+	Long incr(String key);
+
+	Long decr(String key);
+
+	/**
+	 * 根据key值获取指定类型对象
+	 * 
+	 * @param keys
+	 * @return
+	 */
+	Map<String, Object> getBulk(String... keys);
+
+	/**
+	 * 将对象缓存到缓存池
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @param expiredTime
+	 *            超时时间,单位秒
+	 * @param obj
+	 *            要缓存的对象
+	 * @return
+	 */
+	void set(String key, int expiredTime, Object obj);
+
+	/**
+	 * 将对象缓存到缓存池,永不过期
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @param obj
+	 *            要缓存的对象
+	 * @return
+	 */
+	void set(String key, Object obj);
+
+	/**
+	 * 将对象缓存到缓存池
+	 * 
+	 * @param key
+	 *            cache名称
+	 * @param hashKey
+	 *            键值
+	 * @param obj
+	 *            要缓存的对象
+	 * @return
+	 */
+	void set(String key, String hashKey, Object obj);
+
+	/**
+	 * 将对象缓存到缓存池
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @param expiredTime
+	 *            超时时间,单位秒
+	 * @param obj
+	 *            要缓存的对象
+	 * @return
+	 */
+	boolean add(String key, int expiredTime, Object obj);
+
+	/**
+	 * 将对象从缓存池删除
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @return
+	 */
+	void delete(String key);
+
+	/**
+	 * 追加缓存池的值
+	 * 
+	 * @param key
+	 *            对象key值
+	 * @return
+	 */
+	void append(String key, String value);
+
+	/**
+	 * 获取list缓存中key所有value值
+	 */
+	<T> List<T> lstAll(String key);
+
+	/**
+	 * 向list缓存中放入值
+	 */
+	void lstRightPush(String key, Object value);
+
+	/**
+	 * 向list缓存中放入值
+	 */
+	<T> void lstRightPushAll(String key, Collection<T> values);
+
+	/**
+	 * 从列表获取指定范围内的数据
+	 * 
+	 * @param key
+	 * @param start
+	 * @param end
+	 * @return
+	 */
+	<T> List<T> lstRange(String key, long start, long end);
+
+	void lstTrim(String key, long start, long end);
+
+	void lstClear(String key);
+
+	/**
+	 * 根据key,index删除list中的value
+	 */
+	void lstRemove(String key, Object value);
+
+	/**
+	 * 通过key返回list中的值,并移除值
+	 */
+	String lstLeftPop(String key);
+	
+	/**
+     * 向hash缓存中存入对象
+     *
+     * @param key
+     * @param hashKey
+     * @param value
+     */
+    void putKeyForHash(Object key, Object hashKey, Object value);
+    
+    /**
+     * 对key设置过其实键
+     * @param key
+     * @param timeout
+     * @param unit
+     */
+	void expire(String key, long timeout, TimeUnit unit);
+	
+	/**
+	 * 如果不存在就添加
+	 * @param key
+	 * @param obj
+	 * @return
+	 */
+	boolean setIfAbsent(String key, Object obj);
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/ICommonService.java b/src/main/java/com/qxueyou/scc/base/service/ICommonService.java
new file mode 100644
index 0000000..dda2c88
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/ICommonService.java
@@ -0,0 +1,47 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.base.service;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 通用服务
+ * @history 2010-09-12 夏德虎 新建
+ *
+ */
+public interface ICommonService {
+
+    /**
+     * 读取对象
+     * @param <T> 泛型
+     * @param clz 实体类型
+     * @param pk 实体主键
+     * @return 查询结果
+     */
+    <T> T read(Class<T> clz,Serializable pk);
+
+    /**
+     * 保存对象
+     * @return 查询结果
+     */
+    public Result save(Object obj);
+
+
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    <T> List<T> find(String hql,List<Object> args,Class<T> cls);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/IDictionaryService.java b/src/main/java/com/qxueyou/scc/base/service/IDictionaryService.java
new file mode 100644
index 0000000..bae7c2d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/IDictionaryService.java
@@ -0,0 +1,22 @@
+package com.qxueyou.scc.base.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface IDictionaryService {
+	
+	/**
+	 * 获取配置
+	 * @param key
+	 * @return
+	 */
+	String getConfig(String key);
+	
+	/**
+	 * 更新配置
+	 * @param key
+	 * @param value
+	 * @return
+	 */
+	Result updateConfig(String key,String value);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/IFileUploadService.java b/src/main/java/com/qxueyou/scc/base/service/IFileUploadService.java
new file mode 100644
index 0000000..3dba509
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/IFileUploadService.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.base.service;
+
+import java.io.File;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
+ * @author ody.yuan
+ *
+ */
+public interface IFileUploadService {
+	
+	
+	/**
+	 * 从oss将文件拿到应用服务器
+	 * @param key           相对路径
+	 * @param directory		拿到应用服务器的存储路径
+	 * @param module		调用业务模块编码
+	 * @param userId		操作人
+	 * @return
+	 */
+	File doGetOssFile(String key, String directory,String module,String userId);
+	
+	/**
+	 * 从杭州 oss将音视频文件拿到本地
+	 * @param key           相对路径
+	 * @param directory		拿到应用服务器的存储路径
+	 * @param module		调用业务模块编码
+	 * @param userId		操作人
+	 * @return
+	 */
+	File doGetOssVideoFile(String key, String directory,String module,String userId);
+	
+	/**
+	 * 操作完之后,删除临时文件
+	 * @param derectory		拿到应用服务器的存储路径
+	 * @param module		调用业务模块编码
+	 * @param userId		操作人
+	 * @return
+	 */
+	Result doDeleteTempOssFile(String directory,String module,String userId);
+	
+	/**
+	 * 操作完之后,删除临时文件
+	 * @param file			拿到应用服务器的文件
+	 * @param module		调用业务模块编码
+	 * @param userId		操作人
+	 * @return
+	 */
+	Result doDeleteTempOssFile(File file,String module,String userId);
+	/**
+	 * 更新上传文件使用轨迹
+	 * @param fullPath 路径
+	 * @param module 
+	 * @param useFlag 使用状态
+	 * @param bussinessId 业务ID
+	 * @return
+	 */
+	Result updateUploadTrace(String fullPath,String module,int useFlag,String bussinessId);
+	
+	/**
+	 * 通过路径下载微信图像到服务器
+	 * @return
+	 */
+	String downloadWxImg(String strUrl,String openId);
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/ILicenseService.java b/src/main/java/com/qxueyou/scc/base/service/ILicenseService.java
new file mode 100644
index 0000000..9f77f3e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/ILicenseService.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.base.service;
+
+import java.util.Date;
+
+public interface ILicenseService {
+	
+	boolean isValid();
+	
+	String getCustomerName();
+	
+	String getProductName();
+	
+	Date getExpiredDate();
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/service/IONSExceptionLogService.java b/src/main/java/com/qxueyou/scc/base/service/IONSExceptionLogService.java
new file mode 100644
index 0000000..59a9144
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/IONSExceptionLogService.java
@@ -0,0 +1,25 @@
+package com.qxueyou.scc.base.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中
+ * @author ody.yuan
+ *
+ */
+public interface IONSExceptionLogService {
+	
+	
+	/**
+	 * ONS 日志记录
+	 * 
+	 * @param topic		订阅主题
+	 * @param msgType	同一订阅主题支撑多个业务类型时,业务类型
+	 * @param businessId异常堆栈:自定义ID
+	 * @param desp		参数列表
+	 * @return
+	 */
+	Result logSaveExceptionLog(String topic, String msgType, String businessId, String desp);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/BaseRepository.java b/src/main/java/com/qxueyou/scc/base/service/impl/BaseRepository.java
new file mode 100644
index 0000000..9872d93
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/BaseRepository.java
@@ -0,0 +1,31 @@
+package com.qxueyou.scc.base.service.impl;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.springframework.data.repository.NoRepositoryBean;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+
+
+/**
+ * 鍩虹jpa 鑾峰彇em
+ * @author zhiyong
+ *
+ */
+@NoRepositoryBean
+public class BaseRepository {
+
+    @PersistenceContext
+    public EntityManager em;
+    
+    public JPAQueryFactory queryFactory;
+
+	public JPAQueryFactory getQueryFactory() {
+		return new JPAQueryFactory(em);
+	}
+	
+	
+	
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/CommonAppService.java b/src/main/java/com/qxueyou/scc/base/service/impl/CommonAppService.java
new file mode 100644
index 0000000..8eeeff7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/CommonAppService.java
@@ -0,0 +1,391 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.base.service.impl;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysDictionary;
+
+@Service(value = "commonAppService")
+/**
+ * @author 夏德虎
+ * @since JDK1.7
+ * @history 2014-11-18 夏德虎 新建
+ */
+public class CommonAppService implements ICommonService {
+	/**
+	 * 获取事务管理器
+	 */
+    @PersistenceContext
+    public EntityManager em;
+    
+    /**
+     * 获取querydsl 查询工厂
+     */
+    public JPAQueryFactory queryFactory;
+    
+    private CommonDAO commonDAO;
+
+
+    public CommonDAO getCommonDAO(){
+        return commonDAO;
+    }
+    
+    public JPAQueryFactory getQueryFactory() {
+		return new JPAQueryFactory(em);
+	}
+
+
+	/**
+     * 删除实体
+     * @param trace
+     */
+	public void deleteTrace(ITrace trace) {
+		trace.setDeleteFlag(true);
+		TraceUtils.setUpdateTrace(trace);
+		save(trace);
+	}
+
+    /**
+     * 删除实体集合
+     * @param traces
+     */
+	public <T extends ITrace> void  deleteTraces(List<T> traces) {
+		for (ITrace trace : traces) {
+			deleteTrace(trace);
+		}
+	}
+
+    /**
+     * 依赖注入
+     *
+     * @param commonDAO
+     */
+    @Autowired(required = false)
+    public void setCommonDAO(@Qualifier("commonDao")
+    CommonDAO commonDAO) {
+        this.commonDAO = commonDAO;
+    }
+
+    /**
+     * 读取对象
+     * @param <T> 泛型
+     * @param clz 实体类型
+     * @param pk 实体主键
+     * @return 查询结果
+     */
+    public <T> T read(Class<T> clz,Serializable pk){
+        return this.commonDAO.read(clz, pk);
+    }
+    
+
+    /**
+     * 保存对象
+     * @return 查询结果
+     */
+    public Result save(Object obj){
+        this.commonDAO.saveOrUpdate(obj);
+        return new Result(true);
+
+    }
+    
+    /**
+     * 刷新对象 手动提交
+     * @return 查询结果
+     */
+    public void flush(){
+    	getCommonDAO().getHibernateTemplate().flush();
+    }
+    
+    /**
+     * 清除缓存
+     */
+    public void clearCache(){
+    	getCommonDAO().getHibernateTemplate().clear();
+    }
+    
+    /**
+     * 清除单个缓存
+     */
+    public void evict(Object obj){
+    	getCommonDAO().getHibernateTemplate().evict(obj);
+    }
+    
+    /**
+     * 保存对象
+     * @return 查询结果
+     */
+    public Result insert(Object obj){
+        this.commonDAO.save(obj);
+        return new Result(true);
+
+    }
+    
+    /**
+     * 保存对象
+     * @return 查询结果
+     */
+    @SuppressWarnings("rawtypes")
+	public Result saveOrUpdateAll(Collection collection){
+        commonDAO.saveOrUpdateAll(collection);
+        return new Result(true);
+
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    public <T> List<T> find(String hql,List<Object> args,Class<T> cls){
+        return this.commonDAO.find(hql, args, cls);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCount(String hql, List<Object> args) {
+        return  this.commonDAO.findCount(hql, args);
+    }
+	
+    
+	/**
+     * 保存或更新对象
+     */
+    public void deleteAll(@SuppressWarnings("rawtypes") Collection col) {
+    	this.commonDAO.deleteAll(col);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的唯一结果
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    public <T> T findUnique(String hql,List<Object> args,Class<T> cls){
+        return this.commonDAO.findUnique(hql, args, cls);
+    }
+
+    /**
+     * 使用sql查询结果
+     * @param sql
+     * @param args
+     * @return
+     */
+    @SuppressWarnings("rawtypes")
+	public List findBySql(final String sql,final List<Object> args){
+        return this.commonDAO.findBySql(sql, args);
+    }
+    
+    /**
+     * 使用sql查询结果
+     * @param sql
+     * @param args
+     * @return
+     */
+    @SuppressWarnings("rawtypes")
+	public List findByPageSql(final String sql,final List<Object> args, final Pager pager){
+        return this.commonDAO.findByPageSql(sql, args, pager);
+    }
+    
+    /**
+     * 使用sql查询结果
+     * @param sql
+     * @param args
+     * @return
+     */
+	public int findCountBySql(final String sql,final List<Object> args){
+        return  this.commonDAO.findCountBySql(sql, args);
+    }
+    
+    public Result bulkUpdate(String hql, Object args[]) {
+    	return this.commonDAO.bulkUpdate(hql, args);
+    }
+    
+    public Result executeProduce(String sql, Object args[]) {
+    	return this.commonDAO.executeProduce(sql, args);
+    }
+    
+    public int executeDelete(String sql, Object args[]) {
+    	return this.commonDAO.executeSqlDelete(sql, args);
+    }
+    
+    /**
+     * hql只含单一参数
+     *
+     * @param hql 查询语句
+     * @param args 参数数组
+     * @param cls 返回类型
+     * @return
+     */
+    public Result bulkUpdateInLoop(String hql, Object args[]) {
+        return this.commonDAO.bulkUpdateInLoop(hql, args);
+    }
+    
+    /**
+     * 复杂hql
+     * @param sql
+     * @param map
+     * @param cls
+     * @return
+     */
+    public <T> List<T> findByComplexHql(final String hql, final Map<String, Object> map, Class<T> cls){
+    	 return this.commonDAO.findByComplexHql(hql, map, cls);
+    }
+    
+    /**
+     * 复杂hql
+     * @param sql
+     * @param map
+     * @param cls
+     * @return
+     */
+    public <T> T findUniqueByHql(final String hql, final Map<String, Object> map){
+    	 return commonDAO.findUniqueByHql(hql, map);
+    }
+    
+    /**
+     * 复杂hql
+     * @param sql
+     * @param map
+     * @param cls
+     * @return
+     */
+    public <T> List<T> findByComplexHql(final String hql, final Pager page, final Map<String, Object> map, Class<T> cls){
+    	 return this.commonDAO.findByComplexHql(hql, page, map, cls);
+    }
+    
+    /**
+     * 返回个数 复杂hql
+     *
+     * @param hql 查询语句
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCountByComplexHql(final String hql, final Map<String, Object> map) {
+        return  this.commonDAO.findCountByComplexHql(hql, map);
+    }
+	
+	 /**
+     * 返回个数 复杂sql
+     *
+     * @param hql 查询语句
+     * @param cls 返回类型
+     * @return
+     */
+	public int findCountByComplexSql(final String hql, final Map<String, Object> map) {
+        return  this.commonDAO.findCountByComplexSql(hql, map);
+    }
+	
+    /**
+     * 复杂sql
+     * @param sql
+     * @param map
+     * @param cls
+     * @return
+     */
+    public <T> List<T> findByComplexSql(final String sql, final Map<String, Object> map, Class<T> cls){
+    	 return this.commonDAO.findByComplexSql(sql, map, cls);
+    }
+    
+    /**
+     * 复杂hql
+     * @param sql
+     * @param map
+     * @param cls
+     * @return
+     */
+    public <T> List<T> findByComplexSql(final String sql, final Pager page, final Map<String, Object> map, Class<T> cls){
+    	 return this.commonDAO.findByComplexSql(sql, page, map, cls);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
+     * @param hql
+     * @param map
+     * @return
+     */
+    public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> map){
+    	return this.commonDAO.findListWithMapByHql(hql, map);
+    }
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
+     * @param hql
+     * @param args
+     * @return
+     */
+    public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> args,final Pager page){
+    	return this.commonDAO.findListWithMapByHql(hql, args,page);
+    }
+    
+    /**
+     * 分页查询
+     * @param hql
+     * @param page
+     * @param args
+     * @param cls
+     * @return
+     */
+    public <T> List<T> findList(final String hql, final Pager page, final List<Object> args,Class<T> cls){
+    	return this.commonDAO.findList(hql, page, args, cls);
+    }
+    
+    /**
+     * 查询
+     * @param hql
+     * @param args
+     * @return
+     */
+	public List<Object[]> findwithRawResult(String hql, List<Object> args) {
+        return this.commonDAO.findwithRawResult(hql, args);
+    }
+	
+
+	/**
+	 * 根据配置key查询value值 
+	 * @param key
+	 * @return
+	 */
+	public String queryConfigValue(String key){
+		return this.commonDAO.queryConfigValue(key);
+	}
+	
+	/**
+	 * 根据字典类型查询字典内容的list
+	 * @param dicType
+	 * @return
+	 */
+	public List<SysDictionary> queryDictConfigMap(String dicType){
+		return this.commonDAO.queryDictConfigMap(dicType);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/DictionaryService.java b/src/main/java/com/qxueyou/scc/base/service/impl/DictionaryService.java
new file mode 100644
index 0000000..0d5a9a9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/DictionaryService.java
@@ -0,0 +1,33 @@
+package com.qxueyou.scc.base.service.impl;
+
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.IDictionaryService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+/**
+ * 配置服务,读取配置项
+ * 
+ * @author lyl
+ *
+ */
+@Service
+public class DictionaryService extends CommonAppService implements IDictionaryService {
+
+	@Override
+	public String getConfig(String key) {
+		String hql="select value from SysDictionary where dicKey=?";
+		
+		return  findUnique(hql, CollectionUtils.newList(key), String.class) ;
+	}
+
+	@Override
+	public Result updateConfig(String key, String value) {
+		
+		return bulkUpdate("update SysDictionary set value=? where dicKey=?", new Object[] {value,key});
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/FileUploadService.java b/src/main/java/com/qxueyou/scc/base/service/impl/FileUploadService.java
new file mode 100644
index 0000000..6a767a0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/FileUploadService.java
@@ -0,0 +1,179 @@
+package com.qxueyou.scc.base.service.impl;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.IFileUploadService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.sys.model.SysFileUploadTrace;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.sys.service.IOssVideoService;
+import com.qxueyou.scc.sys.service.ISysLogService;
+
+
+/**
+ * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
+ * @author ody.yuan
+ *
+ */
+@Service(value = "FileUploadService")
+public class FileUploadService extends CommonAppService implements IFileUploadService  {
+
+	private final Logger log = LogManager.getLogger(FileUploadService.class);
+	
+	@Autowired
+	ISysLogService syslogService;
+	
+	@Autowired
+	IOssService ossService;
+	
+	@Autowired
+	IOssVideoService ossVideoService;
+	
+	@Autowired
+	ISysLogService logService ;
+	
+	@Override
+	public File doGetOssFile(String key, String directory,String module,String userId) {
+		File file = null ;
+		try{
+			file = ossService.getObject(key, directory);
+			return file;
+		}catch( Exception e ){
+			log.error(userId + "失败:OSS下载路径:" + key + " ;应用服务器路径:" + directory  + " ; errMsg=" + e.getMessage() , e );
+			return file ;
+		}
+		
+	}
+
+	@Override
+	public File doGetOssVideoFile(String key, String directory,String module,String userId) {
+		File file = null ;
+		try{
+			file = ossVideoService.getObject(key, directory);
+			return file;
+		}catch( Exception e ){
+			log.error(userId + "失败:OSSVideo下载路径:" + key + " ;应用服务器路径:" + directory  + " ; errMsg=" + e.getMessage() , e );
+			return file ;
+		}
+		
+	}
+
+	@Override
+	public Result doDeleteTempOssFile(String directory,String module,String userId) {
+		
+		Boolean result = FileUtils.deleteQuietly(new File(directory));
+		
+		if( result ){
+			this.insertUploadLog(userId,"成功删除:OSS-OSSVideo0:" + directory  , module );
+			return new Result(true);
+		}else{
+			return new Result(false);
+		}
+	}
+
+	@Override
+	public Result doDeleteTempOssFile(File file,String module,String userId) {
+		
+		Boolean result = FileUtils.deleteQuietly(file);
+		
+		if( result ){
+			this.insertUploadLog(userId,"成功删除:OSS-OSSVideo1:" + file.getAbsolutePath()  , module );
+			return new Result(true);
+		}else{
+			log.error(userId + "失败:OSS-OSSVideo删除本地文件1:" + file.getAbsolutePath()   );
+			this.insertUploadLog(userId,"失败删除:OSS-OSSVideo1:"  + file.getAbsolutePath()   , module );
+			return new Result(false);
+		}
+		
+		
+	}
+	
+	/**
+	 * 插入本地文件下载日志
+	 * @param content		内容
+	 * @param desp			上传模块
+	 * @return
+	 */
+	private Result insertUploadLog(String userId ,String content, String desp ){
+		
+		SysLog log = new SysLog();
+		TraceUtils.setCreateTrace(log);
+		
+		log.setUserId(userId);
+		log.setContent(content);
+		log.setModule("FILE_UPLOAD_APPLICATION");
+		log.setDesp(desp.length() > 120 ? desp.substring(0,120) : desp);
+		log.setDeleteFlag(false);
+		log.setType(SysLog.LOG_TYPE_BUSINESS);
+		
+		this.syslogService.insertLog(log);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 更新上传文件使用轨迹
+	 * @param fullPath 路径
+	 * @param module 
+	 * @param useFlag 使用状态
+	 * @param bussinessId 业务ID
+	 * @return
+	 */
+	public Result updateUploadTrace(String fullPath,String module,int useFlag,String bussinessId){
+		String hql = " from SysFileUploadTrace where fullPath = ? and module = ?";
+		SysFileUploadTrace trace = findUnique(hql, CollectionUtils.newList(fullPath,module), SysFileUploadTrace.class);
+		
+		if(trace == null){
+			return new Result(false);
+		}
+		TraceUtils.setUpdateTrace(trace);
+		trace.setBussinessId(bussinessId);
+		trace.setUseFlag(useFlag);
+		return save(trace);
+	}
+	
+	/**
+	 * 通过路径下载微信图像到服务器
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public String downloadWxImg(String strUrl,String openId){
+		if(StringUtils.isBlank(strUrl)){
+			return null;
+		}
+		try {  
+            URL url = new URL(strUrl);  
+            HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
+            conn.setRequestMethod("GET");  
+            conn.setConnectTimeout(5 * 1000);  
+            InputStream inStream = conn.getInputStream();//通过输入流获取图片数据  
+            String uuid = UUIDUtils.generateUUID();
+            String imgPath = "/web/res/img/user/"+uuid+"/" + openId + ".png";
+//            Result result = ossService.uplpadImage(inStream, "png", imgPath);
+            
+//            if (result.isSuccess()) {
+//				return imgPath;
+//			}
+        } catch (Exception e) {  
+            e.printStackTrace();  
+            log.error("微信头像上传失败" + e);
+        }  
+		
+       return null;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/LicenseChecker.java b/src/main/java/com/qxueyou/scc/base/service/impl/LicenseChecker.java
new file mode 100644
index 0000000..cd20636
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/LicenseChecker.java
@@ -0,0 +1,146 @@
+package com.qxueyou.scc.base.service.impl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.stereotype.Service;
+
+import com.license4j.License;
+import com.license4j.LicenseValidator;
+import com.qxueyou.scc.base.util.AESUtil;
+import com.qxueyou.scc.config.SccConfig;
+
+@Service
+public final class LicenseChecker{
+
+	private final Logger log = LogManager.getLogger(LicenseChecker.class);
+	
+	@Autowired
+	private SccConfig config;
+	
+	@Autowired
+	ResourceLoader resourceLoader;
+	
+	private License license;
+	
+	public License getLicense() {
+		return license;
+	}
+
+	@PostConstruct
+	private void init() {
+			
+		String licenseText = readLicense();
+		
+		license = LicenseValidator.validate(
+				licenseText, 
+				AESUtil.decrypt(config.getLicensePublicKey()), 
+				config.getProductId(),
+				null, 
+				null, 
+				null,
+				null);
+		
+		switch (license.getValidationStatus()) {
+		case LICENSE_VALID:
+			log.info("license valid");
+			break;
+		case LICENSE_INVALID:
+			exit("LICENSE_INVALID");
+			break;
+		case LICENSE_EXPIRED:
+			exit("LICENSE_EXPIRED");
+			break;
+		case LICENSE_MAINTENANCE_EXPIRED:
+			exit("LICENSE_MAINTENANCE_EXPIRED");
+			break;
+		case INCORRECT_SYSTEM_TIME:
+			exit("INCORRECT_SYSTEM_TIME");
+			break;
+		case MISMATCH_HARDWARE_ID:
+			exit("MISMATCH_HARDWARE_ID");
+			break;
+		case MISMATCH_PRODUCT_ID:
+			exit("MISMATCH_PRODUCT_ID");
+			break;
+		case MISMATCH_PRODUCT_EDITION:
+			exit("MISMATCH_PRODUCT_EDITION");
+			break;
+		case MISMATCH_PRODUCT_VERSION:
+			exit("MISMATCH_PRODUCT_VERSION");
+			break;
+		case FLOATING_LICENSE_ALLOWED_USE_COUNT_REACHED:
+			exit("FLOATING_LICENSE_ALLOWED_USE_COUNT_REACHED");
+			break;
+		case FLOATING_LICENSE_ALLOWED_USE_TIME_REACHED:
+			exit("FLOATING_LICENSE_ALLOWED_USE_TIME_REACHED");
+			break;
+		case FLOATING_LICENSE_CLIENT_REJECTED:
+			exit("FLOATING_LICENSE_CLIENT_REJECTED");
+			break;
+		case FLOATING_LICENSE_NOT_AVAILABLE_ALL_IN_USE:
+			exit("FLOATING_LICENSE_NOT_AVAILABLE_ALL_IN_USE");
+			break;
+		case FLOATING_LICENSE_NOT_FOUND:
+			exit("FLOATING_LICENSE_NOT_FOUND");
+			break;
+		case FLOATING_LICENSE_OVERUSED:
+			exit("FLOATING_LICENSE_OVERUSED");
+			break;
+		case FLOATING_LICENSE_SERVER_NOT_AVAILABLE:
+			exit("FLOATING_LICENSE_SERVER_NOT_AVAILABLE");
+			break;
+		case VALIDATION_REJECTED_FEATURE_DISABLED:
+			exit("VALIDATION_REJECTED_FEATURE_DISABLED");
+			break;
+		case VALIDATION_REJECTED_IP_BLOCK_RESTRICTION:
+			exit("VALIDATION_REJECTED_IP_BLOCK_RESTRICTION");
+			break;
+		default:
+			break;
+		}
+
+
+	}
+	
+	private String readLicense() {
+		
+		Resource resource = resourceLoader.getResource(config.getLicensePath());
+		BufferedReader br = null;
+		
+		try {
+			br = new BufferedReader(new InputStreamReader(resource.getInputStream()),1024);
+	        StringBuilder stringBuilder = new StringBuilder(2000);
+	        String line;
+	        while ((line = br.readLine()) != null) {
+	            stringBuilder.append(line).append('\n');
+	        }
+	        return stringBuilder.toString();
+			
+		} catch (IOException e) {
+			log.error(e,e);
+		} finally {
+			IOUtils.closeQuietly(br);
+		}
+		
+		return null;		
+	}
+	
+	private void exit(String msg) {
+		log.error("license invalid:"+msg);
+		/**
+		 * 临时屏蔽
+		 */
+//		System.exit(-1);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/LicenseService.java b/src/main/java/com/qxueyou/scc/base/service/impl/LicenseService.java
new file mode 100644
index 0000000..8176bb7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/LicenseService.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.base.service.impl;
+
+import java.util.Date;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.license4j.License;
+import com.license4j.ValidationStatus;
+import com.qxueyou.scc.base.service.ILicenseService;
+
+@Service
+public class LicenseService implements ILicenseService{
+
+	private License license;
+	
+//	@Autowired
+//	LicenseChecker checker;
+	
+	@Override
+	public boolean isValid() {
+		return true;
+		/**
+		 * 临时屏蔽
+		 */
+//		if(isLicenseNull()) {
+//			return false;
+//		}
+//		return license.getValidationStatus().equals(ValidationStatus.LICENSE_VALID);
+	}
+	
+	private boolean isLicenseNull() {
+		return false;
+		/**
+		 * 临时屏蔽
+		 */
+//		if(license==null && (license=checker.getLicense())==null) {
+//			return true;
+//		}
+//		return false;
+	}
+
+	@Override
+	public String getCustomerName() {
+		/**
+		 * 临时屏蔽
+		 */
+		return "开发公司";
+//		if(isLicenseNull()) {
+//			return null;
+//		}
+//		return license.getLicenseText().getUserCompany();
+	}
+
+	@Override
+	public String getProductName() {
+		/**
+		 * 临时屏蔽
+		 */
+		return "开发产品";
+//		if(isLicenseNull()) {
+//			return null;
+//		}
+//		return license.getLicenseText().getLicenseProductName();
+	}
+
+	@Override
+	public Date getExpiredDate() {
+		return new Date();
+//		if(isLicenseNull()) {
+//			return null;
+//		}
+//		return license.getLicenseText().getLicenseExpireDate();
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/ONSExceptionLogService.java b/src/main/java/com/qxueyou/scc/base/service/impl/ONSExceptionLogService.java
new file mode 100644
index 0000000..0610cde
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/ONSExceptionLogService.java
@@ -0,0 +1,60 @@
+package com.qxueyou.scc.base.service.impl;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.ISysLogService;
+
+/**
+ * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中
+ * @author ody.yuan
+ *
+ */
+@Service(value = "ONSExceptionLogService")
+public class ONSExceptionLogService implements IONSExceptionLogService {
+      
+	@Autowired
+	ISysLogService syslogService;
+	
+	@Override
+	@Transactional(propagation=Propagation.REQUIRES_NEW)
+	public Result logSaveExceptionLog(String topic, String msgType,String businessId ,String desp ) {
+		
+		// 处理长度
+		String currTopic = null == topic ? "" : topic ;
+		String currDesp = StringUtils.isNotBlank(desp) && desp.length() > 125 ? desp.substring(0,125) : desp ;
+		
+		SysLog log = new SysLog();
+		TraceUtils.setCreateTrace(log);
+		
+		log.setContent(getContent(currTopic, businessId, msgType));
+		log.setModule("ONS_EXCEPTION_LOG");
+		log.setDesp( currDesp );
+		log.setDeleteFlag(false);
+		log.setType(SysLog.LOG_TYPE_BUSINESS);
+		
+		this.syslogService.insertLog(log);
+		
+		return new Result(true);
+		
+	}
+	
+	private String getContent(String currTopic, String businessId ,String msgType){
+		String content = currTopic.concat("  -  ");
+		if(StringUtils.isNotBlank(msgType)){
+			content = content.concat(msgType).concat("  -  ");
+		}
+		if(StringUtils.isNotBlank(businessId)){
+			content = content.concat(businessId);
+		}
+		return content.length() > 255 ? content.substring(0,255) : content ;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java b/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java
new file mode 100644
index 0000000..41086c4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java
@@ -0,0 +1,211 @@
+package com.qxueyou.scc.base.service.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.BoundValueOperations;
+import org.springframework.data.redis.core.HashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+/**
+ * 阿里云OCS缓存服务
+ * 
+ * @author 德虎
+ *
+ */
+@Service
+public class RedisCacheBean implements ICacheService {
+
+	@SuppressWarnings("unused")
+	private static final Logger log = LogManager.getLogger("RedisCacheService");
+
+	@SuppressWarnings("rawtypes")
+	@Autowired
+	private RedisTemplate redisTemplate;
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T> T get(String key, Class<T> cls) {
+		ValueOperations<String, T> ops = redisTemplate.opsForValue();
+		return ops.get(key);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T> T get(String key) {
+		ValueOperations<String, T> ops = redisTemplate.opsForValue();
+		return ops.get(key);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Map<String, Object> getBulk(String... keys) {
+		if (keys == null || keys.length == 0) {
+			return null;
+		}
+		ValueOperations<String, Object> ops = redisTemplate.opsForValue();
+		List<Object> list = ops.multiGet(CollectionUtils.newList(String.class, keys));
+		Map<String, Object> resultMap = new HashMap<String, Object>(keys.length);
+		for (int i = 0; i < keys.length; i++) {
+			resultMap.put(keys[i], list.get(i));
+		}
+
+		return resultMap;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void set(String key, int expiredTime, Object obj) {
+		ValueOperations<String, Object> ops = redisTemplate.opsForValue();
+		ops.set(key, obj, expiredTime, TimeUnit.SECONDS);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void set(String key, Object obj) {
+		ValueOperations<String, Object> ops = redisTemplate.opsForValue();
+		ops.set(key, obj);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Override
+	public boolean setIfAbsent(String key, Object obj) {
+		return redisTemplate.opsForValue().setIfAbsent(key, obj);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void set(String key, String hashKey, Object obj) {
+		HashOperations<String, String, Object> ops = redisTemplate.opsForHash();
+		ops.put(key, hashKey, obj);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public boolean add(String key, int expiredTime, Object obj) {
+		BoundValueOperations<String, Object> boundValueOperations = redisTemplate.boundValueOps(key);
+		boolean result = boundValueOperations.setIfAbsent(obj);
+		if (result) {
+			boundValueOperations.expire(expiredTime, TimeUnit.SECONDS);
+		}
+		return result;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void delete(String key) {
+		redisTemplate.delete(key);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void append(String key, String value) {
+		ValueOperations<String, Object> ops = redisTemplate.opsForValue();
+		ops.append(key, value);
+	}
+
+	@Override
+	public <T> List<T> lstAll(String key) {
+
+		List<T> lstValue = lstRange(key, 0l, -1l);
+
+		return lstValue;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void lstRightPush(String key, Object value) {
+		redisTemplate.opsForList().rightPush(key, value);
+	}
+	
+	
+	@SuppressWarnings("unchecked")
+	@Override
+	public void expire(String key,long timeout,TimeUnit unit) {
+		redisTemplate.expire(key, timeout, unit);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T> void lstRightPushAll(String key, Collection<T> values) {
+		if (values.isEmpty()) {
+			return;
+		}
+
+		redisTemplate.opsForList().rightPushAll(key, values);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void lstRemove(String key, Object value) {
+		redisTemplate.opsForList().remove(key, 1, value);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public String lstLeftPop(String key) {
+		String leftPop = (String) redisTemplate.opsForList().leftPop(key);
+		return leftPop;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <T> List<T> lstRange(String key, long start, long end) {
+
+		List<T> result = new ArrayList<T>(20);
+		result.addAll(redisTemplate.opsForList().range(key, start, end));
+
+		return result;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void lstTrim(String key, long start, long end) {
+		redisTemplate.opsForList().trim(key, start, end);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void lstClear(String key) {
+		redisTemplate.opsForList().trim(key, 1, 0);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Long getIncrValue(String key) {
+		return redisTemplate.opsForValue().increment(key, 0l);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Long incr(String key) {
+		return redisTemplate.opsForValue().increment(key, 1l);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Long decr(String key) {
+		return redisTemplate.opsForValue().increment(key, -1l);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void putKeyForHash(Object key, Object hashKey, Object value) {
+
+		redisTemplate.opsForHash().put(key, hashKey, value);
+
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/AESUtil.java b/src/main/java/com/qxueyou/scc/base/util/AESUtil.java
new file mode 100644
index 0000000..5190f97
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/AESUtil.java
@@ -0,0 +1,131 @@
+package com.qxueyou.scc.base.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.SecureRandom;
+
+public class AESUtil {
+
+	public static final String charset = "UTF-8";
+	private static final String IV = "1234567812345678";
+	private static final String defaultPasswd = "0120302323012324";
+	
+	public static String encrypt(String cleartext) {
+		return encrypt(defaultPasswd,cleartext);
+	}
+
+	public static String encrypt(String dataPassword, String cleartext) {
+		try {
+			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+			SecretKeySpec key = new SecretKeySpec(dataPassword.getBytes(), "AES");
+			IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
+			cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+			byte[] encryptedData = cipher.doFinal(cleartext.getBytes(charset));
+			return new String(parseByte2HexStr(encryptedData));
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public static String decrypt(String cleartext) {
+		return decrypt(defaultPasswd,cleartext);
+	}
+	
+	public static String decrypt(String dataPassword, String encrypted) {
+		try {
+			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+			SecretKeySpec key = new SecretKeySpec(dataPassword.getBytes(), "AES");
+			IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
+			byte[] byteMi = parseHexStr2Byte(encrypted);
+			cipher.init(Cipher.DECRYPT_MODE, key, iv);
+			byte[] decryptedData = cipher.doFinal(byteMi);
+			return new String(decryptedData, charset);
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * 将16进制转换为二进制
+	 * 
+	 * @param hexStr
+	 * @return
+	 */
+	public static byte[] parseHexStr2Byte(String hexStr) {
+		if (hexStr.length() < 1) {
+			return null;
+		}
+		byte[] result = new byte[hexStr.length() / 2];
+		for (int i = 0; i < hexStr.length() / 2; i++) {
+			int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
+			int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
+			result[i] = (byte) (high * 16 + low);
+		}
+		return result;
+	}
+
+	/**
+	 * 将二进制转换成16进制
+	 * 
+	 * @param buf
+	 * @return
+	 */
+	public static String parseByte2HexStr(byte buf[]) {
+		StringBuilder sb = new StringBuilder();
+		for (int i = 0; i < buf.length; i++) {
+			String hex = Integer.toHexString(buf[i] & 0xFF);
+			if (hex.length() == 1) {
+				sb.append('0');
+			}
+			sb.append(hex.toUpperCase());
+		}
+		return sb.toString();
+	}
+	
+	/**
+	 * AES解密
+	 */
+	public static String decode(String aesKey, String encryptText) {
+		try {
+			KeyGenerator _generator = KeyGenerator.getInstance("AES");
+			SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
+			secureRandom.setSeed(aesKey.getBytes());
+			_generator.init(128, secureRandom);
+			SecretKey secretKey = _generator.generateKey();
+			byte[] enCodeFormat = secretKey.getEncoded();
+			SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
+			Cipher cipher = Cipher.getInstance("AES");
+			cipher.init(Cipher.DECRYPT_MODE, key);
+			byte[] result = cipher.doFinal(AESUtil.parseHexStr2Byte(encryptText));
+			return new String(result);
+		} catch (Exception e) {
+			return "";
+		}
+	}
+	
+	public static void main(String[] args) {
+		
+		String publicKey = "30820122300d06092a864886f70d01010105000382010f00303032301006\n" + 
+				"072a8648ce3d02002EC311215SHA512withECDSA106052b81040006031e0\n" + 
+				"0042cac6fdede70a68027b03be32f81a2c3aca6a715e6937abcc6277e0fG\n" + 
+				"82010a028201010097beb94bc6a412279fdcf7b9696279a2dad43e4c0589\n" + 
+				"5ce1d14057fa4e60da48e38c0bed81cc668465213dec624fbde46c379468\n" + 
+				"1fa1a9fe05ae4595cd82c09cf0a4cea909efd43b8993dffcb2b86d8cdccf\n" + 
+				"1986392d60bcbf8aaf0c03RSA4204813SHA512withRSA1b5a1f66abe2be9\n" + 
+				"dd9c23b1efbaa48dc9727d1899765d37901d37403af214e45fbdf6831845\n" + 
+				"e762cd227c3fa0d0960346b23e30da429881ca3a26a20dcc3c08bba66927\n" + 
+				"e1e742184dc92ed0dc61ec97313b5239d47b1099f154928dd06c149c0ae2\n" + 
+				"9e6a04674454f89bbf466aa2527138e061a1d85f08bbd4dc0d9f3b3494d0\n" + 
+				"c8a406830fe981ee905719082c23767f6e0c59df143549786f5e28587eb4\n" + 
+				"f7ba4f8549aff0203010001\n";
+
+
+		
+		System.out.println(decrypt(publicKey));
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/Base64Utils.java b/src/main/java/com/qxueyou/scc/base/util/Base64Utils.java
new file mode 100644
index 0000000..7ae18e8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/Base64Utils.java
@@ -0,0 +1,33 @@
+package com.qxueyou.scc.base.util;
+
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+@SuppressWarnings("restriction")
+public class Base64Utils {  
+
+    private static final String UTF8 = "utf-8";  
+  
+    /** 
+     * BASE64编码
+     * @param src 
+     * @return 
+     * @throws Exception 
+     */  
+	public static String base64Encoder(String src) throws Exception {  
+        BASE64Encoder encoder = new BASE64Encoder();  
+        return encoder.encode(src.getBytes(UTF8));  
+    }  
+      
+    /** 
+     * BASE64解码
+     * @param dest 
+     * @return 
+     * @throws Exception 
+     */  
+    public static String base64Decoder(String dest) throws Exception {
+        BASE64Decoder decoder = new BASE64Decoder();  
+        return new String(decoder.decodeBuffer(dest), UTF8);  
+    }
+      
+}  
diff --git a/src/main/java/com/qxueyou/scc/base/util/ClassCardDoc.ftl b/src/main/java/com/qxueyou/scc/base/util/ClassCardDoc.ftl
new file mode 100644
index 0000000..50153a9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/ClassCardDoc.ftl
@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument 
+    xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
+    xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas"
+    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
+    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+    xmlns:o="urn:schemas-microsoft-com:office:office"
+    xmlns:v="urn:schemas-microsoft-com:vml"
+    xmlns:w10="urn:schemas-microsoft-com:office:word"
+    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
+    xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
+    xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"
+    xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
+    xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
+    w:macrosPresent="no"
+    w:embeddedObjPresent="no"
+    w:ocxPresent="no"
+    xml:space="preserve">
+
+  <w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/>
+  <o:DocumentProperties>
+    <o:Author>
+      todoney
+    </o:Author>
+    <o:LastAuthor>
+      todoney
+    </o:LastAuthor>
+    <o:Revision>
+      2
+    </o:Revision>
+    <o:TotalTime>
+      0
+    </o:TotalTime>
+    <o:LastPrinted>
+      2017-08-17T08:26:00Z
+    </o:LastPrinted>
+    <o:Created>
+      2017-08-17T08:30:00Z
+    </o:Created>
+    <o:LastSaved>
+      2017-08-17T08:30:00Z
+    </o:LastSaved>
+    <o:Pages>
+      2
+    </o:Pages>
+    <o:Words>
+      11
+    </o:Words>
+    <o:Characters>
+      66
+    </o:Characters>
+    <o:Company>
+      Microsoft
+    </o:Company>
+    <o:Lines>
+      1
+    </o:Lines>
+    <o:Paragraphs>
+      1
+    </o:Paragraphs>
+    <o:CharactersWithSpaces>
+      76
+    </o:CharactersWithSpaces>
+    <o:Version>
+      14
+    </o:Version>
+  </o:DocumentProperties>
+  <w:fonts>
+    <w:defaultFonts w:ascii="Calibri" w:fareast="瀹嬩綋" w:h-ansi="Calibri" w:cs="Times New Roman"/>
+    <w:font w:name="Times New Roman">
+      <w:panose-1 w:val="02020603050405020304"/>
+      <w:charset w:val="00"/>
+      <w:family w:val="Roman"/>
+      <w:pitch w:val="variable"/>
+      <w:sig 
+          w:usb-0="E0002AFF"
+          w:usb-1="C0007841"
+          w:usb-2="00000009"
+          w:usb-3="00000000"
+          w:csb-0="000001FF"
+          w:csb-1="00000000"/>
+    </w:font>
+    <w:font w:name="瀹嬩綋">
+      <w:altName w:val="SimSun"/>
+      <w:panose-1 w:val="02010600030101010101"/>
+      <w:charset w:val="86"/>
+      <w:family w:val="auto"/>
+      <w:pitch w:val="variable"/>
+      <w:sig 
+          w:usb-0="00000003"
+          w:usb-1="288F0000"
+          w:usb-2="00000016"
+          w:usb-3="00000000"
+          w:csb-0="00040001"
+          w:csb-1="00000000"/>
+    </w:font>
+    <w:font w:name="Cambria Math">
+      <w:panose-1 w:val="02040503050406030204"/>
+      <w:charset w:val="01"/>
+      <w:family w:val="Roman"/>
+      <w:notTrueType/>
+      <w:pitch w:val="variable"/>
+    </w:font>
+    <w:font w:name="Calibri">
+      <w:panose-1 w:val="020F0502020204030204"/>
+      <w:charset w:val="00"/>
+      <w:family w:val="Swiss"/>
+      <w:pitch w:val="variable"/>
+      <w:sig 
+          w:usb-0="E00002FF"
+          w:usb-1="4000ACFF"
+          w:usb-2="00000001"
+          w:usb-3="00000000"
+          w:csb-0="0000019F"
+          w:csb-1="00000000"/>
+    </w:font>
+    <w:font w:name="@瀹嬩綋">
+      <w:panose-1 w:val="02010600030101010101"/>
+      <w:charset w:val="86"/>
+      <w:family w:val="auto"/>
+      <w:pitch w:val="variable"/>
+      <w:sig 
+          w:usb-0="00000003"
+          w:usb-1="288F0000"
+          w:usb-2="00000016"
+          w:usb-3="00000000"
+          w:csb-0="00040001"
+          w:csb-1="00000000"/>
+    </w:font>
+  </w:fonts>
+  <w:styles>
+    <w:versionOfBuiltInStylenames w:val="7"/>
+    <w:latentStyles w:defLockedState="off" w:latentStyleCount="267">
+      <w:lsdException w:name="Normal"/>
+      <w:lsdException w:name="heading 1"/>
+      <w:lsdException w:name="heading 2"/>
+      <w:lsdException w:name="heading 3"/>
+      <w:lsdException w:name="heading 4"/>
+      <w:lsdException w:name="heading 5"/>
+      <w:lsdException w:name="heading 6"/>
+      <w:lsdException w:name="heading 7"/>
+      <w:lsdException w:name="heading 8"/>
+      <w:lsdException w:name="heading 9"/>
+      <w:lsdException w:name="caption"/>
+      <w:lsdException w:name="Title"/>
+      <w:lsdException w:name="Subtitle"/>
+      <w:lsdException w:name="Strong"/>
+      <w:lsdException w:name="Emphasis"/>
+      <w:lsdException w:name="No Spacing"/>
+      <w:lsdException w:name="List Paragraph"/>
+      <w:lsdException w:name="Quote"/>
+      <w:lsdException w:name="Intense Quote"/>
+      <w:lsdException w:name="Subtle Emphasis"/>
+      <w:lsdException w:name="Intense Emphasis"/>
+      <w:lsdException w:name="Subtle Reference"/>
+      <w:lsdException w:name="Intense Reference"/>
+      <w:lsdException w:name="Book Title"/>
+      <w:lsdException w:name="TOC Heading"/>
+    </w:latentStyles>
+    <w:style w:type="paragraph" w:default="on" w:styleId="a">
+      <w:name w:val="Normal"/>
+      <wx:uiName wx:val="姝f枃"/>
+      <w:rsid w:val="009D38C7"/>
+      <w:pPr>
+        <w:widowControl w:val="off"/>
+        <w:jc w:val="both"/>
+      </w:pPr>
+      <w:rPr>
+        <wx:font wx:val="Calibri"/>
+        <w:kern w:val="2"/>
+        <w:sz w:val="21"/>
+        <w:sz-cs w:val="22"/>
+        <w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
+      </w:rPr>
+    </w:style>
+    <w:style w:type="character" w:default="on" w:styleId="a0">
+      <w:name w:val="Default Paragraph Font"/>
+      <wx:uiName wx:val="榛樿娈佃惤瀛椾綋"/>
+    </w:style>
+    <w:style w:type="table" w:default="on" w:styleId="a1">
+      <w:name w:val="Normal Table"/>
+      <wx:uiName wx:val="鏅�氳〃鏍�"/>
+      <w:rPr>
+        <wx:font wx:val="Calibri"/>
+        <w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/>
+      </w:rPr>
+      <w:tblPr>
+        <w:tblInd w:w="0" w:type="dxa"/>
+        <w:tblCellMar>
+          <w:top w:w="0" w:type="dxa"/>
+          <w:left w:w="108" w:type="dxa"/>
+          <w:bottom w:w="0" w:type="dxa"/>
+          <w:right w:w="108" w:type="dxa"/>
+        </w:tblCellMar>
+      </w:tblPr>
+    </w:style>
+    <w:style w:type="list" w:default="on" w:styleId="a2">
+      <w:name w:val="No List"/>
+      <wx:uiName wx:val="鏃犲垪琛�"/>
+    </w:style>
+    <w:style w:type="paragraph" w:styleId="a3">
+      <w:name w:val="Balloon Text"/>
+      <wx:uiName wx:val="鎵规敞妗嗘枃鏈�"/>
+      <w:basedOn w:val="a"/>
+      <w:link w:val="Char"/>
+      <w:rsid w:val="00D92DAE"/>
+      <w:rPr>
+        <wx:font wx:val="Calibri"/>
+        <w:sz w:val="18"/>
+        <w:sz-cs w:val="18"/>
+      </w:rPr>
+    </w:style>
+    <w:style w:type="character" w:styleId="Char">
+      <w:name w:val="鎵规敞妗嗘枃鏈� Char"/>
+      <w:link w:val="a3"/>
+      <w:rsid w:val="00D92DAE"/>
+      <w:rPr>
+        <w:sz w:val="18"/>
+        <w:sz-cs w:val="18"/>
+      </w:rPr>
+    </w:style>
+    <w:style w:type="paragraph" w:styleId="a4">
+      <w:name w:val="header"/>
+      <wx:uiName wx:val="椤电湁"/>
+      <w:basedOn w:val="a"/>
+      <w:link w:val="Char0"/>
+      <w:rsid w:val="005A2D7E"/>
+      <w:pPr>
+        <w:pBdr>
+          <w:bottom w:val="single" w:sz="6" wx:bdrwidth="15" w:space="1" w:color="auto"/>
+        </w:pBdr>
+        <w:tabs>
+          <w:tab w:val="center" w:pos="4153"/>
+          <w:tab w:val="right" w:pos="8306"/>
+        </w:tabs>
+        <w:snapToGrid w:val="off"/>
+        <w:jc w:val="center"/>
+      </w:pPr>
+      <w:rPr>
+        <wx:font wx:val="Calibri"/>
+        <w:sz w:val="18"/>
+        <w:sz-cs w:val="18"/>
+      </w:rPr>
+    </w:style>
+    <w:style w:type="character" w:styleId="Char0">
+      <w:name w:val="椤电湁 Char"/>
+      <w:link w:val="a4"/>
+      <w:rsid w:val="005A2D7E"/>
+      <w:rPr>
+        <w:sz w:val="18"/>
+        <w:sz-cs w:val="18"/>
+      </w:rPr>
+    </w:style>
+    <w:style w:type="paragraph" w:styleId="a5">
+      <w:name w:val="footer"/>
+      <wx:uiName wx:val="椤佃剼"/>
+      <w:basedOn w:val="a"/>
+      <w:link w:val="Char1"/>
+      <w:rsid w:val="005A2D7E"/>
+      <w:pPr>
+        <w:tabs>
+          <w:tab w:val="center" w:pos="4153"/>
+          <w:tab w:val="right" w:pos="8306"/>
+        </w:tabs>
+        <w:snapToGrid w:val="off"/>
+        <w:jc w:val="left"/>
+      </w:pPr>
+      <w:rPr>
+        <wx:font wx:val="Calibri"/>
+        <w:sz w:val="18"/>
+        <w:sz-cs w:val="18"/>
+      </w:rPr>
+    </w:style>
+    <w:style w:type="character" w:styleId="Char1">
+      <w:name w:val="椤佃剼 Char"/>
+      <w:link w:val="a5"/>
+      <w:rsid w:val="005A2D7E"/>
+      <w:rPr>
+        <w:sz w:val="18"/>
+        <w:sz-cs w:val="18"/>
+      </w:rPr>
+    </w:style>
+  </w:styles>
+  <w:shapeDefaults>
+    <o:shapedefaults v:ext="edit" spidmax="1026"/>
+    <o:shapelayout v:ext="edit">
+      <o:idmap v:ext="edit" data="1"/>
+    </o:shapelayout>
+  </w:shapeDefaults>
+  <w:docPr>
+    <w:view w:val="print"/>
+    <w:zoom w:percent="120"/>
+    <w:doNotEmbedSystemFonts/>
+    <w:bordersDontSurroundHeader/>
+    <w:bordersDontSurroundFooter/>
+    <w:proofState w:spelling="clean" w:grammar="clean"/>
+    <w:defaultTabStop w:val="420"/>
+    <w:drawingGridHorizontalSpacing w:val="105"/>
+    <w:drawingGridVerticalSpacing w:val="156"/>
+    <w:displayHorizontalDrawingGridEvery w:val="0"/>
+    <w:displayVerticalDrawingGridEvery w:val="2"/>
+    <w:punctuationKerning/>
+    <w:characterSpacingControl w:val="CompressPunctuation"/>
+    <w:optimizeForBrowser/>
+    <w:allowPNG/>
+    <w:validateAgainstSchema/>
+    <w:saveInvalidXML w:val="off"/>
+    <w:ignoreMixedContent w:val="off"/>
+    <w:alwaysShowPlaceholderText w:val="off"/>
+    <w:footnotePr>
+      <w:footnote w:type="separator">
+        <w:p wsp:rsidR="0037200D" wsp:rsidRDefault="0037200D" wsp:rsidP="005A2D7E">
+          <w:r>
+            <w:separator/>
+          </w:r>
+        </w:p>
+      </w:footnote>
+      <w:footnote w:type="continuation-separator">
+        <w:p wsp:rsidR="0037200D" wsp:rsidRDefault="0037200D" wsp:rsidP="005A2D7E">
+          <w:r>
+            <w:continuationSeparator/>
+          </w:r>
+        </w:p>
+      </w:footnote>
+    </w:footnotePr>
+    <w:endnotePr>
+      <w:endnote w:type="separator">
+        <w:p wsp:rsidR="0037200D" wsp:rsidRDefault="0037200D" wsp:rsidP="005A2D7E">
+          <w:r>
+            <w:separator/>
+          </w:r>
+        </w:p>
+      </w:endnote>
+      <w:endnote w:type="continuation-separator">
+        <w:p wsp:rsidR="0037200D" wsp:rsidRDefault="0037200D" wsp:rsidP="005A2D7E">
+          <w:r>
+            <w:continuationSeparator/>
+          </w:r>
+        </w:p>
+      </w:endnote>
+    </w:endnotePr>
+    <w:compat>
+      <w:spaceForUL/>
+      <w:balanceSingleByteDoubleByteWidth/>
+      <w:doNotLeaveBackslashAlone/>
+      <w:ulTrailSpace/>
+      <w:doNotExpandShiftReturn/>
+      <w:adjustLineHeightInTable/>
+      <w:breakWrappedTables/>
+      <w:snapToGridInCell/>
+      <w:wrapTextWithPunct/>
+      <w:useAsianBreakRules/>
+      <w:dontGrowAutofit/>
+      <w:useFELayout/>
+    </w:compat>
+    <wsp:rsids>
+      <wsp:rsidRoot wsp:val="003D4562"/>
+      <wsp:rsid wsp:val="000C08B4"/>
+      <wsp:rsid wsp:val="0015276D"/>
+      <wsp:rsid wsp:val="00287103"/>
+      <wsp:rsid wsp:val="003677AE"/>
+      <wsp:rsid wsp:val="0037200D"/>
+      <wsp:rsid wsp:val="00383CBB"/>
+      <wsp:rsid wsp:val="003D4562"/>
+      <wsp:rsid wsp:val="00471027"/>
+      <wsp:rsid wsp:val="005A2D7E"/>
+      <wsp:rsid wsp:val="00630842"/>
+      <wsp:rsid wsp:val="00752E37"/>
+      <wsp:rsid wsp:val="007A75AA"/>
+      <wsp:rsid wsp:val="00982782"/>
+      <wsp:rsid wsp:val="009D38C7"/>
+      <wsp:rsid wsp:val="00B0451C"/>
+      <wsp:rsid wsp:val="00D92DAE"/>
+      <wsp:rsid wsp:val="00DB10D3"/>
+      <wsp:rsid wsp:val="00F6746F"/>
+      <wsp:rsid wsp:val="00F81E7A"/>
+      <wsp:rsid wsp:val="00FB276A"/>
+      <wsp:rsid wsp:val="00FC6DBE"/>
+    </wsp:rsids>
+  </w:docPr>
+  <w:body>
+    <wx:sect>
+    
+      <#list newsList as key>
+      
+      <w:p wsp:rsidR="005A2D7E" wsp:rsidRPr="005A2D7E" wsp:rsidRDefault="00107BBE" wsp:rsidP="002653BF">
+        <w:pPr>
+          <w:ind w:first-line-chars="100" w:first-line="210"/>
+        </w:pPr>
+        <#list key.getList() as lstKey>
+        	<w:r>
+	          <w:rPr>
+	            <w:noProof/>
+	          </w:rPr>
+	          <w:pict>
+	            <v:shapetype 
+	                id="_x0000_t75"
+	                coordsize="21600,21600"
+	                o:spt="75"
+	                o:preferrelative="t"
+	                path="m@4@5l@4@11@9@11@9@5xe"
+	                filled="f"
+	                stroked="f">
+	
+	              <v:stroke joinstyle="miter"/>
+	              <v:formulas>
+	                <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+	                <v:f eqn="sum @0 1 0"/>
+	                <v:f eqn="sum 0 0 @1"/>
+	                <v:f eqn="prod @2 1 2"/>
+	                <v:f eqn="prod @3 21600 pixelWidth"/>
+	                <v:f eqn="prod @3 21600 pixelHeight"/>
+	                <v:f eqn="sum @0 0 1"/>
+	                <v:f eqn="prod @6 1 2"/>
+	                <v:f eqn="prod @7 21600 pixelWidth"/>
+	                <v:f eqn="sum @8 21600 0"/>
+	                <v:f eqn="prod @7 21600 pixelHeight"/>
+	                <v:f eqn="sum @10 21600 0"/>
+	              </v:formulas>
+	              <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+	              <o:lock v:ext="edit" aspectratio="t"/>
+	            </v:shapetype>
+	            <w:binData w:name="${lstKey.name}" xml:space="preserve">
+	              ${lstKey.url}
+	            </w:binData>
+	            <v:shape 
+	                id="${lstKey.id}"
+	                o:spid="_x0000_i1025"
+	                type="#_x0000_t75"
+	                style="width:155.9pt;height:241.05pt;visibility:visible;mso-wrap-style:square;mso-position-horizontal:absolute">
+	
+	              <v:imagedata src="${lstKey.name}" o:title=""/>
+	              <o:lock v:ext="edit" aspectratio="f"/>
+	            </v:shape>
+	          </w:pict>
+	        </w:r>
+	        <w:r wsp:rsidR="005A2D7E">
+	          <w:rPr>
+	            <w:rFonts w:hint="fareast"/>
+	          </w:rPr>
+	          <w:t>
+	          </w:t>
+	        </w:r>
+	        <w:r wsp:rsidR="00F6746F">
+	          <w:rPr>
+	            <w:rFonts w:hint="fareast"/>
+	          </w:rPr>
+	          <w:t>
+	          </w:t>
+	        </w:r>
+        </#list>
+      </w:p>
+      
+      </#list>
+      
+      <w:sectPr wsp:rsidR="00471027" wsp:rsidRPr="005A2D7E" wsp:rsidSect="005A2D7E">
+        <w:pgSz w:w="11906" w:h="16838"/>
+        <w:pgMar w:top="720" w:right="720" w:bottom="720" w:left="720" w:header="851" w:footer="992" w:gutter="0"/>
+        <w:cols w:space="425"/>
+        <w:docGrid w:type="lines" w:line-pitch="312"/>
+      </w:sectPr>
+    </wx:sect>
+  </w:body>
+</w:wordDocument>
diff --git a/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java b/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
new file mode 100644
index 0000000..8ede9cf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
@@ -0,0 +1,230 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.FilePathConstants;
+import com.qxueyou.scc.sys.model.ResponseResult;
+import com.qxueyou.scc.sys.model.SysMenu;
+import com.qxueyou.scc.user.model.User;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+
+/**
+ * 客户端信息处理工具类
+ * @author 德虎 2014-12-29
+ *
+ */
+public final class ClientUtils {
+
+	/*
+	 * 线程变量: 用户信息
+	 */
+	private static ThreadLocal<UserInfoWrapper> threadLocalUserInfo = new ThreadLocal<UserInfoWrapper>();
+	private static UserInfoWrapper wrapper = threadLocalUserInfo.get();
+
+	/** 得到用户信息*/
+	public static UserInfoWrapper getUserInfo() {
+		UserInfoWrapper wrapper = threadLocalUserInfo.get();
+		if(wrapper == null){
+			wrapper = new UserInfoWrapper();
+			User user = new User();
+			//默认值,上传可以作为默认上传者
+			user.setUserId(Constants.VISITOR_USER_ID);
+			user.setName(Constants.VISITOR_USER_ID);
+			wrapper.setUser(user);
+			setUserInfo(wrapper);
+		}
+
+		return wrapper;
+	}
+
+
+	/** 设置用户信息*/
+	public static void setUserInfo(UserInfoWrapper wrapper) {
+		threadLocalUserInfo.remove();
+		threadLocalUserInfo.set(wrapper);
+	}
+
+	/** 得到userId*/
+	public static String getUserId(){
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+		HttpSession session = request.getSession();
+		String info = getUserInfo().getInfo(UserInfoWrapper.INF_USER_ID);
+		if(info.equals("visitor_001")){
+			info= (String) session.getAttribute(UserInfoWrapper.INF_USER_ID);
+		}
+		return info;
+	}
+
+	/** 得到userName*/
+	public static String getUserName(){
+//		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+//		HttpSession session = request.getSession();
+		return getUserInfo().getInfo(UserInfoWrapper.INF_USER_NAME);
+//		return (String) session.getAttribute("userName");
+	}
+
+	/** 得到用户头像*/
+	public static String getUserImg(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_USER_HEAD_IMG);
+//		return session.getAttribute();
+	}
+
+	/** 得到手机号*/
+	public static String getUserMobilePhone(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_USER_MOBILE_PHONE);
+	}
+
+	/** 得到帐号*/
+	public static String getUserAccount(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_USER_ACCOUNT);
+	}
+
+	/** 得到classId*/
+	public static String getClassId(){
+		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);
+		}
+		return info;
+//		return getUserInfo().getInfo(UserInfoWrapper.);
+	}
+
+	/** 得到className*/
+	public static String getClassName(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_NAME);
+//		System.out.println("CLassName"+session.getAttribute("className"));
+//		return (String) session.getAttribute("className");
+	}
+
+	/** */
+	public static String getClassCharger(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_CHARGER);
+	}
+
+	/** 得到科目ID*/
+	public static String getCourseId(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_COURSE_ID);
+	}
+
+	/** 得到科目Name*/
+	public static String getCourseName(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_COURSE_NAME);
+	}
+
+	/** 得到机构ID*/
+	public static String getOrgId(){
+		return "1";
+	}
+
+	/** 得到最上层机构ID*/
+	public static String getTopOrgId(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_TOP_ORG_ID);
+	}
+
+	/** 得到机构CODE*/
+	public static String getOrgCode(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_CODE);
+	}
+
+	/** 得到机构NAME*/
+	public static String getOrgName(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_NAME);
+	}
+
+	/** 得到机构SHORTNAME*/
+	public static String getOrgShortName(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_SHORT_NAME);
+	}
+
+	/** 得到机构LOGO*/
+	public static String getOrgLogoPath(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_LOGO_PATH);
+	}
+
+	/** 得到当前角色*/
+	public static String getCurrentRole(){
+		return getUserInfo().getCurrentRole();
+	}
+
+
+	/** 得到当前角色编码*/
+	public static String getCurrentRoleEName(){
+		return getUserInfo().getInfo(UserInfoWrapper.INF_ROLE_ENAME);
+	}
+
+	/** 得到当前角色ID*/
+	public static String getCurrentRoleId(){
+		return getUserInfo().getCurrentRoleId();
+	}
+
+	/** 得到当前角色值*/
+	public static String getCurrentRoleValue(){
+		return getUserInfo().getCurrentRoleValue();
+	}
+
+	/** 得到当前角色信息*/
+	public static List<Map<String,Object>> getRoleInfo(String role){
+		return getUserInfo().getRoleInfo(role);
+	}
+
+	/** 获取当前就是 菜单信息*/
+	public static List<SysMenu> getMenuInfo(){
+		return getUserInfo().getMenus();
+	}
+
+	/** */
+	public static Boolean getButtonPrivilegeEdit(){
+		return getUserInfo().getButtonPrivilegeEdit();
+	}
+
+	/** 当前登录IP*/
+	public static String getCurrentLoginIp(){
+		return getUserInfo().getCurrentLoginIp();
+	}
+
+	/**
+	 * 获取用户基本信息
+	 * @return
+	 */
+	public static ResponseResult getUserBaseInfo(User user){
+		ResponseResult userInfo = new ResponseResult();
+		// 用户
+		userInfo.setUserId(user.getUserId());
+		userInfo.setUserName(user.getName());
+		userInfo.setImgPath(StringUtils.isNotBlank(user.getImgPath()) ? user.getImgPath() : FilePathConstants.USER_DEFAULT_IMG );
+		userInfo.setMobilePhone(user.getMobilePhone());
+		return userInfo;
+	}
+
+	/**
+	 * 是否为管理员
+	 * @return
+	 */
+	public static boolean isAdmin(){
+		HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+		HttpSession session = request.getSession();
+		Object admin =session.getAttribute("admin");
+//		if(Boolean.valueOf((Boolean) admin)){
+//			System.out.println(Boolean.valueOf((Boolean) admin));
+//			return Boolean.valueOf((Boolean) admin);
+//		}else{
+//			return false;
+//		}
+		return true;
+//		System.out.println(Boolean.valueOf((Boolean) admin));
+//		return Boolean.valueOf((Boolean) admin);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/CollectionUtils.java b/src/main/java/com/qxueyou/scc/base/util/CollectionUtils.java
new file mode 100644
index 0000000..213f010
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/CollectionUtils.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public final class CollectionUtils {
+
+	/**
+	 * 构造list
+	 * @param objs
+	 * @return
+	 */
+	public static List<Object> newList(Object... objs){
+		List<Object> args = new ArrayList<Object>(objs.length);
+		
+		for(Object obj:objs){
+			args.add(obj);
+		}
+		
+		return args;
+	}
+	
+	/**
+	 * 构造list
+	 * @param objs
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> List<T> newList(Class<T> t,T... objs){
+		List<T> args = new ArrayList<T>(objs.length);
+		
+		for(T obj:objs){
+			args.add(obj);
+		}
+		
+		return args;
+	}
+	
+	/**
+	 * 构造Map
+	 * @param objs 数组串
+	 * @return
+	 */
+	public static Map<String,String> newStringMap(String... objs){
+		
+		Map<String,String> map = new HashMap<String,String>(objs.length);
+		
+		String key=null;
+		String value = null;
+		
+		for(int i=0;i<objs.length;i++){
+			
+			if(i%2==0){
+				key=objs[i];
+			}else{
+				value=objs[i];
+				map.put(key, value);
+			}
+		}
+		
+		return map;
+	}
+	
+	/**
+	 * 构造Map
+	 * @param objs 数组串
+	 * @return
+	 */
+	public static Map<String,Object> newObjectMap(Object... objs){
+		
+		Map<String,Object> map = new HashMap<String,Object>(objs.length);
+		
+		String key=null;
+		Object value = null;
+		
+		for(int i=0;i<objs.length;i++){
+			
+			if(i%2==0){
+				key=objs[i].toString();
+			}else{
+				value=objs[i];
+				map.put(key, value);
+			}
+		}
+		
+		return map;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/CommonUtils.java b/src/main/java/com/qxueyou/scc/base/util/CommonUtils.java
new file mode 100644
index 0000000..ddbde55
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/CommonUtils.java
@@ -0,0 +1,291 @@
+package com.qxueyou.scc.base.util;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.MathContext;
+import java.text.DecimalFormat;
+import java.util.Random;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+
+public class CommonUtils {
+	/** 一位小数 */
+	public static final String PARTEN_ONE = "#.#";
+	/** 二位小数 */
+	public static final String PARTEN_TWO = "#.##";
+	
+	//地球半径
+	private static final double EARTH_RADIUS = 6378.137;
+	
+	/**
+	 * 答案显示图形颜色 自定义
+	 * @return
+	 */
+	public static String[] getColors(){
+		String[] colors = new String[]{"#4572a7","#aa4643","#89a54e","#80699b","#3d96ae","#a56f8f","#9f7961","#6f83a5"};
+		
+		return colors;
+	}
+	
+	/**
+	 * 课程表显示图形颜色 自定义
+	 * @return
+	 */
+	public static String[] getRGBColors(){
+		String[] colors = new String[]{"21,199,165","130,191,173","155,238,222","178,235,202","210,210,174","205,186,117",
+				"220,205,166","233,174,160","240,94,104","169,169,169"};
+		
+		return colors;
+	}
+	
+	/**
+	 * 换算为2位小数
+	 * @return
+	 */
+	public static String formatDecimalFormat(Object obj, String parten){
+		DecimalFormat decimal = new DecimalFormat(parten);
+		return decimal.format(obj);
+	}
+	
+	/**
+	 * 删除字符最后的符号
+	 * @return
+	 */
+	public static String removeStrLastComma(String string){
+		String str = string;
+		if(StringUtils.isBlank(str)){
+			return str;
+		}
+		String lastStr = str.substring(str.length()-1);
+		
+		if(lastStr.indexOf(',') > -1){
+			str = str.substring(0, str.length()-1);
+		}
+		
+		return str;
+	}
+	
+	/**
+	 * 转换答案值 0,1,2
+	 * @param correct
+	 * @return
+	 */
+	public static byte parseInteractCorrectValue(String correct){
+		byte value;
+		
+		if("true".equals(correct)){
+			value=ExerciseItemAnswerU.CORRECT_RIGHT;//正确
+		}else if("false".equals(correct)){
+			value=ExerciseItemAnswerU.CORRECT_ERROR;//错误
+		}else{
+			value=7;//未知
+		}
+		
+		return value;
+	}
+	
+	/**
+	 *   // 进行加法运算
+	 * @param d1
+	 * @param d2
+	 * @return
+	 */
+	public static double add(double d1, double d2){      
+        BigDecimal b1 = new BigDecimal(String.valueOf(d1));
+        BigDecimal b2 = new BigDecimal(String.valueOf(d2));
+        
+        return b1.add(b2).doubleValue();
+	}
+	
+	/**
+	 * // 进行减法运算
+	 * @param d1
+	 * @param d2
+	 * @return
+	 */
+    public static double subtract(double d1, double d2){   
+        BigDecimal b1 = new BigDecimal(String.valueOf(d1));
+        BigDecimal b2 = new BigDecimal(String.valueOf(d2));
+        
+        return b1.subtract(b2).doubleValue();
+    }
+    
+    /**
+     * // 进行乘法运算
+     * @param d1
+     * @param d2
+     * @return
+     */
+	public static double multiply(double d1, double d2){        
+        BigDecimal b1 = new BigDecimal(String.valueOf(d1));
+        BigDecimal b2 = new BigDecimal(String.valueOf(d2));
+        
+        return b1.multiply(b2).doubleValue();
+	}
+	
+	 /**
+     * // 进行除法运算 四舍五入
+     * @param d1
+     * @param d2
+     * @return
+     */
+	public static double divide(double d1,double d2,int len) {// 进行除法运算
+        BigDecimal b1 = new BigDecimal(String.valueOf(d1));
+        BigDecimal b2 = new BigDecimal(String.valueOf(d2));
+        
+        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
+	}
+	
+	 /**
+     * // 进行除法运算 四舍五入
+     * @param d1
+     * @param d2
+     * @return
+     */
+	public static double divide(String d1,String d2,int len) {// 进行除法运算
+        BigDecimal b1 = new BigDecimal(d1);
+        BigDecimal b2 = new BigDecimal(d2);
+        
+        return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
+	}
+	
+	
+	 /**
+     * // 进行除法运算 四舍五入
+     * @param d1
+     * @param d2
+     * @return
+     */
+	public static BigDecimal divide(BigDecimal b1,BigDecimal b2,int len) {// 进行除法运算
+        
+        return b1.divide(b2, new MathContext(len));
+	}
+	public CommonUtils() {
+		// TODO Auto-generated constructor stub
+	}
+	/*
+	 * 
+	 * 按指定长度截取源字符串,若源字符串不大于指定长度,则原样返回
+	 */
+	public static String cutString(String res, Integer length, String suffix) {
+		if (StringUtils.isEmpty(res)) {
+			return "";
+		}
+		if (res.length() <= length) {
+			return res;
+		}
+		return res.substring(0, length) + (suffix == null ? "" : suffix);
+	}
+	
+	/**
+     * 生成流水号 :  module+时间戳 + 5位随机数,长度20位
+     */
+    public static String generateNo(String module){
+    	
+    	Random rand = new Random();
+    	String random = String.valueOf(rand.nextInt(100000));
+		int index = 0;
+		while( random.length() < 5 && index < 5 ){
+			index++;
+			random = "0".concat(random);
+		}
+		
+		return module + System.currentTimeMillis() + random ;
+    }
+	
+	/**
+	 * 计算单位数字
+	 * 
+	 * @param number
+	 * @return
+	 */
+	public static String getNumberByUnit(BigInteger number){
+		
+		if(number == null){
+			return "0";
+		}
+		
+		if(number.compareTo(new BigInteger("10000")) < 0){// 小于1万
+			return String.valueOf(number);
+		}
+		
+		if(number.compareTo(new BigInteger("10000")) >= 0 
+				&& number.compareTo(new BigInteger("100000000")) < 0){// 大于1万 小于一亿    前进1位为1.2万
+			
+			return Math.ceil(number.doubleValue()/1000)/10 + "万";
+			
+		}
+		
+		if(number.compareTo(new BigInteger("100000000")) >= 0){// 大于一亿    前进1位为1.2亿
+			
+			return Math.ceil(number.doubleValue()/1000000)/10 + "亿";
+		}
+		
+		return "0";
+	}
+	
+	/**
+	 * 格式化文本
+	 * @param str
+	 * @return
+	 */
+	public static String formatText(String str){
+        String text = str;
+		if (StringUtils.isNotBlank(str)) {
+			text = text.replace("\n", "<br/>");
+        }
+		return text;
+	}
+	
+	//
+    private static double rad(double d){
+        return d * Math.PI / 180.0;
+    }
+
+    //获取两个坐标距离
+    public static double GetDistance(double long1, double lat1, double long2, double lat2) {
+        double a, b, d, sa2, sb2;
+        double latA = rad(lat1);
+        double latB = rad(lat2);
+        a = latA - latB;
+        b = rad(long1 - long2);
+
+        sa2 = Math.sin(a / 2.0);
+        sb2 = Math.sin(b / 2.0);
+        d = 2   * EARTH_RADIUS
+                * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(latA)
+                * Math.cos(latB) * sb2 * sb2));
+        return d;
+    }
+    
+    /**
+	 * 银行卡验证
+	 * 
+	 * @param cardNo
+	 * @return
+	 */
+	public static boolean isBankCard(String cardNo){
+		return Pattern.matches("^\\d{8,27}$", cardNo);
+	}
+	
+	/**
+	 * ftl-返回错误信息页面
+	 * @param mv
+	 * @param msg
+	 * @return
+	 */
+	public static ModelAndView resultDeletePage(ModelAndView mv,String msg){
+		mv =  new ModelAndView("/deletePage");
+		mv.addObject("content", msg);
+		return mv;
+	}
+	
+	/** 得到classId*/
+	public static String getClassId(String classId){
+		return StringUtils.isEmpty(classId)?(StringUtils.isEmpty(ClientUtils.getClassId())?StringUtils.EMPTY:ClientUtils.getClassId()):classId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/DESUtils.java b/src/main/java/com/qxueyou/scc/base/util/DESUtils.java
new file mode 100644
index 0000000..a1a0e81
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/DESUtils.java
@@ -0,0 +1,1065 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DESUtils {
+	
+    public DESUtils() {
+    }
+    
+    /**
+     * DES加密/解密
+     * 
+     * @Copyright Copyright (c) 2006
+     * @author Guapo
+     * @see DESCore
+     */
+
+    /*
+     * encrypt the string to string made up of hex return the encrypted string
+     */
+    @SuppressWarnings("rawtypes")
+	public static String strEnc(String data, String firstKey, String secondKey,
+            String thirdKey) {
+
+        int leng = data.length();
+        String encData = "";
+        List firstKeyBt = null, secondKeyBt = null, thirdKeyBt = null;
+        int firstLength = 0, secondLength = 0, thirdLength = 0;
+        if (firstKey != null && firstKey != "") {
+            firstKeyBt = getKeyBytes(firstKey);
+            firstLength = firstKeyBt.size();
+        }
+        if (secondKey != null && secondKey != "") {
+            secondKeyBt = getKeyBytes(secondKey);
+            secondLength = secondKeyBt.size();
+        }
+        if (thirdKey != null && thirdKey != "") {
+            thirdKeyBt = getKeyBytes(thirdKey);
+            thirdLength = thirdKeyBt.size();
+        }
+
+        if (leng > 0) {
+            if (leng < 4) {
+                int[] bt = strToBt(data);
+                int[] encByte = null;
+                if (firstKey != null && firstKey != "" && secondKey != null
+                        && secondKey != "" && thirdKey != null
+                        && thirdKey != "") {
+                    int[] tempBt;
+                    int x, y, z;
+                    tempBt = bt;
+                    for (x = 0; x < firstLength; x++) {
+                        tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                    }
+                    for (y = 0; y < secondLength; y++) {
+                        tempBt = enc(tempBt, (int[]) secondKeyBt.get(y));
+                    }
+                    for (z = 0; z < thirdLength; z++) {
+                        tempBt = enc(tempBt, (int[]) thirdKeyBt.get(z));
+                    }
+                    encByte = tempBt;
+                } else {
+                    if (firstKey != null && firstKey != "" && secondKey != null
+                            && secondKey != "") {
+                        int[] tempBt;
+                        int x, y;
+                        tempBt = bt;
+                        for (x = 0; x < firstLength; x++) {
+                            tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                        }
+                        for (y = 0; y < secondLength; y++) {
+                            tempBt = enc(tempBt, (int[]) secondKeyBt.get(y));
+                        }
+                        encByte = tempBt;
+                    } else {
+                        if (firstKey != null && firstKey != "") {
+                            int[] tempBt;
+                            int x = 0;
+                            tempBt = bt;
+                            for (x = 0; x < firstLength; x++) {
+                                tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                            }
+                            encByte = tempBt;
+                        }
+                    }
+                }
+                encData = bt64ToHex(encByte);
+            } else {
+                int iterator = (leng / 4);
+                int remainder = leng % 4;
+                int i = 0;
+                for (i = 0; i < iterator; i++) {
+                    String tempData = data.substring(i * 4 + 0, i * 4 + 4);
+                    int[] tempByte = strToBt(tempData);
+                    int[] encByte = null;
+                    if (firstKey != null && firstKey != "" && secondKey != null
+                            && secondKey != "" && thirdKey != null
+                            && thirdKey != "") {
+                        int[] tempBt;
+                        int x, y, z;
+                        tempBt = tempByte;
+                        for (x = 0; x < firstLength; x++) {
+                            tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                        }
+                        for (y = 0; y < secondLength; y++) {
+                            tempBt = enc(tempBt, (int[]) secondKeyBt.get(y));
+                        }
+                        for (z = 0; z < thirdLength; z++) {
+                            tempBt = enc(tempBt, (int[]) thirdKeyBt.get(z));
+                        }
+                        encByte = tempBt;
+                    } else {
+                        if (firstKey != null && firstKey != ""
+                                && secondKey != null && secondKey != "") {
+                            int[] tempBt;
+                            int x, y;
+                            tempBt = tempByte;
+                            for (x = 0; x < firstLength; x++) {
+                                tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                            }
+                            for (y = 0; y < secondLength; y++) {
+                                tempBt = enc(tempBt, (int[]) secondKeyBt.get(y));
+                            }
+                            encByte = tempBt;
+                        } else {
+                            if (firstKey != null && firstKey != "") {
+                                int[] tempBt;
+                                int x;
+                                tempBt = tempByte;
+                                for (x = 0; x < firstLength; x++) {
+                                    tempBt = enc(tempBt, (int[]) firstKeyBt
+                                            .get(x));
+                                }
+                                encByte = tempBt;
+                            }
+                        }
+                    }
+                    encData += bt64ToHex(encByte);
+                }
+                if (remainder > 0) {
+                    String remainderData = data.substring(iterator * 4 + 0,
+                            leng);
+                    int[] tempByte = strToBt(remainderData);
+                    int[] encByte = null;
+                    if (firstKey != null && firstKey != "" && secondKey != null
+                            && secondKey != "" && thirdKey != null
+                            && thirdKey != "") {
+                        int[] tempBt;
+                        int x, y, z;
+                        tempBt = tempByte;
+                        for (x = 0; x < firstLength; x++) {
+                            tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                        }
+                        for (y = 0; y < secondLength; y++) {
+                            tempBt = enc(tempBt, (int[]) secondKeyBt.get(y));
+                        }
+                        for (z = 0; z < thirdLength; z++) {
+                            tempBt = enc(tempBt, (int[]) thirdKeyBt.get(z));
+                        }
+                        encByte = tempBt;
+                    } else {
+                        if (firstKey != null && firstKey != ""
+                                && secondKey != null && secondKey != "") {
+                            int[] tempBt;
+                            int x, y;
+                            tempBt = tempByte;
+                            for (x = 0; x < firstLength; x++) {
+                                tempBt = enc(tempBt, (int[]) firstKeyBt.get(x));
+                            }
+                            for (y = 0; y < secondLength; y++) {
+                                tempBt = enc(tempBt, (int[]) secondKeyBt.get(y));
+                            }
+                            encByte = tempBt;
+                        } else {
+                            if (firstKey != null && firstKey != "") {
+                                int[] tempBt;
+                                int x;
+                                tempBt = tempByte;
+                                for (x = 0; x < firstLength; x++) {
+                                    tempBt = enc(tempBt, (int[]) firstKeyBt
+                                            .get(x));
+                                }
+                                encByte = tempBt;
+                            }
+                        }
+                    }
+                    encData += bt64ToHex(encByte);
+                }
+            }
+        }
+        return encData;
+    }
+
+    /*
+     * decrypt the encrypted string to the original string
+     * 
+     * return the original string
+     */
+    @SuppressWarnings("rawtypes")
+	public static String strDec(String data, String firstKey, String secondKey,
+            String thirdKey) {
+        int leng = data.length();
+        String decStr = "";
+        List firstKeyBt = null, secondKeyBt = null, thirdKeyBt = null;
+        int firstLength = 0, secondLength = 0, thirdLength = 0;
+        if (firstKey != null && firstKey != "") {
+            firstKeyBt = getKeyBytes(firstKey);
+            firstLength = firstKeyBt.size();
+        }
+        if (secondKey != null && secondKey != "") {
+            secondKeyBt = getKeyBytes(secondKey);
+            secondLength = secondKeyBt.size();
+        }
+        if (thirdKey != null && thirdKey != "") {
+            thirdKeyBt = getKeyBytes(thirdKey);
+            thirdLength = thirdKeyBt.size();
+        }
+
+        int iterator = leng / 16;
+        int i = 0;
+        for (i = 0; i < iterator; i++) {
+            String tempData = data.substring(i * 16 + 0, i * 16 + 16);
+            String strByte = hexToBt64(tempData);
+            int[] intByte = new int[64];
+            int j = 0;
+            for (j = 0; j < 64; j++) {
+                intByte[j] = Integer.parseInt(strByte.substring(j, j + 1));
+            }
+            int[] decByte = null;
+            if (firstKey != null && firstKey != "" && secondKey != null
+                    && secondKey != "" && thirdKey != null && thirdKey != "") {
+                int[] tempBt;
+                int x, y, z;
+                tempBt = intByte;
+                for (x = thirdLength - 1; x >= 0; x--) {
+                    tempBt = dec(tempBt, (int[]) thirdKeyBt.get(x));
+                }
+                for (y = secondLength - 1; y >= 0; y--) {
+                    tempBt = dec(tempBt, (int[]) secondKeyBt.get(y));
+                }
+                for (z = firstLength - 1; z >= 0; z--) {
+                    tempBt = dec(tempBt, (int[]) firstKeyBt.get(z));
+                }
+                decByte = tempBt;
+            } else {
+                if (firstKey != null && firstKey != "" && secondKey != null
+                        && secondKey != "") {
+                    int[] tempBt;
+                    int x, y;
+                    tempBt = intByte;
+                    for (x = secondLength - 1; x >= 0; x--) {
+                        tempBt = dec(tempBt, (int[]) secondKeyBt.get(x));
+                    }
+                    for (y = firstLength - 1; y >= 0; y--) {
+                        tempBt = dec(tempBt, (int[]) firstKeyBt.get(y));
+                    }
+                    decByte = tempBt;
+                } else {
+                    if (firstKey != null && firstKey != "") {
+                        int[] tempBt;
+                        int x;
+                        tempBt = intByte;
+                        for (x = firstLength - 1; x >= 0; x--) {
+                            tempBt = dec(tempBt, (int[]) firstKeyBt.get(x));
+                        }
+                        decByte = tempBt;
+                    }
+                }
+            }
+            decStr += byteToString(decByte);
+        }
+        return decStr;
+    }
+    
+    /*
+     * decrypt the encrypted string to the original string
+     * 
+     * return the original string
+     */
+	public static String strDec(String data, String key) {
+        return strDec(data,key,null,null);
+    }
+
+    /*
+     * chang the string into the bit array
+     * 
+     * return bit array(it's length % 64 = 0)
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+	private static List getKeyBytes(String key) {
+        List keyBytes = new ArrayList();
+        int leng = key.length();
+        int iterator = (leng / 4);
+        int remainder = leng % 4;
+        int i = 0;
+        for (i = 0; i < iterator; i++) {
+            keyBytes.add(i, strToBt(key.substring(i * 4 + 0, i * 4 + 4)));
+        }
+        if (remainder > 0) {
+            // keyBytes[i] = strToBt(key.substring(i*4+0,leng));
+            keyBytes.add(i, strToBt(key.substring(i * 4 + 0, leng)));
+        }
+        return keyBytes;
+    }
+
+    /*
+     * chang the string(it's length <= 4) into the bit array
+     * 
+     * return bit array(it's length = 64)
+     */
+    private static int[] strToBt(String str) {
+        int leng = str.length();
+        int[] bt = new int[64];
+        if (leng < 4) {
+            int i = 0, j = 0, p = 0, q = 0;
+            for (i = 0; i < leng; i++) {
+                int k = str.charAt(i);
+                for (j = 0; j < 16; j++) {
+                    int pow = 1, m = 0;
+                    for (m = 15; m > j; m--) {
+                        pow *= 2;
+                    }
+                    // bt.set(16*i+j,""+(k/pow)%2));
+                    bt[16 * i + j] = (k / pow) % 2;
+                }
+            }
+            for (p = leng; p < 4; p++) {
+                int k = 0;
+                for (q = 0; q < 16; q++) {
+                    int pow = 1, m = 0;
+                    for (m = 15; m > q; m--) {
+                        pow *= 2;
+                    }
+                    // bt[16*p+q]=parseInt(k/pow)%2;
+                    // bt.add(16*p+q,""+((k/pow)%2));
+                    bt[16 * p + q] = (k / pow) % 2;
+                }
+            }
+        } else {
+            for (int i = 0; i < 4; i++) {
+                int k = str.charAt(i);
+                for (int j = 0; j < 16; j++) {
+                    int pow = 1;
+                    for (int m = 15; m > j; m--) {
+                        pow *= 2;
+                    }
+                    // bt[16*i+j]=parseInt(k/pow)%2;
+                    // bt.add(16*i+j,""+((k/pow)%2));
+                    bt[16 * i + j] = (k / pow) % 2;
+                }
+            }
+        }
+        return bt;
+    }
+
+    /*
+     * chang the bit(it's length = 4) into the hex
+     * 
+     * return hex
+     */
+    public static String bt4ToHex(String binary) {
+        String hex = "";
+        if (binary.equalsIgnoreCase("0000")) {
+            hex = "0";
+        } else if (binary.equalsIgnoreCase("0001")) {
+            hex = "1";
+        } else if (binary.equalsIgnoreCase("0010")) {
+            hex = "2";
+        } else if (binary.equalsIgnoreCase("0011")) {
+            hex = "3";
+        } else if (binary.equalsIgnoreCase("0100")) {
+            hex = "4";
+        } else if (binary.equalsIgnoreCase("0101")) {
+            hex = "5";
+        } else if (binary.equalsIgnoreCase("0110")) {
+            hex = "6";
+        } else if (binary.equalsIgnoreCase("0111")) {
+            hex = "7";
+        } else if (binary.equalsIgnoreCase("1000")) {
+            hex = "8";
+        } else if (binary.equalsIgnoreCase("1001")) {
+            hex = "9";
+        } else if (binary.equalsIgnoreCase("1010")) {
+            hex = "A";
+        } else if (binary.equalsIgnoreCase("1011")) {
+            hex = "B";
+        } else if (binary.equalsIgnoreCase("1100")) {
+            hex = "C";
+        } else if (binary.equalsIgnoreCase("1101")) {
+            hex = "D";
+        } else if (binary.equalsIgnoreCase("1110")) {
+            hex = "E";
+        } else if (binary.equalsIgnoreCase("1111")) {
+            hex = "F";
+        }
+
+        return hex;
+    }
+
+    /*
+     * chang the hex into the bit(it's length = 4)
+     * 
+     * return the bit(it's length = 4)
+     */
+    private static String hexToBt4(String hex) {
+        String binary = "";
+        if (hex.equalsIgnoreCase("0")) {
+            binary = "0000";
+        } else if (hex.equalsIgnoreCase("1")) {
+            binary = "0001";
+        }
+        if (hex.equalsIgnoreCase("2")) {
+            binary = "0010";
+        }
+        if (hex.equalsIgnoreCase("3")) {
+            binary = "0011";
+        }
+        if (hex.equalsIgnoreCase("4")) {
+            binary = "0100";
+        }
+        if (hex.equalsIgnoreCase("5")) {
+            binary = "0101";
+        }
+        if (hex.equalsIgnoreCase("6")) {
+            binary = "0110";
+        }
+        if (hex.equalsIgnoreCase("7")) {
+            binary = "0111";
+        }
+        if (hex.equalsIgnoreCase("8")) {
+            binary = "1000";
+        }
+        if (hex.equalsIgnoreCase("9")) {
+            binary = "1001";
+        }
+        if (hex.equalsIgnoreCase("A")) {
+            binary = "1010";
+        }
+        if (hex.equalsIgnoreCase("B")) {
+            binary = "1011";
+        }
+        if (hex.equalsIgnoreCase("C")) {
+            binary = "1100";
+        }
+        if (hex.equalsIgnoreCase("D")) {
+            binary = "1101";
+        }
+        if (hex.equalsIgnoreCase("E")) {
+            binary = "1110";
+        }
+        if (hex.equalsIgnoreCase("F")) {
+            binary = "1111";
+        }
+        return binary;
+    }
+
+    /*
+     * chang the bit(it's length = 64) into the string
+     * 
+     * return string
+     */
+    private static String byteToString(int[] byteData) {
+        String str = "";
+        for (int i = 0; i < 4; i++) {
+            int count = 0;
+            for (int j = 0; j < 16; j++) {
+                int pow = 1;
+                for (int m = 15; m > j; m--) {
+                    pow *= 2;
+                }
+                count += byteData[16 * i + j] * pow;
+            }
+            if (count != 0) {
+                str += "" + (char) (count);
+            }
+        }
+        return str;
+    }
+
+    public static String bt64ToHex(int[] byteData) {
+        String hex = "";
+        for (int i = 0; i < 16; i++) {
+            String bt = "";
+            for (int j = 0; j < 4; j++) {
+                bt += byteData[i * 4 + j];
+            }
+            hex += bt4ToHex(bt);
+        }
+        return hex;
+    }
+
+    private static String hexToBt64(String hex) {
+        String binary = "";
+        for (int i = 0; i < 16; i++) {
+            binary += hexToBt4(hex.substring(i, i + 1));
+        }
+        return binary;
+    }
+
+    /*
+     * the 64 bit des core arithmetic
+     */
+
+    public static int[] enc(int[] dataByte, int[] keyByte) {
+        int[][] keys = generateKeys(keyByte);
+        int[] ipByte = initPermute(dataByte);
+        int[] ipLeft = new int[32];
+        int[] ipRight = new int[32];
+        int[] tempLeft = new int[32];
+        int i = 0, j = 0, k = 0, m = 0, n = 0;
+        for (k = 0; k < 32; k++) {
+            ipLeft[k] = ipByte[k];
+            ipRight[k] = ipByte[32 + k];
+        }
+        for (i = 0; i < 16; i++) {
+            for (j = 0; j < 32; j++) {
+                tempLeft[j] = ipLeft[j];
+                ipLeft[j] = ipRight[j];
+            }
+            int[] key = new int[48];
+            for (m = 0; m < 48; m++) {
+                key[m] = keys[i][m];
+            }
+            int[] tempRight = xor(pPermute(sBoxPermute(xor(
+                    expandPermute(ipRight), key))), tempLeft);
+            for (n = 0; n < 32; n++) {
+                ipRight[n] = tempRight[n];
+            }
+
+        }
+
+        int[] finalData = new int[64];
+        for (i = 0; i < 32; i++) {
+            finalData[i] = ipRight[i];
+            finalData[32 + i] = ipLeft[i];
+        }
+        return finallyPermute(finalData);
+    }
+
+    private static int[] dec(int[] dataByte, int[] keyByte) {
+        int[][] keys = generateKeys(keyByte);
+        int[] ipByte = initPermute(dataByte);
+        int[] ipLeft = new int[32];
+        int[] ipRight = new int[32];
+        int[] tempLeft = new int[32];
+        int i = 0, j = 0, k = 0, m = 0, n = 0;
+        for (k = 0; k < 32; k++) {
+            ipLeft[k] = ipByte[k];
+            ipRight[k] = ipByte[32 + k];
+        }
+        for (i = 15; i >= 0; i--) {
+            for (j = 0; j < 32; j++) {
+                tempLeft[j] = ipLeft[j];
+                ipLeft[j] = ipRight[j];
+            }
+            int[] key = new int[48];
+            for (m = 0; m < 48; m++) {
+                key[m] = keys[i][m];
+            }
+
+            int[] tempRight = xor(pPermute(sBoxPermute(xor(
+                    expandPermute(ipRight), key))), tempLeft);
+            for (n = 0; n < 32; n++) {
+                ipRight[n] = tempRight[n];
+            }
+        }
+
+        int[] finalData = new int[64];
+        for (i = 0; i < 32; i++) {
+            finalData[i] = ipRight[i];
+            finalData[32 + i] = ipLeft[i];
+        }
+        return finallyPermute(finalData);
+    }
+
+    private static int[] initPermute(int[] originalData) {
+        int[] ipByte = new int[64];
+        int i = 0, m = 1, n = 0, j, k;
+        for (i = 0, m = 1, n = 0; i < 4; i++, m += 2, n += 2) {
+            for (j = 7, k = 0; j >= 0; j--, k++) {
+                ipByte[i * 8 + k] = originalData[j * 8 + m];
+                ipByte[i * 8 + k + 32] = originalData[j * 8 + n];
+            }
+        }
+        return ipByte;
+    }
+
+    private static int[] expandPermute(int[] rightData) {
+        int[] epByte = new int[48];
+        int i;
+        for (i = 0; i < 8; i++) {
+            if (i == 0) {
+                epByte[i * 6 + 0] = rightData[31];
+            } else {
+                epByte[i * 6 + 0] = rightData[i * 4 - 1];
+            }
+            epByte[i * 6 + 1] = rightData[i * 4 + 0];
+            epByte[i * 6 + 2] = rightData[i * 4 + 1];
+            epByte[i * 6 + 3] = rightData[i * 4 + 2];
+            epByte[i * 6 + 4] = rightData[i * 4 + 3];
+            if (i == 7) {
+                epByte[i * 6 + 5] = rightData[0];
+            } else {
+                epByte[i * 6 + 5] = rightData[i * 4 + 4];
+            }
+        }
+        return epByte;
+    }
+
+    private static int[] xor(int[] byteOne, int[] byteTwo) {
+        // var xorByte = new Array(byteOne.length);
+        // for(int i = 0;i < byteOne.length; i ++){
+        // xorByte[i] = byteOne[i] ^ byteTwo[i];
+        // }
+        // return xorByte;
+        int[] xorByte = new int[byteOne.length];
+        for (int i = 0; i < byteOne.length; i++) {
+            xorByte[i] = byteOne[i] ^ byteTwo[i];
+        }
+        return xorByte;
+    }
+
+    private static int[] sBoxPermute(int[] expandByte) {
+
+        // var sBoxByte = new Array(32);
+        int[] sBoxByte = new int[32];
+        String binary = "";
+        int[][] s1 = {
+                { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
+                { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
+                { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
+                { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } };
+
+        /* Table - s2 */
+        int[][] s2 = {
+                { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },
+                { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },
+                { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },
+                { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } };
+
+        /* Table - s3 */
+        int[][] s3 = {
+                { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },
+                { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },
+                { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },
+                { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } };
+        /* Table - s4 */
+        int[][] s4 = {
+                { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },
+                { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },
+                { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },
+                { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } };
+
+        /* Table - s5 */
+        int[][] s5 = {
+                { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },
+                { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },
+                { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },
+                { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 } };
+
+        /* Table - s6 */
+        int[][] s6 = {
+                { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },
+                { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },
+                { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },
+                { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } };
+
+        /* Table - s7 */
+        int[][] s7 = {
+                { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },
+                { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },
+                { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },
+                { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } };
+
+        /* Table - s8 */
+        int[][] s8 = {
+                { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },
+                { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },
+                { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },
+                { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 } };
+
+        for (int m = 0; m < 8; m++) {
+            int i = 0, j = 0;
+            i = expandByte[m * 6 + 0] * 2 + expandByte[m * 6 + 5];
+            j = expandByte[m * 6 + 1] * 2 * 2 * 2 + expandByte[m * 6 + 2] * 2
+                    * 2 + expandByte[m * 6 + 3] * 2 + expandByte[m * 6 + 4];
+            switch (m) {
+            case 0:
+                binary = getBoxBinary(s1[i][j]);
+                break;
+            case 1:
+                binary = getBoxBinary(s2[i][j]);
+                break;
+            case 2:
+                binary = getBoxBinary(s3[i][j]);
+                break;
+            case 3:
+                binary = getBoxBinary(s4[i][j]);
+                break;
+            case 4:
+                binary = getBoxBinary(s5[i][j]);
+                break;
+            case 5:
+                binary = getBoxBinary(s6[i][j]);
+                break;
+            case 6:
+                binary = getBoxBinary(s7[i][j]);
+                break;
+            case 7:
+                binary = getBoxBinary(s8[i][j]);
+                break;
+            }
+            sBoxByte[m * 4 + 0] = Integer.parseInt(binary.substring(0, 1));
+            sBoxByte[m * 4 + 1] = Integer.parseInt(binary.substring(1, 2));
+            sBoxByte[m * 4 + 2] = Integer.parseInt(binary.substring(2, 3));
+            sBoxByte[m * 4 + 3] = Integer.parseInt(binary.substring(3, 4));
+        }
+        return sBoxByte;
+    }
+
+    private static int[] pPermute(int[] sBoxByte) {
+        int[] pBoxPermute = new int[32];
+        pBoxPermute[0] = sBoxByte[15];
+        pBoxPermute[1] = sBoxByte[6];
+        pBoxPermute[2] = sBoxByte[19];
+        pBoxPermute[3] = sBoxByte[20];
+        pBoxPermute[4] = sBoxByte[28];
+        pBoxPermute[5] = sBoxByte[11];
+        pBoxPermute[6] = sBoxByte[27];
+        pBoxPermute[7] = sBoxByte[16];
+        pBoxPermute[8] = sBoxByte[0];
+        pBoxPermute[9] = sBoxByte[14];
+        pBoxPermute[10] = sBoxByte[22];
+        pBoxPermute[11] = sBoxByte[25];
+        pBoxPermute[12] = sBoxByte[4];
+        pBoxPermute[13] = sBoxByte[17];
+        pBoxPermute[14] = sBoxByte[30];
+        pBoxPermute[15] = sBoxByte[9];
+        pBoxPermute[16] = sBoxByte[1];
+        pBoxPermute[17] = sBoxByte[7];
+        pBoxPermute[18] = sBoxByte[23];
+        pBoxPermute[19] = sBoxByte[13];
+        pBoxPermute[20] = sBoxByte[31];
+        pBoxPermute[21] = sBoxByte[26];
+        pBoxPermute[22] = sBoxByte[2];
+        pBoxPermute[23] = sBoxByte[8];
+        pBoxPermute[24] = sBoxByte[18];
+        pBoxPermute[25] = sBoxByte[12];
+        pBoxPermute[26] = sBoxByte[29];
+        pBoxPermute[27] = sBoxByte[5];
+        pBoxPermute[28] = sBoxByte[21];
+        pBoxPermute[29] = sBoxByte[10];
+        pBoxPermute[30] = sBoxByte[3];
+        pBoxPermute[31] = sBoxByte[24];
+        return pBoxPermute;
+    }
+
+    private static int[] finallyPermute(int[] endByte) {
+        int[] fpByte = new int[64];
+        fpByte[0] = endByte[39];
+        fpByte[1] = endByte[7];
+        fpByte[2] = endByte[47];
+        fpByte[3] = endByte[15];
+        fpByte[4] = endByte[55];
+        fpByte[5] = endByte[23];
+        fpByte[6] = endByte[63];
+        fpByte[7] = endByte[31];
+        fpByte[8] = endByte[38];
+        fpByte[9] = endByte[6];
+        fpByte[10] = endByte[46];
+        fpByte[11] = endByte[14];
+        fpByte[12] = endByte[54];
+        fpByte[13] = endByte[22];
+        fpByte[14] = endByte[62];
+        fpByte[15] = endByte[30];
+        fpByte[16] = endByte[37];
+        fpByte[17] = endByte[5];
+        fpByte[18] = endByte[45];
+        fpByte[19] = endByte[13];
+        fpByte[20] = endByte[53];
+        fpByte[21] = endByte[21];
+        fpByte[22] = endByte[61];
+        fpByte[23] = endByte[29];
+        fpByte[24] = endByte[36];
+        fpByte[25] = endByte[4];
+        fpByte[26] = endByte[44];
+        fpByte[27] = endByte[12];
+        fpByte[28] = endByte[52];
+        fpByte[29] = endByte[20];
+        fpByte[30] = endByte[60];
+        fpByte[31] = endByte[28];
+        fpByte[32] = endByte[35];
+        fpByte[33] = endByte[3];
+        fpByte[34] = endByte[43];
+        fpByte[35] = endByte[11];
+        fpByte[36] = endByte[51];
+        fpByte[37] = endByte[19];
+        fpByte[38] = endByte[59];
+        fpByte[39] = endByte[27];
+        fpByte[40] = endByte[34];
+        fpByte[41] = endByte[2];
+        fpByte[42] = endByte[42];
+        fpByte[43] = endByte[10];
+        fpByte[44] = endByte[50];
+        fpByte[45] = endByte[18];
+        fpByte[46] = endByte[58];
+        fpByte[47] = endByte[26];
+        fpByte[48] = endByte[33];
+        fpByte[49] = endByte[1];
+        fpByte[50] = endByte[41];
+        fpByte[51] = endByte[9];
+        fpByte[52] = endByte[49];
+        fpByte[53] = endByte[17];
+        fpByte[54] = endByte[57];
+        fpByte[55] = endByte[25];
+        fpByte[56] = endByte[32];
+        fpByte[57] = endByte[0];
+        fpByte[58] = endByte[40];
+        fpByte[59] = endByte[8];
+        fpByte[60] = endByte[48];
+        fpByte[61] = endByte[16];
+        fpByte[62] = endByte[56];
+        fpByte[63] = endByte[24];
+        return fpByte;
+    }
+
+    private static String getBoxBinary(int i) {
+        String binary = "";
+        switch (i) {
+        case 0:
+            binary = "0000";
+            break;
+        case 1:
+            binary = "0001";
+            break;
+        case 2:
+            binary = "0010";
+            break;
+        case 3:
+            binary = "0011";
+            break;
+        case 4:
+            binary = "0100";
+            break;
+        case 5:
+            binary = "0101";
+            break;
+        case 6:
+            binary = "0110";
+            break;
+        case 7:
+            binary = "0111";
+            break;
+        case 8:
+            binary = "1000";
+            break;
+        case 9:
+            binary = "1001";
+            break;
+        case 10:
+            binary = "1010";
+            break;
+        case 11:
+            binary = "1011";
+            break;
+        case 12:
+            binary = "1100";
+            break;
+        case 13:
+            binary = "1101";
+            break;
+        case 14:
+            binary = "1110";
+            break;
+        case 15:
+            binary = "1111";
+            break;
+        }
+        return binary;
+    }
+
+    /*
+     * generate 16 keys for xor
+     * 
+     */
+    private static int[][] generateKeys(int[] keyByte) {
+        int[] key = new int[56];
+        int[][] keys = new int[16][48];
+
+        // keys[ 0] = new Array();
+        // keys[ 1] = new Array();
+        // keys[ 2] = new Array();
+        // keys[ 3] = new Array();
+        // keys[ 4] = new Array();
+        // keys[ 5] = new Array();
+        // keys[ 6] = new Array();
+        // keys[ 7] = new Array();
+        // keys[ 8] = new Array();
+        // keys[ 9] = new Array();
+        // keys[10] = new Array();
+        // keys[11] = new Array();
+        // keys[12] = new Array();
+        // keys[13] = new Array();
+        // keys[14] = new Array();
+        // keys[15] = new Array();
+        int[] loop = new int[] { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };
+
+        for (int i = 0; i < 7; i++) {
+            for (int j = 0, k = 7; j < 8; j++, k--) {
+                key[i * 8 + j] = keyByte[8 * k + i];
+            }
+        }
+
+        int i = 0;
+        for (i = 0; i < 16; i++) {
+            int tempLeft = 0;
+            int tempRight = 0;
+            for (int j = 0; j < loop[i]; j++) {
+                tempLeft = key[0];
+                tempRight = key[28];
+                for (int k = 0; k < 27; k++) {
+                    key[k] = key[k + 1];
+                    key[28 + k] = key[29 + k];
+                }
+                key[27] = tempLeft;
+                key[55] = tempRight;
+            }
+            // var tempKey = new Array(48);
+            int[] tempKey = new int[48];
+            tempKey[0] = key[13];
+            tempKey[1] = key[16];
+            tempKey[2] = key[10];
+            tempKey[3] = key[23];
+            tempKey[4] = key[0];
+            tempKey[5] = key[4];
+            tempKey[6] = key[2];
+            tempKey[7] = key[27];
+            tempKey[8] = key[14];
+            tempKey[9] = key[5];
+            tempKey[10] = key[20];
+            tempKey[11] = key[9];
+            tempKey[12] = key[22];
+            tempKey[13] = key[18];
+            tempKey[14] = key[11];
+            tempKey[15] = key[3];
+            tempKey[16] = key[25];
+            tempKey[17] = key[7];
+            tempKey[18] = key[15];
+            tempKey[19] = key[6];
+            tempKey[20] = key[26];
+            tempKey[21] = key[19];
+            tempKey[22] = key[12];
+            tempKey[23] = key[1];
+            tempKey[24] = key[40];
+            tempKey[25] = key[51];
+            tempKey[26] = key[30];
+            tempKey[27] = key[36];
+            tempKey[28] = key[46];
+            tempKey[29] = key[54];
+            tempKey[30] = key[29];
+            tempKey[31] = key[39];
+            tempKey[32] = key[50];
+            tempKey[33] = key[44];
+            tempKey[34] = key[32];
+            tempKey[35] = key[47];
+            tempKey[36] = key[43];
+            tempKey[37] = key[48];
+            tempKey[38] = key[38];
+            tempKey[39] = key[55];
+            tempKey[40] = key[33];
+            tempKey[41] = key[52];
+            tempKey[42] = key[45];
+            tempKey[43] = key[41];
+            tempKey[44] = key[49];
+            tempKey[45] = key[35];
+            tempKey[46] = key[28];
+            tempKey[47] = key[31];
+            int m;
+            switch (i) {
+            case 0:
+                for (m = 0; m < 48; m++) {
+                    keys[0][m] = tempKey[m];
+                }
+                break;
+            case 1:
+                for (m = 0; m < 48; m++) {
+                    keys[1][m] = tempKey[m];
+                }
+                break;
+            case 2:
+                for (m = 0; m < 48; m++) {
+                    keys[2][m] = tempKey[m];
+                }
+                break;
+            case 3:
+                for (m = 0; m < 48; m++) {
+                    keys[3][m] = tempKey[m];
+                }
+                break;
+            case 4:
+                for (m = 0; m < 48; m++) {
+                    keys[4][m] = tempKey[m];
+                }
+                break;
+            case 5:
+                for (m = 0; m < 48; m++) {
+                    keys[5][m] = tempKey[m];
+                }
+                break;
+            case 6:
+                for (m = 0; m < 48; m++) {
+                    keys[6][m] = tempKey[m];
+                }
+                break;
+            case 7:
+                for (m = 0; m < 48; m++) {
+                    keys[7][m] = tempKey[m];
+                }
+                break;
+            case 8:
+                for (m = 0; m < 48; m++) {
+                    keys[8][m] = tempKey[m];
+                }
+                break;
+            case 9:
+                for (m = 0; m < 48; m++) {
+                    keys[9][m] = tempKey[m];
+                }
+                break;
+            case 10:
+                for (m = 0; m < 48; m++) {
+                    keys[10][m] = tempKey[m];
+                }
+                break;
+            case 11:
+                for (m = 0; m < 48; m++) {
+                    keys[11][m] = tempKey[m];
+                }
+                break;
+            case 12:
+                for (m = 0; m < 48; m++) {
+                    keys[12][m] = tempKey[m];
+                }
+                break;
+            case 13:
+                for (m = 0; m < 48; m++) {
+                    keys[13][m] = tempKey[m];
+                }
+                break;
+            case 14:
+                for (m = 0; m < 48; m++) {
+                    keys[14][m] = tempKey[m];
+                }
+                break;
+            case 15:
+                for (m = 0; m < 48; m++) {
+                    keys[15][m] = tempKey[m];
+                }
+                break;
+            }
+        }
+        return keys;
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/DateTimeFormatUtils.java b/src/main/java/com/qxueyou/scc/base/util/DateTimeFormatUtils.java
new file mode 100644
index 0000000..1647b3f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/DateTimeFormatUtils.java
@@ -0,0 +1,129 @@
+package com.qxueyou.scc.base.util;
+
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 提供日期或者是时间格式化处理工具类。
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2014-11-28 邓志永 新建
+ */
+public final class DateTimeFormatUtils {
+    /** ISO_DATETIME_FORMAT*/
+    public final static String ISO_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    /** ISO_DATE_FORMAT*/
+    public final static String ISO_DATE_FORMAT = "yyyy-MM-dd";
+    /** ISO_SHORT_DATE_FORMAT*/
+    public final static String ISO_SHORT_DATE_FORMAT = "yyyy-MM";
+    /** ISO_TIME_FORMAT*/
+    public final static String ISO_TIME_FORMAT = "HH:mm:ss";
+
+    private DateTimeFormatUtils() {
+    }
+
+    /**
+     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
+     *
+     * @param value
+     *            需要被转换的日期时间对象引用。
+     * @return 返回的是格式化后的字符串。
+     */
+    public static String formatDateTime(Timestamp value) {
+        return formatDateTime(value, ISO_DATETIME_FORMAT);
+    }
+
+    /**
+     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
+     *
+     * @param value
+     *            需要被转换的日期时间对象引用。
+     * @param defaultFormat
+     *            按照指定的格式来处理当前的日期时间对象。
+     * @return 返回的是格式化后的字符串。
+     */
+    public static String formatDateTime(Timestamp value, String defaultFormat) {
+        if (value == null) {
+            return "";
+        }
+        String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATETIME_FORMAT
+                : defaultFormat;
+        SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle);
+        return objSimpleDateFormat.format(value);
+    }
+
+    public static String formatDate(Timestamp value) {
+        return formatDateTime(value, ISO_DATE_FORMAT);
+    }
+
+    public static String formatDate(Timestamp value, String defaultFormat) {
+        if (value == null) {
+            return "";
+        }
+        String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATE_FORMAT
+                : defaultFormat;
+        SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle);
+        return objSimpleDateFormat.format(value);
+    }
+
+    public static String formatDate(java.sql.Date value) {
+        return formatDate(value, ISO_DATE_FORMAT);
+    }
+
+    public static String formatDate(java.util.Date value) {
+        return formatDate(value, ISO_DATE_FORMAT);
+    }
+
+    public static String formatDate(java.util.Date value, String defaultFormat) {
+        if (value == null) {
+            return "";
+        }
+        String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATE_FORMAT
+                : defaultFormat;
+        SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle);
+        return objSimpleDateFormat.format(value);
+    }
+
+    public static String formatDate(java.sql.Date value, String defaultFormat) {
+        if (value == null) {
+            return "";
+        }
+        String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATE_FORMAT
+                : defaultFormat;
+        SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle);
+        return objSimpleDateFormat.format(value);
+    }
+
+    public static String formatTime(Time value, String defaultFormat) {
+        if (value == null) {
+            return "";
+        }
+        String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_TIME_FORMAT
+                : defaultFormat;
+        SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle);
+        return objSimpleDateFormat.format(value);
+    }
+
+    public static String formatTime(Time value) {
+        return formatTime(value, ISO_TIME_FORMAT);
+    }
+
+    public static String formatShortDate(Timestamp value) {
+        return formatDateTime(value, ISO_SHORT_DATE_FORMAT);
+    }
+
+    public static String formatShortDate(Timestamp value, String defaultFormat) {
+        if (value == null) {
+            return "";
+        }
+        String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_SHORT_DATE_FORMAT
+                : defaultFormat;
+        SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle);
+        return objSimpleDateFormat.format(value);
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/DateTimeUtils.java b/src/main/java/com/qxueyou/scc/base/util/DateTimeUtils.java
new file mode 100644
index 0000000..efe7145
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/DateTimeUtils.java
@@ -0,0 +1,1102 @@
+package com.qxueyou.scc.base.util;
+
+import java.math.BigDecimal;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 扩展有关日期工具类的方法。
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2014-11-28 邓志永 新建
+ */
+public class DateTimeUtils {
+
+	/**
+	 * 设置 UTC time zone (often referred to as GMT)区域.
+	 */
+	public static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone("GMT");
+
+	/**
+	 * YEAR_RANGE_SCOPE
+	 */
+	public final static int YEAR_RANGE_SCOPE = 4;
+
+	/**
+	 * 设置毫秒和秒之间的对应关系
+	 */
+	public static final long MILLIS_PER_SECOND = 1000;
+
+	/**
+	 * 设置毫秒和分之间的关系.
+	 */
+	public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND;
+
+	/**
+	 * 设置毫秒和分之间的约束关系。
+	 */
+	public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE;
+
+	/**
+	 * 设置一天为多少小时.
+	 */
+	public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR;
+
+	/**
+	 * SEMI_MONTH
+	 */
+	public final static int SEMI_MONTH = 1001;
+
+	/**
+	 * fields
+	 */
+	private static final int[][] FIELDS = { { Calendar.MILLISECOND }, { Calendar.SECOND }, { Calendar.MINUTE }, { Calendar.HOUR_OF_DAY, Calendar.HOUR }, { Calendar.DATE, Calendar.DAY_OF_MONTH, Calendar.AM_PM }, { Calendar.MONTH, DateTimeUtils.SEMI_MONTH }, { Calendar.YEAR }, { Calendar.ERA } };
+
+	/**
+	 * RANGE_WEEK_SUNDAY
+	 */
+	public final static int RANGE_WEEK_SUNDAY = 1;
+
+	/**
+	 * RANGE_WEEK_MONDAY
+	 */
+	public final static int RANGE_WEEK_MONDAY = 2;
+
+	/**
+	 * RANGE_WEEK_RELATIVE
+	 */
+	public final static int RANGE_WEEK_RELATIVE = 3;
+
+	/**
+	 * RANGE_WEEK_CENTER
+	 */
+	public final static int RANGE_WEEK_CENTER = 4;
+
+	/**
+	 * RANGE_MONTH_SUNDAY
+	 */
+	public final static int RANGE_MONTH_SUNDAY = 5;
+
+	/**
+	 * RANGE_MONTH_MONDAY
+	 */
+	public final static int RANGE_MONTH_MONDAY = 6;
+
+	/** ISO_DATETIME_FORMAT */
+	public final static String ISO_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+	/** ISO_DATE_FORMAT */
+	public final static String ISO_DATE_FORMAT = "yyyy-MM-dd";
+
+	/** ISO_SHORT_DATE_FORMAT */
+	public final static String ISO_SHORT_DATE_FORMAT = "yyyy-MM";
+
+	/** ISO_DATE_FORMAT */
+	public final static String ISO_YEAR_FORMAT = "yyyy";
+
+	/** ISO_TIME_FORMAT */
+	public final static String ISO_TIME_FORMAT = "HH:mm:ss";
+	
+	/** ISO_TIME_FORMAT */
+	public final static String DATE_IS_NULL = "The date must not be null";
+
+	
+	/**
+	 * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
+	 *
+	 * @param value
+	 *            需要被转换的日期时间对象引用。
+	 * @return 返回的是格式化后的字符串。
+	 */
+	public static String formatDateTime(Timestamp value) {
+		return formatDateTime(value, ISO_DATETIME_FORMAT);
+	}
+
+	/**
+	 * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
+	 *
+	 * @param value
+	 *            需要被转换的日期时间对象引用。
+	 * @param defaultFormat
+	 *            按照指定的格式来处理当前的日期时间对象。
+	 * @return 返回的是格式化后的字符串。
+	 */
+	public static String formatDateTime(Timestamp value, String defaultFormat) {
+		if (value == null) {
+			return "";
+		}
+		String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATETIME_FORMAT : defaultFormat;
+		SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle, Locale.CHINA);
+		return objSimpleDateFormat.format(value);
+	}
+
+	public static String formatDate(Timestamp value) {
+		return formatDateTime(value, ISO_DATE_FORMAT);
+	}
+
+	public static String formatYear(Timestamp value) {
+		return formatDateTime(value, ISO_YEAR_FORMAT);
+	}
+
+	public static String formatDate(Timestamp value, String defaultFormat) {
+		if (value == null) {
+			return "";
+		}
+		String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATE_FORMAT : defaultFormat;
+		SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle, Locale.CHINA);
+		return objSimpleDateFormat.format(value);
+	}
+
+	public static String formatDate(java.sql.Date value) {
+		return formatDate(value, ISO_DATE_FORMAT);
+	}
+
+	public static String formatDate(java.util.Date value) {
+		return formatDate(value, ISO_DATE_FORMAT);
+	}
+
+	public static String formatDate(java.util.Date value, String defaultFormat) {
+		if (value == null) {
+			return "";
+		}
+		String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATE_FORMAT : defaultFormat;
+		SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle, Locale.CHINA);
+		return objSimpleDateFormat.format(value);
+	}
+
+	public static String formatDate(java.sql.Date value, String defaultFormat) {
+		if (value == null) {
+			return "";
+		}
+		String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_DATE_FORMAT : defaultFormat;
+		SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle, Locale.CHINA);
+		return objSimpleDateFormat.format(value);
+	}
+
+	public static String formatTime(Time value, String defaultFormat) {
+		if (value == null) {
+			return "";
+		}
+		String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_TIME_FORMAT : defaultFormat;
+		SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle, Locale.CHINA);
+		return objSimpleDateFormat.format(value);
+	}
+
+	public static String formatTime(Time value) {
+		return formatTime(value, ISO_TIME_FORMAT);
+	}
+
+	public static String formatShortDate(Timestamp value) {
+		return formatDateTime(value, ISO_SHORT_DATE_FORMAT);
+	}
+
+	public static String formatShortDate(Timestamp value, String defaultFormat) {
+		if (value == null) {
+			return "";
+		}
+		String strFormatStyle = StringUtils.isEmpty(defaultFormat) ? ISO_SHORT_DATE_FORMAT : defaultFormat;
+		SimpleDateFormat objSimpleDateFormat = new SimpleDateFormat(strFormatStyle, Locale.CHINA);
+		return objSimpleDateFormat.format(value);
+	}
+
+	/**
+	 * 确定两个日期是否是同一天
+	 *
+	 * @param dateSource
+	 *            需要执行判断的第一个日期时间
+	 * @param dateDesti
+	 *            需要执行的第二个日期时间。
+	 * @return true 如果两个日期都代表了同一天,那么将会返回true。
+	 */
+	public static boolean isSameDay(Date dateSource, Date dateDesti) {
+		if (dateSource == null || dateDesti == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		Calendar objCalendarSource = Calendar.getInstance();
+		objCalendarSource.setTime(dateSource);
+		Calendar objCalendarDesti = Calendar.getInstance();
+		objCalendarDesti.setTime(dateDesti);
+		return isSameDay(objCalendarSource, objCalendarDesti);
+	}
+
+	public static boolean isSameDay(Calendar calSource, Calendar calDesti) {
+		if (calSource == null || calDesti == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		return calSource.get(Calendar.ERA) == calDesti.get(Calendar.ERA) && calSource.get(Calendar.YEAR) == calDesti.get(Calendar.YEAR) && calSource.get(Calendar.DAY_OF_YEAR) == calDesti.get(Calendar.DAY_OF_YEAR);
+	}
+
+	public static boolean isSameInstant(Date date1, Date date2) {
+		if (date1 == null || date2 == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		return date1.getTime() == date2.getTime();
+	}
+
+	public static boolean isSameInstant(Calendar cal1, Calendar cal2) {
+		if (cal1 == null || cal2 == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		return cal1.getTime().getTime() == cal2.getTime().getTime();
+	}
+
+	public static boolean isSameLocalTime(Calendar calSource, Calendar calDesti) {
+		return calSource.equals(calDesti);
+	}
+
+	public static Date parseDate(String value, String[] parsePatterns) throws ParseException {
+		if (value == null || parsePatterns == null) {
+			throw new IllegalArgumentException("Date and Patterns must not be null");
+		}
+
+		SimpleDateFormat parser = null;
+		ParsePosition pos = new ParsePosition(0);
+		for (int i = 0; i < parsePatterns.length; i++) {
+			if (i == 0) {
+				parser = new SimpleDateFormat(parsePatterns[0],Locale.CHINA);
+			} else {
+				parser.applyPattern(parsePatterns[i]);
+			}
+			pos.setIndex(0);
+			Date date = parser.parse(value, pos);
+			if (date != null && pos.getIndex() == value.length()) {
+				return date;
+			}
+		}
+		throw new ParseException("Unable to parse the date: " + value, -1);
+	}
+
+	public static java.sql.Date nowAsDate() {
+		Calendar objCurrentCalendar = Calendar.getInstance();
+		StringBuffer sbDateString = new StringBuffer();
+		int iYear = objCurrentCalendar.get(Calendar.YEAR);
+		int iMonth = objCurrentCalendar.get(Calendar.MONTH) + 1;
+		int iDate = objCurrentCalendar.get(Calendar.DATE);
+		sbDateString.append(iYear);
+		sbDateString.append('-');
+		sbDateString.append(iMonth);
+		sbDateString.append('-');
+		sbDateString.append(iDate);
+		try {
+			return java.sql.Date.valueOf(sbDateString.toString());
+		} catch (Exception e) {
+			return new java.sql.Date(System.currentTimeMillis());
+		}
+	}
+
+	public static Time nowAsTime() {
+		Calendar objCurrentCalendar = Calendar.getInstance();
+		StringBuffer sbTimeString = new StringBuffer();
+		int iHourOfDay = objCurrentCalendar.get(Calendar.HOUR_OF_DAY);
+		int iMinute = objCurrentCalendar.get(Calendar.MINUTE);
+		int iSecond = objCurrentCalendar.get(Calendar.SECOND);
+		sbTimeString.append(iHourOfDay);
+		sbTimeString.append(':');
+		sbTimeString.append(iMinute);
+		sbTimeString.append(':');
+		sbTimeString.append(iSecond);
+		return java.sql.Time.valueOf(sbTimeString.toString());
+	}
+
+	public static Timestamp nowAsTimestamp() {
+		Calendar objCurrentCalendar = Calendar.getInstance();
+		return new Timestamp(objCurrentCalendar.getTimeInMillis());
+	}
+
+	public static Timestamp addYears(Date date, int amount) {
+		return add(date, Calendar.YEAR, amount);
+	}
+
+	public static Timestamp addMonths(Date date, int amount) {
+		return add(date, Calendar.MONTH, amount);
+	}
+
+	public static Timestamp addWeeks(Date date, int amount) {
+		return add(date, Calendar.WEEK_OF_YEAR, amount);
+	}
+
+	public static Timestamp addDays(Date date, int amount) {
+		return add(date, Calendar.DAY_OF_MONTH, amount);
+	}
+
+	public static Timestamp addHours(Date date, int amount) {
+		return add(date, Calendar.HOUR_OF_DAY, amount);
+	}
+
+	public static Timestamp addMinutes(Date date, int amount) {
+		return add(date, Calendar.MINUTE, amount);
+	}
+
+	public static Timestamp addSeconds(Date date, int amount) {
+		return add(date, Calendar.SECOND, amount);
+	}
+
+	public static Timestamp addMilliseconds(Date date, int amount) {
+		return add(date, Calendar.MILLISECOND, amount);
+	}
+
+	public static Timestamp add(Date date, int calendarField, int amount) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		c.add(calendarField, amount);
+		return new Timestamp(c.getTimeInMillis());
+	}
+
+	public static Date round(Date date, int field) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		Calendar gval = Calendar.getInstance();
+		gval.setTime(date);
+		modify(gval, field, true);
+		return gval.getTime();
+	}
+
+	public static Calendar round(Calendar date, int field) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		Calendar rounded = (Calendar) date.clone();
+		modify(rounded, field, true);
+		return rounded;
+	}
+
+	public static Date round(Object date, int field) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		if (date instanceof Date) {
+			return round((Date) date, field);
+		} else if (date instanceof Calendar) {
+			return round((Calendar) date, field).getTime();
+		} else {
+			throw new ClassCastException("Could not round " + date);
+		}
+	}
+
+	public static Date truncate(Date date, int field) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		Calendar gval = Calendar.getInstance();
+		gval.setTime(date);
+		modify(gval, field, false);
+		return gval.getTime();
+	}
+
+	public static Calendar truncate(Calendar date, int field) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		Calendar truncated = (Calendar) date.clone();
+		modify(truncated, field, false);
+		return truncated;
+	}
+
+	public static Date truncate(Object date, int field) {
+		if (date == null) {
+			throw new IllegalArgumentException(DATE_IS_NULL);
+		}
+		if (date instanceof Date) {
+			return truncate((Date) date, field);
+		} else if (date instanceof Calendar) {
+			return truncate((Calendar) date, field).getTime();
+		} else {
+			throw new ClassCastException("Could not truncate " + date);
+		}
+	}
+
+	private static void modify(Calendar val, int field, boolean round) {
+		if (val.get(Calendar.YEAR) > 280000000) {
+			throw new ArithmeticException("Calendar value too large for accurate calculations");
+		}
+
+		if (field == Calendar.MILLISECOND) {
+			return;
+		}
+		Date date = val.getTime();
+		long time = date.getTime();
+		boolean done = false;
+
+		int millisecs = val.get(Calendar.MILLISECOND);
+		if (!round || millisecs < 500) {
+			time = time - millisecs;
+			if (field == Calendar.SECOND) {
+				done = true;
+			}
+		}
+
+		int seconds = val.get(Calendar.SECOND);
+		if (!done && (!round || seconds < 30)) {
+			time = time - (seconds * 1000L);
+			if (field == Calendar.MINUTE) {
+				done = true;
+			}
+		}
+		int minutes = val.get(Calendar.MINUTE);
+		if (!done && (!round || minutes < 30)) {
+			time = time - (minutes * 60000L);
+		}
+
+		if (date.getTime() != time) {
+			date.setTime(time);
+			val.setTime(date);
+		}
+		//子方法
+		modifyChild(val, field, round);
+		
+		throw new IllegalArgumentException("The field " + field + " is not supported");
+
+	}
+
+	private static void modifyChild(Calendar val, int field, boolean round) {
+		boolean roundUp = false;
+		for (int i = 0; i < FIELDS.length; i++) {
+			for (int j = 0; j < FIELDS[i].length; j++) {
+				if (FIELDS[i][j] == field) {
+					if (round && roundUp) {
+						if (field == DateTimeUtils.SEMI_MONTH) {
+							if (val.get(Calendar.DATE) == 1) {
+								val.add(Calendar.DATE, 15);
+							} else {
+								val.add(Calendar.DATE, -15);
+								val.add(Calendar.MONTH, 1);
+							}
+						} else {
+							val.add(FIELDS[i][0], 1);
+						}
+					}
+					return;
+				}
+			}
+			int offset = 0;
+			boolean offsetSet = false;
+
+			if (field == DateTimeUtils.SEMI_MONTH && FIELDS[i][0] == Calendar.DATE) {
+				offset = val.get(Calendar.DATE) - 1;
+				if (offset >= 15) {
+					offset -= 15;
+				}
+				roundUp = offset > 7;
+				offsetSet = true;
+			} else if (field == Calendar.AM_PM && FIELDS[i][0] == Calendar.HOUR_OF_DAY) {
+				offset = val.get(Calendar.HOUR_OF_DAY);
+				if (offset >= 12) {
+					offset -= 12;
+				}
+				roundUp = offset > 6;
+				offsetSet = true;
+			}
+
+			if (!offsetSet) {
+				int min = val.getActualMinimum(FIELDS[i][0]);
+				int max = val.getActualMaximum(FIELDS[i][0]);
+				offset = val.get(FIELDS[i][0]) - min;
+				roundUp = offset > ((max - min) / 2);
+			}
+			if (offset != 0) {
+				val.set(FIELDS[i][0], val.get(FIELDS[i][0]) - offset);
+			}
+		}
+	}
+
+	/**
+	 * 得到指定周的第一天(周日)00:00:00秒,返回对应的Timestamp,可以用作时间区间的计算
+	 *
+	 * @param cal
+	 *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
+	 * @param week
+	 * @return
+	 */
+	public static Timestamp getFirstOfWeek(Calendar calen, int week) {
+		Calendar cal = calen;
+		if (cal == null) {
+			cal = Calendar.getInstance();
+		}
+		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
+		cal.set(Calendar.HOUR_OF_DAY, 0);
+		cal.set(Calendar.MINUTE, 0);
+		cal.set(Calendar.SECOND, 0);
+		cal.set(Calendar.MILLISECOND, 0);
+		return new Timestamp(cal.getTimeInMillis());
+	}
+
+	/**
+	 * 得到指定周的最后一天(周日)23:23:59秒,返回对应的Timestamp,可以用作时间区间的计算
+	 *
+	 * @param cal
+	 *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
+	 * @param week
+	 * @return
+	 */
+	public static Timestamp getLastOfWeek(Calendar calen, int week) {
+		Calendar cal = calen;
+		if (cal == null) {
+			cal = Calendar.getInstance();
+		}
+		cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
+		cal.set(Calendar.HOUR_OF_DAY, 23);
+		cal.set(Calendar.MINUTE, 59);
+		cal.set(Calendar.SECOND, 59);
+		cal.set(Calendar.MILLISECOND, 999);
+		return new Timestamp(cal.getTimeInMillis());
+	}
+
+	/**
+	 * 得到当前周在一年中的周数
+	 *
+	 * @param cal
+	 *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
+	 * @return
+	 */
+	public static int getCurrentWeek() {
+		Calendar cal = Calendar.getInstance();
+		return cal.get(Calendar.WEEK_OF_YEAR);
+	}
+
+	/**
+	 * 得到当前周在一年中的周数
+	 *
+	 * @param cal
+	 *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
+	 * @return
+	 */
+	public static int getCurrentWeek(Calendar calen) {
+		Calendar cal = calen;
+		if (cal == null) {
+			cal = Calendar.getInstance();
+		}
+		return cal.get(Calendar.WEEK_OF_YEAR);
+	}
+
+	public static int getCurrentWeek(Timestamp t1) {
+		Calendar cal;
+		if (t1 == null) {
+			cal = Calendar.getInstance();
+		} else {
+			cal = new GregorianCalendar();
+			cal.setTime(t1);
+		}
+		return cal.get(Calendar.WEEK_OF_YEAR);
+	}
+
+	/**
+	 * 得到指定Timestamp代表的日期第一年中第几周
+	 *
+	 * @param cal
+	 *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
+	 * @param ts
+	 *            指定Timestamp
+	 * @return 周数
+	 */
+	public static int getWeekOfYear(Calendar cale, Timestamp ts) {
+		Calendar cal =cale;
+		if (cal == null) {
+			cal = Calendar.getInstance();
+		}
+		cal.setTimeInMillis(ts.getTime());
+		return cal.get(Calendar.WEEK_OF_YEAR);
+	}
+
+	/**
+	 * 得到当前年份
+	 *
+	 * @return 年
+	 */
+	public static int getCurrentYear() {
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(new Date());
+		return calendar.get(Calendar.YEAR);
+	}
+
+	public static int getYear(Date date) {
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(date);
+		return calendar.get(Calendar.YEAR);
+	}
+
+	/**
+	 * 得到当前月份
+	 *
+	 * @return 月份
+	 */
+	public static int getCurrentMonth() {
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(new Date());
+		return calendar.get(Calendar.MONTH) + 1;
+	}
+
+	public static int getCurrentMonth(Timestamp t1) {
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(t1);
+		return calendar.get(Calendar.MONTH) + 1;
+	}
+
+	public static int getCurrentMonth(Date date) {
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(date);
+		return calendar.get(Calendar.MONTH) + 1;
+	}
+
+	/**
+	 * 获取指定时间的前后多少天的日期以分秒
+	 */
+	public static Timestamp getTimestamp(Timestamp timestamp, int day, int hour, int minute) {
+		Calendar calendar = new GregorianCalendar();
+		if (timestamp != null) {
+			calendar.setTimeInMillis(timestamp.getTime());
+		} else {
+			calendar = Calendar.getInstance();
+		}
+		calendar.add(Calendar.DATE, day);
+		calendar.set(Calendar.HOUR, hour);
+		calendar.set(Calendar.MINUTE, minute);
+		return new Timestamp(calendar.getTimeInMillis());
+	}
+
+	/**
+	 * 给出两个日期,计算他们之间相差的年数|月数|天数
+	 *
+	 * @param c1
+	 *            日期1
+	 * @param c2
+	 *            日期2
+	 * @param what
+	 *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
+	 * @return 相差的年数或月数或天数
+	 */
+	public static int compare(Calendar c1, Calendar c2, int what) {
+		int number = 0;
+		switch (what) {
+		case Calendar.YEAR:
+			number = c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
+			break;
+		case Calendar.MONTH:
+			int years = compare(c1, c2, Calendar.YEAR);
+			number = 12 * years + (c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH));
+			break;
+		case Calendar.DATE:
+			number = (int) ((c1.getTimeInMillis() - c2.getTimeInMillis()) / (1000 * 60 * 60 * 24));
+			break;
+		default:
+			number = (int) ((c1.getTimeInMillis() - c2.getTimeInMillis()) / (1000 * 60 * 60 * 24));
+			break;
+		}
+		return number;
+	}
+
+	/*
+	 * 得到指定日期的所在年份的最后一天
+	 */
+	public static Timestamp getLastOfYear(Timestamp t1) {
+		Calendar a = new GregorianCalendar();
+		a.setTime(t1);
+		a.set(Calendar.MONTH, 11);
+		a.set(Calendar.DATE, 1);// 把日期设置为12月第一天
+		a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是当年最后一天
+		return new Timestamp(a.getTimeInMillis());
+	}
+
+	/*
+	 * 得到指定日期的所在年份的第一天
+	 */
+	public static Timestamp getFirstOfYear(Timestamp t1) {
+		Calendar a = new GregorianCalendar();
+		a.setTime(t1);
+		a.set(Calendar.MONTH, 0);
+		a.set(Calendar.DATE, 1);// 把日期设置为12月第一天
+		return new Timestamp(a.getTimeInMillis());
+	}
+
+	/*
+	 * 得到指定日期的所在月份的最后一天
+	 */
+	public static Timestamp getLastOfMonth(Timestamp t1) {
+		Calendar a = new GregorianCalendar();
+		a.setTime(t1);
+		a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
+		a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
+		return new Timestamp(a.getTimeInMillis());
+	}
+
+	/**
+	 * 得到指定日期的所在月份的第一天
+	 *
+	 * @param t1
+	 * @return
+	 */
+	public static Timestamp getFirstOfMonth(Timestamp t1) {
+		Calendar a = new GregorianCalendar();
+		a.setTime(t1);
+		a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
+		return new Timestamp(a.getTimeInMillis());
+	}
+
+	/**
+	 * 给出两个日期,计算他们之间相差的年数|月数|天数
+	 *
+	 * @param c1
+	 *            日期1
+	 * @param c2
+	 *            日期2
+	 * @param what
+	 *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
+	 * @return 相差的年数或月数或天数
+	 */
+	public static int compare(Timestamp t1, Timestamp t2, int what) {
+
+		Calendar c1 = Calendar.getInstance();
+		c1.setTime(t1);
+
+		Calendar c2 = Calendar.getInstance();
+		c2.setTime(t2);
+
+		return compare(c1, c2, what);
+	}
+
+	public static boolean after(Timestamp t1, Timestamp t2) {
+		if (t1 == null || t2 == null) {
+			return false;
+		}
+
+		return t1.after(t2);
+	}
+
+	public static boolean equals(Timestamp t1, Timestamp t2) {
+		if (t1 == null && t2 == null) {
+			return true;
+		} else {
+			if (t1 == null) {
+				return t2.equals(t1);
+			} else {
+				return t1.equals(t2);
+			}
+		}
+	}
+
+	public static boolean before(Timestamp t1, Timestamp t2) {
+		if (t1 == null || t2 == null) {
+			return false;
+		}
+
+		return t1.before(t2);
+	}
+
+	/**
+	 * 把字符串的日期转成Timestamp
+	 *
+	 * @param time
+	 *            字符串的日期
+	 * @return int Timestamp型日期
+	 */
+	public static Timestamp stringConvertTimestamp(String stime) {
+		String time =stime;
+		if (null == time || "".equals(time)) {
+			return null;
+		}
+		if (time.length() == 10) {// yyyy-MM-dd
+			time = time.concat(" 00:00:00.000000000");
+		} else if (time.length() == 16) {// yyyy-MM-dd hh:mm
+			time = time.concat(":00.000000000");
+		} else if (time.length() == 19) {// yyyy-MM-dd hh:mm:dd
+			time =time.concat(".000000000");
+		}
+		return Timestamp.valueOf(time);
+	}
+
+	/**
+	 * 把字符串的日期转成Timestamp
+	 *
+	 * @param date
+	 *            字符串的日期
+	 * @return int Timestamp型日期
+	 */
+	public static Date stringConvertDate(String sdate) {
+		String date =sdate;
+		if (null == date || "".equals(date)) {
+			return null;
+		}
+		if (date.length() == 10) {// yyyy-MM-dd
+			date = date.concat(" 00:00:00");
+		} 
+		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);
+		Date objDate;
+		try {
+			objDate = formatter.parse(date);
+		} catch (ParseException e) {
+			objDate = null;
+		}
+		return objDate;
+	}
+
+	/**
+	 * 把字符串的日期转成Timestamp
+	 *
+	 * @param date
+	 *            字符串的日期
+	 * @return int Timestamp型日期
+	 */
+	public static Timestamp stringConvertTS(String sdate) {
+		String date =sdate;
+		if (null == date || "".equals(date)) {
+			return null;
+		}
+		if (date.length() == 10) {// yyyy-MM-dd
+			date = date.concat(" 00:00:00");
+		} 
+		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);
+		Timestamp ts;
+		try {
+			Date objDate = formatter.parse(date);
+
+			ts = new Timestamp(objDate.getTime());
+		} catch (ParseException e) {
+			ts = null;
+		}
+		return ts;
+	}
+
+
+	/**
+	 * 去除date的毫秒数
+	 *
+	 * @param date
+	 *            字符串的日期
+	 * @return int Timestamp型日期
+	 */
+	public static Date getCurrDateTime(Date date) {
+		return stringConvertTS(formatDate(date, ISO_DATETIME_FORMAT));
+	}
+	
+	/**
+	 * 比较两日期大小
+	 *
+	 * @param DATE1
+	 * @param DATE2
+	 * @param what
+	 *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
+	 * @return date1 在date2前=1;date1在date2后=-1;否则=0;
+	 * @throws ParseException
+	 */
+	public static int compareDate(String date1, String date2, int what) throws ParseException {
+		DateFormat df = new SimpleDateFormat("yyyy-MM-dd",Locale.CHINA);
+		Date objDate1 = df.parse(date1);
+		Date objDate2 = df.parse(date2);
+		return compareDate(objDate1, objDate2, what);
+	}
+
+	/**
+	 * 比较两日期大小
+	 *
+	 * @param DATE1
+	 * @param DATE2
+	 * @param what
+	 *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
+	 * @return date1 在date2前=1;date1在date2后=-1;否则=0;
+	 */
+	public static int compareDate(Date date1, Date date2, int what) {
+		Calendar objCalendar1 = Calendar.getInstance();
+		objCalendar1.setTime(date1);
+		Calendar objCalendar2 = Calendar.getInstance();
+		objCalendar2.setTime(date2);
+		int iResult = compare(objCalendar1, objCalendar2, what);
+		if (iResult > 0) {
+			return 1;
+		} else if (iResult < 0) {
+			return -1;
+		} else {
+			return 0;
+		}
+	}
+
+	/**
+	 * 和当前日期比较大小
+	 *
+	 * @param currentDate
+	 * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0;
+	 */
+	public static int compareCurrentDate(Date currentDate) {
+		return compareDate(currentDate, nowAsDate(), Calendar.DATE);
+	}
+
+	/**
+	 * 和当前日期比较大小
+	 *
+	 * @param currentDate
+	 * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0;
+	 * @throws ParseException
+	 */
+	public static int compareCurrentDate(String currentDate) throws ParseException {
+		DateFormat df = new SimpleDateFormat("yyyy-MM-dd",Locale.CHINA);
+		Date objDate = df.parse(currentDate);
+		return compareDate(objDate, nowAsDate(), Calendar.DATE);
+
+	}
+
+	/**
+	 * 根据日期,输出日期对应的月份
+	 * 
+	 * @param date
+	 * @return month
+	 */
+	public static int getMonth(Date date) {
+		if (null == date) {
+			throw new IllegalArgumentException("The date is null");
+		}
+
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+
+		return calendar.get(Calendar.MONTH);
+	}
+
+	/**
+	 * 封装每月的最后一天
+	 * 
+	 * @param date
+	 * @author 伍升存
+	 * @history 2012-03-13 伍升存
+	 * @return
+	 */
+	public static Date lastDayOfMonth(Date date) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.set(Calendar.DAY_OF_MONTH, 1);
+		cal.roll(Calendar.DAY_OF_MONTH, -1);
+		return cal.getTime();
+	}
+
+	/**
+	 * 当前时间的前几个小时
+	 * 
+	 * @return
+	 */
+	public static Date beforeHourToNowDate(int number) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - number);
+		return calendar.getTime();
+	}
+
+	/**
+	 * 当前时间的后几个小时
+	 * 
+	 * @return
+	 */
+	public static Date afterHourToNowDate(int number) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + number);
+		return calendar.getTime();
+	}
+
+	// 计算时间
+	public static String showTime(Date ctime, String sformat) {
+		String format = sformat;
+		String r = "";
+		if (ctime == null) {
+			return r;
+		}
+		if (format == null) {
+			format = "yyyy-MM-dd HH:mm";
+		}
+		long nowtimelong = System.currentTimeMillis();
+		long nowtime = nowtimelong;
+		long ctimelong = ctime.getTime();
+		long result = nowtime - ctimelong;
+		if (result - (long) 60 * 1000 < (long) 0)// 一分钟内
+		{
+			BigDecimal seconds = cal(new BigDecimal(result), (long) 1000, 0);
+			r = seconds + "秒钟前";
+		} else if (result - (long) 60 * 1000 >= (long) 0 && result - (long) 60 * 60 * 1000 < (long) 0)// 一小时内
+		{
+			BigDecimal seconds = cal(new BigDecimal(result), (long) (60 * 1000), 0);
+			r = seconds + "分钟前";
+		} else if (result - (long) 60 * 60 * 1000 >= (long) 0 && result - (long) 24 * 60 * 60 * 1000 < (long) 0)// 一天内
+		{
+			BigDecimal seconds = cal(new BigDecimal(result), (long) (60 * 60 * 1000), 0);
+			r = seconds + "小时前";
+		} else if (result - (long) 24 * 60 * 60 * 1000 >= (long) 0 && result - (long) 30 * 24 * 60 * 60 * 1000 < (long) 0) {// 一个月内
+			BigDecimal seconds = cal(new BigDecimal(result), (long) (24 * 60 * 60 * 1000), 0);
+			r = seconds + "天前";
+		} else if (result - (long) 30 * 24 * 60 * 60 * 1000 >= (long) 0 && result - (long) 12 * 30 * 24 * 60 * 60 * 1000 < (long) 0) {// 一年内
+			BigDecimal seconds = cal(new BigDecimal(result), new BigDecimal(30).multiply(new BigDecimal(24)).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).multiply(new BigDecimal(1000)).longValue(), 0);
+			r = seconds + "个月前";
+		} else{// 日期格式
+			SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
+			r = sdf.format(ctime);
+		}
+		return r;
+	}
+
+	public static BigDecimal cal(BigDecimal result, long a, int digit) {
+		return result.divide(new BigDecimal(a), digit, BigDecimal.ROUND_HALF_UP);
+	}
+
+	public static String transForm(Date beginTime, Date endTime) {
+		Calendar cal = Calendar.getInstance();
+		String trans = "";
+		SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日-HH:mm",Locale.CHINA);
+		String str_begin = sdf.format(beginTime);
+		String str_end = sdf.format(endTime);
+		cal.setTime(beginTime);
+		int begin_week = cal.get(Calendar.DAY_OF_WEEK);
+		String str_begin_week = getWeek(begin_week);
+
+		String str_begin_month = str_begin.substring(0, str_begin.indexOf('-'));
+		String str_begin_hour = str_begin.substring(str_begin.indexOf('-') + 1);
+
+		String str_end_month = str_end.substring(0, str_begin.indexOf('-'));
+		String str_end_hour = str_end.substring(str_end.indexOf('-') + 1);
+
+		if (str_begin_month.equals(str_end_month)) {
+			trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至  " + str_end_hour;
+		} else {
+			cal.setTime(endTime);
+			int end_week = cal.get(Calendar.DAY_OF_WEEK);
+			String str_end_week = getWeek(end_week);
+			trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至  " + str_end_month + " (" + str_end_week + ") " + str_end_hour;
+		}
+		return trans;
+	}
+
+	public static String getWeek(int week) {
+		String str_week = "";
+		if (week == 2) {
+			str_week = "周一";
+		}
+		if (week == 3) {
+			str_week = "周二";
+		}
+		if (week == 4) {
+			str_week = "周三";
+		}
+		if (week == 5) {
+			str_week = "周四";
+		}
+		if (week == 6) {
+			str_week = "周五";
+		}
+		if (week == 7) {
+			str_week = "周六";
+		}
+		if (week == 1) {
+			str_week = "周日";
+		}
+		return str_week;
+
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/DateUtils.java b/src/main/java/com/qxueyou/scc/base/util/DateUtils.java
new file mode 100644
index 0000000..302b434
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/DateUtils.java
@@ -0,0 +1,440 @@
+package com.qxueyou.scc.base.util;
+
+/**
+ * 记录项目管理部分核心的数据库字典信息;基础操作Form
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2014-11-28 邓志永 新建
+ */
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class DateUtils {
+
+
+    /**
+     * 根据格式获得日期字符串
+     *
+     * @param sFormat
+     * @return
+     */
+    public String getDateStr(String sFormat) {
+        Calendar tCal = Calendar.getInstance();
+        Timestamp ts = new Timestamp(tCal.getTime().getTime());
+        java.util.Date date = new java.util.Date(ts.getTime());
+        SimpleDateFormat formatter = new SimpleDateFormat(sFormat, Locale.CHINA);
+        return formatter.format(date);
+    }
+
+    /**
+     * 根据给定格式获取特定时间的格式化显示
+     *
+     * @param ts
+     * @param sFormat
+     * @return
+     */
+    public String getDateFormat(Timestamp ts, String sFormat) {
+        Date date = new Date(ts.getTime());
+        SimpleDateFormat formatter = new SimpleDateFormat(sFormat, Locale.CHINA);
+        return formatter.format(date);
+    }
+
+    /**
+     * 格式化日期
+     *
+     * @param ts
+     * @return
+     */
+    public String getSDate(Timestamp ts) {
+        Date date = new Date(ts.getTime());
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
+        return formatter.format(date);
+    }
+
+    /**
+     * 将String类型的日期转换为时间
+     *
+     * @param dt
+     * @return
+     */
+    public Timestamp getTs(String dt) {
+        Date date = java.sql.Date.valueOf(dt);
+        Calendar tCal = Calendar.getInstance();
+        tCal.setTime(date);
+        return new Timestamp(tCal.getTime().getTime());
+    }
+
+    /**
+     * 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10
+     *
+     * @param dt
+     * @return
+     */
+    public String getShortDate(String dt) {
+        try {
+            return dt.substring(0, dt.indexOf(' '));
+        } catch (Exception e) {
+            return dt;
+        }
+    }
+
+    /**
+     * 取得当前日期时间
+     *
+     * @return
+     */
+    public Timestamp getCurrDateTime() {
+        Calendar tCal = Calendar.getInstance();
+        return new Timestamp(tCal.getTime().getTime());
+    }
+
+    /**
+     * 取得当前日期时间 毫秒为0
+     *
+     * @return
+     */
+    public static Timestamp getCurrTime() {
+        Calendar tCal = Calendar.getInstance();
+        tCal.set(Calendar.MILLISECOND, 0);
+        return new Timestamp(tCal.getTime().getTime());
+    }
+    
+    /**
+     * 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒
+     *
+     * @param ts
+     * @return
+     */
+    public String getSDateTime(Timestamp ts) {
+        return getDateFormat(ts, "yyyy-MM-dd HH:mm:ss");
+    }
+
+    /* 格式化日期 */
+    public String getSTime(Timestamp ts) {
+        return getDateFormat(ts, "HH:mm:ss");
+    }
+
+    /**
+     * 获取当天的日期
+     *
+     * @return
+     */
+    public final static String getToday() {
+        java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
+        return formatter.format(ts);
+
+    }
+
+    // 根据时间获得随机数
+    public String getRnd() {
+        Calendar tCal = Calendar.getInstance();
+        Timestamp ts = new Timestamp(tCal.getTime().getTime());
+        java.util.Date date = new java.util.Date(ts.getTime());
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddhhmmss", Locale.CHINA);
+        String tmpStr = formatter.format(date) + Math.round(Math.random() * 1000 + 1);
+
+        return tmpStr;
+    }
+
+    /**
+     * 计算日期之间的差值 2004-3-25 增加
+     *
+     * @param dt1
+     * @param dt2
+     * @return
+     */
+    public int dateDiff(Timestamp dt1, Timestamp dt2) {
+        long ldate1 = dt1.getTime();
+        long ldate2 = dt2.getTime();
+        return (int) ((ldate2 - ldate1) / (1000 * 60 * 60 * 24));
+    }
+    
+    /**
+     * 计算分钟
+     *
+     * @param dt1
+     * @param dt2
+     * @return
+     */
+    public int minuteDiff(Timestamp dt1, Timestamp dt2) {
+        long ldate1 = dt1.getTime();
+        long ldate2 = dt2.getTime();
+        return (int) ((ldate2 - ldate1) / (1000 * 60));
+    }
+    
+    /**
+     * 获取明天的日期
+     *
+     * @return
+     */
+    public String getTomorrow() {
+        return getNextDay(getToday());
+    }
+
+    /**
+     * 获得当前日期的下一天
+     *
+     * @param date
+     * @return
+     */
+    public String getNextDay(String date) {
+        if (StringUtils.isBlank(date)) {
+            return "";
+        }
+        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
+        Calendar calendar = Calendar.getInstance();
+        try {
+            calendar.setTime(f.parse(date));
+        } catch (ParseException ex) {
+            return date;
+        }
+        calendar.add(5, 1);
+        return f.format(calendar.getTime());
+    }
+
+    /**
+     * LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd
+     */
+    public static String getTheDay(int num) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
+        GregorianCalendar gc = new GregorianCalendar();
+        gc.add(GregorianCalendar.DATE, num);
+        Date theday = gc.getTime();
+        return sdf.format(theday);
+    }
+
+    /**
+     * 将日期由String转换为Date类型
+     *
+     * @param date
+     * @return
+     * @throws ParseException
+     */
+    public static Date convertStringToDate(String sdate) throws ParseException {
+    	String date = sdate;
+        if (StringUtils.isBlank(date)) {
+            date = getToday();
+        }
+
+        SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
+        Date objDate = objDateFormat.parse(date);
+
+        return objDate;
+    }
+
+    /**
+     * 将日期由String转换为Date类型
+     *
+     * @param date
+     * @param format
+     * @return
+     * @throws ParseException
+     */
+    public static Date convertStringToDate(String sdate, String format) throws ParseException {
+    	String date = sdate;
+        SimpleDateFormat objDateFormat = new SimpleDateFormat(format, Locale.CHINA);
+        if (StringUtils.isBlank(date)) {
+            java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
+            date = objDateFormat.format(ts);
+        }
+
+        Date objDate = objDateFormat.parse(date);
+
+        return objDate;
+    }
+
+
+    /**
+     * 将日期由yyyy年MM月String转换为Date类型
+     *
+     * @param date
+     * @return
+     * @throws ParseException
+     */
+    public static Date convertStringToDateCh(String sdate) throws ParseException {
+    	String date = sdate;
+        SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA);
+
+        if (StringUtils.isBlank(date)) {
+            java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
+            date = objDateFormat.format(ts);
+        }
+
+        Date objDate = objDateFormat.parse(date);
+
+        return objDate;
+    }
+    
+    /**
+     * 取得指定年月的第一天
+     * @param year
+     * @param month
+     * @return
+     */
+    public static String getLastDayOfMonthToString(int year, int month) {     
+        Calendar cal = Calendar.getInstance();     
+        cal.set(Calendar.YEAR, year);     
+        cal.set(Calendar.MONTH, month - 1);     
+        cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));  
+        return  new   SimpleDateFormat( "yyyy-MM-dd", Locale.CHINA).format(cal.getTime());  
+    }
+    
+    /**
+     * 取得指定年月的最后一天
+     * @param year
+     * @param month
+     * @return
+     */
+    public static String getFirstDayOfMonthToString(int year, int month) {     
+        Calendar cal = Calendar.getInstance();     
+        cal.set(Calendar.YEAR, year);     
+        cal.set(Calendar.MONTH, month - 1);  
+        cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));  
+        return   new   SimpleDateFormat( "yyyy-MM-dd", Locale.CHINA).format(cal.getTime());  
+    }
+    
+    /**
+     * 取得指定年月的第一天
+     * @param year
+     * @param month
+     * @return
+     */
+    public static Date getLastDayOfMonthToDate(int year, int month) {
+        Calendar cal = Calendar.getInstance();     
+        cal.set(Calendar.YEAR, year);     
+        cal.set(Calendar.MONTH, month - 1);     
+        cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
+        return cal.getTime() ;
+    }
+    
+    /**
+     * 取得指定年月的最后一天
+     * @param year
+     * @param month
+     * @return
+     */
+    public static Date getFirstDayOfMonthToDate(int year, int month) {     
+        Calendar cal = Calendar.getInstance();     
+        cal.set(Calendar.YEAR, year);     
+        cal.set(Calendar.MONTH, month - 1);  
+        cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));  
+        return cal.getTime();
+    }
+    
+    /**
+     * 得到一段时间内有多少周
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    public static int getWeekCounts(Date startTime,Date endTime){
+    	
+    	Calendar c_begin = Calendar.getInstance();
+        Calendar c_end = Calendar.getInstance();
+        c_begin.setTime(startTime);
+        c_end.setTime(endTime);
+        
+        int count = 1;
+        
+        while(c_begin.before(c_end)){
+	        if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+	            count++;
+	        }
+        	c_begin.add(Calendar.DAY_OF_YEAR, 1);
+        }
+        
+        return count;
+    }
+    
+    /**
+     * 得到日期的年
+     * @param date
+     * @return
+     */
+    public static int getYearInDate(Date date){
+    	Calendar cal = Calendar.getInstance();
+    	cal.setTime(date);
+    	return cal.get(Calendar.YEAR);
+    	
+    }
+
+    /**
+     * 当前时间处于一段时间的第几周
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    public static int getWeekIndex(Date startTime,Date endTime){
+    	
+    	Calendar begin = Calendar.getInstance();
+        Calendar end = Calendar.getInstance();
+        begin.setTime(startTime);
+        end.setTime(endTime);
+        
+        int count = 1;
+        
+        Calendar now = Calendar.getInstance();
+        
+        while(begin.before(end)){
+        	
+        	if(begin.get(Calendar.YEAR) == now.get(Calendar.YEAR)
+        			&& begin.get(Calendar.MONTH) == now.get(Calendar.MONTH)
+					&& begin.get(Calendar.DAY_OF_MONTH) == now.get(Calendar.DAY_OF_MONTH)){
+        		return count ;
+        	}
+        	
+        		
+	        if(begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+	            count++;
+	        }
+        	begin.add(Calendar.DAY_OF_YEAR, 1);
+        }
+        
+        return count;
+    }
+    
+    /**
+     * 指定时间处于一段时间的第几周
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    public static int getSpecifyWeekIndex(Date startTime,Date endTime,Date specifyDate){
+    	
+    	Calendar begin = Calendar.getInstance();
+        Calendar end = Calendar.getInstance();
+        begin.setTime(startTime);
+        end.setTime(endTime);
+        
+        int count = 1;
+        
+        Calendar specify = Calendar.getInstance();
+        specify.setTime(specifyDate);
+        
+        while(begin.before(end)){
+        	
+        	if(begin.get(Calendar.YEAR) == specify.get(Calendar.YEAR)
+        			&& begin.get(Calendar.MONTH) == specify.get(Calendar.MONTH)
+					&& begin.get(Calendar.DAY_OF_MONTH) == specify.get(Calendar.DAY_OF_MONTH)){
+        		return count ;
+        	}
+        		
+	        if(begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+	            count++;
+	        }
+        	begin.add(Calendar.DAY_OF_YEAR, 1);
+        }
+        
+        return count;
+    }
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/ExcelExportUtils.java b/src/main/java/com/qxueyou/scc/base/util/ExcelExportUtils.java
new file mode 100644
index 0000000..ba735e4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/ExcelExportUtils.java
@@ -0,0 +1,310 @@
+package com.qxueyou.scc.base.util;
+
+//import java.io.FileNotFoundException;
+//import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.text.SimpleDateFormat;
+//import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.hssf.usermodel.HSSFRichTextString;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.util.HSSFColor;
+
+import com.qxueyou.scc.base.model.ExcelExportParam;
+//import com.qxueyou.scc.user.model.UserRegistration;
+//import com.qxueyou.scc.user.model.UserRegistrationExport;
+
+/**
+ * 
+ * 
+ * @param <T>
+ * 应用泛型,代表任意一个符合javabean风格的类
+ * boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()
+ */
+public class ExcelExportUtils<T> {
+	
+	private static Logger log = LogManager.getLogger("ExcelExport");
+	
+	/**
+	 * 设置标题样式,字体
+	 * @param objStyle
+	 * @param workbook
+	 */
+	private void initTitleCellStyle(HSSFCellStyle objStyle,HSSFWorkbook workbook){
+		objStyle.setFillForegroundColor(HSSFColor.WHITE.index);
+		objStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+		objStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+		objStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+		objStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
+		objStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
+		objStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+		
+		// 生成一个字体
+        HSSFFont font = workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+        // 把字体应用到标题样式
+        objStyle.setFont(font);
+	}
+	
+	/**
+	 * 设置导出内容样式
+	 * @param objStyle
+	 * @param workbook
+	 */
+	private void initContentCellStyle(HSSFCellStyle objStyle,HSSFWorkbook workbook){
+		objStyle.setFillForegroundColor(HSSFColor.WHITE.index);
+		objStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+		objStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+		objStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+		objStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
+		objStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
+		objStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+	}
+	
+	/**
+	 * 是否指定列宽
+	 * @param sheet
+	 * @param lstColumnWidth
+	 */
+	private void initColumnWidth(HSSFSheet sheet,List<Integer> lstColumnWidth){
+		if(lstColumnWidth != null){
+		    for(int i=0;i<lstColumnWidth.size();i++){
+		    	sheet.setColumnWidth(i, lstColumnWidth.get(i));
+		    }	
+		}
+	}
+	
+	/**
+	 * 初始化导出标题
+	 * @param row
+	 * @param headers
+	 * @param titleStyle
+	 */
+	private void initTitleRow(HSSFRow row,String[] headers,HSSFCellStyle titleStyle,List<String> lstColumn){
+		for (int i = 0; i < headers.length && (null == lstColumn || i <= lstColumn.size()); i++) {
+            HSSFCell cell = row.createCell(i);
+            cell.setCellStyle(titleStyle);
+            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
+            cell.setCellValue(text);
+        }
+	}
+	
+	/**
+	 * 按照T,导出所有列内容
+	 * @param objExcelExportParam
+	 */
+    public void exportExcel(ExcelExportParam<T> objExcelExportParam) {
+    	this.exportExcel(objExcelExportParam,false);
+    }
+    
+    /**
+     * 指定列导出
+     * @param objExcelExportParam
+     */
+    public void exportExcelByColomn(ExcelExportParam<T> objExcelExportParam) {
+    	this.exportExcel(objExcelExportParam,true);
+    }
+    
+	/**
+	 * 导出excel实现
+	 * @param objExcelExportParam
+	 * @param exportByCol
+	 */
+	public void exportExcel(ExcelExportParam<T> objExcelExportParam,boolean exportByCol){
+		//获取参数:
+    	String title = objExcelExportParam.getTitle();
+    	Collection<T>   colData = objExcelExportParam.getColData();
+    	OutputStream out = objExcelExportParam.getOut();
+    	String pattern = objExcelExportParam.getPattern();
+    	if(null == pattern){
+    		pattern = "yyyy-MM-dd";
+    	}
+    	boolean numberFormat = objExcelExportParam.getNumberFormat();
+    	List<String> lstColumn = null;
+        if(exportByCol){
+        	lstColumn = objExcelExportParam.getLstColumn();
+        }
+        
+        // 声明一个工作薄
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        HSSFSheet sheet = null;
+        // 生成一个表格
+        if(StringUtils.isNotBlank(title)){
+        	sheet = workbook.createSheet(title);
+        }else{
+        	sheet = workbook.createSheet("Sheet1");
+        }
+        // 设置表格默认列宽度为18个字节
+        sheet.setDefaultColumnWidth(18);
+        // 设置表格默认行高度
+        sheet.setDefaultRowHeight((short)300);
+        //是否指定列宽
+        initColumnWidth(sheet,objExcelExportParam.getLstColumnWidth());
+        // 标题样式
+        HSSFCellStyle titleStyle = workbook.createCellStyle();
+        initTitleCellStyle(titleStyle,workbook);
+        // 内容样式
+        HSSFCellStyle contentStyle = workbook.createCellStyle();
+        initContentCellStyle(contentStyle,workbook);
+        // 产生表格标题行
+        HSSFRow row = sheet.createRow(0);
+        initTitleRow(row,objExcelExportParam.getHeaders(),titleStyle,lstColumn);
+
+        // 遍历集合数据,产生数据行
+        Iterator<T> it = colData.iterator();
+        int index = 0;
+        while (it.hasNext()) {
+            index++;
+            row = sheet.createRow(index);
+            T t = (T) it.next();
+            
+            //默认给序号列
+            HSSFCell cell = row.createCell(0);
+    		cell.setCellStyle(contentStyle);
+    		HSSFRichTextString richString = new HSSFRichTextString(String.valueOf(index));
+			HSSFFont font3 = workbook.createFont();
+			richString.applyFont(font3);
+			cell.setCellValue(richString);
+            
+            //指定列导出使用
+            if(exportByCol){
+            	for(int j = 0; j < lstColumn.size() ; j++ ){
+            		doExportExcel(row,contentStyle,pattern,numberFormat,workbook,lstColumn.get(j),t,j+1);
+            	}
+            }else{
+            	// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
+                Field[] fields = t.getClass().getDeclaredFields();
+                for (int i = 0; i < fields.length; i++) {
+                	if(!"serialVersionUID".equals(fields[i].getName())){
+                		doExportExcel(row,contentStyle,pattern,numberFormat,workbook,fields[i].getName(),t,i);
+                	}
+                }
+            }
+        }
+        try {
+            workbook.write(out);
+            workbook.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally{
+        	
+        }
+	}
+	
+	private void doExportExcel(HSSFRow row,HSSFCellStyle contentStyle,String pattern,boolean numberFormat,HSSFWorkbook workbook,String fieldName,T t,int i){
+		HSSFCell cell = row.createCell(i);
+		cell.setCellStyle(contentStyle);
+		//boolean类型默认使用get,而非is
+		String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
+		try {
+			@SuppressWarnings("rawtypes")
+			Class tCls = t.getClass();
+			@SuppressWarnings("unchecked")
+			Method getMethod = tCls.getMethod(getMethodName,new Class[] {});
+			Object value = getMethod.invoke(t, new Object[] {});
+			// 格式化内容
+			String textValue = "";
+			if (value instanceof Date) {
+				Date date = (Date) value;
+				SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+				textValue = sdf.format(date);
+			}else{
+				if(value != null){
+					textValue = String.valueOf(value);
+				}
+			}
+			//利用正则表达式判断textValue是否全部由数字组成
+			if (null != textValue) {
+				Pattern p = Pattern.compile("^//d+(//.//d+)?$");
+				Matcher matcher = p.matcher(textValue);
+				if (matcher.matches() && numberFormat) {
+					// 是数字当作double处理
+					cell.setCellValue(Double.parseDouble(textValue));
+				} else {
+					HSSFRichTextString richString = new HSSFRichTextString(textValue);
+					HSSFFont font3 = workbook.createFont();
+					richString.applyFont(font3);
+					cell.setCellValue(richString);
+				}
+			}
+		} catch (SecurityException e) {
+			log.error(e);
+		} catch (NoSuchMethodException e) {
+			log.error(e);
+		} catch (IllegalArgumentException e) {
+			log.error(e);
+		} catch (IllegalAccessException e) {
+			log.error(e);
+		} catch (InvocationTargetException e) {
+			log.error(e);
+		} finally {
+			
+		}
+	}
+	
+    public static void main(String[] args) {
+    	System.out.println(new Date().getTime());
+        /*// 测试学生
+    	ExcelExportUtils<UserRegistrationExport> ex = new ExcelExportUtils<UserRegistrationExport>();
+        String[] headers = { "序号","班级", "姓名", "性别" ,"报名码" ,"手机号" ,"其他联系方式","状态"};
+        List<UserRegistrationExport> dataset = new ArrayList<UserRegistrationExport>();
+        UserRegistrationExport u = new UserRegistrationExport();
+        u.setClassName("高级JAVA工程师一班");
+        u.setMobilePhone("13312886688");
+        u.setSalesCode("123.34");
+        u.setSex(false);
+        u.setStatus(UserRegistration.STATUS_ACTIVE);
+        u.setUserName("刘美幸子");
+        dataset.add(u);
+        ExcelExportParam<UserRegistrationExport> obj = new ExcelExportParam<UserRegistrationExport>();
+        obj.setColData(dataset);
+        obj.setHeaders(headers);
+        
+        try {
+            OutputStream out = new FileOutputStream("D://testExportExcelAll.xls");
+            obj.setOut(out);
+            ex.exportExcel(obj);
+            out.close();
+            System.out.println("excel导出成功!");
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        
+        try {
+            OutputStream out = new FileOutputStream("D://testExportExcelByCol.xls");
+            List<String> lst = new ArrayList<String>();
+            lst.add("className");
+            lst.add("userName");
+            obj.setLstColumn(lst);
+            obj.setOut(out);
+            ex.exportExcelByColomn(obj);
+            out.close();
+            System.out.println("excel指定列导出成功!");
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }*/
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/util/FreeMarkerMd5MethodDefine.java b/src/main/java/com/qxueyou/scc/base/util/FreeMarkerMd5MethodDefine.java
new file mode 100644
index 0000000..815a650
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/FreeMarkerMd5MethodDefine.java
@@ -0,0 +1,22 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.List;
+
+import freemarker.template.SimpleScalar;
+import freemarker.template.TemplateMethodModelEx;
+import freemarker.template.TemplateModelException;
+
+@SuppressWarnings("rawtypes")
+public class FreeMarkerMd5MethodDefine implements TemplateMethodModelEx {
+	@Override
+	public Object exec(List args) throws TemplateModelException {
+		if (args == null || args.isEmpty()) {
+			throw new TemplateModelException("错误:MD5加密参数字符串不存在");
+		}
+		StringBuffer sb = new StringBuffer(1024);
+		for (Object md5Arg : args) {
+			sb.append(((SimpleScalar) md5Arg).getAsString());
+		}
+		return new SimpleScalar(MD5Utils.md5Digest(sb.toString()));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/HttpClient.java b/src/main/java/com/qxueyou/scc/base/util/HttpClient.java
new file mode 100644
index 0000000..0ed3874
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/HttpClient.java
@@ -0,0 +1,623 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.ParseException;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.BasicHttpEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author xiadehu
+ */
+public class HttpClient {
+
+	private static final String UTF_8 = "UTF-8";
+	
+	private CloseableHttpClient httpClient;
+
+	private RequestConfig requestConfig;
+
+	protected static final Logger log = LogManager.getLogger("HttpClient");
+
+	private static final int timeout = 30000;
+
+	public HttpClient() {
+		init();
+	}
+
+	public CloseableHttpClient getHttpClient() {
+		return httpClient;
+	}
+
+	public void setHttpClient(CloseableHttpClient httpClient) {
+		this.httpClient = httpClient;
+	}
+	
+	private void init() {
+		X509TrustManager xtm = new X509TrustManager() { // 创建TrustManager
+			public void checkClientTrusted(X509Certificate[] chain,
+					String authType) throws CertificateException {
+			}
+
+			public void checkServerTrusted(X509Certificate[] chain,
+					String authType) throws CertificateException {
+			}
+
+			public X509Certificate[] getAcceptedIssuers() {
+				return new X509Certificate[]{};
+			}
+		};
+		try {
+			// TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext
+			SSLContext ctx = SSLContext.getInstance("TLS");
+			// 使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用
+			ctx.init(null, new TrustManager[] { xtm }, null);
+
+			/*
+			 * SchemeRegistry schemeRegistry = new SchemeRegistry();
+			 * schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory
+			 * .getSocketFactory())); schemeRegistry.register(new
+			 * Scheme("https", 443, new SSLSocketFactory(ctx)));
+			 */
+
+			/*
+			 * PoolingClientConnectionManager cm = new
+			 * PoolingClientConnectionManager(schemeRegistry);
+			 * cm.setMaxTotal(200); cm.setDefaultMaxPerRoute(20);
+			 */
+
+
+			// httpClient = new DefaultHttpClient(cm);
+
+			/*
+			 * httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
+			 * CookiePolicy.BEST_MATCH); httpClient.getParams().setParameter(
+			 * ClientPNames.CONN_MANAGER_TIMEOUT, Long.valueOf(timeout));
+			 * 
+			 * HttpParams params = httpClient.getParams();
+			 * HttpConnectionParams.setConnectionTimeout(params, timeout);
+			 * HttpConnectionParams.setSoTimeout(params, timeout);
+			 */
+
+			// cyq modify begin
+			PlainConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory();
+			SSLConnectionSocketFactory sslsf = SSLConnectionSocketFactory.getSocketFactory();
+			Registry<ConnectionSocketFactory> r = RegistryBuilder.<ConnectionSocketFactory> create()
+					.register("http", plainsf).register("https", sslsf).build();
+			PoolingHttpClientConnectionManager ccm = new PoolingHttpClientConnectionManager(r);
+			ccm.setMaxTotal(200);
+			ccm.setDefaultMaxPerRoute(20);
+
+			httpClient = HttpClients.custom().setConnectionManager(ccm).build();
+
+			requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).setConnectTimeout(timeout)
+					.setSocketTimeout(timeout).build();
+			// end
+
+		} catch (KeyManagementException e) {
+			log.error(e, e);
+		} catch (NoSuchAlgorithmException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		}
+	}
+
+	/**
+	 * 向HTTPS地址发送POST请求
+	 * 
+	 * @param reqURL
+	 *            请求地址
+	 * @param params
+	 *            请求参数
+	 * @return 响应内容
+	 */
+	@SuppressWarnings("unchecked")
+	public String sendStringPostRequest(String reqURL, Map<String, String> params1) {
+		Map<String, String> params = params1;
+		try {
+			if (params == null) {
+				params = Collections.EMPTY_MAP;
+			}
+
+			HttpEntity entity = sendPostRequest(reqURL, params); // 获取响应实体
+			
+			if( null != entity ){
+				String content = EntityUtils.toString(entity, UTF_8);
+
+				EntityUtils.consume(entity);
+
+				return content;
+			}
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	/**
+	 * 向HTTPS地址发送POST请求
+	 * 
+	 * @param reqURL
+	 *            请求地址
+	 * @param params
+	 *            请求参数
+	 * @return 响应内容
+	 */
+	@SuppressWarnings("unchecked")
+	public String sendStringPostRequest(String reqURL, String data) {
+		try {
+
+			StringEntity reqEntity = new StringEntity(data, UTF_8);
+
+			HttpEntity entity = sendPostRequest(reqURL, Collections.EMPTY_MAP, reqEntity); // 获取响应实体
+
+			if( null != entity ){
+				
+				String content = EntityUtils.toString(entity, UTF_8);
+
+				EntityUtils.consume(entity);
+
+				return content;
+				
+			}
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	/**
+	 * 向HTTPS地址发送POST请求
+	 * 
+	 * @param reqURL
+	 *            请求地址
+	 * @param params
+	 *            请求参数
+	 * @return 响应内容
+	 */
+	public String sendStringPostRequest(String reqURL, Map<String, String> headerParas1, String data) {
+		Map<String, String> headerParas = headerParas1;
+		try {
+
+			StringEntity reqEntity = new StringEntity(data, UTF_8);
+
+			HttpEntity entity = sendPostRequest(reqURL, headerParas, reqEntity); // 获取响应实体
+			
+			if( null != entity ){
+				String content = EntityUtils.toString(entity, UTF_8);
+
+				EntityUtils.consume(entity);
+
+				return content;
+			}
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	/**
+	 * 向HTTPS地址发送POST请求
+	 * 
+	 * @param reqURL
+	 *            请求地址
+	 * @param params
+	 *            请求参数
+	 * @return 响应内容
+	 */
+	@SuppressWarnings("unchecked")
+	public HttpEntity sendPostRequest(String reqURL, Map<String, String> params1) {
+		Map<String, String> params = params1;
+		if (params == null) {
+			params = Collections.EMPTY_MAP;
+		}
+
+		List<NameValuePair> lstParams = new ArrayList<NameValuePair>(params.size());
+
+		for (String key : params.keySet()) {
+			lstParams.add(new BasicNameValuePair(key, params.get(key)));
+		}
+
+		return sendPostRequest(reqURL, Collections.EMPTY_MAP, lstParams);
+	}
+
+	@SuppressWarnings("unchecked")
+	public HttpEntity sendPostRequest(String reqURL, Map<String, String> headerParas1, Map<String, String> params1) {
+		Map<String, String> params = params1;
+		Map<String, String> headerParas = headerParas1;
+		if (params == null) {
+			params = Collections.EMPTY_MAP;
+		}
+
+		headerParas = checkUserAgent(headerParas);
+
+		List<NameValuePair> lstParams = new ArrayList<NameValuePair>(params.size());
+
+		for (String key : params.keySet()) {
+			lstParams.add(new BasicNameValuePair(key, params.get(key)));
+		}
+
+		return sendPostRequest(reqURL, headerParas, lstParams);
+	}
+
+	public HttpEntity sendPostRequest(String reqURL, Map<String, String> headerParas, List<NameValuePair> params) {
+
+		try {
+			HttpEntity entity = new UrlEncodedFormEntity(params, UTF_8);
+			return sendPostRequest(reqURL, headerParas, entity);
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		}
+		return null;
+
+	}
+
+	public HttpEntity sendPostRequest(String reqURL, Map<String, String> headerParas1, HttpEntity reqEntity) {
+		Map<String, String> headerParas = headerParas1;
+		try {
+
+			HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost
+			httpPost.setEntity(reqEntity);
+
+			headerParas = checkUserAgent(headerParas);
+			for (String key : headerParas.keySet()) {
+				httpPost.setHeader(key, headerParas.get(key));
+			}
+
+			Header[] headers = httpPost.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("request--header:" + header.getName() + ":" + header.getValue());
+			}
+
+			HttpResponse response = httpClient.execute(httpPost); // 执行POST请求
+			headers = response.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("response--header:" + header.getName() + ":" + header.getValue());
+			}
+			HttpEntity entity = response.getEntity(); // 获取响应实体
+
+			this.debug(httpPost.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
+
+			if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) {
+				String location = response.getLastHeader("location").getValue();
+				log.debug("重定向:" + location);
+				EntityUtils.consume(entity);
+				return sendPostRequest(location, headerParas, reqEntity);
+			}
+
+			return entity;
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	public String sendStringDeleteRequest(String reqURL, Map<String, String> headerParas1) {
+		Map<String, String> headerParas = headerParas1;
+		try {
+
+			HttpDelete httpDelete = new HttpDelete(reqURL); // 创建HttpPost
+
+			headerParas = checkUserAgent(headerParas);
+			for (String key : headerParas.keySet()) {
+				httpDelete.setHeader(key, headerParas.get(key));
+			}
+
+			Header[] headers = httpDelete.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("request--header:" + header.getName() + ":" + header.getValue());
+			}
+
+			HttpResponse response = httpClient.execute(httpDelete); // 执行POST请求
+			headers = response.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("response--header:" + header.getName() + ":" + header.getValue());
+			}
+			HttpEntity entity = response.getEntity(); // 获取响应实体
+
+			this.debug(httpDelete.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
+
+			if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) {
+				return null;
+			}
+
+			return EntityUtils.toString(entity);
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+	
+	/**
+	 * debug log
+	 * 
+	 * @param uri
+	 * @param code
+	 * @param length
+	 * @param header
+	 */
+	private void debug(URI uri, int code, long length, Header header){
+		log.debug("请求地址: " + uri);
+		log.debug("响应状态: " + code);
+		log.debug("响应长度: " + length);
+		log.debug("响应类型: " + header);
+	}
+
+	public String sendStringPutRequest(String reqURL, Map<String, String> headerParas1, String body) {
+		Map<String, String> headerParas = headerParas1;
+		try {
+
+			HttpPut httpPut = new HttpPut(reqURL); // 创建HttpPost
+
+			headerParas = checkUserAgent(headerParas);
+			for (String key : headerParas.keySet()) {
+				httpPut.setHeader(key, headerParas.get(key));
+			}
+
+			Header[] headers = httpPut.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("request--header:" + header.getName() + ":" + header.getValue());
+			}
+
+			StringEntity reqEntity = new StringEntity(body, UTF_8);
+			httpPut.setEntity(reqEntity);
+
+			HttpResponse response = httpClient.execute(httpPut); // 执行POST请求
+			headers = response.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("response--header:" + header.getName() + ":" + header.getValue());
+			}
+			HttpEntity entity = response.getEntity(); // 获取响应实体
+
+			this.debug(httpPut.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
+			
+			if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) {
+				return null;
+			}
+
+			return EntityUtils.toString(entity);
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	public HttpEntity sendPostRequest(String reqURL, Map<String, String> headerParas1, String param) {
+		Map<String, String> headerParas = headerParas1;
+		try {
+
+			HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost
+
+			BasicHttpEntity requestBody = new BasicHttpEntity();
+			requestBody.setContent(new ByteArrayInputStream(param.getBytes(UTF_8)));
+			requestBody.setContentLength(param.getBytes(UTF_8).length);
+
+			httpPost.setEntity(requestBody);
+
+			headerParas = checkUserAgent(headerParas);
+			for (String key : headerParas.keySet()) {
+				httpPost.setHeader(key, headerParas.get(key));
+			}
+
+			Header[] headers = httpPost.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("request--header:" + header.getName() + ":" + header.getValue());
+			}
+
+			log.debug("request--param:" + param);
+
+			HttpResponse response = httpClient.execute(httpPost); // 执行POST请求
+			headers = response.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("response--header:" + header.getName() + ":" + header.getValue());
+			}
+			HttpEntity entity = response.getEntity(); // 获取响应实体
+
+			this.debug(httpPost.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
+			
+			if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) {
+				String location = response.getLastHeader("location").getValue();
+				log.debug("重定向:" + location);
+				EntityUtils.consume(entity);
+				return sendPostRequest(location, headerParas, param);
+			}
+
+			return entity;
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	public String sendStringGetRequest(String reqURL, Map<String, String> headerParas, Map<String, String> params) {
+		try {	
+			HttpEntity entity = sendGetRequest(reqURL, headerParas, params);
+			
+			if( null != entity ){
+				return EntityUtils.toString(entity, UTF_8);
+			}
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	public HttpEntity sendGetRequest(String reqURL, Map<String, String> headerParas, Map<String, String> params) {
+		HttpResponse response = this.sendGetRequestAsResponse(reqURL, headerParas, params);
+		if(response != null){
+			return response.getEntity();
+		}
+		return null;
+	}
+
+	private Map<String, String> checkUserAgent(Map<String, String> headerParas1) {
+		Map<String, String> headerParas = headerParas1;
+		if (headerParas == null || headerParas.isEmpty()) {
+			headerParas = new HashMap<String, String>(1);
+		}
+
+		String agentKey = "User-Agent";
+		if (headerParas.containsKey(agentKey)) {	
+			headerParas.remove(agentKey);
+		}
+
+		headerParas.put(agentKey, "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko");
+
+		return headerParas;
+
+	}
+
+	@SuppressWarnings("unchecked")
+	public HttpResponse sendGetRequestAsResponse(String reqURL, Map<String, String> headerParas1,
+			Map<String, String> params1) {
+		Map<String, String> params = params1;
+		Map<String, String> headerParas = headerParas1;
+		try {
+			// HttpGet httpGet = new HttpGet(reqURL); // 创建HttpPost
+
+			headerParas = checkUserAgent(headerParas);
+
+			if (params == null) {
+				params = Collections.EMPTY_MAP;
+			}
+			// begin
+			RequestBuilder requestBuilder = RequestBuilder.get().setConfig(requestConfig).setUri(reqURL);
+			for (String key : headerParas.keySet()) {
+				requestBuilder.addHeader(key, headerParas.get(key));
+			}
+			for (String key : params.keySet()) {
+				requestBuilder.addParameter(key, params.get(key));
+			}
+			HttpUriRequest request = requestBuilder.build();
+			// end
+
+			// Header[] headers = httpGet.getAllHeaders();
+			Header[] headers = request.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("request--header:" + header.getName() + ":" + header.getValue());
+			}
+
+			// HttpResponse response = httpClient.execute(httpGet); // 执行POST请求
+			HttpResponse response = httpClient.execute(request);
+			headers = response.getAllHeaders();
+			for (Header header : headers) {
+				log.debug("response--header:" + header.getName() + ":" + header.getValue());
+			}
+			HttpEntity entity = response.getEntity(); // 获取响应实体
+
+			this.debug(request.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
+			
+			if (302 == response.getStatusLine().getStatusCode() && response.containsHeader("location")) {
+				String location = response.getLastHeader("location").getValue();
+				log.debug("重定向");
+				return sendGetRequestAsResponse(location, headerParas, params);
+			}
+
+			return response;
+
+		} catch (UnsupportedEncodingException e) {
+			log.error(e, e);
+		} catch (ClientProtocolException e) {
+			log.error(e, e);
+		} catch (ParseException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/ImageUtils.java b/src/main/java/com/qxueyou/scc/base/util/ImageUtils.java
new file mode 100644
index 0000000..c52db28
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/ImageUtils.java
@@ -0,0 +1,162 @@
+package com.qxueyou.scc.base.util;
+
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.imageio.ImageIO;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import sun.misc.BASE64Encoder;
+@SuppressWarnings("restriction")
+public class ImageUtils {
+
+	private static Logger log = LogManager.getLogger("ImageUtils");
+
+	public static void doBeautiful(File file) {
+
+		try {
+			BufferedImage bi1 = ImageIO.read(file);
+			Ellipse2D.Double shapeEllipse = new Ellipse2D.Double(0, 0, Math.min(bi1.getWidth(),bi1.getHeight()),
+					Math.min(bi1.getWidth(),bi1.getHeight()));
+
+			// 设置透明背景
+			BufferedImage bi2 = new BufferedImage(bi1.getWidth(),
+					bi1.getHeight(), BufferedImage.TRANSLUCENT);
+			Graphics2D g2 = bi2.createGraphics();
+			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+			g2.setClip(shapeEllipse);
+
+			// 画图片
+			g2.drawImage(bi1, 0, 0, null);
+			g2.dispose();
+
+			ImageIO.write(bi2, "PNG", file);
+
+		} catch (IOException e) {
+			log.error("图片处理失败", e);
+		}
+	}
+	//矩形头像
+	public static void doRectangle(File file){
+		try {
+			BufferedImage bi1 = ImageIO.read(file);
+			Rectangle2D.Double shapeRectangle = new Rectangle2D.Double(0, 0, Math.min(bi1.getWidth(),bi1.getHeight()),
+					Math.min(bi1.getWidth(),bi1.getHeight()));
+
+			// 设置透明背景
+			BufferedImage bi2 = new BufferedImage(bi1.getWidth(),
+					bi1.getHeight(), BufferedImage.TRANSLUCENT);
+			Graphics2D g2 = bi2.createGraphics();
+			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+			g2.setClip(shapeRectangle);
+
+			// 画图片
+			g2.drawImage(bi1, 0, 0, null);
+			g2.dispose();
+
+			ImageIO.write(bi2, "PNG", file);
+
+		} catch (IOException e) {
+			log.error("图片处理失败", e);
+		}
+	}
+	
+	/**
+	 * 为图片生成缩略图
+	 * @param file
+	 */
+	public static void decreaseSizeImage(File file) {
+
+		try {
+			
+			BufferedImage bi1 = ImageIO.read(file);
+			
+
+			int width = bi1.getWidth();
+			int height = bi1.getHeight();
+			
+
+			// 设置透明背景
+			BufferedImage bi2 = new BufferedImage(getPriviewImageWidth(width,height),
+					getPriviewImageHeight(width,height), bi1.getType());
+			Graphics2D g2 = bi2.createGraphics();
+
+			// 画图片
+			Image image = bi1.getScaledInstance(getPriviewImageWidth(width,height), getPriviewImageHeight(width,height), Image.SCALE_DEFAULT);  
+			g2.drawImage(image, 0, 0, null);
+			g2.dispose();
+
+			ImageIO.write(bi2, "PNG", createPreviewFile(file));
+
+		} catch (IOException e) {
+			log.error("图片处理失败", e);
+		}
+	}
+	
+	public static File createPreviewFile(File f){
+		return new File(f.getParentFile().getAbsolutePath().concat("/pre_").concat(f.getName()));
+	}
+	
+	private static int getPriviewImageWidth(int width,int height){
+		double wid = width;
+		double hei = height;
+		
+		double ratioWid = wid / 120;
+		double ratioHeight = hei / 160;
+		
+		if(ratioWid >= ratioHeight){
+			return 120;
+		}else{
+			return (int) (wid/ratioHeight);
+		}
+	}
+	
+	private static int getPriviewImageHeight(int width,int height){
+		double wid = width;
+		double hei = height;
+		
+		double ratioWid = wid / 120;
+		double ratioHeight = hei / 160;
+		
+		if(ratioWid >= ratioHeight){
+			return (int) (hei/ratioWid);
+		}else{
+			return 160;
+		}
+	}
+	
+	public static String encodeImgageToBase64(String imgStr) { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理  
+        
+		
+		ByteArrayOutputStream outputStream = null;  
+        try {  
+        	URL imageUrl=   new URL(imgStr); 
+            BufferedImage bufferedImage = ImageIO.read(imageUrl);  
+            outputStream = new ByteArrayOutputStream();  
+            ImageIO.write(bufferedImage, "jpg", outputStream);  
+        } catch (MalformedURLException e1) {  
+            e1.printStackTrace();  
+        } catch (IOException e) {  
+            e.printStackTrace();  
+        }  
+        // 对字节数组Base64编码  
+        BASE64Encoder encoder = new BASE64Encoder();  
+        return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串  
+    } 
+	
+	public static void main(String[] args){
+		
+		doRectangle(new File("C:/Users/Public/Pictures/Sample Pictures/desert.jpg"));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/JacobUtil.java b/src/main/java/com/qxueyou/scc/base/util/JacobUtil.java
new file mode 100644
index 0000000..9cd5140
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/JacobUtil.java
@@ -0,0 +1,165 @@
+package com.qxueyou.scc.base.util;
+
+import com.jacob.activeX.ActiveXComponent;
+import com.jacob.com.ComThread;
+import com.jacob.com.Dispatch;
+import com.jacob.com.Variant;
+
+public class JacobUtil {  
+    
+    public static final String DOC = "doc";  
+    public static final String DOCX = "docx";  
+    public static final String PDF = "pdf";  
+    public static final String XLS = "xls";  
+    public static final String XLSX = "xlsx";  
+    public static final String MP4 = "mp4";  
+    public static final String PPT = "ppt";  
+    public static final String PPTX = "pptx";  
+   
+     // 8 代表word保存成html    
+     public static final int WORD2HTML = 8;    
+     // 17代表word保存成pdf  
+     public static final int WD2PDF = 17;  
+     public static final int PPT2PDF = 32;  
+     public static final int XLS2PDF = 0;  
+   
+ public static void main(String[] args) {     
+     String pptfile = "D:/upload/新员工入职向导及信息201605.xlsx";    
+     //String pdffile = "D:/upload/b.pdf";    
+     String htmlfile="D:/upload/excel.pdf";
+     //ppt2pdf(pptfile,pdffile);    
+     excel2pdf(pptfile,htmlfile);
+ }    
+     
+/** 
+  * @param resourceType 资源类型 
+  * @param path 资源路径 
+  * @return 
+  * TODO 文件转换 
+  */  
+ public static Integer formatConvert(String resourceType, String resourcePath) {  
+     Integer pages = 0;  
+     String resource = resourcePath.substring(0, resourcePath.lastIndexOf("."));  
+     if(resourceType.equalsIgnoreCase(DOC)||resourceType.equalsIgnoreCase(DOCX)){  
+         //word转成pdf和图??  
+         word2pdf(resourcePath, resource+".pdf");  
+     }else if(resourceType.equalsIgnoreCase(XLS)||resourceType.equalsIgnoreCase(XLSX)){  
+         //excel文件转成图片  
+         excel2pdf(resourcePath, resource+".pdf");  
+     }else if(resourceType.equalsIgnoreCase(PPT)||resourceType.equalsIgnoreCase(PPTX)){  
+         ppt2pdf(resourcePath, resource+".pdf");  
+     }else if(resourceType.equalsIgnoreCase(MP4)){  
+         //视频文件不转??  
+         pages = 0;  
+     }  
+     return pages;  
+ }  
+     
+   
+ public static void word2pdf(String docfile, String pdffile)       
+ {       
+     // 启动word应用程序(Microsoft Office Word 2003)    
+     ActiveXComponent app = null;    
+     try{  
+         ComThread.InitSTA();  
+         app = new ActiveXComponent("Word.Application");       
+         app.setProperty("Visible", false);  
+         System.out.println("*****正在转换...*****");    
+         // 设置word应用程序不可??  
+        // app.setProperty("Visible", new Variant(false));      
+         // documents表示word程序的所有文档窗口,(word是多文档应用程序???   
+         Dispatch docs = app.getProperty("Documents").toDispatch();      
+         // 打开要转换的word文件    
+        /* Dispatch doc = Dispatch.invoke(      
+                 docs,      
+                 "Open",      
+                 Dispatch.Method,      
+                 new Object[] { docfile, new Variant(false),    
+                         new Variant(true) }, new int[1]).toDispatch(); */  
+           
+         Dispatch doc = Dispatch.call(  
+                 docs,       
+                 "Open",  
+                 docfile,  
+                 false,  
+                 true).toDispatch();       
+         // 调用Document对象的saveAs方法,将文档保存为pdf格式  
+         /*Dispatch.invoke(doc, "ExportAsFixedFormat", Dispatch.Method, new Object[] {      
+                 pdffile, new Variant(wdFormatPDF) }, new int[1]);*/    
+           
+         Dispatch.call(doc, "ExportAsFixedFormat", pdffile, WD2PDF);    
+         // 关闭word文件    
+         Dispatch.call(doc, "Close", false);   
+     }       
+     catch (Exception e)       
+     {   ComThread.Release();    
+         e.printStackTrace();      
+     }       
+     finally      
+     {       
+         //关闭word应用程序    
+         app.invoke("Quit", 0);     
+         ComThread.Release();  
+     }     
+     System.out.println("*****转换完毕********");    
+ }  
+      
+   
+   
+ public static void ppt2pdf(String pptfile,String pdffile){  
+     ActiveXComponent app = null;  
+     //app.setProperty("Visible", new Variant(false));  
+     try {  
+         ComThread.InitSTA();  
+         app = new ActiveXComponent("PowerPoint.Application");  
+         Dispatch files = app.getProperty("Presentations").toDispatch();  
+         Dispatch file = Dispatch.call(files, "open", pptfile, false, true).toDispatch();  
+         Dispatch.call(file, "SaveAs", pdffile, PPT2PDF);  
+         Dispatch.call(file,"Close");  
+     } catch (Exception e) {  
+         ComThread.Release();  
+         e.printStackTrace();  
+         //throw e;  
+     }finally{  
+         app.invoke("Quit");  
+         ComThread.Release();  
+     }  
+ }  
+   
+ public static void excel2pdf(String excelfile,String pdffile){  
+     ActiveXComponent app = null;  
+     try{  
+         ComThread.InitSTA(true);  
+         app = new ActiveXComponent("Excel.Application");  
+         app.setProperty("Visible", false);  
+         app.setProperty("AutomationSecurity", new Variant(3));//禁用??  
+         Dispatch excels = app.getProperty("Workbooks").toDispatch();  
+         /*Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, new Object[]{ 
+                 excelfile, 
+                 new Variant(false), 
+                 new Variant(false), 
+         },new int[9]).toDispatch();*/  
+         Dispatch excel = Dispatch.call(excels, "Open",   
+                 excelfile,false,true).toDispatch();  
+         //转换格式ExportAsFixedFormat  
+         /*Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[]{ 
+                 new Variant(0),//pdf格式=0 
+                 pdffile, 
+                 new Variant(0)//0=标准(生成的pdf图片不会变模??) 1=??小文??(生成的pdf图片模糊的一塌糊??) 
+         }, new int[1]);*/  
+         Dispatch.call(excel, "ExportAsFixedFormat",XLS2PDF,  
+                 pdffile);  
+         Dispatch.call(excel, "Close", false);  
+         if(app!=null){  
+             app.invoke("Quit");  
+             app=null;  
+         }  
+     }catch(Exception e){  
+         ComThread.Release();  
+         e.printStackTrace();  
+     }finally{  
+         ComThread.Release();  
+     }  
+ }  
+
+}  
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/base/util/MD5Utils.java b/src/main/java/com/qxueyou/scc/base/util/MD5Utils.java
new file mode 100644
index 0000000..25be54e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/MD5Utils.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.base.util;
+
+import java.security.MessageDigest;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class MD5Utils {  
+
+    private static final String UTF8 = "utf-8";  
+  
+    private static Logger log = LogManager.getLogger("MD5Utils");
+    
+    /** 
+     * MD5数字签名 
+     * @param src 
+     * @return 
+     * @throws Exception 
+     */  
+	public static String md5Digest(String src) {
+		try {
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			byte[] b = md.digest(src.getBytes(UTF8));
+			return byte2HexStr(b);
+		} catch (Exception e) {
+			log.error(e,e);
+		} 
+		return null;
+	} 
+	
+    /** 
+     * 字节数组转化为大写16进制字符串 
+     * @param b 
+     * @return 
+     */  
+    private static String byte2HexStr(byte[] b) {  
+        StringBuilder sb = new StringBuilder();  
+        for (int i = 0; i < b.length; i++) {  
+            String s = Integer.toHexString(b[i] & 0xFF);  
+            if (s.length() == 1) {  
+                sb.append("0");  
+            }  
+            sb.append(s.toUpperCase());  
+        }  
+        return sb.toString();  
+    }  
+    
+    /***
+	 * MD5加码 生成32位md5码
+	 */  
+    public static String string2MD5(String inStr){  
+        MessageDigest md5 = null;  
+        try{  
+            md5 = MessageDigest.getInstance("MD5");  
+        }catch (Exception e){  
+            e.printStackTrace();  
+            return "";  
+        }  
+        char[] charArray = inStr.toCharArray();  
+        byte[] byteArray = new byte[charArray.length];  
+  
+        for (int i = 0; i < charArray.length; i++)  
+            byteArray[i] = (byte) charArray[i];  
+        byte[] md5Bytes = md5.digest(byteArray);  
+        StringBuffer hexValue = new StringBuffer();  
+        for (int i = 0; i < md5Bytes.length; i++){  
+            int val = ((int) md5Bytes[i]) & 0xff;  
+            if (val < 16){
+                hexValue.append("0");
+            }
+            hexValue.append(Integer.toHexString(val));  
+        }  
+        return hexValue.toString();  
+    }  
+}  
diff --git a/src/main/java/com/qxueyou/scc/base/util/MyJsCssVersionUtils.java b/src/main/java/com/qxueyou/scc/base/util/MyJsCssVersionUtils.java
new file mode 100644
index 0000000..6a339ba
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/MyJsCssVersionUtils.java
@@ -0,0 +1,349 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.security.MessageDigest;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 前三个属性根据实际存储位置设置
+ * @author ody.yuan
+ *
+ */
+public class MyJsCssVersionUtils {
+	
+	 /** web工程的发布路径  */
+    private static String webContent = "qxueyou";
+    
+    /** web工程中web文件夹的绝对路径 D:\project\workspace_web\versioncontroller0\web\js\qxueyou.js  */
+    /** web工程中web文件夹的绝对路径 D:\project\workspaceStkkk\qxueyou_web\web\js\qxueyou.js  */
+    private static String webFileAbsolutePath = "C:" + File.separator + "workspace" + File.separator + "qxueyou_web";
+    
+    /** 扫描js、css、html文件的文件夹绝对路径,固定设置为web目录  */
+    private static String fileScanDirec = "C:" + File.separator + "workspace" + File.separator + "qxueyou_web";
+    
+	/** 匹配html中引入js文件  */
+    private static Pattern scriptImportPattrrn = Pattern.compile("<script(.*)src(.*)</script>");
+    
+    /** 匹配html中引入css文件  */
+    private static Pattern cssImportPattrrn = Pattern.compile("<link(.*)href(.*)rel(.*)>");
+    
+    private static char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+    
+    
+    /**
+     * 得到处理过的文件路径为key,文件md5值为value的map
+     * @param filePath 文件路径
+     * @param fileExtension 文件类型
+     * @param map map
+     */
+    private static void getFileMD5Map(String filePath,String fileExtension,Map<String,String> map,String version){
+    	readFile(filePath,fileExtension,map,version);
+    }
+    
+    /**
+     * 得到路径下的所需文件和文件的md5值
+     * @param filePath
+     * @param fileExtension
+     * @param map
+     */
+    private static void readFile(String filePath,String fileExtension,Map<String,String> map,String version){
+    	
+    	File file = new File(filePath);
+    	if(file.isFile()){
+    		String fiePath = file.getAbsolutePath();
+    		//符合指定类型
+    		if(fiePath.endsWith(fileExtension)){
+    			generateMap(file,fileExtension,map,version);
+    		}
+    	}else if(file.isDirectory()){
+    		String[] fileList = file.list();
+    		for(String name : fileList){
+    			readFile(filePath + File.separator + name,fileExtension,map,version);
+    		}
+    	}
+    }
+    
+    /**
+     * 得到一个文件的map
+     * @param file
+     * @param map
+     */
+    private static void generateMap(File file, String fileExtension, Map<String,String> map,String version){
+    	//TODO  缩短md5值
+    	String strKey = file.getAbsolutePath();
+		strKey = strKey.replace(webFileAbsolutePath, File.separator + webContent);
+		strKey = strKey.replace("\\", "/");
+		String strValue = getMD5(file);
+		if(StringUtils.isNotBlank(strValue)){
+			strValue = version;
+		}
+		map.put(strKey, strValue);
+		
+    }
+    
+    /**
+     * 对文件全文生成MD5摘要
+     * 
+     * @param file
+     *            要加密的文件
+     * @return MD5摘要码
+     */
+    public static String getMD5(File file) {
+        FileInputStream fis = null;
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            fis = new FileInputStream(file);
+            byte[] buffer = new byte[2048];
+            int length = -1;
+            //暂时不用
+            //long s = System.currentTimeMillis();
+            while ((length = fis.read(buffer)) != -1) {
+                md.update(buffer, 0, length);
+            }
+            byte[] b = md.digest();
+            return byteToHexString(b);
+            // 16位加密
+            // return buf.toString().substring(8, 24);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return null;
+        } finally {
+            try {
+                fis.close();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+ 
+    /**
+     * 把byte[]数组转换成十六进制字符串表示形式
+     * @param tmp    要转换的byte[]
+     * @return 十六进制字符串表示形式
+     */
+    private static String byteToHexString(byte[] tmp) {
+    	
+        String s;
+        // 用字节表示就是 16 个字节
+        char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
+        // 所以表示成 16 进制需要 32 个字符
+        int k = 0; // 表示转换结果中对应的字符位置
+        for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
+            // 转换成 16 进制字符的转换
+            byte byte0 = tmp[i]; // 取第 i 个字节
+            str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换, 
+            // >>> 为逻辑右移,将符号位一起右移
+            str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
+        }
+        s = new String(str); // 换后的结果转换为字符串
+        return s;
+    }
+    
+    /**
+     * 
+     * @param filePath
+     * @param fileExtension
+     * @param map
+     */
+    private static void getHtml(String filePath,String fileExtension,Map<String,String> map){
+    	readHtmlFile(fileScanDirec,".ftl",map);
+    }
+    
+    /**
+     * 得到路径下的所需文件和文件的md5值
+     * @param filePath
+     * @param fileExtension
+     * @param map
+     */
+    private static void readHtmlFile(String filePath,String fileExtension,Map<String,String> map){
+    	
+    	File file = new File(filePath);
+    	if(file.isFile()){
+    		String fiePath = file.getAbsolutePath();
+    		//符合指定类型
+    		if(fiePath.endsWith(fileExtension)){
+    			addVersion(file,map);
+    		}
+    	}else if(file.isDirectory()){
+    		String[] fileList = file.list();
+    		for(String name : fileList){
+    			readHtmlFile(filePath + File.separator + name,fileExtension,map);
+    		}
+    	}
+    }
+    
+    /**
+     * 得到一个文件的map
+     * @param file
+     * @param map
+     */
+    private static void addVersion(File file,Map<String,String> map){
+    	//TODO  缩短md5值
+    	InputStream is = null;
+        OutputStream os = null;
+        List<String> contentList = new ArrayList<String>();
+    	
+    	// 读文件
+        try {
+            //指定utf-8格式
+            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
+            String line = null;
+            
+            while ((line = br.readLine()) != null) {
+            	//TODO version 传null值
+                String modLine = getModLine(line, null,map);
+                if (modLine != null) {
+                	//System.out.println(modLine);
+                    line = modLine;
+                }
+                line = line + "\r\n";
+                contentList.add(line);
+            }
+            // 关闭流
+            br.close();
+        } catch (Exception e) {
+            System.out.println("读文件失败:" + file.getAbsolutePath());
+            e.printStackTrace();
+        } finally {
+            if (null != is) {
+                try {
+                    is.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+
+        }
+        // 写文件
+        try {
+        	//指定utf8格式
+        	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"));
+        	
+            for (Iterator<String> it = contentList.iterator(); it.hasNext();) {
+                String line = it.next();
+                bw.write(line);
+            } 
+            // 更新到文件
+            bw.flush();
+            // 关闭流
+            bw.close();
+        } catch (Exception e) {
+            System.out.println("写文件失败:" + file.getAbsolutePath());
+            e.printStackTrace();
+        } finally {
+            if (null != os) {
+                try {
+                    os.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+    
+    /**
+     * 
+     * 查找文件需要的版本号的js 与css 行
+     * @param line 行字符
+     * @param version 默认版本
+     * @param map md5 map
+     * @return 
+     */
+    private static String getModLine(String line, String version, Map<String, String> map) {
+    	
+        //匹配html引入js文件       eg:<script type="text/javascript" src="/qxueyou/web/js/qxueyou.js"></script>
+        if (scriptImportPattrrn.matcher(line).find()) {
+        	//以引号分隔,以/开始
+        	String md5Version = null;
+        	String strLine[] = line.split("\"");
+        	for(String str:strLine){
+        		if(null != md5Version){
+        			break;
+        		}
+        		if(str.startsWith("/")){
+        			//如果已有版本号,按?分隔,取第一个
+        			if(str.lastIndexOf("?version") != -1){
+        				str = str.substring(0, str.lastIndexOf("?version"));
+        			}
+        			md5Version = map.get(str);
+        		}
+        	}
+        	
+        	int pos = line.lastIndexOf(".js");
+        	if(null != md5Version){
+        		String modLine = line.substring(0, pos) + ".js?version=" + md5Version+ "\"></script>";
+        		return modLine;
+        	}
+        
+        //匹配html引入css文件      eg:<link href="/qxueyou/web/css/bootstrap.min.css" rel="stylesheet">
+        } else if (cssImportPattrrn.matcher(line).find()) {
+        	
+        	//以引号分隔,以/开始
+        	String md5Version = null;
+        	String strLine[] = line.split("\"");
+        	for(String str:strLine){
+        		if(null != md5Version){
+        			break;
+        		}
+        		if(str.startsWith("/")){
+        			//如果已有版本号,按?分隔,取第一个
+        			if(str.lastIndexOf("?version") != -1){
+        				str = str.substring(0, str.lastIndexOf("?version"));
+        			}
+        			md5Version = map.get(str);
+        		}
+        	}
+        	
+        	int pos = line.lastIndexOf(".css");
+        	if(null != md5Version){
+        		String modLine = line.substring(0, pos) + ".css?version=" + md5Version+ "\" rel=\"stylesheet\">";
+        		return modLine;
+        	}
+        	
+        }
+        
+        return line;
+    }
+
+	/**
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		
+		Date date = new Date();
+        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");
+        String version = df.format(date);
+		
+		Map<String,String> objMap = new HashMap<String,String>();
+		//添加js文件
+		getFileMD5Map(fileScanDirec,".js",objMap,version);
+		//添加CSS文件
+		getFileMD5Map(fileScanDirec,".css",objMap,version);
+		
+		//循环html文件,修改其中的css和js引入路径
+		getHtml(fileScanDirec,".ftl",objMap);
+		
+		System.out.println("successful");
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/NumRandomUtils.java b/src/main/java/com/qxueyou/scc/base/util/NumRandomUtils.java
new file mode 100644
index 0000000..f655200
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/NumRandomUtils.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.base.util;
+/**
+ * 数字随机
+ * @author iqtogether
+ *
+ */
+public class NumRandomUtils {
+	/**
+	 * 随机6位数字
+	 * @return
+	 */
+	public static String randomSixNum(){
+		return String.valueOf((int)((Math.random()*9+1)*100000));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/PageUtils.java b/src/main/java/com/qxueyou/scc/base/util/PageUtils.java
new file mode 100644
index 0000000..005805a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/PageUtils.java
@@ -0,0 +1,34 @@
+package com.qxueyou.scc.base.util;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.PaginationData;
+
+public class PageUtils {
+	
+	public static Pager getPager(Integer pageSize,Integer pageNum){
+		Pager page = new Pager();
+		
+		page.setPageNum(pageNum==null?1:pageNum);
+		page.setPageSize(pageSize==null?1000:pageSize);
+		
+		return page;
+	}
+	
+	/**
+	 * bootstrap自动组装的分页对象解析为hibernate提供接口的分页对象
+	 * @param objPaginationData 前台自动组装的分页对象
+	 * @return
+	 */
+	public static Pager getPager(PaginationData objPaginationData){
+		Pager page = new Pager();
+		
+		int iOffset = objPaginationData.getOffset();
+		int iLimit = objPaginationData.getLimit();
+		
+		page.setPageNum(iOffset==0||iLimit==0?1:iOffset/iLimit+1);
+		page.setPageSize(iLimit);
+		
+		return page;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/ParamsUtils.java b/src/main/java/com/qxueyou/scc/base/util/ParamsUtils.java
new file mode 100644
index 0000000..f6f2f37
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/ParamsUtils.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.base.model.Param;
+
+public class ParamsUtils {
+	
+	/**
+     * 获取查询条件的公用方法
+     * 
+     * @param request HttpServletRequest
+     * @param strSupportQueryArray 定义自己功能模块支持查询的条件数组集合
+     * @param lstQueryCondition 查询条件
+     */
+    public static void getAllQueryCondition(HttpServletRequest request, String[] strSupportQueryArray,
+        List<Param> lstParams) {
+        Map<String, String[]> mapParams = request.getParameterMap();
+        Set<Map.Entry<String, String[]>> entryseSet = mapParams.entrySet();
+        String strKey = "";
+        String strValue = "";
+        List<String> lstSupportQuery = Arrays.asList(strSupportQueryArray);
+        /**
+         * 条件分为以下几种情况: 1、关键字查询  2、单选按钮的数据字典值  3、复选数组,比如类型
+         * 4、时间范围,比如开始时间和结束时间 5、数字范围, 6、其它类型
+         */
+        for (Map.Entry<String, String[]> entry : entryseSet) {
+            /** 获取参数中的键值对 */
+            strKey = entry.getKey().toString();
+            strValue = entry.getValue()[0];
+            /** 不支持的条件将会被过滤 */
+            if (lstSupportQuery.contains(strKey) && StringUtils.isNotBlank(strValue)) {
+                // 去空格
+                strValue = strValue.trim();
+                if (strValue.matches("^[0-9]*[0-9][0-9]*$")) {// 单选 数字
+                	lstParams.add(new Param(strKey, " = ", strValue));
+                } else if (strValue.contains(",")) {// 复选 数字
+                    if (strValue.replace(",", "").matches("^-?[0-9]*$")){
+                    	lstParams.add(new Param(strKey, " in ",  strValue ));
+                    }
+                } else if (strValue.contains("~")) {// 时间范围
+                    
+                }else if (strValue.contains("-")) {// 数字范围
+                	
+                }  else {// 其它
+                	lstParams.add(new Param(strKey, " LIKE ", "%"+strValue+"%"));
+                }
+            }
+        }
+    }
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/PhoneNOUtils.java b/src/main/java/com/qxueyou/scc/base/util/PhoneNOUtils.java
new file mode 100644
index 0000000..fc211d2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/PhoneNOUtils.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.regex.Pattern;
+
+/**
+ * 手机号码工具类
+ * @author 德虎
+ *
+ */
+public final class PhoneNOUtils {
+
+	private final static Pattern pattern = Pattern.compile("1[3,4,5,7,8]\\d{9}");
+	
+	/**
+	 * 验证是否为有效手机号
+	 * @param phoneNo
+	 * @return
+	 */
+	public static boolean isValidPhoneNo(String phoneNo){
+		
+		return pattern.matcher(phoneNo).matches();
+		
+	}
+	
+	/**
+	 * 替换手机号关键号码为*
+	 * @param phoneNo
+	 * @return
+	 */
+	public static String coverKeyNo(String phoneNo){
+		
+		if(phoneNo.length()!=11){
+			return phoneNo;
+		}
+		
+		return phoneNo.substring(0, 3).concat("****").concat(phoneNo.substring(7));
+		
+	}
+	
+	public static void main(String[] args){
+		System.out.println(PhoneNOUtils.coverKeyNo("18676726706"));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/QBeanUtils.java b/src/main/java/com/qxueyou/scc/base/util/QBeanUtils.java
new file mode 100644
index 0000000..d7526ff
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/QBeanUtils.java
@@ -0,0 +1,200 @@
+package com.qxueyou.scc.base.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * Bean 工具类
+ * @author 夏德虎
+ *
+ */
+public class QBeanUtils {
+	
+	private static final Logger log = LogManager.getLogger("QBeanUtils");
+	
+	/**
+	 * 将 Bean 转换成 Map,支持 将 id 转换为 id1
+	 * @param src bean对象
+	 * @param propertyMap 字段映射
+	 * @return
+	 */
+	public static final <T> Map<String,Object> bean2Map(T src,Map<String,String> propertyMap) {
+		
+		Map<String, Object> result=null;
+		try {
+			result = new HashMap<String,Object>(10);
+			
+			for(String key:propertyMap.keySet()) {
+				
+				Object value = null;
+				
+				if(key.contains(".")) {
+					
+					String[] keys = key.split("\\.");
+					value = PropertyUtils.getProperty(PropertyUtils.getProperty(src, keys[0]),keys[1]);
+				
+					result.put(propertyMap.get(key), value);
+				}else {
+					value = PropertyUtils.getProperty(src, key);
+				}
+				
+				
+				if(propertyMap.get(key).contains(",")) {
+					String[] destKeys = propertyMap.get(key).split(",");
+					for(String destKey:destKeys) {
+						result.put(destKey, value);	
+					}
+				}else {
+					result.put(propertyMap.get(key), value);
+				}
+			}
+			
+		} catch (IllegalAccessException e) {
+			log.error(e,e);
+		} catch (InvocationTargetException e) {
+			log.error(e,e);
+		} catch (NoSuchMethodException e) {
+			log.error(e,e);
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1
+	 * @param src List<T>对象
+	 * @param propertyMap 字段映射
+	 * @return
+	 */
+	public static final <T> List<Map<String,Object>> listBean2ListMap(List<T> src,Map<String,String> propertyMap) {
+		if(src==null || src.isEmpty()){
+			return new ArrayList<Map<String,Object>>();
+		}
+		
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>(src.size()*2);
+		
+		for(T t:src) {
+			result.add(bean2Map(t,propertyMap));
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1
+	 * @param src List<T>对象
+	 * @param propertyMap 字段映射
+	 * @return
+	 * @throws NoSuchMethodException 
+	 * @throws InvocationTargetException 
+	 * @throws IllegalAccessException 
+	 */
+	@SuppressWarnings("unchecked")
+	public static final <T,V> List<V> listPropertyVal(List<T> src,String propName){
+		if(src==null || src.size()==0){
+			return null;
+		}
+		List<V> result = new ArrayList<V>(src.size());
+		try{
+			for(T t:src){
+				V value = null;
+				if(propName.contains(".")) {
+					String[] propertyNames = propName.split("\\.");
+					value = (V) PropertyUtils.getProperty(PropertyUtils.getProperty(t, propertyNames[0]),propertyNames[1]);
+				}else {
+					value = (V) PropertyUtils.getProperty(t, propName);
+				}
+				result.add(value);
+			}
+		} catch (IllegalAccessException e) {
+			log.error(e,e);
+		} catch (InvocationTargetException e) {
+			log.error(e,e);
+		} catch (NoSuchMethodException e) {
+			log.error(e,e);
+		}
+		return result;
+	}
+	
+	/**
+	 * 将bean列表中的一个属性值作为KEY,另一个属性值作为value
+	 * @param src
+	 * @param propertyKey
+	 * @param propertyVal
+	 * @return
+	 * @throws NoSuchMethodException 
+	 * @throws InvocationTargetException 
+	 * @throws IllegalAccessException 
+	 */
+	@SuppressWarnings("unchecked")
+	public static final <T,K,V>  Map<K,V>  mapProperty(List<T> src,String keyProp,String valProp){
+		if(src==null || src.size()==0){
+			return null;
+		}
+		
+		Map<K,V>  result = new HashMap<K,V>(src.size());
+		
+		try{
+			for(T t:src){
+				K key = null;
+				V val = null;
+				if(keyProp.contains(".")) {
+					String[] keyProps = keyProp.split("\\.");
+					key = (K) PropertyUtils.getProperty(PropertyUtils.getProperty(t, keyProps[0]),keyProps[1]);
+				}else {
+					key = (K) PropertyUtils.getProperty(t, keyProp);
+				}
+				
+				if(valProp.contains(".")) {
+					String[] valProps = valProp.split("\\.");
+					val = (V) PropertyUtils.getProperty(PropertyUtils.getProperty(t, valProps[0]),valProps[1]);
+				}else {
+					val = (V) PropertyUtils.getProperty(t, valProp);
+				}
+				
+				result.put(key, val);
+			}
+		} catch (IllegalAccessException e) {
+			log.error(e,e);
+		} catch (InvocationTargetException e) {
+			log.error(e,e);
+		} catch (NoSuchMethodException e) {
+			log.error(e,e);
+		}
+		return result;
+	}
+	
+	
+	/**
+	 * 将Object 挑选指定属性转换成  Map<String,Object>
+	 * @param src 源目标
+	 * @param propertyMap 字段映射
+	 * @return
+	 */
+	public static final Map<String,Object> copyPropertiesToMap(Object src,Map<String,String> propertyMap) {
+		
+		Map<String,Object> dest = new HashMap<String,Object>(propertyMap.size()*2);
+		
+		try {
+			for(String key:propertyMap.keySet()) {
+				dest.put(propertyMap.get(key),PropertyUtils.getProperty(src, key));
+			}
+		} catch (IllegalAccessException e) {
+			log.error(e,e);
+		} catch (InvocationTargetException e) {
+			log.error(e,e);
+		} catch (NoSuchMethodException e) {
+			log.error(e,e);
+		}
+		
+		return dest;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/QFileUtils.java b/src/main/java/com/qxueyou/scc/base/util/QFileUtils.java
new file mode 100644
index 0000000..3c1959e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/QFileUtils.java
@@ -0,0 +1,27 @@
+package com.qxueyou.scc.base.util;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 文件工具类
+ * @author xiadehu
+ *
+ */
+public final class QFileUtils {  
+
+	/**
+	 * 根据后缀名得到文件类型
+	 * @param fileName
+	 * @return
+	 */
+	public static String getFileFormat(String fileName){
+		
+		if(StringUtils.isEmpty(fileName)) {
+			return "DATA";
+		}
+		
+		int lastDotIdx = fileName.lastIndexOf('.');
+		return lastDotIdx<0?"DATA":fileName.substring(lastDotIdx+1).toUpperCase();
+	}
+      
+}  
diff --git a/src/main/java/com/qxueyou/scc/base/util/QrCodeUtils.java b/src/main/java/com/qxueyou/scc/base/util/QrCodeUtils.java
new file mode 100644
index 0000000..0a442e5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/QrCodeUtils.java
@@ -0,0 +1,160 @@
+package com.qxueyou.scc.base.util;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+//import com.qxueyou.scc.base.service.IConfigService;
+import com.qxueyou.scc.shorturl.util.ShortUrlUtils;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageConfig;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+/**
+ * 二维码生成工具类
+ * 
+ * @author 德虎
+ * 
+ */
+public final class QrCodeUtils {
+	
+	private static Logger log = LogManager.getLogger(QrCodeUtils.class);
+
+	/**
+	 * 生成二维码图片并输出到流
+	 * @param msg 需要生成的二维码信息
+	 * @param os 二维码图片输出流,输出后会自动关闭
+	 * @param logoFlag 是否添加logo
+	 * 
+	 */
+	public static void createQRCodeImgAndSend(String msg, OutputStream os, boolean logoFlag) {
+		try {
+			//如果是网址,则转换为短网址
+			/*if(ShortUrlUtils.IsUrl(msg)){
+				IShortUrlService shortUrlService = SpringUtil.getBean(IShortUrlService.class);
+				ShortUrl oldShortUrl = shortUrlService.queryShortUrl(msg);
+				if(oldShortUrl != null){//判断是否已经存在数据
+					msg = oldShortUrl.getShortUrl();
+				}else{
+					//获取域
+					String domain = SpringUtil.getBean(IConfigService.class).getConfigByEnv("domain-name");
+					//获取短链接编码
+					String strShortUrlCode = ShortUrlUtils.shortUrl(msg);
+					//拼接成短链接
+					String shortUrl = domain+(domain.indexOf("/qxueyou", 10)>=0?"/s/":"/qxueyou/s/")+strShortUrlCode;
+					ShortUrl objShortUrl = new ShortUrl();
+					//保存短链接的值
+					objShortUrl.setShortUrl(shortUrl);
+					objShortUrl.setLongUrl(msg);
+					objShortUrl.setShortUrlCode(strShortUrlCode);
+					objShortUrl.setDeleteFlag(false);
+					TraceUtils.setCreateTrace(objShortUrl);
+					msg = shortUrl;
+					shortUrlService.saveShortUrl(objShortUrl);
+				}
+			}*/
+			MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
+			
+			Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>(
+					2);
+			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
+			hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
+
+			BitMatrix bitMatrix = multiFormatWriter.encode(
+					msg,
+					BarcodeFormat.QR_CODE, 300, 300, hints);
+			MatrixToImageConfig config = new MatrixToImageConfig(0xFF000000, -1);
+			//添加机构图标
+			if(StringUtils.isNoneBlank(ClientUtils.getOrgLogoPath()) && ShortUrlUtils.IsUrl(msg) && logoFlag){
+			    int width = bitMatrix.getWidth();  
+		        int height = bitMatrix.getHeight();  
+		        BufferedImage image = new BufferedImage(width, height,  
+		                BufferedImage.TYPE_INT_RGB);  
+		        for (int x = 0; x < width; x++) {  
+		            for (int y = 0; y < height; y++) {  
+		                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000  
+		                        : 0xFFFFFFFF);  
+		            }  
+		        } 
+				addLogo_QRCode(image, os);
+			}else{
+				MatrixToImageWriter.writeToStream(bitMatrix, "PNG",
+						os, config);
+			}
+
+		} catch (WriterException e) {
+			log.error(e, e);
+		} catch (IOException e) {
+			log.error(e, e);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+	}
+	
+	/**
+	 * 添加机构logo
+	 * 
+	 * @param buf 生成的二维码
+	 * @return
+	 * @throws IOException 
+	 */
+	public static void addLogo_QRCode(BufferedImage buf, OutputStream os) throws IOException{
+		CloseableHttpClient httpClient = null;
+		HttpGet httpget = null;
+		try{
+//			String domain = SpringUtil.getBean(IConfigService.class).getConfigByEnv("oss-domain");
+			String domain =null;
+			httpClient = HttpClients.createDefault();
+			//获取机构logo
+			httpget = new HttpGet(domain+ClientUtils.getOrgLogoPath());  
+			HttpResponse response = httpClient.execute(httpget);
+			HttpEntity entity = response.getEntity();
+			/**
+			* 读取Logo图片
+			*/
+			BufferedImage logo = ImageIO.read(entity.getContent());
+			/**
+			* 读取二维码图片,并构建绘图对象
+			*/
+			Graphics2D g = buf.createGraphics();
+			int widthLogo = 65, heightLogo = 65;
+		
+			// 计算图片放置位置
+			int x = (buf.getWidth() - widthLogo) / 2;
+			int y = (buf.getHeight() - heightLogo) / 2;
+		
+			//开始绘制图片
+			g.setColor(Color.WHITE);
+			g.drawImage(logo, x, y, widthLogo, heightLogo, null);
+	        g.setStroke(new BasicStroke(1));  
+			g.dispose();
+			ImageIO.write(buf, "PNG", os);
+		}catch (Exception e) {
+			ImageIO.write(buf, "PNG", os);
+			log.error("二维码添加logo失败"+e);
+		}finally {
+			httpClient.close();
+		}
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/QueryDslOptionBuilder.java b/src/main/java/com/qxueyou/scc/base/util/QueryDslOptionBuilder.java
new file mode 100644
index 0000000..1c79344
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/QueryDslOptionBuilder.java
@@ -0,0 +1,112 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.Collection;
+import java.util.function.Function;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
+
+import com.querydsl.core.types.Ops;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.querydsl.core.types.dsl.Expressions;
+
+/**
+ * jpa查询  参数为空包装builder
+ * @author zhiyong
+ *
+ */
+public class QueryDslOptionBuilder {
+	
+	private BooleanExpression predicate;
+
+    public QueryDslOptionBuilder() {
+        this.predicate  = Expressions.booleanOperation(Ops.EQ, Expressions.ONE, Expressions.ONE);
+    }
+    
+    public QueryDslOptionBuilder(BooleanExpression predicate) {
+        this.predicate  = predicate;
+    }
+    
+    /**
+     * 不为空 and 对象
+     * @param expressionFunction
+     * @param value
+     * @return
+     */
+    public <T> QueryDslOptionBuilder and(Function<T, BooleanExpression> expressionFunction, T value) {
+        if (value != null) {
+            return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(value)));
+        }
+        return this;
+    }
+    
+    /**
+     * 不为空 and  String类型
+     * @param expressionFunction
+     * @param value
+     * @return
+     */
+    public QueryDslOptionBuilder and(Function<String, BooleanExpression> expressionFunction, String value) {
+        if (!StringUtils.isBlank(value)) {
+            return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(value)));
+        }
+        return this;
+    }
+    
+    /**
+     * 不为空 and  集合类型
+     * @param expressionFunction
+     * @param collection
+     * @return
+     */
+    public <T> QueryDslOptionBuilder and(Function<Collection<T>, BooleanExpression> expressionFunction,
+    		Collection<T> collection) {
+        if (!CollectionUtils.isEmpty(collection)) {
+            return new QueryDslOptionBuilder(predicate.and(expressionFunction.apply(collection)));
+        }
+        return this;
+    }
+    
+    /**
+     * 不为空 or 所有对象
+     * @param expressionFunction
+     * @param value
+     * @return
+     */
+    public <T> QueryDslOptionBuilder or(Function<T, BooleanExpression> expressionFunction, T value) {
+        if (value != null) {
+            return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(value)));
+        }
+        return this;
+    }
+    
+    /**
+     * 不为空 or  String类型
+     * @param expressionFunction
+     * @param value
+     * @return
+     */
+    public QueryDslOptionBuilder or(Function<String, BooleanExpression> expressionFunction, String value) {
+        if (!StringUtils.isBlank(value)) {
+            return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(value)));
+        }
+        return this;
+    }
+
+    /**
+     * 不为空 or  集合类型
+     * @param expressionFunction
+     * @param collection
+     * @return
+     */
+    public <T> QueryDslOptionBuilder or(Function<Collection<T>, BooleanExpression> expressionFunction, Collection<T> collection) {
+        if (!CollectionUtils.isEmpty(collection)) {
+            return new QueryDslOptionBuilder(predicate.or(expressionFunction.apply(collection)));
+        }
+        return this;
+    }
+
+    public BooleanExpression build() {
+        return predicate;
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/RSAUtils.java b/src/main/java/com/qxueyou/scc/base/util/RSAUtils.java
new file mode 100644
index 0000000..2e633c3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/RSAUtils.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.base.util;
+
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import com.caucho.hessian.client.HessianProxyFactory;
+//import com.qxueyou.scc.base.service.IConfigService;
+
+/**
+ * RSA加解密--调用远程加解密服务
+ * @author 德虎
+ *
+ */
+public class RSAUtils {
+
+	private static Logger log = LogManager.getLogger(RSAUtils.class);
+	
+	private static RSAClient client;
+	
+	/**
+	 * 构建远程RSA加解密客户端
+	 */
+	private static void buildClient() {
+		try {
+			String  url = null;
+			HessianProxyFactory hessianFactory = new HessianProxyFactory();
+			client = (RSAClient) hessianFactory.create(RSAClient.class, url);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+	}
+	
+	/**
+	 * 调用远程加密服务对字符串加密
+	 * @param string
+	 * @return
+	 */
+	public static String encrypt(String string) {
+		if (client == null) {
+			buildClient();
+		}
+		if (StringUtils.isEmpty(string)) {
+			return "";
+		}
+		try {
+			return client.encrypt(string);
+		} catch (Exception e) {
+			log.error("加解密服务初始化错误:"+e.getMessage(), e);
+		}
+		return null;
+	}
+	
+	/**
+	 * 调用远程解密服务对密文字符串解决
+	 * @param string
+	 * @return
+	 */
+	public static String decrypt(String string) {
+		if (client == null) {
+			buildClient();
+		}
+		if (StringUtils.isEmpty(string)) {
+			return "";
+		}
+		try {
+			return client.decrypt(string);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+
+	/**
+	 * Hessian本地接口
+	 * @author user
+	 *
+	 */
+	interface RSAClient {
+		String encrypt(String string);
+		String decrypt(String string);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/ReisUtils.java b/src/main/java/com/qxueyou/scc/base/util/ReisUtils.java
new file mode 100644
index 0000000..af1229c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/ReisUtils.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class ReisUtils {
+	private static Logger log = LogManager.getLogger(ReisUtils.class);
+	
+	/**
+	 * 序列化对象
+	 */
+	public static byte[] serialize(Object obj){
+		ObjectOutputStream objectOs = null;
+		ByteArrayOutputStream byteArrOs = null;
+		byte[] bytes = null;
+		try {
+			byteArrOs = new ByteArrayOutputStream();
+			objectOs = new ObjectOutputStream(byteArrOs);
+			objectOs.writeObject(obj);
+			bytes = byteArrOs.toByteArray();
+		} catch (Exception e) {
+			log.error("序列化对象失败!");
+		}finally {
+			IOUtils.closeQuietly(objectOs);
+			IOUtils.closeQuietly(byteArrOs);
+		}
+		return bytes;
+	}
+
+	/**
+	 * 反序列化对象
+	 */
+	public static Object unserialize(byte[] bytes){
+		Object returnObject = null;
+		ByteArrayInputStream byteArrIns = null;
+		ObjectInputStream objectIns = null;
+		try {
+			if (bytes != null && bytes.length!=0){
+				byteArrIns = new ByteArrayInputStream(bytes);
+				objectIns = new ObjectInputStream(byteArrIns);
+				returnObject = objectIns.readObject();
+			}
+		}catch (Exception e) {
+			log.error("反序列化对象失败!",e);
+		}finally {
+			IOUtils.closeQuietly(objectIns);
+			IOUtils.closeQuietly(byteArrIns);
+		}
+		return returnObject;
+	}
+	
+
+//	public static void main(String[] args) throws IOException{
+//		Object s = null;
+//		 byte[] b = serialize(s);
+//		Object obj= unserialize(b);
+//		System.out.println(s);
+//	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/RequestClientUtils.java b/src/main/java/com/qxueyou/scc/base/util/RequestClientUtils.java
new file mode 100644
index 0000000..35f9d88
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/RequestClientUtils.java
@@ -0,0 +1,183 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.Enumeration;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import ua_parser.Client;
+import ua_parser.Parser;
+
+
+
+public final class RequestClientUtils {
+	
+	private static Logger log = LogManager.getLogger(RequestClientUtils.class);
+	
+	private static final String[][] agentArrs = new String[][]{
+		{"micromessenger","Weixin"},
+		{"android","Android"},
+		{"mac os","Mac"},
+		{"windows phone","Windows"}};
+		
+	
+	/**
+	 * 获取客户端ip地址
+	 * 
+	 * @param request
+	 * @return
+	 */
+	public static String getRemoteIP(HttpServletRequest request) {
+		
+		if (request.getHeader("x-real-ip") == null) {
+			return request.getRemoteAddr();
+		}
+		return request.getHeader("x-real-ip");
+		
+	}
+	
+	/**
+	 * 获取服务器本地IP
+	 * @return
+	 */
+	public static String getLocalIP() {
+		InetAddress ip = null;
+		try {
+			Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface.getNetworkInterfaces();
+			while (netInterfaces.hasMoreElements()) {
+				NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
+				Enumeration<InetAddress> ips = ni.getInetAddresses();
+				while (ips.hasMoreElements()) {
+					ip = (InetAddress) ips.nextElement();
+					// 127.开头的都是lookback地址
+					if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
+						return ip.getHostAddress();
+					}
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	/**
+	 * 获取COOKIE : KEY
+	 * @param httpRequest
+	 * @return
+	 */
+	public static Cookie getKeyCookie(HttpServletRequest httpRequest) {
+		Cookie[] cookies = httpRequest.getCookies();
+		Cookie cookieKey = null;
+		
+		if(cookies==null){
+			return null;
+		}
+		
+		for(Cookie cookie:cookies){
+			if("KEY".equals(cookie.getName())){
+				cookieKey = cookie;
+				break;
+			}
+		}
+		return cookieKey;
+	}
+
+	/**
+	 * 解析客户端
+	 * @param userAgent userAgent
+	 * @return
+	 */
+	public static String parseClient(String userAgent){
+		
+		if(userAgent==null){
+			return null;
+		}
+		
+		int leftBracketStartIdx = userAgent.indexOf('(');
+		int rightBracketStartIdx = userAgent.indexOf(')');
+		
+		
+		if(leftBracketStartIdx<0 || rightBracketStartIdx<0){
+			return userAgent;
+		}
+		
+		return userAgent.substring(leftBracketStartIdx+1, rightBracketStartIdx);
+	}
+	
+	
+	/**
+	 * 判断是PC端还是移动端
+	 * 
+	 * @return
+	 */
+	public static boolean  isMobileDevice(String requestHeader){
+        /**
+         * android : 所有android设备
+         * iphone : iphone 
+         * windows phone:Nokia等windows系统的手机
+         * ipad :ipad
+         */
+		String lowerRequestHeader = requestHeader;
+        String[] deviceArray = new String[]{"android","iphone","windows phone","ipad"};
+        if(lowerRequestHeader == null) {
+            return false;
+        }
+        lowerRequestHeader = lowerRequestHeader.toLowerCase();
+        for(int i=0;i<deviceArray.length;i++){
+            if(lowerRequestHeader.indexOf(deviceArray[i])>0){
+                return true;
+            }
+        }
+        
+        return false;
+	}
+	
+	/**
+	 * 判断是PC端还是移动端
+	 * 
+	 * @return
+	 */
+	public static String  getAgentDevice(String requestHeader){
+		
+        for(String[] agent:agentArrs){
+        	if(requestHeader.toLowerCase().indexOf(agent[0])>0){
+                return agent[1];
+            }
+        }
+        return "未知";
+	}
+	
+	/**
+	 * 判断是否在微信浏览器打开
+	 * 
+	 * @return
+	 */
+	public static boolean  isWeixin(String userAgent){
+        
+		return getAgentDevice(userAgent).equals("Weixin");
+	}
+	
+	/**
+	 * 获取头信息
+	 * 
+	 * @param userAgent
+	 * @return
+	 */
+	public static Client userAgent(String userAgent){
+		Parser uaParser;
+		try {
+			uaParser = new Parser();
+			return uaParser.parse(userAgent);
+		} catch (IOException e) {
+			log.error("解析头信息失败", e);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/SHA1.java b/src/main/java/com/qxueyou/scc/base/util/SHA1.java
new file mode 100644
index 0000000..1f9e666
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/SHA1.java
@@ -0,0 +1,25 @@
+package com.qxueyou.scc.base.util;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class SHA1 {
+
+	public static String getSHA1(String decript)
+			throws NoSuchAlgorithmException {
+		MessageDigest digest = java.security.MessageDigest
+				.getInstance("SHA-1");
+		digest.update(decript.getBytes());
+		byte messageDigest[] = digest.digest();
+		// Create Hex String
+		StringBuffer hexString = new StringBuffer();
+		for (int i = 0; i < messageDigest.length; i++) {
+			String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
+			if (shaHex.length() < 2) {
+				hexString.append(0);
+			}
+			hexString.append(shaHex);
+		}
+		return hexString.toString();
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/SerializeUtils.java b/src/main/java/com/qxueyou/scc/base/util/SerializeUtils.java
new file mode 100644
index 0000000..a0cb26c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/SerializeUtils.java
@@ -0,0 +1,84 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * 序列化工具类
+ * @author 德虎
+ *
+ */
+public class SerializeUtils {
+	
+	private static Logger log = LogManager.getLogger("SerializeUtils");
+
+	/**
+	 * 将对象转换为字节数组
+	 * @param obj 可序列化的对象
+	 * @return 字节数组
+	 */
+	public static byte[] toByteArrayFromObject(Object obj){
+		
+		if(!(obj instanceof Serializable)){
+			return new byte[0];
+		}
+		
+		ByteArrayOutputStream bo = new ByteArrayOutputStream();
+		ObjectOutputStream oo = null;
+		
+		try {
+			
+			oo = new ObjectOutputStream(bo);
+			
+			oo.writeObject(obj);
+			
+			return bo.toByteArray();
+			
+		} catch (IOException e) {
+			log.error(e,e);
+		} finally{
+			IOUtils.closeQuietly(oo);
+		}
+		
+		return new byte[0];
+		
+	}
+	
+	/**
+	 * 将字节数组为对象转换
+	 * @param data 字节数组
+	 * @param cls 要转化的对象类型
+	 * @return 要转化的对象
+	 */
+	public static <T> T toObjectFromByte(byte[] data,Class<T> cls){
+		
+		ByteArrayInputStream bi = new ByteArrayInputStream(data);
+		ObjectInputStream oi = null;
+		
+		try {
+			
+			oi = new ObjectInputStream(bi);
+			
+			Object obj = oi.readObject();
+			
+			return cls.cast(obj);
+			
+		} catch (IOException e) {
+			log.error(e,e);
+		} catch (ClassNotFoundException e) {
+			log.error(e,e);
+		} finally{
+			IOUtils.closeQuietly(oi);
+		}
+		
+		return null;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/SpringUtil.java b/src/main/java/com/qxueyou/scc/base/util/SpringUtil.java
new file mode 100644
index 0000000..a9f1507
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/SpringUtil.java
@@ -0,0 +1,61 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.base.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+*
+* Spring 工具类,提供获取Sping上下文环境及获取Bean的接口
+* @history 2010-09-12 夏德虎 新建
+*
+*/
+@Component
+public class SpringUtil implements ApplicationContextAware {
+
+    private static ApplicationContext applicationContext;
+    
+    private SpringUtil(){}
+    
+    /**
+     * 获取bean
+     * @param <T> 泛型类型
+     * @param name bean name
+     * @param clz bean 类型
+     * @param context servlet上下文
+     * @return bean实例
+     */
+    public static <T> T getBean(String name,Class<T> clz){
+        return applicationContext.getBean(name,clz);
+    }
+    
+    /**
+     * 获取bean
+     * @param <T> 泛型类型
+     * @param clz bean 类型
+     * @param context servlet上下文
+     * @return bean实例
+     */
+    public static <T> T getBean(Class<T> clz){
+        return applicationContext.getBean(clz);
+    }
+    
+    @SuppressWarnings("unchecked")  
+    public static <T> T getBean(String name) throws BeansException {  
+        return (T) applicationContext.getBean(name);
+    }  
+
+
+	@Override
+	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+		SpringUtil.applicationContext= applicationContext;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/StatelessFilter.java b/src/main/java/com/qxueyou/scc/base/util/StatelessFilter.java
new file mode 100644
index 0000000..b12fac3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/StatelessFilter.java
@@ -0,0 +1,30 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+public class StatelessFilter implements Filter {
+	
+	@Override
+	public void destroy() {
+
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response,
+			FilterChain filterChain) throws IOException, ServletException {
+		filterChain.doFilter(request, response);
+	}
+
+	@Override
+	public void init(FilterConfig arg0) throws ServletException {
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/StringMapUtils.java b/src/main/java/com/qxueyou/scc/base/util/StringMapUtils.java
new file mode 100644
index 0000000..f67d309
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/StringMapUtils.java
@@ -0,0 +1,125 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.StringTokenizer;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.alibaba.fastjson.JSON;
+
+/**
+ * String  和  map<String,String>的转换
+ * @author ody.yuan
+ *
+ */
+public class StringMapUtils {
+	
+	/**
+	 * Map<String,String> 转 String
+	 * 
+	 * @param map         需要转换的map
+	 * @return
+	 */
+	public static String transMapToString(Map<String,String> map){
+		
+		if(null == map || map.isEmpty()){
+			return "";
+		}
+		
+		Entry<String,String> entry;
+		StringBuffer sb = new StringBuffer();  
+		for(Iterator<Entry<String, String>> iterator = map.entrySet().iterator(); iterator.hasNext();){
+			entry = (Entry<String,String>)iterator.next();  
+		    sb.append(entry.getKey().toString()).append( "'" ).append(null==entry.getValue()?"":  
+		    entry.getValue().toString()).append (iterator.hasNext() ? "^" : "");  
+		}  
+		  return sb.toString();  
+	}  
+	
+	/**
+	 * 调用transMapToString方法有map转得String,重新转回map
+	 * 
+	 * @param mapString    调用transMapToString方法有map转得String
+	 * @return
+	 */
+	public static Map<String,String> transStringToMap(String mapString){
+		
+		if(StringUtils.isBlank(mapString)){
+			return new HashMap<String,String>(); 
+		}
+		
+		Map<String,String> map = new HashMap<String,String>();  
+		StringTokenizer items;  
+		for(StringTokenizer entrys = new StringTokenizer(mapString, "^");entrys.hasMoreTokens();   
+		    map.put(items.nextToken(), items.hasMoreTokens() ? (String.valueOf(items.nextToken())) : null)){
+			items = new StringTokenizer(entrys.nextToken(), "'");  
+		} 
+		  return map;  
+		}
+	
+	/**
+	 * json 转 map
+	 * @param json
+	 */
+	@SuppressWarnings("unchecked")
+	public static Map<String,Object> json2Map(String json){ 
+		
+	    Map<String,Object> map = (Map<String,Object>)JSON.parse(json); 
+	    
+	    return map ;
+	    
+	 }
+	
+	/**
+	 * map 转  json
+	 * @param json
+	 */
+	public static String map2Json(Map<String,Object> map){ 
+		
+	    String json = JSON.toJSONString(map,true);
+	    
+	    return json ;
+	 }
+
+	/**
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		
+		String a = "{mobilePhone:'aa',userName:'123'}";
+		Map<String,Object> m1 = json2Map(a);
+		Entry<String,Object> entry1; 
+		for(Iterator<Entry<String, Object>> iterator1 = m1.entrySet().iterator(); iterator1.hasNext();)  
+		{  
+			entry1 = (Entry<String,Object>)iterator1.next();
+			System.out.println(entry1.getKey() + ":" + entry1.getValue());
+		}
+		
+		Map<String,String> s = new HashMap<String,String>();
+		s.put("qq", "3225545");
+		s.put("moile", "133");
+		s.put("name", "stkkk");
+		
+		Map<String,Object> s1 = new HashMap<String,Object>();
+		s1.put("qq", "3225545");
+		s1.put("moile", "133");
+		s1.put("name", "stkkk");
+		System.out.println(map2Json(s1));
+		
+		System.out.println(transMapToString(s));
+		
+		Map<String,String> m = transStringToMap("qq'3225545^moile'133^name'stkkk");
+		Entry<String,String> entry; 
+		for(Iterator<Entry<String, String>> iterator = m.entrySet().iterator(); iterator.hasNext();)  
+		  {  
+		    entry = (Entry<String,String>)iterator.next();
+		    System.out.println(entry.getKey() + ":" + entry.getValue());
+		  }
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/TraceUtils.java b/src/main/java/com/qxueyou/scc/base/util/TraceUtils.java
new file mode 100644
index 0000000..d0d218d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/TraceUtils.java
@@ -0,0 +1,154 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
+import org.hibernate.Hibernate;
+import org.hibernate.proxy.HibernateProxy;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 数据修改轨迹记录工具类
+ */
+public class TraceUtils {
+	
+	/** 管理员账号、账号id */
+	public static final String ADMIN_ACCOUNT="admin";
+	
+	public static final String ADMIN_ACCOUNT_ID="admin";
+	
+	/**
+	 * 设置激活 新增轨迹信息
+	 * @param trace
+	 */
+	public static void setCreateActiveTrace(ITrace trace){
+		
+		trace.setCreateId(ADMIN_ACCOUNT_ID);
+		trace.setCreateTime(new Date(System.currentTimeMillis()));
+		trace.setCreator(ADMIN_ACCOUNT);
+		trace.setUpdateId(ADMIN_ACCOUNT_ID);
+		trace.setUpdateTime(new Date(System.currentTimeMillis()));
+		trace.setUpdator(ADMIN_ACCOUNT);
+		
+	}
+	
+	/**
+	 * 设置新增轨迹信息
+	 * @param trace
+	 */
+	public static void setCreateTrace(ITrace trace){
+		
+		
+		if(ClientUtils.getUserInfo()==null){
+			setCreateActiveTrace(trace);
+			return;
+		}
+		
+		trace.setCreateId(ClientUtils.getUserId());
+		trace.setCreateTime(new Date());
+		trace.setCreator(ClientUtils.getUserName());
+		trace.setUpdateId(ClientUtils.getUserId());
+		trace.setUpdateTime(new Date());
+		trace.setUpdator(ClientUtils.getUserName());
+		
+	}
+	
+	/**
+	 * 设置新增轨迹信息
+	 * @param trace
+	 */
+	@SuppressWarnings("rawtypes")
+	public static void setCreateTrace(Collection cls){
+		
+		ITrace trace=null;
+		for(Object obj : cls){
+			trace = (ITrace) obj;
+			setCreateTrace(trace);
+		}
+	}
+	
+	/**
+	 * 删除已删除的记录
+	 * @param trace
+	 */
+	@SuppressWarnings("rawtypes")
+	public static void removeDelete(List cls){
+		
+		ITrace trace=null;
+		for(int i=cls.size()-1;i>-1;i--){
+			trace = (ITrace) cls.get(i);
+			if(trace.getDeleteFlag()){
+				cls.remove(i);
+			}
+		}
+	}
+	
+	/**
+	 * 设置更新轨迹信息
+	 * @param trace
+	 */
+	public static void setUpdateTrace(ITrace trace){
+		
+		if(ClientUtils.getUserInfo()==null){
+			trace.setUpdateId(ADMIN_ACCOUNT_ID);
+			trace.setUpdateTime(new Date(System.currentTimeMillis()));
+			trace.setUpdator(ADMIN_ACCOUNT);
+			return ;
+		}
+		
+		trace.setUpdateId(ClientUtils.getUserId());
+		trace.setUpdateTime(new Date(System.currentTimeMillis()));
+		trace.setUpdator(ClientUtils.getUserName());
+		
+	}
+	
+	/**
+	 * 设置新增轨迹信息
+	 * @param trace
+	 */
+	@SuppressWarnings("rawtypes")
+	public static void setUpdateTrace(Collection cls){
+		
+		ITrace trace=null;
+		for(Object obj : cls){
+			trace = (ITrace) obj;
+			setUpdateTrace(trace);
+		}
+	}
+	
+	/**
+	 * 通过HashSet踢除重复元素
+	 * @param list
+	 * @return
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public static List removeDuplicateList(List list)  {
+        HashSet h  = new HashSet(list);
+        list.clear();
+        list.addAll(h);
+        return list;
+    }
+	
+	/**
+	 * 初始化代理实体
+	 * @param entity
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T initializeAndUnproxy(T entity) {
+	    if (entity == null) {
+	        throw new 
+	           NullPointerException("初始化实体为空");
+	    }
+
+	    Hibernate.initialize(entity);
+	    if (entity instanceof HibernateProxy) {
+	    	return (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
+	                .getImplementation();
+	    }
+	    return entity;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/UUIDUtils.java b/src/main/java/com/qxueyou/scc/base/util/UUIDUtils.java
new file mode 100644
index 0000000..ed0c3a4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/UUIDUtils.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.Random;
+import java.util.UUID;
+
+/**
+ * UUID工具类
+ * @author 德虎
+ *
+ */
+public final class UUIDUtils {
+	
+	public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",  
+        "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",  
+        "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",  
+        "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",  
+        "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",  
+        "W", "X", "Y", "Z" };
+	
+	public static String specifalChars = "0123456789abcdefghijklmnopqrstuvwxyz";  
+	
+	/**
+	 * 生成UUID
+	 * @return
+	 */
+	public static String generateUUID(){
+		return UUID.randomUUID().toString();
+	}
+	
+	/**
+	 * 生成UUID
+	 * @return
+	 */
+	public static String UUID(){
+		return UUID.randomUUID().toString().replace("-", "");
+	}
+	
+	public static void main(String[] args) {
+		System.out.println(UUIDUtils.UUID());
+	}
+	
+	/**
+	 * 生成8位随机码
+	 * @return
+	 */
+	public static String generateShortUuid() {  
+	    StringBuffer shortBuffer = new StringBuffer();  
+	    String uuid = UUID.randomUUID().toString().replace("-", "");  
+	    for (int i = 0; i < 8; i++) {  
+	        String str = uuid.substring(i * 4, i * 4 + 4);  
+	        int x = Integer.parseInt(str, 16);  
+	        shortBuffer.append(chars[x % 0x3E]);  
+	    }  
+	    return shortBuffer.toString();  
+	  
+	} 
+	
+	/**
+	 * 生成最少16位随机码
+	 * @return
+	 */
+	public static String generateSpecialUuid(int length) {
+		
+		length = length < 16 ? 16 : length ;
+		
+        StringBuffer sb = new StringBuffer();  
+        Random random = new Random();  
+        for (int i = 0; i < length; i++) {  
+            sb.append(specifalChars.charAt(random.nextInt(specifalChars.length())));  
+        }  
+        return sb.toString();  
+    } 
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/UserCodeUtils.java b/src/main/java/com/qxueyou/scc/base/util/UserCodeUtils.java
new file mode 100644
index 0000000..babdb21
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/UserCodeUtils.java
@@ -0,0 +1,64 @@
+package com.qxueyou.scc.base.util;
+
+
+
+public class UserCodeUtils {
+	
+	public static final String allChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+	
+	// 0 - 9     对应ascii值为  48 --> 57
+	// A - Z  对应ascii值为  65 --> 90
+	// a - z  对应ascii值为  97 --> 122
+
+	public static void main(String[] args) {
+		
+		long index = 56800235585L ;
+		
+		generateCode(6,index);
+		
+	}
+	
+	/**
+	 * 生成code
+	 * @param length
+	 * @param index
+	 * @return
+	 */
+	public static String generateCode(int length,long index){
+		
+		String code = "";
+		
+		int[] allIndex = generateCodeIndex(length,index);
+		
+		for(int i = 0 ; i < length; i++) {
+			
+			code = code + allChars.charAt(allIndex[5-i]);
+			
+		}
+		
+		return code ;
+		
+	}
+	
+	/**
+	 * 生成每个位置上的序号
+	 * @param length
+	 * @param index
+	 * @return
+	 */
+	private static int[] generateCodeIndex(int length,long index){
+		
+		int[] result = new int[]{0,0,0,0,0,0};
+		
+		for(int loopTime = 0 ; loopTime < length ; loopTime ++ ){
+			
+			result[loopTime] = (int)(index % 62)  ;
+			
+			index = index / 62 ;
+			
+		}
+		
+		return result ;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/WordExportUtils.java b/src/main/java/com/qxueyou/scc/base/util/WordExportUtils.java
new file mode 100644
index 0000000..62fe6da
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/WordExportUtils.java
@@ -0,0 +1,37 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.IOException;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateExceptionHandler;
+
+public final class WordExportUtils {
+	
+    public Configuration configure;
+    
+    public WordExportUtils(){
+        configure = new Configuration(Configuration.VERSION_2_3_21);
+        configure.setDefaultEncoding("utf-8");
+    }
+    /**
+     * 根据Doc模板生成word文件
+     * @param dataMap 需要填入模板的数据
+     * @param downloadType 文件名称
+     */
+    public Template createDoc(String downloadType){
+        try {
+            //设置模板装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载。
+            //加载模板文件,放在testDoc下
+        	configure.setClassForTemplateLoading(this.getClass(), "");
+            //设置异常处理器
+            configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
+            
+            return configure.getTemplate(downloadType);//定义Template对象,注意模板类型名字与downloadType要一致
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
+
diff --git a/src/main/java/com/qxueyou/scc/base/util/WordProcessUtils.java b/src/main/java/com/qxueyou/scc/base/util/WordProcessUtils.java
new file mode 100644
index 0000000..2ee8733
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/WordProcessUtils.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.base.util;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import com.caucho.hessian.client.HessianProxyFactory;
+//import com.qxueyou.scc.base.service.IConfigService;
+
+/**
+ * 使用远程服务HanLP引擎,处理文本,包括分词,转拼音,提取摘要,词频统计,关键字提取
+ * @author xiadehu
+ *
+ */
+public final class WordProcessUtils {
+	
+	private static WordProcessClient client;
+	
+	private static Logger log = LogManager.getLogger(WordProcessUtils.class);
+	
+	private static void buildClient() {
+		try {
+//			String url = SpringUtil.getBean(IConfigService.class).getConfig("word-process-url");
+			String url = null;
+			HessianProxyFactory hessianFactory = new HessianProxyFactory();
+			client = (WordProcessClient) hessianFactory.create(WordProcessClient.class, url);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+	}
+
+	
+	/**
+	 * 分词,如果传入null,则返回空
+	 * @param text 原文
+	 * @return 分词后的结果
+	 */
+	public static String segment(String text){
+		if (client == null) {
+			buildClient();
+		}
+		return client.segment(text);
+	}
+	
+	/**
+	 * 转拼音,无分隔符
+	 * @param text 原文
+	 * @return 转拼音的结果
+	 */
+	public static String toPinyin(String text){
+		if (client == null) {
+			buildClient();
+		}
+		return client.toPinyin(text);
+		
+	}
+	
+	/**
+	 * 转拼音
+	 * @param text 原文
+	 * @param seperator 分隔符
+	 * @return 转拼音的结果
+	 */
+	public static String toPinyin(String text,String seperator){
+		if (client == null) {
+			buildClient();
+		}
+		return client.toPinyin(text,seperator);
+		
+	}
+	
+	interface WordProcessClient {
+		String segment(String text);
+		
+		String toPinyin(String text);
+		
+		String toPinyin(String text,String seperator);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/XmlUtils.java b/src/main/java/com/qxueyou/scc/base/util/XmlUtils.java
new file mode 100644
index 0000000..3d92264
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/XmlUtils.java
@@ -0,0 +1,101 @@
+package com.qxueyou.scc.base.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+public final class XmlUtils {
+	
+	private static Logger log = LogManager.getLogger(XmlUtils.class);
+
+	public static Map<String,String> parseXML(String xml){
+		
+		Map<String,String> result = new HashMap<String,String>(10);
+		
+		try {
+
+			Document document = DocumentHelper.parseText(xml);
+
+			Element root = document.getRootElement();
+			
+			Element child=null;	
+			for(Object element:root.elements()){
+				child = (Element) element;
+				
+				result.put(child.getName(), child.getText());
+				
+			}
+			
+		} catch (DocumentException e) {
+			log.error(e,e);
+		}
+		return result;
+	}
+	
+	public static String toXml(Map<String,String> map,String rootName){
+		
+		StringBuilder sb = new StringBuilder(300);
+		
+		sb.append("<").append(rootName).append(">");
+		
+		for(String key:map.keySet()){
+			sb.append("<").append(key).append(">");	
+			sb.append("<![CDATA[").append(map.get(key)).append("]]>");
+			sb.append("</").append(key).append(">");
+		}
+		
+		sb.append("</").append(rootName).append(">");
+		
+		return sb.toString();
+		
+	}
+	
+	public static Map<String,Object> parseMutiXML(String xml){
+		
+		Map<String,Object> result = new HashMap<String,Object>(10);
+		
+		try {
+
+			Document document = DocumentHelper.parseText(xml);
+
+			Element root = document.getRootElement();
+			
+			Element child=null;	
+			for(Object element:root.elements()){
+				child = (Element) element;
+				
+				if(child.getName().contains("list")){// lst组合
+					result.put(child.getName(), getXMLList(child));
+				}else{
+					result.put(child.getName(), child.getText());
+				}
+			}
+			
+		} catch (DocumentException e) {
+			log.error(e,e);
+		}
+		return result;
+	}
+	
+	@SuppressWarnings({ "rawtypes" })
+	public static List<String> getXMLList(Element element) {
+			
+	        List<String> litObject = new ArrayList<String>();
+	        Iterator objElementIterator = element.elementIterator();
+	        while (objElementIterator.hasNext()) {
+	        	 Element objElement = (Element) objElementIterator.next();
+	             litObject.add(objElement.getText());
+	            
+	        }
+	        return litObject;
+	    }
+}
diff --git a/src/main/java/com/qxueyou/scc/base/util/docConverterUtil.java b/src/main/java/com/qxueyou/scc/base/util/docConverterUtil.java
new file mode 100644
index 0000000..ba1f554
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/base/util/docConverterUtil.java
@@ -0,0 +1,137 @@
+package com.qxueyou.scc.base.util;
+
+import java.io.File;
+
+import com.artofsolving.jodconverter.DocumentConverter;
+import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
+
+/**
+ * 文件转换为pdf的工具类
+ * 
+ * @author lyl
+ *
+ */
+public class docConverterUtil {
+	@SuppressWarnings("unused")
+	private String fileString; // (待转换文件的根路径)
+	@SuppressWarnings("unused")
+	private String outputPath = ""; // pdf输出路径 ,如果不设置就输出在默认的位置
+	@SuppressWarnings("unused")
+	private String fileName;
+	private File pdfFile;
+	private File docFile;
+
+	public docConverterUtil(String fileString) {
+		ini(fileString);
+	}
+
+	/**
+	 * 可自定义设置转换文件全路径名
+	 * 
+	 * @param fileString
+	 */
+	public void setFile(String fileString) {
+		ini(fileString);
+	}
+
+	/**
+	 * 初始化
+	 * 
+	 * @param fileString
+	 */
+	private void ini(String fileString) {
+		this.fileString = fileString;
+		docFile = new File(fileString);
+	}
+
+	/**
+	 * 设置输出路径
+	 */
+	public void setOutputPath(String outputPath) {
+		this.outputPath = outputPath;
+		if (!outputPath.equals("")) {
+			pdfFile = new File(outputPath + ".pdf");
+			/*
+			 * System.out.println(fileName); String realName =
+			 * fileString.substring(fileName.lastIndexOf("/")+1);
+			 * System.out.println(realName); if (outputPath.charAt(outputPath.length()-1) ==
+			 * '/') { pdfFile = new File(outputPath + realName + ".pdf"); } else { pdfFile =
+			 * new File(outputPath+"/" + realName + ".pdf"); }
+			 */
+		}
+	}
+
+	/**
+	 * 转为PDF
+	 * 
+	 * @param file
+	 */
+	@SuppressWarnings("unused")
+	public void conver() throws Exception {
+		if (docFile.exists()) {
+			if (!pdfFile.exists()) {
+				String OpenOffice_HOME = "C:\\Program Files (x86)\\OpenOffice 4";
+				// 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
+				if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
+					OpenOffice_HOME += "\\";
+				}
+				// 启动OpenOffice的服务
+				String command = OpenOffice_HOME
+						+ "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
+				Process pro = Runtime.getRuntime().exec(command);
+
+				OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
+				try {
+					connection.connect();
+					DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
+					converter.convert(docFile, pdfFile);
+					connection.disconnect();
+					System.out.println("df转换成功,保存路径:" + pdfFile.getPath());
+				} catch (java.net.ConnectException e) {
+					e.printStackTrace();
+					System.out.println("转换失败,openoffice服务未启动!");
+					throw e;
+				} catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
+					e.printStackTrace();
+					System.out.println("读取转换文件失败");
+					throw e;
+				} catch (Exception e) {
+					e.printStackTrace();
+					throw e;
+				}
+			} else {
+				System.out.println("文件已存在,不需要转换");
+			}
+		} else {
+			System.out.println("需要转换的文档不存在,无法转换");
+		}
+	}
+
+	/**
+	 * 返回pdf文件路径
+	 * 
+	 * @return
+	 */
+	public String getpdfPath() {
+		if (pdfFile.exists()) {
+			String tempString = pdfFile.getPath();
+			tempString = tempString.replaceAll("\\\\", "/");
+			return tempString;
+		} else {
+			return "";
+		}
+	}
+
+	public static void main(String[] args) throws Exception {
+		String fileString = "D:/upload/ppt4.ppt";
+
+		docConverterUtil dcu = new docConverterUtil(fileString);
+		dcu.setOutputPath("D:/upload/a");
+		dcu.conver();
+
+		System.out.println(dcu.getpdfPath());
+
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/config/AliOnsConfig.java b/src/main/java/com/qxueyou/scc/config/AliOnsConfig.java
new file mode 100644
index 0000000..2c6d48e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/AliOnsConfig.java
@@ -0,0 +1,32 @@
+package com.qxueyou.scc.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = AliOnsConfig.CONFIG_PREFIX, ignoreUnknownFields = false)
+public class AliOnsConfig {
+	final static String CONFIG_PREFIX="ali.ons";
+		
+	private String docdealReceiveUrls;
+	
+	private String commonTopic;
+
+	public String getCommonTopic() {
+		return commonTopic;
+	}
+
+	public void setCommonTopic(String commonTopic) {
+		this.commonTopic = commonTopic;
+	}
+
+	public String getDocdealReceiveUrls() {
+		return docdealReceiveUrls;
+	}
+
+	public void setDocdealReceiveUrls(String docdealReceiveUrls) {
+		this.docdealReceiveUrls = docdealReceiveUrls;
+	}
+	
+	
+	
+}
+
diff --git a/src/main/java/com/qxueyou/scc/config/AliOssConfig.java b/src/main/java/com/qxueyou/scc/config/AliOssConfig.java
new file mode 100644
index 0000000..e950398
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/AliOssConfig.java
@@ -0,0 +1,60 @@
+package com.qxueyou.scc.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = AliOssConfig.CONFIG_PREFIX, ignoreUnknownFields = false)
+public class AliOssConfig {
+	final static String CONFIG_PREFIX="ali.oss";
+		
+	private String domainName;
+	
+	private String videoOssAddress;
+	
+	private String videoOssDomain;
+	
+	private String domain;
+	
+	private String videoOrigUrl;
+
+	public String getVideoOrigUrl() {
+		return videoOrigUrl;
+	}
+
+	public void setVideoOrigUrl(String videoOrigUrl) {
+		this.videoOrigUrl = videoOrigUrl;
+	}
+
+	public String getDomain() {
+		return domain;
+	}
+
+	public void setDomain(String domain) {
+		this.domain = domain;
+	}
+
+	public String getVideoOssAddress() {
+		return videoOssAddress;
+	}
+
+	public String getVideoOssDomain() {
+		return videoOssDomain;
+	}
+
+	public void setVideoOssDomain(String videoOssDomain) {
+		this.videoOssDomain = videoOssDomain;
+	}
+
+	public void setVideoOssAddress(String videoOssAddress) {
+		this.videoOssAddress = videoOssAddress;
+	}
+
+	public String getDomainName() {
+		return domainName;
+	}
+
+	public void setDomainName(String domainName) {
+		this.domainName = domainName;
+	}
+	
+}
+
diff --git a/src/main/java/com/qxueyou/scc/config/DruidDataSourceConfig.java b/src/main/java/com/qxueyou/scc/config/DruidDataSourceConfig.java
new file mode 100644
index 0000000..e04ec99
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/DruidDataSourceConfig.java
@@ -0,0 +1,50 @@
+package com.qxueyou.scc.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+@Configuration
+@EnableConfigurationProperties(MySqlDataSourceConfig.class)
+public class DruidDataSourceConfig {
+    private static Logger logger = LoggerFactory.getLogger(DruidDataSourceConfig.class);
+
+    @Autowired
+    private MySqlDataSourceConfig mySqlDataSourceConfig;
+
+    @Bean(name="druidDataSource")
+    @Primary
+    public DataSource druidDataSource(){
+        DruidDataSource datasource = new DruidDataSource();
+
+        datasource.setUrl(mySqlDataSourceConfig.getUrl());
+        datasource.setUsername(mySqlDataSourceConfig.getUsername());
+        datasource.setPassword(mySqlDataSourceConfig.getPassword());
+        datasource.setDriverClassName(mySqlDataSourceConfig.getDriverClassName());
+        datasource.setInitialSize(mySqlDataSourceConfig.getInitialSize());
+        datasource.setMinIdle(mySqlDataSourceConfig.getMinIdle());
+        datasource.setMaxActive(mySqlDataSourceConfig.getMaxActive());
+        datasource.setMaxWait(mySqlDataSourceConfig.getMaxWait());
+        datasource.setTimeBetweenEvictionRunsMillis(mySqlDataSourceConfig.getTimeBetweenEvictionRunsMillis());
+        datasource.setMinEvictableIdleTimeMillis(mySqlDataSourceConfig.getMinEvictableIdleTimeMillis());
+        datasource.setValidationQuery(mySqlDataSourceConfig.getValidationQuery());
+        datasource.setTestWhileIdle(mySqlDataSourceConfig.isTestWhileIdle());
+        datasource.setTestOnBorrow(mySqlDataSourceConfig.isTestOnBorrow());
+        datasource.setTestOnReturn(mySqlDataSourceConfig.isTestOnReturn());
+        datasource.setPoolPreparedStatements(mySqlDataSourceConfig.isPoolPreparedStatements());
+        try {
+            datasource.setFilters(mySqlDataSourceConfig.getFilters());
+        } catch (SQLException e) {
+            logger.error("Druid configuration initialization filter error.", e);
+        }
+        return datasource;
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/config/MySqlDataSourceConfig.java b/src/main/java/com/qxueyou/scc/config/MySqlDataSourceConfig.java
new file mode 100644
index 0000000..785dd66
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/MySqlDataSourceConfig.java
@@ -0,0 +1,187 @@
+package com.qxueyou.scc.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = MySqlDataSourceConfig.CONFIG_PREFIX, ignoreUnknownFields = false)
+public class MySqlDataSourceConfig {
+    final static String CONFIG_PREFIX="mysqldb.datasource";
+    
+    private String url;
+    private String username;
+    private String password;
+    private String driverClassName;
+    private int initialSize = 10;
+    private int minIdle;
+    private int maxIdle;
+    private int maxActive;
+    private int maxWait;
+    private int timeBetweenEvictionRunsMillis;
+    private int minEvictableIdleTimeMillis;
+    private String validationQuery;
+    private boolean testWhileIdle;
+    private boolean testOnBorrow;
+    private boolean testOnReturn;
+    private boolean poolPreparedStatements;
+    private int maxOpenPreparedStatements;
+    private String filters;
+    private String[] scanPackages;
+
+    public String getDriverClassName() {
+        return driverClassName;
+    }
+
+    public void setDriverClassName(String driverClassName) {
+        this.driverClassName = driverClassName;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public int getInitialSize() {
+        return initialSize;
+    }
+
+    public void setInitialSize(int initialSize) {
+        this.initialSize = initialSize;
+    }
+
+    public int getMinIdle() {
+        return minIdle;
+    }
+
+    public void setMinIdle(int minIdle) {
+        this.minIdle = minIdle;
+    }
+
+    public int getMaxIdle() {
+        return maxIdle;
+    }
+
+    public void setMaxIdle(int maxIdle) {
+        this.maxIdle = maxIdle;
+    }
+
+    public int getMaxActive() {
+        return maxActive;
+    }
+
+    public void setMaxActive(int maxActive) {
+        this.maxActive = maxActive;
+    }
+
+    public int getMaxWait() {
+        return maxWait;
+    }
+
+    public void setMaxWait(int maxWait) {
+        this.maxWait = maxWait;
+    }
+
+    public int getTimeBetweenEvictionRunsMillis() {
+        return timeBetweenEvictionRunsMillis;
+    }
+
+    public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
+        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
+    }
+
+    public int getMinEvictableIdleTimeMillis() {
+        return minEvictableIdleTimeMillis;
+    }
+
+    public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
+        this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
+    }
+
+    public String getValidationQuery() {
+        return validationQuery;
+    }
+
+    public void setValidationQuery(String validationQuery) {
+        this.validationQuery = validationQuery;
+    }
+
+    public boolean isTestWhileIdle() {
+        return testWhileIdle;
+    }
+
+    public void setTestWhileIdle(boolean testWhileIdle) {
+        this.testWhileIdle = testWhileIdle;
+    }
+
+    public boolean isTestOnBorrow() {
+        return testOnBorrow;
+    }
+
+    public void setTestOnBorrow(boolean testOnBorrow) {
+        this.testOnBorrow = testOnBorrow;
+    }
+
+    public boolean isTestOnReturn() {
+        return testOnReturn;
+    }
+
+    public void setTestOnReturn(boolean testOnReturn) {
+        this.testOnReturn = testOnReturn;
+    }
+
+    public boolean isPoolPreparedStatements() {
+        return poolPreparedStatements;
+    }
+
+    public void setPoolPreparedStatements(boolean poolPreparedStatements) {
+        this.poolPreparedStatements = poolPreparedStatements;
+    }
+
+    public int getMaxOpenPreparedStatements() {
+        return maxOpenPreparedStatements;
+    }
+
+    public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) {
+        this.maxOpenPreparedStatements = maxOpenPreparedStatements;
+    }
+
+    public String getFilters() {
+        return filters;
+    }
+
+    public void setFilters(String filters) {
+        this.filters = filters;
+    }
+
+    public String[] getScanPackages() {
+		return scanPackages;
+	}
+
+	public void setScanPackages(String[] scanPackages) {
+		this.scanPackages = scanPackages;
+	}
+	
+}
+
+
+
+
+
+
diff --git a/src/main/java/com/qxueyou/scc/config/RedisCacheConfig.java b/src/main/java/com/qxueyou/scc/config/RedisCacheConfig.java
new file mode 100644
index 0000000..d6e4653
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/RedisCacheConfig.java
@@ -0,0 +1,25 @@
+package com.qxueyou.scc.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.core.RedisTemplate;
+
+@Configuration
+public class RedisCacheConfig extends CachingConfigurerSupport {
+
+	@Value("#{${spring.redis.default.ttl}}")
+	private int DEFAULT_TTL;
+
+
+	@SuppressWarnings("rawtypes")
+	@Bean
+	public CacheManager cacheManager(RedisTemplate redisTemplate) {
+		RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
+		cacheManager.setDefaultExpiration(DEFAULT_TTL);
+		return cacheManager;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/config/SccConfig.java b/src/main/java/com/qxueyou/scc/config/SccConfig.java
new file mode 100644
index 0000000..7c12f86
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/SccConfig.java
@@ -0,0 +1,101 @@
+package com.qxueyou.scc.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+
+@ConfigurationProperties(prefix = SccConfig.CONFIG_PREFIX, ignoreUnknownFields = false,ignoreNestedProperties=true)
+public class SccConfig {
+	final static String CONFIG_PREFIX="scc";
+	
+	private String excludeUrl;
+	
+	private String resRootPath;
+	
+	private String productId;
+	
+	private String licensePublicKey;
+
+	private String licensePath;
+	
+	private String rtmpService;
+	
+	private String hlsService;
+	
+	private String domain;
+	
+	private String srcLivePath;
+	
+	public String getDomain() {
+		return domain;
+	}
+
+	public void setDomain(String domain) {
+		this.domain = domain;
+	}
+
+	public String getResRootPath() {
+		return resRootPath;
+	}
+
+	public void setResRootPath(String resRootPath) {
+		this.resRootPath = resRootPath;
+	}
+
+	public String getExcludeUrl() {
+		return excludeUrl;
+	}
+
+	public void setExcludeUrl(String excludeUrl) {
+		this.excludeUrl = excludeUrl;
+	}
+
+	public String getProductId() {
+		return productId;
+	}
+
+	public void setProductId(String productId) {
+		this.productId = productId;
+	}
+
+	public String getLicensePublicKey() {
+		return licensePublicKey;
+	}
+
+	public void setLicensePublicKey(String licensePublicKey) {
+		this.licensePublicKey = licensePublicKey;
+	}
+
+	public String getRtmpService() {
+		return rtmpService;
+	}
+
+	public void setRtmpService(String rtmpService) {
+		this.rtmpService = rtmpService;
+	}
+
+	public String getHlsService() {
+		return hlsService;
+	}
+
+	public void setHlsService(String hlsService) {
+		this.hlsService = hlsService;
+	}
+
+	public String getLicensePath() {
+		return licensePath;
+	}
+
+	public void setLicensePath(String licensePath) {
+		this.licensePath = licensePath;
+	}
+
+	public String getSrcLivePath() {
+		return srcLivePath;
+	}
+
+	public void setSrcLivePath(String srcLivePath) {
+		this.srcLivePath = srcLivePath;
+	}
+	
+}
+
diff --git a/src/main/java/com/qxueyou/scc/config/Swagger2.java b/src/main/java/com/qxueyou/scc/config/Swagger2.java
new file mode 100644
index 0000000..275df8b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/config/Swagger2.java
@@ -0,0 +1,49 @@
+package com.qxueyou.scc.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * SWAGGER2配置,访问地址:http://xxxx:8090/scc/swagger-ui.html
+ * 
+ * @author kevin
+ */
+@Configuration
+@EnableSwagger2
+//@Profile("dev")//测试环境配置,正式环境不配置
+public class Swagger2 {
+	
+	@Autowired
+	SccConfig config;
+
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.qxueyou.scc"))
+                .paths(PathSelectors.any())
+                .build().host(config.getDomain());
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("智慧蓝项目接口 restful api")
+                .description("本API基于Swagger 2.9.2版本构建")
+                .termsOfServiceUrl(config.getDomain())
+                .contact(new Contact("kevin","",""))
+                .version("1.0")
+                .build();
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/ClassController.java b/src/main/java/com/qxueyou/scc/controller/ClassController.java
new file mode 100644
index 0000000..0a8d67c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/ClassController.java
@@ -0,0 +1,632 @@
+package com.qxueyou.scc.controller;
+
+import java.lang.reflect.InvocationTargetException;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectChapter;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.DateUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.student.service.IStudentService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+import com.qxueyou.scc.user.model.UserTeacher;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 班级管理控制器
+ *
+ * @author chenjunliang
+ */
+@Api(tags="班级管理接口")
+@RestController
+@RequestMapping("/admin/class")
+public class ClassController {
+
+    private final Logger log = LogManager.getLogger(ClassController.class);
+
+    @Autowired
+    IClassService classService;
+
+    @Autowired
+    ISubjectService subjectService;
+
+    @Autowired
+    IStudentService studentService;
+
+    @Autowired
+    ITeacherService teacherService;
+
+	@Autowired
+	IClassLectureService clsLectureService;
+
+    //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/
+    /**
+     * 获取正常班级列表
+     *
+     * @param keyword
+     * @param limit
+     * @param pageNum
+     * @return
+     */
+    @ApiOperation(value = "获取正常班级列表", notes = "")
+	@GetMapping(value = "/app/classList")
+    public Result classList(@RequestParam(defaultValue = "") String keyword, Pager pager) {
+        return this.classService.classList(keyword, pager, 1);
+    }
+
+    /**
+     * 获取历史班级列表
+     *
+     * @param keyword
+     * @param limit
+     * @param pageNum
+     * @return
+     */
+    @ApiOperation(value = "获取历史班级列表", notes = "")
+	@GetMapping(value = "/app/historyClassList")
+    public Result historyClassList(@RequestParam(defaultValue = "") String keyword, Pager pager) {
+        return this.classService.classList(keyword, pager, 2);
+    }
+
+    /**
+     * 学员详情
+     *
+     * @param classId
+     * @param studentId
+     * @return
+     */
+    @ApiOperation(value = "学员详情", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "studentId", value = "学员id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+    })
+   	@GetMapping(value = "/app/studentInfo")
+   	public Result studentInfo(String classId, String studentId) {
+   		return this.studentService.queryStudent(classId, studentId);
+   	}
+
+    /**
+     * 学员详情
+     *
+     * @param classId
+     * @param studentId
+     * @return
+     */
+    @ApiOperation(value = "学员学习进度", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "studentId", value = "学员id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+    })
+   	@GetMapping(value = "/app/studentProgress")
+   	public Result studentProgress(String classId, String studentId) {
+   		return this.studentService.studentProgress(classId, studentId);
+   	}
+
+   	/**
+   	 * 获取首页数据排行
+   	 *
+   	 *
+   	 * @param subjectId
+   	 */
+       @ApiOperation(value = "班级排行榜", notes = "")
+       @ApiImplicitParams({
+           @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+       })
+   	@GetMapping(value = "/app/getDataDesc")
+   	public Result getDataDesc(String classId, String subjectId) {
+   		return subjectService.getDataDesc(classId, subjectId);
+   	}
+
+    /**
+     * 学员课程进度
+     *
+     *
+     * @param subjectId
+    */
+    @ApiOperation(value = "学员课程进度", notes = "")
+   	@ApiImplicitParams({
+	   	@ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+	   	@ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+	   	@ApiImplicitParam(name = "studentId", value = "学员id", required = true, paramType="query", dataType = "String"),
+   	})
+   	@GetMapping(value = "/app/studentSubjectProgress")
+   	public Result studentSubjectProgress(String classId, String subjectId, String studentId) {
+
+	   	return new Result(true, "success", CollectionUtils.newObjectMap("homework", this.subjectService.studentSubjectHomeworkProgress(classId, subjectId, studentId),
+	   			"exam", this.subjectService.studentSubjectExamProgress(classId, subjectId, studentId)));
+   	}
+
+    /**
+     * 班级学员课程总体进度
+     *
+     *
+     * @param classId
+    */
+    @ApiOperation(value = "班级学员课程总体进度", notes = "")
+   	@ApiImplicitParams({
+	   	@ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+   	})
+   	@GetMapping(value = "/app/studentAllSubjectProgress")
+   	public Result studentSubjectProgress(String classId) {
+    	if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id参数不能为空");
+    	}
+	   	return new Result(true, "success", CollectionUtils.newObjectMap("subjectList", this.subjectService.studentSubjectProgress(classId, new Pager())));
+   	}
+
+    /**
+     * 班级学员课件总体进度
+     *
+     *
+     * @param classId
+     */
+    @ApiOperation(value = "班级学员课件总体进度", notes = "")
+    @ApiImplicitParams({
+    	@ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+    	@ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+    })
+    @GetMapping(value = "/app/studentSubjectLectureProgress")
+    public Result studentSubjectLectureProgress(String classId, String subjectId) {
+    	if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id参数不能为空");
+    	}
+    	if(StringUtils.isEmpty(subjectId)) {
+    		return new Result(false, "课程id参数不能为空");
+    	}
+
+    	//获取所有课件
+		List<Map<String, Object>> lectures = this.subjectService.studentSubjectLectureProgress(subjectId, classId);
+		//获取所以章节
+		List<ClsSubjectChapter> chapterLst = clsLectureService.getChapterLectures(clsLectureService.getListChapter(classId, subjectId, null), lectures);
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("count",clsLectureService.stuLectureCountBySubject(subjectId, classId), "listData", QBeanUtils.listBean2ListMap(chapterLst,
+				CollectionUtils.newStringMap("name", "name", "chapterId", "chapterId", "lectures", "lectures"))));
+    }
+
+    /**
+     * 学员注册
+     *
+     * @param name          学员名称
+     * @param studentNumber 学号
+     * @param sex           性别
+     * @param mobilePhone   手机号
+     */
+    @ApiOperation(value = "app端学员注册接口", notes = "")
+   	@ApiImplicitParams({
+	   	@ApiImplicitParam(name = "name", value = "名称", required = true, paramType="query", dataType = "String"),
+	   	@ApiImplicitParam(name = "studentNumber", value = "学号", required = true, paramType="query", dataType = "String"),
+	   	@ApiImplicitParam(name = "sex", value = "性别(0女,1男)", required = true, paramType="query", dataType = "String"),
+	   	@ApiImplicitParam(name = "mobilePhone", value = "手机号", required = false, paramType="query", dataType = "String"),
+	   	@ApiImplicitParam(name = "orgId", value = "机构", required = true, paramType="query", dataType = "String"),
+   	})
+    @PostMapping(value = "/app/studentRegister")
+    public Result studentRegister(String name, String studentNumber, Boolean sex, String mobilePhone, String orgId) {
+        return studentService.insertStudent(null, name, studentNumber, sex, mobilePhone, orgId);
+    }
+
+    //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/
+
+
+    /**
+     * 新增班级
+     *
+     * @param className   班级名称
+     * @param classNumber 班级编码
+     * @param startTime   开班时间
+     * @param endTime     结束时间
+     * @param subjectId   课程id
+     */
+    @PostMapping(value = "add")
+    public Result add(String className, String classNumber, String startTime, String endTime, String subjectId,
+                      String teacherId) {
+        try {
+        	return classService.insertClass(className, classNumber, DateUtils.convertStringToDate(startTime),
+                    DateUtils.convertStringToDate(endTime), subjectId, teacherId);
+
+        } catch (ParseException e) {
+            log.error(e, e);
+            return new Result(false, "日期参数错误");
+        }
+    }
+    /**
+     * 新增补考分组
+     * @param className   班级名称
+     * @param classNumber 班级编码
+     * @param startTime   开班时间
+     * @param endTime     结束时间
+     * @param subjectId   课程id
+     */
+    @PostMapping(value = "addRe")
+    public Result addRe(String className, String classNumber, String startTime, String endTime, String subjectId,
+                      String teacherId,String classTypes) {
+        try {
+			ClsClass reClass = classService.getReClass("1");
+        	//如果补考类型分组不存在,新增
+			if (reClass==null){
+				return classService.insertReClass(className, classNumber, DateUtils.convertStringToDate(startTime),
+						DateUtils.convertStringToDate(endTime), subjectId, teacherId,classTypes);
+			}else {
+				//存在返回false
+				return new Result(false, "补考分组已存在");
+			}
+        } catch (ParseException e) {
+            log.error(e, e);
+            return new Result(false, "日期参数错误");
+        }
+    }
+
+    /**
+     * 新增班级获取课程列表
+     */
+    @GetMapping(value = "getSubjectLst")
+    public Result getSubjectlst() {
+
+        List<Subject> subjectLst = subjectService.list("", null, "",Subject.TYPE_ORG_SUBJECT, 1000, 1);
+
+        return new Result(true, "success", QBeanUtils.listBean2ListMap(subjectLst,
+                CollectionUtils.newStringMap("name", "subjectName", "subjectId", "subjectId")));
+    }
+
+    /**
+     * 获取班级列表
+     *
+     * @param keyword
+     * @param limit
+     * @param pageNum
+     * @return
+     */
+    @ApiOperation(value = "获取班级列表", notes = "")
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+	@GetMapping(value = "list")
+    public Result list(@RequestParam(defaultValue = "") String keyword,
+                       @RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "1")Integer pageType) {
+
+//        System.out.println(ClientUtils.getUserId());
+//        System.out.println(ClientUtils.isAdmin());
+        String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+//        System.out.println("aaa"+teacherId);
+        // 获取数据
+        List<ClsClass> clsLst = classService.getClassLst(keyword, teacherId, limit, pageNum, pageType);
+//        System.out.println(clsLst);
+        // 获取班级总数
+        int count = classService.getClassLstCount(keyword, teacherId, pageType);
+//        System.out.println(count);
+        // 转成前端所需字段和结构
+       List<Map<String, Object>> lstResult = QBeanUtils.listBean2ListMap(clsLst,
+                CollectionUtils.newStringMap("name", "className", "classId", "classId", "classNumber", "classNumber","classTypes","classTypes",
+                        "studentCount", "studentCount", "createTime", "createTime", "startTime", "startTime", "endTime",
+                        "endTime", "subjects", "sbjLst"));
+
+        // 单独处理课程的字段和结构
+        for (Map<String, Object> item : lstResult) {
+
+        	if(item.get("sbjLst")==null){
+        		continue;
+
+        	}
+
+        	 item.put("subjectLst",
+                   QBeanUtils.listBean2ListMap(
+                		   this.filtCurrTeacherSubjects((List<Subject>) item.get("sbjLst"),teacherId),
+                           CollectionUtils.newStringMap("subjectId", "subjectId", "name", "subjectName",
+                           		"teacherId","teacherId","teacherName","teacherName","schoolYear","schoolYear","term","term")));
+
+            item.remove("sbjLst");
+        }
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("classLst", lstResult, "classCount", count));
+    }
+
+
+    private List<Subject> filtCurrTeacherSubjects(List<Subject> subjects,String teacherId){
+    	if(StringUtils.isEmpty(teacherId) || subjects==null || subjects.size()==0){
+    		return subjects;
+    	}
+
+    	List<Subject> newSubjects = new ArrayList<Subject>(subjects.size());
+
+    	for(Subject subject:subjects){
+    		if(teacherId.equals(subject.getTeacherId())){
+    			newSubjects.add(subject);
+    		}
+    	}
+
+    	return newSubjects;
+    }
+
+
+    /**
+     * 查询班级基本信息
+     *
+     * @param classId 班级id
+     * @return
+     */
+    @ApiOperation(value = "查询班级基本信息", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+    })
+    @GetMapping(value = "queryClass")
+    public Result findClass(String classId) {
+
+        ClsClass cls = classService.read(classId);
+
+        return new Result(true, "success", QBeanUtils.bean2Map(cls,
+                CollectionUtils.newStringMap("name", "className", "classId", "classId", "classNumber", "classNumber",
+                        "studentCount", "studentCount", "createTime", "createTime", "startTime", "startTime", "endTime","endTime","classTypes",
+                        "classTypes", "subjects", "subjectLst", "needJoinAudit", "needJoinAudit", "needQuitAudit",
+                        "needQuitAudit", "showAnalysisAfterExer", "showAnalysisAfterExer", "canMultiExer",
+                        "canMultiExer", "needForum", "needForum", "teacherId", "teacherId")));
+    }
+
+    /**
+     * 删除班级
+     *
+     * @param classId 班级id
+     * @return
+     */
+    @GetMapping("delete")
+    public Result delete(String classId) {
+
+        return classService.deleteClass(classId.split(","));
+
+    }
+
+    /**
+     * 复制班级
+     *
+     * @param classId               班级id
+     * @param className             班级名称
+     * @param classNumber           班级编码
+     * @param startTime             开班时间
+     * @param endTime               结束时间
+     * @param subjectId
+     * @param needJoinAudit         是否加班审批
+     * @param needQuitAudit         是否退班审批
+     * @param showAnalysisAfterExer 完成练习后是否显示答案
+     * @param canMultiExer          是否允许重复学习
+     * @param needForum             是否开通论坛
+     * @return
+     */
+    @PostMapping(value = "copy")
+    public Result doCopy(String classId, String className, String classNumber, String startTime, String endTime,
+                         String subjectId, Integer needJoinAudit, Integer needQuitAudit, Integer showAnalysisAfterExer,
+                         Integer canMultiExer, Integer needForum) {
+        return new Result(true, "copy success");
+    }
+
+    /**
+     * 更新班级
+     *
+     * @param classId               班级id
+     * @param className             班级名称
+     * @param classNumber           班级编码
+     * @param startTime             开班时间
+     * @param endTime               结束时间
+     * @param subjectId
+     * @param needJoinAudit         是否加班审批
+     * @param needQuitAudit         是否退班审批
+     * @param showAnalysisAfterExer 完成练习后是否显示答案
+     * @param canMultiExer          是否允许重复学习
+     * @param needForum             是否开通论坛
+     * @return
+     */
+    @PostMapping(value = "update")
+    public Result update(String classId, String className, String classNumber, String startTime, String endTime,
+                         String teacherId, String subjectId, @RequestParam(defaultValue = "false") Boolean needJoinAudit,
+                         @RequestParam(defaultValue = "false") Boolean needQuitAudit,
+                         @RequestParam(defaultValue = "false") Boolean showAnalysisAfterExer,
+                         @RequestParam(defaultValue = "false") Boolean canMultiExer,
+                         @RequestParam(defaultValue = "false") Boolean needForum) {
+        try {
+            return classService.updateClass(classId, className, classNumber, DateUtils.convertStringToDate(startTime),
+                    DateUtils.convertStringToDate(endTime), subjectId, needJoinAudit, needQuitAudit,
+                    showAnalysisAfterExer, canMultiExer, needForum, teacherId);
+        } catch (ParseException e) {
+            log.error(e, e);
+            return new Result(false, "日期参数错误");
+        }
+    }
+
+    /**
+     * 班级管理 学员管理 获取学员列表
+     *
+     * @param classId 班级id
+     * @param limit   每页显示几条
+     * @param pageNum 页码
+     * @param keyword 搜索关键字
+     * @return 学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结)
+     */
+    @ApiOperation(value = "获取学员列表", notes = "学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结)")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+    })
+    @GetMapping(value = "lstStudent4Class")
+    public Result lstStudent4Class(String classId, @RequestParam(defaultValue = "10") Integer limit,
+                                   @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "") String keyword) {
+
+        List<Map<String, Object>> students = studentService.getStudentLst(classId, keyword, new Pager(limit, pageNum));
+        int studentCount = studentService.getStudentsCount(classId, keyword);
+
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("studentCount", studentCount, "studentLst", students));
+    }
+
+    /**
+     * 导入学员
+     *
+     * @param classId 班级id
+     */
+    @GetMapping(value = "importStudent")
+    public Result importStudent(String classId) {
+        return new Result(true, "import success");
+    }
+
+    /**
+     * 新增学员
+     *
+     * @param name          学员名称
+     * @param studentNumber 学号
+     * @param classId       班级id
+     * @param sex           性别
+     * @param mobilePhone   手机号
+     */
+    @PostMapping(value = "addStudent")
+    public Result addStudent(String classId, String name, String studentNumber, Boolean sex, String mobilePhone,String comName) {
+
+        return studentService.insertStudent(classId, name, studentNumber, sex, mobilePhone, ClientUtils.getOrgId(),comName);
+
+    }
+
+    /**
+     * 更新学员
+     *
+     * @param name          学员名称
+     * @param studentNumber 学号
+     * @param classId       班级id
+     * @param sex           性别
+     * @param mobilePhone   手机号
+     */
+    @PostMapping(value = "updateStudent")
+    public Result updateStudent(String studentId, String name,String password, String studentNumber, Boolean sex, String mobilePhone) {
+
+        return studentService.updateStudent(studentId, name,password, studentNumber, sex, mobilePhone);
+
+    }
+
+
+
+    /**
+     * 激活学员
+     *
+     * @param studentIds 学员Ids
+     */
+    @GetMapping(value = "activateStudent")
+    public Result activate(String studentIds) {
+        return studentService.doActivateStudent(studentIds.split(","));
+    }
+
+    /**
+     * 冻结学员
+     *
+     * @param studentIds 学员Ids
+     */
+    @GetMapping(value = "blockStudent")
+    public Result block(String studentIds) {
+        return studentService.doDeActivateStudent(studentIds.split(","));
+    }
+
+    /**
+     * 删除学员
+     *
+     * @param studentIds 学员Ids
+     */
+    @GetMapping(value = "deleteStudent")
+    public Result deleteStudent(String classId, String studentIds) {
+        return studentService.deleteStudent(classId, studentIds.split(","));
+    }
+
+    /**
+     * 添加班级课程
+     * @throws InvocationTargetException
+     * @throws IllegalAccessException
+     *
+     */
+    @PostMapping(value = "addClsSubject")
+    public Result addClsSubject(String classId, String origSubjectId,String teacherId,Integer schoolYear ,Integer term) throws IllegalAccessException, InvocationTargetException {
+    	return  this.subjectService.addClsSubject(classId,origSubjectId,teacherId,schoolYear,term);
+    }
+
+    /**
+     * 更新班级课程
+     */
+    @PostMapping(value = "updateClsSubject")
+    public Result updateClsSubject(String classId,String subjectId, String origSubjectId,String teacherId,Integer schoolYear ,Integer term) {
+    	return this.subjectService.updateClsSubject(classId,subjectId,origSubjectId,teacherId,schoolYear,term);
+    }
+
+    /**
+     * 删除班级课程
+     */
+    @GetMapping(value = "deleteClsSubject")
+    public Result deleteClsSubject(String classId,String subjectIds){
+    	//删除课程及课程班级关联关系
+    	return subjectService.deleteClsSubject(classId,subjectIds.split(","));
+    }
+
+    /**
+     * 所有班级列表
+     * @param subjectId 根据subjectId过滤
+     * @return
+     */
+	@RequestMapping(value = "/selectlist", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> classList() {
+		return classService.queryAllClassIdAndName();
+	}
+
+    /**
+     * 获取学员详细信息
+     *
+     * @param studentId 学员id
+     * @return percent (状态说明:0,未开始。1,学习中。2,已结束。) status (0,未提交。1,已提交)
+     */
+    @GetMapping(value = "getStudentDetail")
+    public Result getStudentDetail(String studentId) {
+        // 学员信息
+        Map<String, Object> studentDetail = CollectionUtils.newObjectMap("studentName", "李刚", "classNumber", "123456",
+                "sex", 1, "registerTime", new Date(), "email", "12345676@qq.com", "mobilePhone", "13611111123",
+                "stuSubjects", 3, "commitExerInfo", 3, "examCount", 3, "releaseTopic", 3, "commentCount", 2);
+        // 学习档案
+        Map<String, Object> subjectOne = CollectionUtils.newObjectMap("subjectName", "物流科学与工程", "percent", 2,
+                "studyDuration", 18, "endStudyTime", new Date(), "score", 96.2);
+        Map<String, Object> subjectTwo = CollectionUtils.newObjectMap("subjectName", "物流工程基础", "percent", 1,
+                "studyDuration", 18, "endStudyTime", new Date(), "score", "");
+        Map<String, Object> subjectThree = CollectionUtils.newObjectMap("subjectName", "物流工程基础2", "percent", 0,
+                "studyDuration", "", "endStudyTime", "", "score", "");
+        // 作业记录
+        Map<String, Object> exerOne = CollectionUtils.newObjectMap("exerciseName", "物流科学与工程", "subjectName", "物流科学与工程",
+                "status", 1, "commitTime", new Date(), "score", 96.2);
+        Map<String, Object> exerTwo = CollectionUtils.newObjectMap("exerciseName", "物流工程基础", "subjectName", "物流工程基础",
+                "status", 0, "commitTime", "", "score", "");
+        Map<String, Object> exerThree = CollectionUtils.newObjectMap("exerciseName", "物流工程基础2", "subjectName",
+                "物流工程基础2", "status", 0, "commitTime", "", "score", "");
+        // 考试记录
+        Map<String, Object> examOne = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程",
+                "status", 1, "commintTime", new Date(), "score", 90.6);
+        Map<String, Object> examTwo = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程",
+                "status", 0, "commintTime", new Date(), "score", "");
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("studentDetail", studentDetail, "subjectLst",
+                        CollectionUtils.newList(subjectOne, subjectTwo, subjectThree), "exerInfoLst",
+                        CollectionUtils.newList(exerOne, exerTwo, exerThree), "examLst",
+                        CollectionUtils.newList(examOne, examTwo)));
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/ClassRoomController.java b/src/main/java/com/qxueyou/scc/controller/ClassRoomController.java
new file mode 100644
index 0000000..01bf552
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/ClassRoomController.java
@@ -0,0 +1,194 @@
+package com.qxueyou.scc.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+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.RestController;
+
+import com.qxueyou.scc.admin.classroom.model.ClassRoom;
+import com.qxueyou.scc.admin.classroom.service.IClassRoomService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags = "教室管理")
+@RestController
+@RequestMapping(value = "admin/classroom")
+public class ClassRoomController {
+	//日志
+	private final Logger log = LogManager.getLogger(ClassRoomController.class);
+	
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+
+    @Autowired
+    private IClassRoomService classRoomService;
+    
+    @Autowired
+	private CommonDAO commonDAO;
+    
+    /**
+	 * 课表列表
+	 */
+    @ApiOperation(value = "获取教室列表")
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody Result list(String keyword,Short status,Integer pageSize,Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		//总考试数量
+		int totalCount = classRoomService.listCount(keyword, status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+		
+		List<ClassRoom> list = classRoomService.list(keyword == null ? "" : keyword.trim(),status,pageSize,pageNum);
+		
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("roomId", "roomId", "name", "name", "address", "address",
+	            		"status","status","creator", "creator", "updateTime", "updateTime"));
+	
+		return new Result(true,"",CollectionUtils.newObjectMap("examList",listResult,"page",pager));
+	}
+
+	/**
+	 * 保存
+	 * @param classRoom
+	 * @return
+	 */
+    @ApiOperation(value = "保存教室")
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ClassRoom classRoom) {
+    	
+    	if(checkIsDumplicate(classRoom.getRoomId(),classRoom.getName(),classRoom.getAddress())){
+    		return new Result(false, "添加失败!重复的教室信息"); 
+    	}
+    	
+		if (StringUtils.isEmpty(classRoom.getRoomId())) {
+			return new Result(true,"",CollectionUtils.newObjectMap("roomId", classRoomService.add(classRoom)));
+		} else {
+			return classRoomService.update(classRoom);
+		}
+	}
+    
+
+	private boolean checkIsDumplicate(String roomId,String name,String address){
+		
+		if(StringUtils.isEmpty(name) || StringUtils.isEmpty(address)){
+			return false;
+		}
+		
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ClassRoom r where r.name=? and r.address=?");
+		List<Object> args = CollectionUtils.newList(name,address);
+		
+		if(StringUtils.isNotEmpty(roomId)){
+			hql.append(" and roomId!=?");
+			args.add(roomId);
+		}
+		
+		hql.append(" and r.deleteFlag is false");
+		
+		int count =  commonDAO.findCount(hql.toString(), args);
+		
+		return count>0;
+	}
+    
+    
+
+	/**
+	 * 删除
+	 * 
+	 * @param examIds
+	 * @return
+	 */
+	@ApiOperation(value = "删除教室", httpMethod = "GET")
+	@ApiImplicitParam(name = "roomIds", value = "教室ID字符串", required = true, dataType = "String", paramType = "body")
+	@RequestMapping(value = "delete", method = RequestMethod.GET)
+	public @ResponseBody Result delete(String roomIds) {
+		Result result = new Result(true);
+		if (StringUtils.isNotEmpty(roomIds)) {
+			result = classRoomService.delete(roomIds.split(","));
+		}
+		return result;
+	}
+	
+	/**
+	 * 发布教室
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "发布教室", httpMethod = "GET")
+	@RequestMapping(value = "/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publish(String roomIds) {
+		if (StringUtils.isEmpty(roomIds)) {
+			return new Result(false, "参数错误");
+		}
+		
+		return this.classRoomService.doRelease(roomIds.split(","));
+	}
+
+	/**
+	 * 撤回发布的教室
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "撤回教室", httpMethod = "GET")
+	@RequestMapping(value = "/cancel", method = RequestMethod.GET)
+	public @ResponseBody Result cancel(String roomIds) {
+		if (StringUtils.isEmpty(roomIds)) {
+			return new Result(false, "参数错误");
+		}
+		
+		return this.classRoomService.doCancel(roomIds.split(","));
+	}
+    
+	
+	/**
+	 * 详情页面数据
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "详情页面数据")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="教室ID", required=true),
+	})
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String roomId) {
+		return new Result(true,"",CollectionUtils.newObjectMap("detail",this.classRoomService.detail(roomId)));
+	}
+    
+	/**
+	 *查询所有教室的ID和名称
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "可选择教室ID和名称")
+	@RequestMapping(value = "/allRoomIdAndNames", method = RequestMethod.GET)
+	public @ResponseBody Result listClassRoomIdAndNames() {
+		List<Map<String,Object>> listResult =  this.classRoomService.queryAllRoomIdAndNames();
+		return new Result(true,"",CollectionUtils.newObjectMap("listRooms",listResult));
+	}
+    
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/ClsLectureController.java b/src/main/java/com/qxueyou/scc/controller/ClsLectureController.java
new file mode 100644
index 0000000..23e65a2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/ClsLectureController.java
@@ -0,0 +1,324 @@
+package com.qxueyou.scc.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.classes.model.ClsSubjectChapter;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.service.IProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResLib;
+import com.qxueyou.scc.teach.res.service.IResService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags = "课件管理-教师端")
+@RestController
+@RequestMapping(value = "teach/clsLecture")
+public class ClsLectureController {
+	@Autowired
+	IClassLectureService classLectureService;
+
+	@Autowired
+	IProgressService progressService;
+
+	@Autowired
+	IResService resService;
+	
+	/**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/
+	@SuppressWarnings("unchecked")
+	@ApiOperation(value = "获取课程下课件", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "/app/coursewareList")
+	public Result coursewareList(String classId,String subjectId, String type) {
+		
+		if(StringUtils.isEmpty(subjectId)) {
+			return new Result(false, "课程id不能为空");
+		}
+		
+		//公开课和管理员课程
+		if(StringUtils.isEmpty(classId)) {
+			Object obj = this.classLectureService.coursewareChapterList(classId, subjectId, type).getData();
+			if(obj == null) {
+				return new Result(true, "success", new ArrayList<>());
+			}
+			return new Result(true, "success", ((Map<String, Object>)obj).get("listData"));
+		}
+		
+		//查询课件
+		List<Map<String, Object>> lectures = classLectureService.listLectureBySubject(subjectId, type, classId);
+
+		//查询章节
+		List<ClsSubjectChapter> chapterLst = classLectureService.getChapterLectures(classLectureService.getListChapter(classId, subjectId, null), lectures);
+
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst,
+				CollectionUtils.newStringMap("name", "name", "chapterId", "chapterId", "lectures", "lectures")));
+	}
+	
+	/**-------------------------------------------------------------------后端接口------------------------------------------------------------------------------------------**/
+
+	/**
+	 * 加载课件tree
+	 *
+	 * @param parentId
+	 *            父节点id
+	 */
+	@ApiOperation(value = "获取课程下章节", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "parentId", value = "父节点id", required = false, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "categoryTree")
+	public Result categoryTree(String classId,String subjectId, String parentId) {
+
+		List<ClsSubjectChapter> chapterLst = classLectureService.doGetListChapter(classId,subjectId, parentId);
+
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst,
+				CollectionUtils.newStringMap("name", "name", "chapterId", "id")));
+	}
+
+	/**
+	 * 获取课件列表
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param type
+	 *            课件类型
+	 * @param keyword
+	 *            搜索关键字
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@ApiOperation(value = "获取课程下章节", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "chapterId", value = "章节id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "coursewareList")
+	public Result lectureList(String chapterId, String type, String keyword, Integer limit, Integer pageNum,
+			String classId) {
+
+		List<ClsSubjectLecture> lectures = classLectureService.listLecture(chapterId, keyword, limit, pageNum, type,
+				classId);
+
+		int lectureCount = classLectureService.listLectureCount(chapterId, keyword, type);
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("coursewareLst",
+						QBeanUtils.listBean2ListMap(lectures,
+								CollectionUtils.newStringMap("name", "name", "lectureId", "id", "lectureType", "type",
+										"chapterId", "chapterId", "status", "status", "updateTime", "updateTime")),
+						"count", lectureCount));
+
+	}
+
+	/**
+	 * 查看课件
+	 * 
+	 * @param id
+	 *            课件id
+	 * @param attribute
+	 *            扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传
+	 */
+	@ApiOperation(value = "查看课件", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "课件id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "attribute", value = "扩展属性 video:\"mp4:HD\",\"m3u8:SD\" 可不用传 audio:可不用传 doc:可不用传", required = false, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "showCourseware")
+	public Result showLecture(String id, String attribute) {
+
+		Result result = classLectureService.readLectureAccessPath(id, attribute);
+
+		Progress progress = progressService.query(Progress.PROGRESS_TYPE_LECTURE, id, ClientUtils.getUserId());
+
+		return new Result(true, "true",
+				CollectionUtils.newObjectMap("name", result.getDataT("name"), "fullPath", result.getDataT("path"), "id", id, "size", result.getDataT("size"),
+						"percent", progress == null ? 0 : String.valueOf(progress.getProgressPercent())));
+	}
+
+	/**
+	 * 删除课件
+	 * 
+	 * @param id
+	 *            课件ids
+	 */
+	@GetMapping(value = "deleteCourseware")
+	public Result deleteLecture(String id) {
+
+		return classLectureService.deleteLecture(id.split(","));
+
+	}
+
+	/**
+	 * 课件管理 新增下级,同级
+	 * 
+	 * @param type
+	 *            (add:新增,edit :编辑)
+	 * @param chapterId
+	 *            章节id
+	 * @param classId
+	 *            班级id
+	 * @param name
+	 *            名称
+	 * @param childFlag
+	 *            是否操作下级
+	 * 
+	 */
+	@PostMapping(value = "addOrUpdateChapter")
+	public Result addOrUpdateChapter(String type, String name, String chapterId, boolean childFlag) {
+		ClsSubjectChapter chapter = classLectureService.readChapter(chapterId);
+		String parentChapterId = childFlag ? chapterId : chapter.getParentChapterId();
+
+		if ("add".equals(type)) {
+			return classLectureService.addChapter(parentChapterId, name);
+		} else {
+			return classLectureService.updateChapter(chapterId, name);
+		}
+	}
+
+	/**
+	 * 课件管理 目录删除
+	 * 
+	 * @param chapterId
+	 *            目录id
+	 */
+	@GetMapping(value = "deleteChapter")
+	public Result deleteChapter(String chapterId) {
+		return classLectureService.deleteChapter(chapterId.split(","));
+	}
+
+	/**
+	 * 添加/更新(视频,讲义,音频)
+	 * 
+	 * @param name
+	 *            名称
+	 * @param coverUrl
+	 *            封面Url
+	 * @param remark:
+	 *            <p>
+	 *            视频啊啊啊
+	 *            </p>
+	 *            介绍
+	 *
+	 * @param id
+	 *            课件id
+	 * @param sectionId
+	 *            小节Id
+	 * @param type
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@PostMapping(value = "addOrUpdate")
+	public Result addOrUpdate(String id, String remark, String name, String coverUrl, String type, String fileId,
+			String sectionId) {
+
+		if (StringUtils.isEmpty(id)) {
+			Result resResult = resService.add(
+					resService.doGetRootDir(ResLib.OWNNER_TYPE_USER, ClientUtils.getUserId()).getDirId(), fileId, name,
+					remark, type, coverUrl);
+			return classLectureService.addClsLecture(sectionId, resResult.getDataT("resId"));
+
+		} else {
+
+			ClsSubjectLecture lecture = classLectureService.readClsLecture(id);
+			resService.update(lecture.getResItemId(), name, remark, coverUrl);
+			return classLectureService.updateLecture(lecture.getLectureId(), lecture.getResItemId());
+		}
+	}
+
+	/**
+	 * 编辑 获取内容
+	 * 
+	 * @param id
+	 *            课件id
+	 */
+	@GetMapping(value = "getCoursewareDetail")
+	public Result getLectureDetail(String id) {
+
+		ClsSubjectLecture lecture = classLectureService.readClsLecture(id);
+
+		Res res = resService.read(lecture.getResItemId());
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("coursewareName", lecture.getName(), "coverUrl", res.getCoverPageUrl(),
+						"remark", res.getRemark(), "fileId", null, "name", lecture.getName(), "id",
+						lecture.getLectureId()));
+	}
+
+	/**
+	 * 课件获取资源列表
+	 * 
+	 * @param dirId
+	 *            目录Id
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@ApiOperation(value = "课件获取资源列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "dirId", value = "目录Id", required = false, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "getResLst")
+	public Result getResLst(String dirId, Integer limit, Integer pageNum, String keyword) {
+
+		List<Res> resLst = resService.listMyRes(keyword, limit, pageNum, "");
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("resCount", resService.listMyResCount(keyword, ""), "resLst",
+
+						QBeanUtils.listBean2ListMap(resLst,
+								CollectionUtils.newStringMap("resId", "resId", "name", "resName", "type", "type"))));
+	}
+
+	/**
+	 * 课件从资源选择后保存
+	 * 
+	 * @param resId
+	 *            资源文件id
+	 * @param sectionId
+	 *            小节id
+	 * 
+	 */
+	@GetMapping(value = "saveCourseware4Res")
+	public Result saveLecture4Res(String resId, String sectionId) {
+
+		int successCount = 0;
+		Result result = new Result(true);
+
+		for (String resId_ : resId.split(",")) {
+			result = classLectureService.addClsLecture(sectionId, resId_);
+			successCount = result.isSuccess() ? 1 : 0;
+		}
+
+		return new Result(true, null, successCount);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java b/src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java
new file mode 100644
index 0000000..d1124c5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java
@@ -0,0 +1,320 @@
+package com.qxueyou.scc.controller;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+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 com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classroom.service.IClassRoomService;
+import com.qxueyou.scc.admin.course.model.CourseSchedule;
+import com.qxueyou.scc.admin.course.service.ICourseScheduleService;
+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.subject.model.Subject;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 班级管理控制器
+ *
+ * @author kevin
+ */
+@Api(tags="课表接口")
+@Controller
+@RequestMapping("/admin/schedule")
+public class CourseScheduleController {
+	
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+
+    @Autowired
+    ICourseScheduleService scheduleService;
+
+    @Autowired
+    IClassRoomService classRoomService;
+    
+    /**
+	 * 课表列表
+	 */
+    @SuppressWarnings("unchecked")
+	@ApiOperation(value = "获取课表列表")
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody Result list(String keyword,Short status,Integer pageSize,Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		//总考试数量
+		int totalCount = scheduleService.listCount(keyword, status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+		
+		List<CourseSchedule> list = scheduleService.list(keyword == null ? "" : keyword.trim(),status,pageSize,pageNum);
+		
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("scheduleId", "scheduleId","status","status","beginTime","beginTime","endTime","endTime",
+	            		"teacherName","teacherName","updateTime","updateTime",
+	            		"subject", "subject","classes","classes"));
+	
+		if(listResult!=null && listResult.size()>0){
+			for (Map<String, Object> item : listResult) {
+				Subject subject = (Subject) item.get("subject");
+				item.put("subjectId", subject.getSubjectId());
+				item.put("subjectName", subject.getName());
+				
+				List<ClsClass> lstClasses= (List<ClsClass>) item.get("classes");
+				if(lstClasses!= null && lstClasses.size()>0){
+					String [] classNames = new String[lstClasses.size()];
+					for(int i =0;i<lstClasses.size();i++){
+						classNames[i] = lstClasses.get(i).getName();
+					}
+					item.put("classNames", classNames);
+				}else{
+					item.put("classNames", new String[]{});		
+				}
+				item.remove("subject");
+				item.remove("classes");
+			}
+		}
+		return new Result(true,"",CollectionUtils.newObjectMap("courseScheduleList",listResult,"page",pager));
+	}
+    
+    /**
+  	 * 课表列表
+     * @throws ParseException 
+  	 */
+    @ApiOperation(value = "教师获取当天课表信息")
+  	@RequestMapping(value = "teacher/list", method = RequestMethod.GET)
+  	public @ResponseBody Result teacherList(String date,Integer pageSize,Integer pageNum) throws Exception {
+  		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+  		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+  		
+  		//总考试数量
+  		int totalCount = scheduleService.listTeacherOfScheduleCount(date, pageSize, pageNum);
+  		Pager pager = new Pager(pageSize,pageNum);
+  		pager.setTotalCount(totalCount);
+  		
+  		List<CourseSchedule> list = scheduleService.listTeacherOfSchedule(date, pageSize, pageNum);
+  		
+  		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+  	            CollectionUtils.newStringMap("scheduleId","scheduleId","beginTime","beginTime","endTime","endTime","courseSchedule","courseSchedule"));
+  	
+  		if(listResult!=null && listResult.size()>0){
+			for (Map<String, Object> item : listResult) {
+				CourseSchedule courseSchedule = (CourseSchedule) item.get("courseSchedule");
+				Subject subject = courseSchedule.getSubject();
+				item.put("subjectId", subject.getSubjectId());
+				item.put("subjectName", subject.getName());
+				item.put("subjectType", subject.getType());
+				item.put("tacherName", courseSchedule.getTeacherName());
+				item.put("mark", courseSchedule.getMark());
+				item.put("roomName", courseSchedule.getClassRoom().getName());
+				item.put("roomAddr", courseSchedule.getClassRoom().getAddress());
+				
+				List<ClsClass> lstClasses= courseSchedule.getClasses();
+				if(lstClasses!= null && lstClasses.size()>0){
+					String [] classNames = new String[lstClasses.size()];
+					for(int i =0;i<lstClasses.size();i++){
+						classNames[i] = lstClasses.get(i).getName();
+					}
+					item.put("classNames", classNames);
+				}else{
+					item.put("classNames", new String[]{});		
+				}
+				
+				item.remove("courseSchedule");
+			}
+  		}
+  		
+  		return new Result(true,"",CollectionUtils.newObjectMap("scheduleDetailList",listResult,"page",pager));
+  	}
+	
+    
+    
+    /**
+  	 * 课表列表
+     * @throws ParseException 
+  	 */
+    @ApiOperation(value = "学生获取当天课表信息")
+  	@RequestMapping(value = "student/list", method = RequestMethod.GET)
+  	public @ResponseBody Result studentList(String date,Integer pageSize,Integer pageNum) throws Exception {
+  		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+  		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+  		
+  		//总考试数量
+  		int totalCount = scheduleService.listStudentScheduleCount(date, pageSize, pageNum);
+  		Pager pager = new Pager(pageSize,pageNum);
+  		pager.setTotalCount(totalCount);
+  		
+  		List<CourseSchedule> list = scheduleService.listStudentSchedule(date, pageSize, pageNum);
+  		
+  		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+  	            CollectionUtils.newStringMap("scheduleId","scheduleId","beginTime","beginTime","endTime","endTime","courseSchedule","courseSchedule"));
+  	
+  		if(listResult!=null && listResult.size()>0){
+			for (Map<String, Object> item : listResult) {
+				CourseSchedule courseSchedule = (CourseSchedule) item.get("courseSchedule");
+				Subject subject = courseSchedule.getSubject();
+				item.put("subjectId", subject.getSubjectId());
+				item.put("subjectName", subject.getName());
+				item.put("subjectType", subject.getType());
+				item.put("tacherName", courseSchedule.getTeacherName());
+				item.put("mark", courseSchedule.getMark());
+				item.put("roomName", courseSchedule.getClassRoom().getName());
+				item.put("roomAddr", courseSchedule.getClassRoom().getAddress());
+				
+				List<ClsClass> lstClasses= courseSchedule.getClasses();
+				if(lstClasses!= null && lstClasses.size()>0){
+					String [] classNames = new String[lstClasses.size()];
+					for(int i =0;i<lstClasses.size();i++){
+						classNames[i] = lstClasses.get(i).getName();
+					}
+					item.put("classNames", classNames);
+				}else{
+					item.put("classNames", new String[]{});		
+				}
+				item.remove("courseSchedule");
+			}
+  		}
+  		
+  		return new Result(true,"",CollectionUtils.newObjectMap("scheduleDetailList",listResult,"page",pager));
+  	}
+     
+	/**
+	 * 保存
+	 * 
+	 * @param examInfo
+	 * @return
+	 * @throws Exception 
+	 */
+    @ApiOperation(value = "保存课表")
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody CourseSchedule courseSchedule) throws Exception {
+    	if (StringUtils.isEmpty(courseSchedule.getScheduleId())) {
+				
+    		return new Result(true,"",CollectionUtils.newObjectMap("scheduleId", scheduleService.add(courseSchedule)));
+				
+		} else {
+			return scheduleService.update(courseSchedule);
+		}
+	}
+
+	/**
+	 * 删除
+	 * 
+	 * @param examIds
+	 * @return
+	 */
+	@ApiOperation(value = "删除课表", httpMethod = "GET")
+	@ApiImplicitParam(name = "scheduleIds", value = "课表ID字符串", required = true, dataType = "String", paramType = "body")
+	@RequestMapping(value = "delete", method = RequestMethod.GET)
+	public @ResponseBody Result delete(String scheduleIds) {
+		Result result = new Result(true);
+		if (StringUtils.isNotEmpty(scheduleIds)) {
+			result = scheduleService.delete(scheduleIds.split(","));
+		}
+		return result;
+	}
+	
+	/**
+	 * 发布课表
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "发布课表")
+	@RequestMapping(value = "/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publish(String scheduleIds) {
+		if (StringUtils.isEmpty(scheduleIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.scheduleService.doRelease(scheduleIds.split(","));
+	}
+
+	/**
+	 * 撤回课表
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "撤回课表")
+	@RequestMapping(value = "/cancel", method = RequestMethod.GET)
+	public @ResponseBody Result cancel(String scheduleIds) {
+		if (StringUtils.isEmpty(scheduleIds)) {
+			return new Result(false, "参数错误");
+		}
+		
+		return this.scheduleService.doCancel(scheduleIds.split(","));
+	}
+	
+	/**
+	 * 课表详情
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "课表详情")
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String scheduleId) {
+		if (StringUtils.isEmpty(scheduleId)) {
+			return new Result(false, "参数错误");
+		}
+		
+		CourseSchedule sche =  this.scheduleService.detail(scheduleId);
+		
+		Map<String,Object> dataMap =QBeanUtils.bean2Map(sche, 
+				CollectionUtils.newStringMap("scheduleId","scheduleId","mark","mark",
+				"beginTime","beginTime","endTime","endTime","monTime","monTime","tueTime","tueTime","wedTime","wedTime",
+				"thuTime","thuTime","friTime","friTime","satTime","satTime","sumTime","sumTime"));
+		
+		List<ClsClass> lstClasses= sche.getClasses();
+		if(lstClasses!= null && lstClasses.size()>0){
+			String [] classNames = new String[lstClasses.size()];
+			for(int i =0;i<lstClasses.size();i++){
+				classNames[i] = lstClasses.get(i).getName();
+			}
+			dataMap.put("classNames", classNames);
+		}else{
+			dataMap.put("classNames", new String[]{});
+		}
+		
+		dataMap.put("subjectId", sche.getSubject().getSubjectId());
+		dataMap.put("subjectName", sche.getSubject().getName());
+		
+		dataMap.put("roomName", sche.getClassRoom().getName());
+		dataMap.put("roomAddr", sche.getClassRoom().getAddress());
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("courseSchedule",dataMap));
+	}
+	
+	/**
+	 * 标记有课的日期
+	 * 
+	 * @param scheduleIds
+	 * @return
+	 */
+	@ApiOperation(value = "教师课表是否有课标识查询")
+	@RequestMapping(value = "teacher/flag", method = RequestMethod.GET)
+	public @ResponseBody Result listTeacherDateFlag(Integer year,Integer month) {
+		if (year==null || month==null) {
+			return new Result(false, "参数错误");
+		}
+		
+		List<Integer> listResult =  this.scheduleService.queryDateFlag(year, month);
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("dateFlagList",listResult));
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/CoursewareController.java b/src/main/java/com/qxueyou/scc/controller/CoursewareController.java
new file mode 100644
index 0000000..81b356a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/CoursewareController.java
@@ -0,0 +1,362 @@
+package com.qxueyou.scc.controller;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.service.IProgressService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResLib;
+import com.qxueyou.scc.teach.res.service.IResService;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 课件控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@Api(tags = "课件管理-管理员端")
+@RestController
+@RequestMapping(value = "teach/courseware")
+public class CoursewareController {
+
+	@Autowired
+	ILectureService lectureService;
+
+	@Autowired
+	IResService resService;
+
+	@Autowired
+	IProgressService progressService;
+
+	/**
+	 * 加载课件tree
+	 * 
+	 * @param parentId
+	 *            父节点id
+	 */
+	@GetMapping(value = "categoryTree")
+	public Result categoryTree(String subjectId, String parentId) {
+
+		List<SubjectChapter> chapterLst = lectureService.doGetListChapter(subjectId, parentId);
+
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst,
+				CollectionUtils.newStringMap("name", "name", "chapterId", "id")));
+	}
+
+	/**
+	 * 获取课件列表
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param type
+	 *            课件类型
+	 * @param keyword
+	 *            搜索关键字
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@GetMapping(value = "coursewareList")
+	public Result coursewareList(String chapterId, String type, String keyword, Integer limit, Integer pageNum) {
+
+		List<SubjectLecture> lectures = lectureService.listLecture(chapterId, keyword, limit, pageNum, type);
+
+		int lectureCount = lectureService.listLectureCount(chapterId, keyword, type);
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("coursewareLst",
+						QBeanUtils.listBean2ListMap(lectures,
+								CollectionUtils.newStringMap("name", "name", "lectureId", "id", "lectureType", "type",
+										"chapterId", "chapterId", "status", "status", "updateTime", "updateTime")),
+						"count", lectureCount));
+
+	}
+
+	/**
+	 * 查看课件
+	 * 
+	 * @param id
+	 *            课件id
+	 * @param attribute
+	 *            扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传
+	 */
+	@ApiOperation(value = "查看课件", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "课件id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "attribute", value = "扩展属性 video:\"mp4:HD\",\"m3u8:SD\" 可不用传 audio:可不用传 doc:可不用传", required = false, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "showCourseware")
+	public Result showCourseware(String id, String attribute) {
+
+		Result result = lectureService.readLectureAccessPath(id, null);
+
+		Progress progress = progressService.query(Progress.PROGRESS_TYPE_LECTURE, id, ClientUtils.getUserId());
+
+		return new Result(true, "true",
+				CollectionUtils.newObjectMap("name", result.getDataT("name"), "fullPath", result.getDataT("path"), "id", id, "size", result.getDataT("size"),
+						"percent", progress == null ? 0 : String.valueOf(progress.getProgressPercent())));
+	}
+
+	/**
+	 * 删除课件
+	 * 
+	 * @param id
+	 *            课件ids
+	 */
+	@GetMapping(value = "deleteCourseware")
+	public Result deleteCourseware(String id) {
+
+		return lectureService.deleteLecture(id.split(","));
+
+	}
+
+	/**
+	 * 课件的复制
+	 * 
+	 * @param id
+	 *            课件id
+	 * @param type
+	 *            课件类型
+	 * @param chapterId
+	 *            章Id
+	 * @param sectionId
+	 *            节id
+	 * @param smallSectionId
+	 *            小节id
+	 * @param name
+	 *            课件名称
+	 */
+	@GetMapping(value = "copy")
+	public Result copy(String id, String type, String subjectId, String chapterId, String name) {
+		return lectureService.doCopyLecture(id, chapterId, name);
+	}
+
+	/**
+	 * 课件的移动
+	 * 
+	 * @param id
+	 *            课件id
+	 * @param type
+	 *            课件类型
+	 * @param chapterId
+	 *            章Id
+	 * @param sectionId
+	 *            节id
+	 * @param smallSectionId
+	 *            小节id
+	 */
+	@GetMapping(value = "move")
+	public Result moveCourseware(String id, String type, String subjectId, String chapterId, String name) {
+		return lectureService.doMoveLecture(id, chapterId, name);
+	}
+
+	/**
+	 * 课件管理 新增下级,同级
+	 * 
+	 * @param type
+	 *            (add:新增,edit :编辑)
+	 * @param chapterId
+	 *            章节id
+	 * @param subjectId
+	 *            课程id
+	 * @param name
+	 *            名称
+	 * @param childFlag
+	 *            是否操作下级
+	 * 
+	 */
+	@PostMapping(value = "addOrUpdateChapter")
+	public Result addOrUpdateChapter(String type, String name, String chapterId, String subjectId, boolean childFlag) {
+
+		SubjectChapter chapter = lectureService.readChapter(chapterId);
+		String parentChapterId = childFlag ? chapterId : chapter.getParentChapterId();
+
+		if ("add".equals(type)) {
+			return lectureService.addChapter(subjectId, parentChapterId, name);
+		} else {
+			return lectureService.updateChapter(chapterId, name);
+		}
+
+	}
+
+	/**
+	 * 课件管理 目录删除
+	 * 
+	 * @param chapterId
+	 *            目录id
+	 */
+	@GetMapping(value = "deleteChapter")
+	public Result deleteChapter(String chapterId) {
+		return lectureService.deleteChapter(chapterId.split(","));
+	}
+
+	/**
+	 * 添加/更新(视频,讲义,音频)
+	 * 
+	 * @param name
+	 *            名称
+	 * @param coverUrl
+	 *            封面Url
+	 * @param remark:
+	 *            <p>
+	 *            视频啊啊啊
+	 *            </p>
+	 *            介绍
+	 *
+	 * @param id
+	 *            课件id
+	 * @param sectionId
+	 *            小节Id
+	 * @param type
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@PostMapping(value = "addOrUpdate")
+	public Result addOrUpdate(String id, String remark, String name, String coverUrl, String type, String fileId,
+			String sectionId) {
+
+		if (StringUtils.isEmpty(id)) {
+
+			Result resResult = resService.add(
+					resService.doGetRootDir(ResLib.OWNNER_TYPE_USER, ClientUtils.getUserId()).getDirId(), fileId, name,
+					remark, type, coverUrl);
+
+			return lectureService.addLecture(sectionId, resResult.getDataT("resId"));
+
+		} else {
+
+			SubjectLecture lecture = lectureService.readLecture(id);
+
+			resService.update(lecture.getResItemId(), name, remark, coverUrl);
+			return lectureService.updateLecture(lecture.getLectureId(), lecture.getResItemId());
+		}
+	}
+
+	/**
+	 * 编辑 获取内容
+	 * 
+	 * @param id
+	 *            课件id
+	 */
+	@GetMapping(value = "getCoursewareDetail")
+	public Result getCoursewareDetail(String id) {
+
+		SubjectLecture lecture = lectureService.readLecture(id);
+
+		Res res = resService.read(lecture.getResItemId());
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("coursewareName", lecture.getName(), "coverUrl", res.getCoverPageUrl(),
+						"remark", res.getRemark(), "fileId", null, "name", lecture.getName(), "id",
+						lecture.getLectureId()));
+	}
+
+	/**
+	 * 课件获取资源列表
+	 * 
+	 * @param dirId
+	 *            目录Id
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@GetMapping(value = "getResLst")
+	public Result getResLst(String dirId, Integer limit, Integer pageNum, String keyword) {
+
+		List<Res> resLst = resService.listMyRes(keyword, limit, pageNum, "");
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("resCount", resService.listMyResCount(keyword, ""), "resLst",
+
+						QBeanUtils.listBean2ListMap(resLst,
+								CollectionUtils.newStringMap("resId", "resId", "name", "resName", "type", "type"))));
+	}
+
+	/**
+	 * 课件从资源选择后保存
+	 * 
+	 * @param resId
+	 *            资源文件id
+	 * @param sectionId
+	 *            小节id
+	 * 
+	 */
+	@GetMapping(value = "saveCourseware4Res")
+	public Result saveCourseware4Res(String resId, String sectionId) {
+
+		int successCount = 0;
+		Result result = new Result(true);
+
+		for (String resId_ : resId.split(",")) {
+			result = lectureService.addLecture(sectionId, resId_);
+			successCount = result.isSuccess() ? 1 : 0;
+		}
+
+		return new Result(true, null, successCount);
+	}
+
+	/**
+	 * 获取练习成绩列表
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param exerciseId
+	 *            练习id
+	 * @param pageSize
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * 
+	 */
+	@GetMapping(value = "lstExerciseScore")
+	public Result lstExerciseScore(String subjectId, String exerciseId, Integer pageSize, Integer pageNum) {
+		Map<String, Object> lstExerciseGradeOne = CollectionUtils.newObjectMap("studentNumber", 201342, "studentName",
+				"李刚1", "className", "catti", "mockTime", new Date(), "status", 1, "score", 60, // status 0 表示未提交,1是已提交
+				"passingFlag", 1);// passingFlag 1,true,0 false
+		Map<String, Object> lstExerciseGradeTwo = CollectionUtils.newObjectMap("studentNumber", 201342, "studentName",
+				"李刚2", "className", "catti", "mockTime", new Date(), "status", 0, "score", 70, "passingFlag", 0);
+		Map<String, Object> lstExerciseGradeThree = CollectionUtils.newObjectMap("studentNumber", 201342, "studentName",
+				"李刚3", "className", "catti", "mockTime", new Date(), "status", 1, "score", 80, "passingFlag", 1);
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("scoreLst",
+						CollectionUtils.newList(lstExerciseGradeOne, lstExerciseGradeTwo, lstExerciseGradeThree),
+						"scoreCount", 3));
+	}
+
+	/**
+	 * 练习成绩的导出
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param exerciseId练习id
+	 */
+	@GetMapping(value = "exportScore")
+	public Result exportScore(String subjectId, String exerciseId) {
+		return new Result(true, "success");
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/EvaluateController.java b/src/main/java/com/qxueyou/scc/controller/EvaluateController.java
new file mode 100644
index 0000000..01f3a1d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/EvaluateController.java
@@ -0,0 +1,294 @@
+package com.qxueyou.scc.controller;
+
+import java.io.IOException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.ResultJson;
+import com.qxueyou.scc.config.AliOssConfig;
+import com.qxueyou.scc.evaluate.service.IEvaluateService;
+import com.qxueyou.scc.school.model.SchEvaluate;
+import com.qxueyou.scc.school.model.TeachEvaScoreResult;
+import com.qxueyou.scc.sys.service.IOssService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+
+/**
+ * 评估控制器
+ *
+ * @author zhiyong
+ */
+@Api(tags = "问卷接口")
+@Controller
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "/evaluate")
+@EnableConfigurationProperties(AliOssConfig.class)
+public class EvaluateController {
+
+    private final Logger log = LogManager.getLogger(EvaluateController.class);
+
+    @Autowired
+    private IEvaluateService evaluateService;
+
+    @Autowired
+    IOssService ossService;
+
+    // ------------------------------后台   start------------------------------------------------------------
+
+    /**
+     * 获取列表数据
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取列表数据-教师端", notes = "", httpMethod = "GET")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "pageNum", value = "页码", required = false, paramType="query", dataType = "Integer"),
+        @ApiImplicitParam(name = "pageSize", value = "每页数目", required = false, paramType="query", dataType = "Integer"),
+        @ApiImplicitParam(name = "keyword", value = "查询字段", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "sort", value = "排序字段", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "list", method = RequestMethod.GET)
+    public @ResponseBody
+    ResultJson queryList(Integer pageNum, Integer pageSize, String keyword, @RequestParam(defaultValue = "desc") String sort) {
+
+        return evaluateService.queryList(pageNum, pageSize, keyword, sort);
+    }
+
+    /**
+     * 获取范围选择
+     * <p>
+     * type:   lesson:课程  class:班级     person:人员
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取范围选择", notes = "根据填写范围获取下拉列表的值")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "type", value = "填写范围【lesson:课程  class:班级     person:人员】", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "rangeList", method = RequestMethod.GET)
+    public @ResponseBody
+    ResultJson queryRangeList(String type, String searchName) {
+
+        return evaluateService.queryRangeList(type, searchName);
+    }
+
+    /**
+     * 后台管理
+     * 新增或修改教学评估
+     *
+     * @param obj
+     * @return
+     */
+    @ApiOperation(value = "新增或修改问卷", notes = "")
+    @RequestMapping(value = "addOrUpdate", method = RequestMethod.POST)
+    public @ResponseBody
+    ResultJson addOrUpdateEvaluate(@RequestBody SchEvaluate eva) {
+
+        return evaluateService.addOrUpdateEvaluate(eva);
+    }
+
+    /**
+     * 获取回显数据
+     *
+     * @return
+     */
+    @ApiOperation(value = "读取问卷的信息", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "baseInfo", method = RequestMethod.GET)
+    public @ResponseBody
+    ResultJson queryBaseInfo(String evaluateId) {
+
+        return evaluateService.queryBaseInfo(evaluateId);
+    }
+
+    /**
+     * 删除
+     *
+     * @return
+     */
+    @ApiOperation(value = "删除问卷", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "delete", method = RequestMethod.POST)
+    public @ResponseBody
+    ResultJson delete(String evaluateIds) {
+
+        return evaluateService.delete(evaluateIds);
+    }
+
+    /**
+     * 后台管理
+     * 激活教学评估
+     *
+     * @return
+     */
+    @ApiOperation(value = "激活教学评估", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "active", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultJson active(String evaluateIds) {
+
+        return evaluateService.doActive(evaluateIds);
+
+    }
+
+    /**
+     * 后台管理
+     * 撤回
+     *
+     * @return
+     */
+    @ApiOperation(value = "撤回教学评估", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "withdraw", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultJson withdraw(String evaluateIds) {
+
+        return evaluateService.doWithdraw(evaluateIds);
+
+    }
+
+    /**
+     * 后台管理
+     * 复制
+     *
+     * @return
+     */
+    @ApiOperation(value = "复制教学评估", notes = "")
+    @RequestMapping(value = "copy", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultJson doCopy(@RequestBody SchEvaluate eva) {
+
+        return evaluateService.doCopy(eva);
+
+    }
+
+
+    /**
+     * 查看结果  问卷整体情况
+     *
+     * @param groupId
+     * @param schEvaluateId
+     * @param classId
+     * @return
+     */
+    @ApiOperation(value = "问卷整体答题情况", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "groupId", value = "练习组id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "queryEvaluateDetail", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultJson queryEvaluateDetail(String evaluateId, String groupId) {
+
+        return evaluateService.queryEvaluateDetail(evaluateId, groupId);
+    }
+
+    /**
+     * 查看统计
+     *
+     * @param groupId
+     * @param schEvaluateId
+     * @return
+     */
+    @ApiOperation(value = "查看问卷统计情况", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "groupId", value = "练习组id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "evaluateStatisDetail", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultJson queryEvaluateStatis(String groupId, String evaluateId) {
+
+        return evaluateService.queryEvaluateStatis(groupId, evaluateId);
+    }
+
+
+    // ------------------------------后台   end------------------------------------------------------------
+
+    // ------------------------------前端  start-----------------------------------------------------------
+
+    /**
+     * 微信提交问卷
+     *
+     * @param answers
+     * @param userId
+     * @return
+     */
+    @ApiOperation(value = "提交问卷答案", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "answers", value = "{\"evaluateId\":\"297ebe0e653d1bf601654064de690004\",\"exerciseGroupId\":\"297ebe0e653d1bf601654064de2b0002\",\"items\":[{\"exerciseId\":\"297ebe0e653d1bf60165407d5e9f0033\",\"answer\":\"B,C\"},{\"exerciseId\":\"297ebe0e653d1bf60165407eb3b6003e\",\"answer\":\"B\"},{\"exerciseId\":\"297ebe0e653d1bf6016541a801c5009e\",\"answer\":\"A,B\"},{\"exerciseId\":\"297ebe0e653d1bf6016540755a4a0005\",\"answer\":\"B\"},{\"exerciseId\":\"297ebe0e653d1bf6016540787e42001d\",\"answer\":\"B\"},{\"exerciseId\":\"297ebe0e653d1bf60165407b48a80028\",\"answer\":\"B\"}]}", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "saveEvaluateWeixin", method = RequestMethod.POST)
+    public @ResponseBody
+    ResultJson saveEvaluateWeixin(@RequestParam("answers") String answers, String userId) {
+
+        ResultJson result = new ResultJson(false);
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            // 装换json到对象
+            TeachEvaScoreResult scoreResult = mapper.readValue(answers, TeachEvaScoreResult.class);
+            // 提交答卷入库
+            result = evaluateService.doSubmitTeachEvalScoreData(scoreResult, userId);
+            
+            evaluateService.updateEvaluateCount(scoreResult.getEvaluateId());
+
+        } catch (IOException e) {
+            result = new ResultJson(false);
+            log.error(e);
+        }
+
+        return result;
+    }
+
+    /**
+     * 查询学生评估list
+     *
+     * @return
+     */
+    @ApiOperation(value = "问卷列表-学员端", notes = "")
+    @RequestMapping(value = "stuEvaluateList", method = RequestMethod.GET)
+    public @ResponseBody
+    ResultJson queryStuEvaluateList(Pager pager) {
+
+        return evaluateService.queryStuEvaluateList(pager);
+    }
+
+    /**
+     * 问卷查询题目
+     *
+     * @param evaluateId
+     * @return
+     */
+    @ApiOperation(value = "问卷题目列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "viewStuEvaluate", method = RequestMethod.GET)
+    public @ResponseBody
+    ResultJson evaluateListWeixin(@RequestParam("evaluateId") String evaluateId) {
+
+        return evaluateService.doGetEvalExerItemResponseDataNew(evaluateId);
+    }
+
+    // ------------------------------前端   end------------------------------------------------------------
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/ExamRoomController.java b/src/main/java/com/qxueyou/scc/controller/ExamRoomController.java
new file mode 100644
index 0000000..c8a760c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/ExamRoomController.java
@@ -0,0 +1,186 @@
+package com.qxueyou.scc.controller;
+
+import com.qxueyou.scc.admin.examroom.model.ExamRoom;
+import com.qxueyou.scc.admin.examroom.service.IExamRoomService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+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(value = "admin/examroom")
+public class ExamRoomController {
+	//日志
+	private final Logger log = LogManager.getLogger(ExamRoomController.class);
+
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+
+    @Autowired
+    private IExamRoomService examRoomService;
+
+    @Autowired
+	private CommonDAO commonDAO;
+
+    /**
+	 * 考场列表
+	 */
+    @ApiOperation(value = "获取考场列表")
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody Result list(String roomId,String keyword,Short status,Integer pageSize,Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+
+		//总考试数量
+		int totalCount = examRoomService.listCount(roomId,keyword, status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+
+		List<ExamRoom> list = examRoomService.list(roomId,keyword == null ? "" : keyword.trim(),status,pageSize,pageNum);
+
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("examroomId", "examroomId", "examroomName", "examroomName",
+	            		"status","status","creator", "creator", "updateTime", "updateTime","seatsNum","seatsNum"));
+
+		return new Result(true,"",CollectionUtils.newObjectMap("examRoomList",listResult,"page",pager));
+	}
+
+	/**
+	 * 保存
+	 *
+	 * @param examRoom
+	 * @return
+	 */
+    @ApiOperation(value = "保存考场")
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExamRoom examRoom) {
+
+
+		if (StringUtils.isEmpty(examRoom.getExamroomId())) {
+			if(checkIsDumplicate(examRoom.getExamroomId(),examRoom.getExamroomName())){
+				return new Result(false, "添加失败!重复的考场信息");
+			}
+			return new Result(true,"",CollectionUtils.newObjectMap("examroomId", examRoomService.add(examRoom)));
+		} else {
+			return examRoomService.update(examRoom);
+		}
+	}
+
+
+	private boolean checkIsDumplicate(String roomId,String name){
+
+		if(StringUtils.isEmpty(name)){
+			return false;
+		}
+
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExamRoom r where r.examroomName=? ");
+		List<Object> args = CollectionUtils.newList(name);
+
+		if(StringUtils.isNotEmpty(roomId)){
+			hql.append(" and examroomId!=?");
+			args.add(roomId);
+		}
+
+		hql.append(" and r.deleteFlag is false");
+
+		int count =  commonDAO.findCount(hql.toString(), args);
+
+		return count>0;
+	}
+
+
+
+	/**
+	 * 删除
+	 *
+	 * @param examroomIds
+	 * @return
+	 */
+	@ApiOperation(value = "删除考场", httpMethod = "GET")
+	@ApiImplicitParam(name = "examroomIds", value = "考场ID字符串", required = true, dataType = "String", paramType = "body")
+	@RequestMapping(value = "delete", method = RequestMethod.GET)
+	public @ResponseBody Result delete(String examroomIds) {
+		Result result = new Result(true);
+		if (StringUtils.isNotEmpty(examroomIds)) {
+			result = examRoomService.delete(examroomIds.split(","));
+		}
+		return result;
+	}
+
+	/**
+	 * 发布考场
+	 *
+	 * @param roomIds
+	 * @return
+	 */
+	@ApiOperation(value = "发布考场", httpMethod = "GET")
+	@RequestMapping(value = "/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publish(String roomIds) {
+		if (StringUtils.isEmpty(roomIds)) {
+			return new Result(false, "参数错误");
+		}
+
+		return this.examRoomService.doRelease(roomIds.split(","));
+	}
+
+	/**
+	 * 撤回发布的考场
+	 *
+	 * @param roomIds
+	 * @return
+	 */
+	@ApiOperation(value = "撤回考场", httpMethod = "GET")
+	@RequestMapping(value = "/cancel", method = RequestMethod.GET)
+	public @ResponseBody Result cancel(String roomIds) {
+		if (StringUtils.isEmpty(roomIds)) {
+			return new Result(false, "参数错误");
+		}
+
+		return this.examRoomService.doCancel(roomIds.split(","));
+	}
+
+
+	/**
+	 * 详情页面数据
+	 *
+	 * @param examroomId
+	 * @return
+	 */
+	@ApiOperation(value = "详情页面数据")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="考场ID", required=true),
+	})
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String examroomId) {
+		return new Result(true,"",CollectionUtils.newObjectMap("detail",this.examRoomService.detail(examroomId)));
+	}
+
+	/**
+	 * 查询所有考场的ID和名称
+	 * @return
+	 */
+	@ApiOperation(value = "可选择考场ID和名称")
+	@RequestMapping(value = "/allExamRoomIdAndNames", method = RequestMethod.GET)
+	public @ResponseBody Result listClassRoomIdAndNames() {
+		List<Map<String,Object>> listResult =  this.examRoomService.queryAllRoomIdAndNames();
+		return new Result(true,"",CollectionUtils.newObjectMap("listExamRooms",listResult));
+	}
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/FileController.java b/src/main/java/com/qxueyou/scc/controller/FileController.java
new file mode 100644
index 0000000..98b552f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/FileController.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.controller;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+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.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import com.qxueyou.scc.base.model.FileMeta;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.res.service.IFileService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 文件上传控制器
+ * 
+ * @author xiadehu
+ */
+@Api(tags="文件上传通用接口")
+@Controller
+@RequestMapping(value = "/base/file")
+public class FileController {
+
+	private final Logger log = LogManager.getLogger("FileController");
+
+	@Autowired
+	IFileService fileService;
+
+	/**
+	 * 通用上传接口
+	 * 
+	 * @TODO : 目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档  3 视频 4 音频
+	 * @param response
+	 * @return
+	 */
+	@ApiOperation(value="通用上传接口", notes="目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档  3 视频 4 音频")
+	@RequestMapping(value = "/upload", headers = "content-type=multipart/*", method = RequestMethod.POST)
+	public @ResponseBody List<FileMeta> doUpload(MultipartHttpServletRequest request, HttpServletResponse response) {
+
+		// 2.循环取得文件
+		Iterator<String> itr = request.getFileNames();
+		MultipartFile mpf = null;
+		List<FileMeta> files = new ArrayList<FileMeta>(2);
+		FileMeta fileMeta = null;
+
+		while (itr.hasNext()) {
+			// 2.从request中取的下一个 MultipartFile
+			mpf = request.getFile(itr.next());
+
+			// 2.2 创建一个FileMeta
+			fileMeta = new FileMeta();
+			try {
+				Result uploadResult = fileService.doUpload(mpf.getInputStream(), mpf.getOriginalFilename());
+
+				fileMeta.setFileId(uploadResult.getDataT("fileId"));
+				fileMeta.setPath(uploadResult.getDataT("path"));
+			} catch (Exception e) {
+				String desp = e.getMessage();
+				desp = desp.length() > 120 ? desp.substring(0, 120) : desp;
+				log.error("上传模块解析出错:" + e);
+			}
+
+			fileMeta.setFileName(mpf.getOriginalFilename());
+			fileMeta.setFileSize(mpf.getSize() / 1024 + " Kb");
+			fileMeta.setFileType(mpf.getContentType());
+
+			// 2.4 add to files
+			files.add(fileMeta);
+		}
+
+		return files;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/IndexController.java b/src/main/java/com/qxueyou/scc/controller/IndexController.java
new file mode 100644
index 0000000..92f8cac
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/IndexController.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.controller;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+/**
+ * 后台首页控制器
+ * 
+ * @author xiadehu
+ *
+ */
+@RestController
+@RequestMapping()
+public class IndexController {
+
+
+	@Autowired
+	IClassService classService;
+	
+	@Value("${server.context-index}")
+	private String WEB_INDEX;
+	
+	@RequestMapping(value = {"", "/", "login","web","index","welcome"})
+	public void index(HttpServletRequest httpRequest,HttpServletResponse response) throws IOException {
+		response.sendRedirect(httpRequest.getContextPath()+WEB_INDEX);
+	}
+
+	@GetMapping(value = "/admin/home/classData")
+	public Result getClassData() {
+
+//		request.getSession().invalidate();
+//		ClientUtils.isAdmin()=true;
+		String teacherId = ClientUtils.isAdmin()?null:ClientUtils.getUserId();
+		
+		List<ClsClass> clsLst =  classService.getClassLst("",teacherId, 2000, 1, 1);
+		
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>(clsLst.size()*2);
+		
+		for(ClsClass cls:clsLst) {
+			result.add(classService.getClassActivityInfo(cls.getClassId()));
+		}
+		
+		return new Result(true,null,result);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/MsgChatroomMsgCtrl.java b/src/main/java/com/qxueyou/scc/controller/MsgChatroomMsgCtrl.java
new file mode 100644
index 0000000..bfa1872
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/MsgChatroomMsgCtrl.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.controller;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.msg.service.IChatroomMsgService;
+
+@Controller
+@RequestMapping(value = "/msg/chatroom/")
+public class MsgChatroomMsgCtrl {
+
+    @Autowired
+    IChatroomMsgService service;
+
+    @RequestMapping(value = "/sendMsg")
+    public @ResponseBody
+    Result send(
+            String chatroomId,
+            String senderId,
+            String imgPath,
+            String alias,
+            String content,
+            Integer type,
+            String userType) {
+        try {
+            if (StringUtils.isEmpty(chatroomId) || StringUtils.isEmpty(senderId) || StringUtils.isEmpty(content)) {
+                return new Result(false, "参数错误");
+            }
+            return service.doSendMessage(chatroomId, senderId, imgPath, alias, content, type, userType);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(false, "系统异常");
+        }
+    }
+
+    @RequestMapping(value = "/historyMsg")
+    public @ResponseBody
+    Result historyMsg(String chatroomId, Integer pageNum) {
+        try {
+            return service.getHistoryMes(chatroomId, pageNum);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(false, "系统异常");
+        }
+    }
+
+    @RequestMapping(value = "/latestMsg")
+    public @ResponseBody
+    Result latestMsg(String chatroomId) {
+        try {
+            return service.latestMsg(chatroomId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(false, "系统异常");
+        }
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/MsgInfoController.java b/src/main/java/com/qxueyou/scc/controller/MsgInfoController.java
new file mode 100644
index 0000000..a95520d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/MsgInfoController.java
@@ -0,0 +1,143 @@
+package com.qxueyou.scc.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.alibaba.druid.util.StringUtils;
+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.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags="消息管理接口")
+@Controller
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "/msg/msg/")
+public class MsgInfoController {
+
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+
+    @Autowired
+    IMsgInfoService msgInfoService;
+	
+	/**
+	 * 消息列表
+	 */
+    @ApiOperation(value = "获取消息列表")
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody Result list(Short type,Integer pageSize,Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		//消息数量
+		int totalCount = msgInfoService.listCount(type);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+		
+		List<MsgInfo> list = msgInfoService.list(type,pageSize,pageNum);
+		
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("msgId", "msgId", "type", "type", "content", "content",
+	            		"readFlag","readFlag","createTime", "createTime"));
+
+		return new Result(true,"",CollectionUtils.newObjectMap("msgList",listResult,"page",pager));
+	}
+	
+	/**
+	 *  删除消息
+	 * @param msgIds
+	 * @return
+	 */
+    @ApiOperation(value = "删除消息")
+	@RequestMapping(value = "delete", method = RequestMethod.GET)
+    public @ResponseBody Result deleteUserMsg(String  msgIds){
+		if(StringUtils.isEmpty(msgIds)){
+			return new Result(false,"参数错误!");
+		}
+		
+		return this.msgInfoService.deleteUserMsg(msgIds.split(","));
+	}
+
+	/**
+	 * 清空个人消息
+	 * 
+	 * @return
+	 */
+    @ApiOperation(value = "清空消息")
+	@RequestMapping(value = "clear", method = RequestMethod.GET)
+    public @ResponseBody Result deleteAllUserMsg(Short type){
+		return this.msgInfoService.deleteAllUserMsg(type);
+	}
+	
+	/**
+	 *  修改已读标志位
+	 * @param msgId
+	 * @return
+	 */
+    @ApiOperation(value = "更新为已读")
+	@RequestMapping(value = "read", method = RequestMethod.GET)
+    public @ResponseBody Result updateReadFlag(String msgIds){
+		return this.msgInfoService.updateReadStatus(msgIds.split(","));
+	}
+	
+	/**
+	 *  全部已读
+	 * @param msgId
+	 * @return
+	 */
+    @ApiOperation(value = "全部更新为已读")
+	@RequestMapping(value = "readall", method = RequestMethod.GET)
+    public @ResponseBody Result updateAllUserReadFlag(Short type){
+		return this.msgInfoService.updateUserAllReadStatus(type);
+	}
+    
+    
+   /**
+	 *  最近的提醒消息
+	 * @param msgId
+	 * @return
+	 */
+   @ApiOperation(value = "最近的一条提醒信息")
+   @RequestMapping(value = "last", method = RequestMethod.GET)
+   public @ResponseBody Result getLatest(){
+	   return new Result(true,"",this.msgInfoService.readLastRemindMsg());
+   }
+    
+   
+   /**
+	 *  最近的提醒消息
+	 * @param msgId
+	 * @return
+	 */
+   @ApiOperation(value = "按类型获取未读消息的数量")
+   @RequestMapping(value = "count", method = RequestMethod.GET)
+   public @ResponseBody Result queryUnReadMsgCountByType(){
+	   return new Result(true,"",this.msgInfoService.queryUnReadMsgCountByType());
+   }
+   
+   /**
+	 *  查询未读消息总数
+	 * @param msgId
+	 * @return
+	 */
+   @ApiOperation(value = "查询用户未读消息总数")
+   @RequestMapping(value = "totalcount", method = RequestMethod.GET)
+   public @ResponseBody Result queryUnReadTotalCount(){
+	   return new Result(true,"",CollectionUtils.newObjectMap("totalCount",this.msgInfoService.queryUnReadTotalCount()));
+   }
+   
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/NoticeController.java b/src/main/java/com/qxueyou/scc/controller/NoticeController.java
new file mode 100644
index 0000000..676be85
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/NoticeController.java
@@ -0,0 +1,272 @@
+package com.qxueyou.scc.controller;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.classes.dao.ClassDAO;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.notice.dao.NoticeDAO;
+import com.qxueyou.scc.admin.notice.service.INoticeService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.notice.model.Notice;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags = "公告接口-教师端")
+@RestController
+@RequestMapping(value = "/admin/notice")
+public class NoticeController {
+
+    @Autowired
+    IClassService classService;
+
+    @Autowired
+    INoticeService noticeService;
+
+    @Autowired
+    NoticeDAO dao;
+
+    @Autowired
+    ClassDAO classDao;
+
+    /**
+     * 显示 公告列表
+     *
+     * @param keyword
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "公告列表", notes = "获取班级列表及班级所在公告列表")
+    @GetMapping(value = "list")
+    public Result list(String keyword, Integer pageNum, Integer pageSize) {
+		if (!ClientUtils.isAdmin()) {
+			// 获取班级列表及班级所在公告列表
+			List<String> noticeIds = new ArrayList<String>(10);
+			List<ClsClass> clsLst = classService.getClassLstByTeacherId();
+			for (ClsClass cls : clsLst) {
+				noticeIds.addAll(dao.getClassNotices(cls.getClassId()));
+			}
+			List<Notice> notices = noticeService.readByStatus(noticeIds, Notice.STATUS_ISSUED);
+
+			List<Map<String, Object>> lst = QBeanUtils.listBean2ListMap(notices, CollectionUtils.newStringMap(
+					"noticeId", "noticeId", "title", "name", "noticeTypeName", "type", "issuedTime", "releaseTime"));
+
+			if(lst == null) {
+				return new Result(true, "success",
+						CollectionUtils.newObjectMap("noticeCount", 0, "noticeLst", new ArrayList<>()));
+			}
+			
+			for (Map<String, Object> map : lst) {
+				map.put("isView", dao.isView((String) map.get("noticeId"), ClientUtils.getUserId()));
+				map.put("classCount", dao.getLiveClasses((String) map.get("noticeId")).size());
+				map.put("noticeTypeName", this.getTypeName((String)map.get("type")));
+			}
+
+			return new Result(true, "success",
+					CollectionUtils.newObjectMap("noticeCount", lst.size(), "noticeLst", lst));
+
+		} else {
+			return new Result(true, "success", CollectionUtils.newObjectMap("noticeLst", Collections.EMPTY_LIST));
+		}
+    }
+
+    /**
+ 	  *   显示 公告管理列表
+     * @param keyword
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "公告管理列表", notes = "")
+    @GetMapping(value = "managerLst")
+    public Result managerLst(String keyword, Pager pager, @RequestParam(defaultValue = "desc") String sort) {
+        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+        List<Notice> notices = noticeService.list(keyword_, pager.getPageNum(), pager.getPageSize(), ClientUtils.getUserId(), sort);
+
+        int count = noticeService.listCount(keyword_, ClientUtils.getUserId());
+
+        List<Map<String, Object>> lst = QBeanUtils.listBean2ListMap(notices, CollectionUtils.newStringMap(
+                "noticeId", "noticeId",
+                "title", "name",
+                "status", "status",
+                "noticeTypeName", "type",
+                "issuedTime", "releaseTime"
+        ));
+
+        for (Map<String, Object> map : lst) {
+            List<String> classIds = dao.getLiveClasses((String) map.get("noticeId"));
+            map.put("classCount", classIds.size());
+            map.put("studentCount", classIds.size() > 0?classDao.getStudentCount(classIds):0);
+            map.put("readCount", dao.getReadCount((String) map.get("noticeId")));
+            map.put("noticeTypeName", this.getTypeName((String)map.get("type")));
+        }
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("noticeCount", count, "noticeLst", lst
+        ));
+    }
+    
+    private String getTypeName(String key) {
+    	Map<String, String> typeMap = new HashMap<>();
+    	typeMap.put("homework", "作业公告");
+    	typeMap.put("exam", "考试公告");
+    	typeMap.put("other", "其他公告");
+    	typeMap.put("class", "上课公告");
+    	
+    	return typeMap.get(key);
+    }
+
+    /**
+     * 发布公告/多个id已逗号隔开
+     *
+     * @param noticeIds 公告ids
+     * @return
+     */
+    @ApiOperation(value = "发布公告", notes = "多个id已逗号隔开")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String")
+    })
+    @PostMapping(value = "release")
+    public Result release(String noticeIds) {
+        return noticeService.doIssue(noticeIds.split(","));
+    }
+
+    /**
+     * 取消发布/多个id已逗号隔开
+     *
+     * @param noticeIds 公告ids
+     * @return
+     */
+    @ApiOperation(value = "取消发布", notes = "多个id已逗号隔开")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"),
+    })
+    @PostMapping(value = "cancel")
+    public Result cancel(String noticeIds) {
+        return noticeService.doCancel(noticeIds.split(","));
+    }
+
+    /**
+     * 删除 公告/多个id已逗号隔开
+     *
+     * @param noticeIds 公告ids
+     * @return
+     */
+    @ApiOperation(value = "删除公告", notes = "多个id已逗号隔开")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"),
+    })
+    @PostMapping(value = "delete")
+    public Result delete(String noticeIds) {
+        return noticeService.delete(noticeIds.split(","));
+    }
+
+    /**
+     * 新增/更新
+     *
+     * @param noticeId
+     * @param name
+     * @param content
+     * @param type
+     * @param classIds
+     * @param pathUrl
+     * @return
+     */
+	@ApiOperation(value = "新增/更新公告", notes = "noticeId存在则更新,否则新增")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "name", value = "公告标题", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "content", value = "公告内容", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "type", value = "公告类型名称", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "classIds", value = "关联的班级id,逗号组装", required = true, paramType = "query", dataType = "String") })
+	@PostMapping(value = "addOrUpdate")
+	public Result addOrUpdate(String noticeId, String name, String content, String type, String classIds,
+			String pathUrl) {
+		if (StringUtils.isEmpty(noticeId)) {
+			return noticeService.add(name, content, type, CollectionUtils.newList(String.class, classIds.split(",")));
+		} else {
+			return noticeService.update(noticeId, name, content, type,
+					CollectionUtils.newList(String.class, classIds.split(",")));
+		}
+	}
+
+    /**
+     * 获取公告详情
+     *
+     * @param noticeId
+     * @return
+     */
+	@ApiOperation(value = "获取公告详情", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType = "query", dataType = "String")
+	})
+    @GetMapping(value = "detail")
+    public Result detail(String noticeId) {
+        Notice notice = noticeService.read(noticeId);
+        List<String> classIds = dao.getLiveClasses(noticeId);
+        
+        String [] classNames = null;
+        if(classIds!=null && classIds.size()>0){
+        	classNames= classService.queryClassNamesByIds(classIds.toArray(new String [classIds.size()]));
+        }
+        
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap(
+                        "noticeName", notice.getTitle(),
+                        "type", notice.getNoticeTypeName(),
+                        "createTime", notice.getCreateTime(),
+                        "remark", notice.getContent(),
+                        "fullPath", notice.getImgPath(),
+                        "creator", notice.getCreator(),
+                        "classIds", classIds,
+                        "classNames", classNames
+        ));
+    }
+
+	@ApiOperation(value = "获取班级列表", notes = "")
+    @GetMapping(value = "findClassLst")
+    public Result findClassLst() {
+        if (ClientUtils.isAdmin()) {
+            List<Map<String, Object>> clsLst = classService.getAllClassLst().getDataT("classLst");
+            return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap(
+                    "classId", "classId",
+                    "className", "className"
+            )));
+        } else {
+            List<ClsClass> clsLst = classService.getClassLstByTeacherId();
+            return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap(
+                    "classId", "classId",
+                    "name", "className"
+            )));
+        }
+    }
+
+	@ApiOperation(value = "更新公告查看次数", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "noticeId", value = "公告id", required = false, paramType = "query", dataType = "String")
+	})
+    @GetMapping(value = "view")
+    public Result view(String noticeId) {
+        dao.view(noticeId, ClientUtils.getUserId());
+        return Result.SUCCESS;
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/ResController.java b/src/main/java/com/qxueyou/scc/controller/ResController.java
new file mode 100644
index 0000000..ea597bb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/ResController.java
@@ -0,0 +1,220 @@
+package com.qxueyou.scc.controller;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResDatas;
+import com.qxueyou.scc.teach.res.model.ResDir;
+import com.qxueyou.scc.teach.res.service.IResService;
+import io.swagger.annotations.Api;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 资源管理控制器
+ *
+ * @author chenjunliang
+ */
+@Api(tags = "资源管理接口")
+@RestController
+@RequestMapping(value = "/teach/res")
+public class ResController {
+
+    @Autowired
+    IResService resService;
+
+    /**
+     * 资源库层级管理Tree
+     */
+    @GetMapping(value = "categoryLevel")
+    public Result categoryLevel(String parentId) {
+
+        List<ResDir> dirs = resService.doGetMyLibChildDirs(parentId);
+
+        return new Result(true, "success",
+                QBeanUtils.listBean2ListMap(dirs, CollectionUtils.newStringMap("name", "name", "dirId", "id")));
+
+    }
+
+    /**
+     * 资源库根节点
+     *
+     * @param type    资源库类型
+     *                user,个人资源库
+     *                class,班级资源库
+     * @param ownerId 资源库所属主体id,个人资源库传userId,班级资源库传classId
+     */
+    @GetMapping(value = "rootDir")
+    public Result getRoot(String type, String ownerId) {
+        if ("user".equals(type) && StringUtils.isEmpty(ownerId)) {
+            ownerId = ClientUtils.getUserId();
+//            System.out.println(ownerId);
+        }
+        ResDir root = resService.doGetRootDir(type, ownerId);
+//        System.out.println(root);
+        return new Result(true, "success", CollectionUtils.newList(
+                QBeanUtils.bean2Map(root, CollectionUtils.newStringMap("name", "name", "dirId", "id"))));
+
+    }
+
+    /**
+     * 资源管理获取 资源列表
+     *
+     * @param dirId   目录id
+     * @param keyword 搜索关键字
+     * @param limit   每页显示几条
+     * @param pageNum 页码
+     * @param type    类型(0,视频。1,音频。2,文档。3,练习。)
+     * @return 资源列表数据
+     */
+    @GetMapping(value = "lstRes")
+    public Result lstRes(String dirId, String keyword, Integer limit, Integer pageNum, String type) {
+
+        List<Res> resLst = resService.listRes(dirId, keyword, limit, pageNum, type);
+
+        List<Map<String, Object>> lst = QBeanUtils.listBean2ListMap(resLst,
+                CollectionUtils.newStringMap("resId", "id", "name", "name", "type", "type", "coverPageUrl", "imgPath",
+                        "updateTime", "updateTime", "remark", "size", "status", "status"));
+
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("resLst", lst, "resCount", resService.listResCount(dirId, keyword, type)));
+
+    }
+
+    /**
+     * 资源管理删除 资源
+     *
+     * @param id 资源id,英文逗号区分,可传多个
+     */
+    @GetMapping(value = "deleteFile")
+    public Result deleteRes(String fileId) {
+        return resService.delete(fileId.split(","));
+    }
+
+    /**
+     * 资源管理 复制资源
+     *
+     * @param resId 资源id
+     * @param dirId 目录id
+     * @param type  类型
+     */
+    @GetMapping(value = "copyRes")
+    public Result copyRes(String resId, String dirId, String type) {
+        return resService.doCopy(resId, dirId, null);
+    }
+
+    /**
+     * 资源管理 资源的移动
+     *
+     * @param resId 要移动的资源
+     * @param type  目录类型
+     * @param dirId 目录id
+     */
+    @GetMapping(value = "moveRes")
+    public Result moveRes(String resId, String type, String dirId) {
+        return resService.doMove(resId, dirId, null);
+    }
+
+    /**
+     * 资源管理新增or编辑目录
+     *
+     * @param dirId     目录id
+     * @param name      目录名
+     * @param type      (add新增 and edit修改)
+     * @param childFlag 是否操作下级
+     */
+    @GetMapping(value = "addOrUpdateDir")
+    public Result addOrUpdateDir(String type, String name, String dirId, boolean childFlag) {
+
+        ResDir dir = resService.readDir(dirId);
+        String parentDirId = childFlag ? dirId : dir.getParentDirId();
+
+        if ("add".equals(type)) {
+            return resService.addDir(parentDirId, name);
+        } else {
+            return resService.updateDir(dirId, name);
+        }
+    }
+
+    /**
+     * 资源管理 删除目录
+     *
+     * @param dirId 目录id
+     */
+    @GetMapping(value = "deleteDir")
+    public Result deleteDir(String dirId) {
+        return resService.deleteDir(dirId.split(","));
+    }
+
+    /**
+     * 添加/更新(视频,讲义,音频)
+     *
+     * @param dirId    资源夹id
+     * @param name     名称
+     * @param coverUrl 封面Url
+     * @param remark:  <p>
+     *                 视频啊啊啊
+     *                 </p>
+     *                 介绍
+     * @param fileId   资源id
+     * @param id       资源id
+     * @param type
+     * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。)
+     */
+    @PostMapping(value = "addOrUpdateRes")
+    public Result addOrUpdateRes(String dirId, String id, String remark, String name, String coverUrl, String type,
+                                 String fileId) {
+
+        if (StringUtils.isEmpty(id)) {
+            return resService.add(dirId, fileId, name, remark, type, coverUrl);
+        } else {
+            return resService.update(id, name, remark, coverUrl);
+        }
+    }
+
+    /**
+     * 批量添加资源
+     *
+     * @param dirId    节点id
+     * @param fileId   文件id
+     * @param fileName 文件名称
+     * @param fileType 资源类型
+     */
+    @PostMapping(value = "addOfBatch")
+    public Result addOfBatch(String dirId, String type, @RequestParam(value = "datas") String datas) {
+        // 转换json到对象
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            ResDatas resDatas = mapper.readValue(datas, ResDatas.class);
+            return resService.addBatchRes(dirId, type, resDatas.getItems());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return new Result(false);
+    }
+
+    /**
+     * 编辑 获取内容
+     *
+     * @param id 资源id
+     */
+    @GetMapping(value = "getResDetail")
+    public Result getResDetail(String id) {
+
+        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")));
+    }
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/SubjectController.java b/src/main/java/com/qxueyou/scc/controller/SubjectController.java
new file mode 100644
index 0000000..b25bcab
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/SubjectController.java
@@ -0,0 +1,309 @@
+package com.qxueyou.scc.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.res.service.IFileService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 课程管理控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@Api(tags = "课程管理-教师端")
+@RestController
+@RequestMapping(value = "/teach/subject")
+public class SubjectController {
+
+	@Autowired
+	ISubjectService subjectService;
+
+	@Autowired
+	IFileService fileService;
+	
+	@Autowired
+	private ITeacherService teacherService;
+	
+	/**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/
+	
+	/**
+	 * 课程管理列表
+	 * 
+	 * @param keyword
+	 *            索搜关键字
+	 * @param limit
+	 *            显示几条
+	 * @param pageNum
+	 *            当前页码
+	 * @param status
+	 *            状态
+	 */
+	@ApiOperation(value = "获取列表数据-教师端", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "status", value = "状态", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "type", value = "类型(1:班级课程,3:公开课程)", required = false, paramType="query", dataType = "Integer")
+    })
+	@GetMapping(value = "/app/teacherSubjectList")
+	public Result list(Pager pager, @RequestParam(defaultValue="")String keyword, String status, Integer type) {
+		if(type == null) {
+			return new Result(false, "参数错误");
+		}
+		return subjectService.teacherSubjectList(pager, keyword, status, type);
+	}
+	
+	/**-------------------------------------------------------------------后端接口------------------------------------------------------------------------------------------**/
+
+	/**
+	 * 课程管理列表
+	 * 
+	 * @param keyword
+	 *            索搜关键字
+	 * @param limit
+	 *            显示几条
+	 * @param pageNum
+	 *            当前页码
+	 * @param status
+	 *            状态
+	 */
+	@GetMapping(value = "/list")
+	public Result list(String keyword,String status,Integer type, Integer limit, Integer pageNum) {
+
+		String teacherId = ClientUtils.isAdmin() ? null : ClientUtils.getUserId();
+
+		List<Subject> lst = subjectService.list(keyword, teacherId, status, type, limit, pageNum);
+
+		int count = subjectService.listCount(keyword, teacherId, status,type);
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("subjectLst",
+				QBeanUtils.listBean2ListMap(lst,
+						CollectionUtils.newStringMap("name", "subjectName", "subjectId", "subjectId","type","type", "status",
+								"status", "updateTime", "updateTime", "lectureCount", "lectureCount")),
+
+				"subjectCount", count));
+	}
+
+	/**
+	 * 课程管理列表
+	 * 
+	 * @param keyword
+	 *            索搜关键字
+	 * @param limit
+	 *            显示几条
+	 * @param pageNum
+	 *            当前页码
+	 * @param status
+	 *            状态
+	 */
+	@GetMapping(value = "/listAllSimple")
+	public Result listAllSimple() {
+
+		List<Subject> lst = subjectService.list("", null, "1", null,1000, 1);
+
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(lst,
+				CollectionUtils.newStringMap("name", "subjectName", "subjectId", "subjectId")));
+	}
+
+	/**
+	 * 课程发布
+	 * a
+	 * @param 课程ids
+	 */
+	@GetMapping(value = "/release")
+	public Result release(String subjectIds) {
+
+		return subjectService.doRelease(subjectIds.split(","));
+
+	}
+
+	/**
+	 * 课程下架
+	 * 
+	 * @param subjectIds
+	 *            课程ids
+	 */
+	@GetMapping(value = "/soldOut")
+	public Result soldOut(String subjectIds) {
+		return subjectService.doCancel(subjectIds.split(","));
+	}
+
+	/**
+	 * 课程删除
+	 * 
+	 * @param subjectIds
+	 *            课程ids
+	 */
+	@GetMapping(value = "/delete")
+	public Result delete(String subjectIds) {
+		return subjectService.delete(subjectIds.split(","));
+	}
+
+	/**
+	 * 复制课程
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param subjectName
+	 *            课程名称
+	 * @param imgPath
+	 *            图片url
+	 * @param content
+	 *            课程介绍
+	 */
+	@PostMapping(value = "/copy")
+	public Result copy(String subjectId, String subjectName, String imgPath, String content,int type) {
+		return add(subjectName, imgPath, content,type);
+	}
+
+	/**
+	 * 新增课程
+	 * 
+	 * @param subjectName
+	 *            课程名称
+	 * @param imgPath
+	 *            图片url
+	 * @param content
+	 *            课程介绍
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result add(String subjectName, String imgPath, String content,int type) {
+		String contentFileId = null;
+		
+		if(StringUtils.isNotEmpty(content)){
+			Result fileResult = fileService.doUpload(IOUtils.toInputStream(content), subjectName + ".data");
+			contentFileId = fileResult.getDataT("fileId");
+		}
+		
+		String coverPageFileId = null;
+		
+		if (StringUtils.isNotBlank(imgPath)) {
+			coverPageFileId = fileService.readIdByPath(imgPath);
+		}
+		
+		return subjectService.add(subjectName, coverPageFileId,contentFileId,type);
+	}
+
+	/**
+	 * 新增练习
+	 * 
+	 * @param name
+	 *            题目名称
+	 * @param type
+	 *            题库类型
+	 * @param difficulty
+	 *            难度系数
+	 * @param repeatFlag
+	 *            是否重复
+	 * @return
+	 */
+	@PostMapping(value = "addExercise")
+	public Result addOrgExercise(String name, Integer type, Integer difficulty, Boolean repeatFlag) {
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 更新课程
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param subjectName
+	 *            课程名称
+	 * @param imgPath
+	 *            图片url
+	 * @param content
+	 *            课程介绍
+	 */
+	@PostMapping(value = "/update")
+	public Result update(String subjectId, String subjectName, String imgPath, String content,int type) {
+		String contentFileId = null;
+		
+		if(StringUtils.isNotEmpty(content)){
+			Result fileResult = fileService.doUpload(IOUtils.toInputStream(content), subjectName + ".data");
+			contentFileId = fileResult.getDataT("fileId");
+		}
+		
+		String coverPageFileId = null;
+		if (StringUtils.isNotBlank(imgPath)) {
+			coverPageFileId = fileService.readIdByPath(imgPath);
+		}
+
+		return subjectService.update(subjectId, subjectName, coverPageFileId, contentFileId,type);
+	}
+
+	/**
+	 * 更新课程获取课程内容
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 */
+	@ApiOperation(value = "获取课程详情-教师端", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "getSubjectDetail")
+	public Result getSubjectDetail(String subjectId) {
+
+		Map<String, Object> result = QBeanUtils.bean2Map(subjectService.read(subjectId), CollectionUtils
+				.newStringMap("name", "subjectName",
+						"subjectId", "subjectId",
+						"type","type", 
+						"coverPageUrl", "imgPath",
+						"teacherId","teacherId",
+						"teacherName","teacherName",
+						"schoolYear","schoolYear",
+						"createTime","createTime",
+						"creator","creator",
+						"term","term"));
+		
+		result.put("reSubjects",this.subjectService.querySubjectReClassInfos(subjectId));
+		result.put("content", subjectService.readSubjectContent(subjectId));
+		result.put("lectureCount", subjectService.getLectureCount(subjectId));
+		return new Result(true, "success", result);
+	}
+	
+	
+	/**
+	 * 获取可用课程下拉列表接口
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@RequestMapping(value = "/selectlist", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> subjectList(Integer subjectType) {
+		//判断是否是教师
+    	String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+		
+    	if(subjectType==null){
+    		subjectType= Subject.TYPE_ORG_SUBJECT;
+    	}
+    	
+		return this.subjectService.queryAvailableSubjectIdAndName(teacherId,subjectType);
+	}
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/TeacherController.java b/src/main/java/com/qxueyou/scc/controller/TeacherController.java
new file mode 100644
index 0000000..78c17ab
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/TeacherController.java
@@ -0,0 +1,128 @@
+package com.qxueyou.scc.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+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.user.model.UserTeacher;
+
+/**
+ * 教师管理控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@RestController
+@RequestMapping(value = "/admin/teacher")
+public class TeacherController {
+	@Autowired
+	private ITeacherService teacherService;
+
+	/**
+	 * 教师管理显示列表
+	 * 
+	 * @param pageSize
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @param keyword
+	 *            索搜关键字
+	 */
+	@GetMapping(value = "lstTeacher")
+	public Result lstTeacher(String keyword, Integer pageSize, Integer pageNum) {
+
+		List<UserTeacher> teacherLst = teacherService.lstTeacher(keyword == null ? "" : keyword.trim(), pageSize, pageNum);
+
+		int count = teacherService.findTeacherCount(keyword == null ? "" : keyword.trim());
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("teacherLst",
+						QBeanUtils.listBean2ListMap(teacherLst,
+								CollectionUtils.newStringMap("mobilePhone", "mobilePhone,account", "name",
+										"teacherName", "teacherId", "teacherId", "teacherNo", "teacherNo")),
+						"teacherCount", count));
+	}
+
+	/**
+	 * 教师管理新增/更新
+	 * 
+	 * @param teacherId
+	 * 
+	 * @param teacherName
+	 *            老师名称
+	 * @param account
+	 *            账号
+	 * @param password
+	 *            密码
+	 * @param mobilePhone
+	 *            手机
+	 */
+	@PostMapping(value = "addOrUpdate")
+	public Result addOrUpdate(String teacherId, String teacherName, String account, String password, String mobilePhone,
+			String teacherNo) {
+		if (StringUtils.isBlank(teacherId)) {
+			return teacherService.add(teacherName, password, mobilePhone, teacherNo);
+		} else {
+			return teacherService.update(teacherId, teacherName, account, password, mobilePhone, teacherNo);
+		}
+
+	}
+
+	/**
+	 * 教师管理 删除教师
+	 * 
+	 * @param teacherIds
+	 *            老师ids
+	 */
+	@PostMapping(value = "delete")
+	public Result deleteTeacher(String teacherIds) {
+		return teacherService.deleteTeacher(teacherIds.split(","));
+	}
+
+	/**
+	 * 教师管理导出
+	 */
+	@GetMapping(value = "exportTeacher")
+	public Result export(HttpServletResponse response) {
+		return new Result(true, "export success");
+	}
+
+	/**
+	 * 教室管理导入
+	 */
+	@GetMapping(value = "importTeacher")
+	public Result importTeacher() {
+		return new Result(true, "import success");
+	}
+
+	/**
+	 * 新增班级获取教师列表
+	 */
+	@GetMapping(value = "getLstTeacher4Cls")
+	public Result getLstTeacher4Cls() {
+		List<UserTeacher> lstTeacher4Cls = teacherService.LstTeacher4Cls();
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(lstTeacher4Cls,
+				CollectionUtils.newStringMap("teacherId", "teacherId", "name", "teacherName")));
+	}
+	
+	/**
+	 * 新增班级获取教师列表
+	 */
+	@GetMapping(value = "getTeacherbyUserId")
+	public Result getTeacherbyUserId(String userId) {
+		UserTeacher teacher = teacherService.getTeacherByUserId(userId);
+		return new Result(true, "success", CollectionUtils.newStringMap("teacherId", teacher==null?"":teacher.getTeacherId()));
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/UserController.java b/src/main/java/com/qxueyou/scc/controller/UserController.java
new file mode 100644
index 0000000..290d4d0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/UserController.java
@@ -0,0 +1,178 @@
+package com.qxueyou.scc.controller;
+
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRole;
+import com.qxueyou.scc.user.model.UserTeacher;
+import com.qxueyou.scc.user.service.IUserRoleService;
+import com.qxueyou.scc.user.service.IUserService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色管理前端控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@RestController
+@RequestMapping(value = "/p/user")
+public class UserController {
+	@Autowired
+	IUserRoleService userRoleService;
+
+	@Autowired
+	IUserService userService;
+
+	@Autowired
+	ITeacherService teacherService;
+
+	/**
+	 * 获取角色列表
+	 * 
+	 * @return
+	 */
+	@GetMapping(value = "queryUserRoleLst")
+	public Result queryUserRoleLst(String keyword) {
+		List<UserRole> userRoleLst = userRoleService.getUserRoleLst(keyword);
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(userRoleLst,
+				CollectionUtils.newStringMap("name", "userName", "roleId", "roleId")));
+	}
+
+	/**
+	 * 获取人员列表
+	 */
+	@GetMapping(value = "getUserLst")
+	public Result getUserLstByRoleId(String roleId, Integer pageSize, Integer pageNum, String keyword) {
+
+		return userRoleService.getUserLstByRoleId(roleId, pageSize, pageNum, keyword);
+	}
+
+	/**
+	 * 删除人员
+	 * 
+	 * @param userid
+	 *            用户id可以多个 ,分隔
+	 */
+	@PostMapping(value = "delete")
+	public Result delete(String userId) {
+
+		return userRoleService.delete(userId);
+	}
+
+	/**
+	 * 新增人员
+	 */
+	@PostMapping(value = "add")
+	public Result insertUser(String roleId, String name, String account, String password, String mobilePhone) {
+		Result result = new Result(true);
+
+		User user = userService.getUserByAccount(account, ClientUtils.getOrgId());
+
+	    if (null != user) {
+	    	return new Result(false,"重复的用户,不允许添加!");
+	    }
+		
+		//如果角色是老师,添加老师信息
+		if(roleId.equals(UserRole.ROLE_TEACHER_ID)){
+			result= teacherService.add(name, password, mobilePhone, account);
+		}else{
+			user = userService.insertUser(name, account, mobilePhone, password, true, ClientUtils.getOrgId());
+			result= userService.addRole(user.getUserId(), roleId);
+		}
+		
+		return result;
+	}
+
+	/**
+	 * 新增教师
+	 */
+	@PostMapping(value = "addTeachers")
+	public Result addTeachers(String teacherIds, String roleId) {
+		return userRoleService.addTeachers(teacherIds, roleId);
+	}
+
+	/**
+	 * 更新
+	 */
+	@PostMapping(value = "update")
+	public Result updateUser(String userId, String name, String account, String password, String mobilePhone) {
+		Result result = new Result(true);
+		
+		UserTeacher teacher = ClientUtils.isAdmin() ? null : teacherService.getTeacherByUserId(ClientUtils.getUserId());
+		
+		//如果用户是老师,更新老师信息
+		if(teacher!=null){
+			result = teacherService.update(teacher.getTeacherId(), name, account, password, mobilePhone, account);
+		}else{
+			result = userService.updateUser(userId, name, account, mobilePhone, password, true);
+		}
+		
+		return result;
+	}
+
+	/**
+	 * 角色管理 显示角色信息
+	 */
+	@GetMapping(value = "queryRoleDetail")
+	public Result queryRoleDetail(String roleId) {
+		return userRoleService.queryRoleDetail(roleId);
+	}
+
+	/**
+	 * 显示教师列表
+	 */
+	@GetMapping(value = "findTeacherLst")
+	public Result findTeacherLst(String keyword, Integer pageSize, Integer pageNum, String roleId) {
+		String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+		List<Map<String, Object>> teacherLst = teacherService.findLstToRole(keyword_, pageSize, pageNum, roleId);
+		int count = teacherService.findLstCountToRole(roleId, keyword_);
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("teacherLst", teacherLst, "teacherCount", count));
+	}
+
+	/**
+	 * 修改角色信息
+	 */
+	@PostMapping(value = "updateRole")
+	public Result updateRole(String roleId, String menuIds, String name) {
+		return userRoleService.updateRole(roleId, menuIds, name);
+	}
+
+	/**
+	 * 删除角色
+	 */
+	@PostMapping(value = "deleteRole")
+	public Result deleteRole(String roleId) {
+		return userRoleService.deleteRole(roleId);
+	}
+
+	/**
+	 * 获取所有菜单列表
+	 */
+	@GetMapping(value = "findAllMenuLst")
+	public Result findMenuLst() {
+		List<Map<String, Object>> menuLst = userRoleService.findMenuLst();
+		return new Result(true, "success", menuLst);
+	}
+
+	/**
+	 * 新增角色
+	 */
+	@PostMapping(value = "addRole")
+	public Result addRole(String name,Integer roleType) {
+		return userRoleService.addRole(name,String.valueOf(roleType));
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
new file mode 100644
index 0000000..e1046b7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
@@ -0,0 +1,336 @@
+package com.qxueyou.scc.controller;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.live.dao.MediaLiveDAO;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.qxueyou.scc.teach.live.model.MediaVideoLiveReplay;
+import com.qxueyou.scc.teach.live.service.IMediaLiveService;
+import com.qxueyou.scc.teach.live.service.IMediaVideoLivePlayBackService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags="直播管理接口")
+@RestController
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "/admin/videoLive")
+public class VideoLiveController {
+	
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+	
+	@Autowired
+	IMediaLiveService liveService;
+	
+	@Autowired
+	IMediaVideoLivePlayBackService mediaVideoLivePlayBackService;
+	
+	@Autowired
+	IClassService classService;
+	
+	@Autowired
+	MediaLiveDAO dao;
+	
+	/**
+	 * 获取直播列表
+	 * 
+	 * @param keyword
+	 *            搜索关键字
+	 * @param pageNum
+	 *            页码
+	 * @param pageSize
+	 *            页数
+	 * @return
+	 */
+	@ApiOperation(value = "获取创建人的直播列表")
+	@GetMapping(value = "list")
+	public Result list(String keyword, Integer pageNum, Integer pageSize) {
+		
+		List<MediaVideoLive> data = liveService.listOfMine(keyword, pageNum, pageSize);
+		int count = liveService.listCountOfMine(keyword);
+		
+		return new Result(true, "success", CollectionUtils.newObjectMap("videoLiveCount", count, 
+				"videoLiveLst",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
+						"creator","creator",
+						"startTime","startTime",
+						"endTime","endTime",
+						"updateTime","lastUpdateTime",
+						"videoLiveId","videoLiveId",
+						"name","name",
+						"subjectId","subjectId",
+						"subjectName","subjectName",
+						"status","status",
+						"pushUrl","rtmpPushUrl",
+						"hlsPullUrl","hlsPullUrl",
+						"previewImgUrl","previewImgUrl"
+						))));
+	}
+
+	/**
+	 * 新增直播/更新直播
+	 * 
+	 * @param videoLiveId
+	 *            直播id(更新的时候才需要传)
+	 * @param name
+	 *            直播名称
+	 * @param content
+	 *            直播介绍
+	 * @param imgPath
+	 *            图片地址
+	 * @param startTime
+	 *            开始时间
+	 * @param endTime
+	 *            结束时间
+	 * @param isPlayBack
+	 *            是否回放
+	 * @param classIds
+	 *            班级id
+	 * @return
+	 */
+	@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(",")));
+		}
+	}
+
+	/**
+	 * 查询直播详情
+	 * 
+	 * @param videoLiveId
+	 *            直播id
+	 * @return
+	 */
+	@ApiOperation(value = "获取直播详情")
+	@GetMapping(value = "queryDetail")
+	public Result detail(String videoLiveId) {
+		List<String> lstClassIds = null;
+		List<Map<String,Object>> lstClassIdNames = null;
+		
+		MediaVideoLive live = liveService.read(videoLiveId);
+		List<ClsClass> lstClassses = live.getClasses();
+		
+		if(lstClassses!=null){
+			lstClassIds = new ArrayList<String>(lstClassses.size());
+			lstClassIdNames = new  ArrayList<Map<String,Object>>(lstClassses.size());
+			
+			for(ClsClass cls: lstClassses){
+				lstClassIds.add(cls.getClassId());
+				lstClassIdNames.add(CollectionUtils.newObjectMap("classId",cls.getClassId(),"className",cls.getName()));
+			}
+		}
+		
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap(
+						"videoLiveId",live.getVideoLiveId(),
+						"name", live.getName(), 
+						"content", live.getRemark(), 
+						"imgPath", live.getPreviewImgUrl(), 
+						"isplayBack",1, 
+						"startTime", live.getStartTime(), 
+						"endTime", live.getEndTime(),
+						"rtmpPushUrl", live.getPushUrl(),
+						"hlsPullUrl", live.getHlsPullUrl(),
+						"chatroomId", dao.getChatRoomId(videoLiveId),
+						"watchTimes",live.getWatchTimes(),
+						"praiseTimes",live.getPraiseTimes(),
+						"definition",live.getDefinition(),
+						"subjectId",live.getSubjectId(),
+						"subjectName",live.getSubjectName(),
+						"status",live.getStatus(),
+						"teacherId",live.getAnchorId(),
+						"teacherName",live.getAnchor(),
+						"classIds",lstClassIds ,
+						"classes", lstClassIdNames));
+	}
+
+	/**
+	 * 发布/多个以逗号隔开
+	 * 
+	 * @param videoLiveIds
+	 *            直播ids
+	 * @return
+	 */
+	@ApiOperation(value = "发布直播")
+	@PostMapping(value = "release")
+	public Result release(String videoLiveIds) {
+		for(String liveId:videoLiveIds.split(",")) {
+			liveService.doIssue(liveId);
+		}
+		return Result.SUCCESS;
+	}
+
+	/**
+	 * 取消发布/多个以逗号隔开
+	 * 
+	 * @param videoLiveIds
+	 *            直播ids
+	 * @return
+	 */
+	@ApiOperation(value = "取消发布直播")
+	@PostMapping(value = "cancel")
+	public Result cance(String videoLiveIds) {
+		
+		for(String liveId:videoLiveIds.split(",")) {
+			liveService.doCancel(liveId);
+		}
+		return Result.SUCCESS;
+	}
+
+	/**
+	 * 删除/多个以逗号隔开
+	 * 
+	 * @param videoLiveId
+	 * @return
+	 */
+	@ApiOperation(value = "删除创建的直播")
+	@PostMapping(value = "delete")
+	public Result delete(String videoLiveIds) {
+		return liveService.delete(videoLiveIds.split(","));
+	}
+	
+	
+	/**
+	 * 直播开始
+	 * 
+	 * @param videoLiveIds
+	 *            直播id
+	 */
+	@ApiOperation(value = "直播开始")
+	@PostMapping(value = "start")
+	public Result start(String videoLiveIds) {
+
+		for(String liveId:videoLiveIds.split(",")) {
+			liveService.doStart(liveId);
+		}
+		return Result.SUCCESS;
+	}
+	
+	
+	/**
+	 * 直播暂停
+	 * 
+	 * @param videoLiveIds
+	 *            直播id
+	 */
+	@ApiOperation(value = "直播暂停")
+	@PostMapping(value = "pause")
+	public Result pause(String videoLiveIds) {
+		
+		for(String liveId:videoLiveIds.split(",")) {
+			liveService.doPause(liveId);
+		}
+		return Result.SUCCESS;
+	}
+
+	/**
+	 * 直播结束
+	 * 
+	 * @param videoLiveId
+	 *            直播id
+	 */
+	@ApiOperation(value = "直播结束")
+	@PostMapping(value = "stop")
+	public Result stop(String videoLiveIds) {
+
+		for(String liveId:videoLiveIds.split(",")) {
+			liveService.doStop(liveId);
+		}
+		return Result.SUCCESS;
+	}
+	
+	
+	
+	/**
+	 * 直播点赞
+	 * 
+	 * @param videoLiveId
+	 *            直播id
+	 */
+	@ApiOperation(value = "直播点赞")
+	@PostMapping(value = "praise")
+	public Result praise(String videoLiveId) {
+		return liveService.doPraise(videoLiveId);
+	}
+	
+	@ApiOperation(value = "学生端根据班级,课程过滤直播列表")
+	@GetMapping(value = "student/list")
+	public Result list(String keyword,String classIds,String subjectId,Short status,Integer pageNum, Integer pageSize) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		String [] arrClassIds = null;
+		if(StringUtils.isNotEmpty(classIds) || StringUtils.isNotBlank(ClientUtils.getClassId())){
+			arrClassIds = StringUtils.isEmpty(classIds)?new String[]{ClientUtils.getClassId()}:classIds.split(",");
+		}
+		
+		int count = liveService.listCount(keyword==null?"":keyword.trim() , arrClassIds , subjectId , status);
+		List<MediaVideoLive> data = liveService.list(keyword==null?"":keyword.trim(),StringUtils.isEmpty(classIds)?new String[]{ClientUtils.getClassId()}:classIds.split(","),subjectId,status, pageNum, pageSize);
+		
+		return new Result(true, "success", CollectionUtils.newObjectMap("videoLiveCount", count, 
+				"videoLiveLst",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
+						"creator","creator",
+						"startTime","startTime",
+						"endTime","endTime",
+						"updateTime","lastUpdateTime",
+						"videoLiveId","videoLiveId",
+						"name","name",
+						"subjectId","subjectId",
+						"subjectName","subjectName",
+						"status","status",
+						"pushUrl","rtmpPushUrl",
+						"hlsPullUrl","hlsPullUrl",
+						"previewImgUrl","previewImgUrl"
+				))));
+	}
+	
+	@ApiOperation(value = "直播回放列表")
+	@GetMapping(value = "replay/list")
+	public Result listReplay(String videoLiveId) {
+		
+		List<MediaVideoLiveReplay> data = mediaVideoLivePlayBackService.queryVideoLiveReplay(videoLiveId);
+		
+		return new Result(true, "success", CollectionUtils.newObjectMap(
+				"replayList",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
+						"name","replayName",
+						"creator","creator",
+						"beginTime","beginTime",
+						"endTime","endTime",
+						"updateTime","updateTime",
+						"duration","duration",
+						"initialSize","initialSize",
+						"url","url",
+						"videoLiveId","videoLiveId",
+						"status","status",
+						"liveReplayId","liveReplayId"
+		))));
+	}
+	
+	@ApiOperation(value = "测试直播回放")
+	@GetMapping(value = "replay/test")
+	public Result testReplay(String liveId) {
+		mediaVideoLivePlayBackService.testPlayBack(liveId);
+		return new Result(true);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/action/CourceCategoryController.java b/src/main/java/com/qxueyou/scc/courseware/action/CourceCategoryController.java
new file mode 100644
index 0000000..1331a6b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/action/CourceCategoryController.java
@@ -0,0 +1,863 @@
+package com.qxueyou.scc.courseware.action;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.WordProcessUtils;
+import com.qxueyou.scc.courseware.service.ICourceCategoryService;
+import com.qxueyou.scc.exercise.model.ExerciseReCourse;
+import com.qxueyou.scc.media.model.MediaVideoReCourse;
+import com.qxueyou.scc.org.model.OrgCategoryLevel;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourse;
+import com.qxueyou.scc.org.model.OrgCourseCategory;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.school.model.SchHandoutReCourse;
+
+/**
+ * 科目类别管理controller
+ * 
+ * @author 德虎
+ * @history 2014-11-25 新建 夏德虎
+ *
+ */
+@Controller
+@RequestMapping(value = "/org/courcecategory")
+public class CourceCategoryController {
+
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	@Autowired
+	@Qualifier("commonAppService")
+	ICommonService commonService;
+
+	@Autowired
+	private ICourceCategoryService categoryService;
+	
+	@SuppressWarnings("unused")
+	@Autowired
+	private IClassService orgClassService;
+
+	/*@Autowired
+	ISysBusinessCacheService sysBusinessCacheService ;*/
+
+	/**
+	 * APP2.0: 课程超市 选课 获取所有分类 <br>
+	 * URL /org/courcecategory/courseCatNew<br>
+	 * 
+	 * @method GET
+	 * @return 返回值JSON串:<br>
+	 *
+	 *         <pre>
+	 * [{"index":1,"code":"1CKJR","categoryName":"财会金融","categoryId":"18","imgPath":"/web/res/img/app/coursemarket_ico_accounting.png"},
+	 * ......
+	 * {"index":8,"code":"9QB","categoryName":"全部","categoryId":"26","imgPath":"/web/res/img/app/coursemarket_ico_classify.png"}]
+	 * </pre>
+	 *
+	 *         字段值说明:
+	 * 
+	 *         <pre>
+	 * index:索引
+	 * code:编码
+	 * categoryName:名字
+	 * categoryId:id
+	 * imgPath:logo URL
+	 * </pre>
+	 */
+	@RequestMapping(value = "courseCatNew", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> getCourseCatData() {
+
+		Pager page = new Pager();
+		page.setPageNum(1);
+		page.setPageSize(Integer.MAX_VALUE);
+
+		// 1. 查询该机构下所有的科目
+		String hql = "select c from OrgCourseCategory c where c.deleteFlag is false and c.categoryLevel = ? order by c.code asc ";
+
+		List<OrgCourseCategory> lstLastCategory = commonDAO.findList(hql, page, CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_FIRST), OrgCourseCategory.class);
+
+		if (lstLastCategory.isEmpty()) {
+			return new ArrayList<Map<String, Object>>();
+		}
+
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(lstLastCategory.size());
+		Map<String, Object> map;
+		Map<String, Object> QBMap = new HashMap<String, Object>(5);
+
+		int index = 0;
+		for (OrgCourseCategory courseCat : lstLastCategory) {
+
+			if ("0QB".equals(courseCat.getCode())) {
+				QBMap.put("index", 8);
+				QBMap.put("categoryId", courseCat.getCategoryId());
+				QBMap.put("categoryName", courseCat.getCategoryName());
+				QBMap.put("code", courseCat.getCode());
+				QBMap.put("imgPath", courseCat.getImgPath());
+				if (StringUtils.isNotBlank(courseCat.getImgPath()) && !"null".equals(courseCat.getImgPath())) {
+					QBMap.put("imgPathShade", courseCat.getImgPath().split("\\.")[0].concat("-shade.png"));
+				} else {
+					QBMap.put("imgPathShade", courseCat.getImgPath());
+				}
+			} else if (!"8QT".equals(courseCat.getCode())) {
+				index = index + 1;
+				map = new HashMap<String, Object>(5);
+				map.put("index", index);
+				map.put("categoryId", courseCat.getCategoryId());
+				map.put("categoryName", courseCat.getCategoryName());
+				map.put("code", courseCat.getCode());
+				map.put("imgPath", courseCat.getImgPath());
+				if (StringUtils.isNotBlank(courseCat.getImgPath()) && !"null".equals(courseCat.getImgPath())) {
+					map.put("imgPathShade", courseCat.getImgPath().split("\\.")[0].concat("-shade.png"));
+				} else {
+					map.put("imgPathShade", courseCat.getImgPath());
+				}
+				lstMap.add(map);
+			}
+
+		}
+		lstMap.add(QBMap);
+
+		return lstMap;
+	}
+
+	/**
+	 * APP2.0: 课程超市 所有查询条件 <br>
+	 * URL /org/courcecategory/courseCatContitionNew<br>
+	 * 
+	 * 返回值JSON串:<br>
+	 *
+	 * <pre>
+	 * {
+	 * "course":[
+	 * 		{"code":"0QB","children":[],"index":1,"categoryName":"全部","categoryId":"26","parentId":null},
+	 * 		{"code":"1CKJR","children":[],"index":2,"categoryName":"财会金融","categoryId":"18","parentId":null},
+	 * 		{"code":"2YYKS","children":[],"index":3,"categoryName":"语言考试","categoryId":"19","parentId":null},
+	 * 		{"code":"3YYL","children":[],"index":4,"categoryName":"医药类","categoryId":"20","parentId":null},
+	 * 		{"code":"4JGL","children":[],"index":5,"categoryName":"建工类","categoryId":"21","parentId":null},
+	 * 		{"code":"5ZYKZ","children":null,"index":6,"categoryName":"职业考证","categoryId":"22","parentId":null},
+	 * 		{"code":"6XLJY","children":[
+	 * 				{"code":null,"index":1,"categoryName":"经济学","categoryId":"5","parentId":"23"},
+	 * 			{"code":null,"index":2,"categoryName":"法学","categoryId":"6","parentId":"23"}
+	 * 			],"index":7,"categoryName":"学历教育","categoryId":"23","parentId":null},
+	 * 		{"code":"7ITJN","children":[],"index":8,"categoryName":"IT技能","categoryId":"24","parentId":null},
+	 * 		{"code":"8QT","children":[],"index":9,"categoryName":"其他","categoryId":"25","parentId":null}
+	 * 	],
+	 * "city":[{"name":"深圳","index":1,"code":"sz"},{"name":"广州","index":2,"code":"gz"}],
+	 * "sort":[{"name":"价格由低到高","index":1,"code":"PRICE_ASC"},{"name":"价格由高到低","index":2,"code":"PRICE_DESC"}]
+	 * }
+	 * 
+	 * <pre>
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "courseCatContitionNew", method = RequestMethod.GET)
+	public @ResponseBody Map<String, Object> getCourseCatContitionData() {
+		return categoryService.generateAllCourseCondition();
+	}
+
+	/**
+	 * APP2.0: 该机构下所有课程的分类和科目 URL: /org/courcecategory/courseCategoryNew
+	 * 
+	 * @return
+	 */
+	@Deprecated
+	@RequestMapping(value = "courseCategoryNew", method = RequestMethod.GET)
+	public @ResponseBody List<OrgCourseCategory> getCourseCategoryData() {
+
+		// 1. 查询该机构下所有的科目
+		String hql = "select courseId,name,price,imgPath,courseCategoryId " + " from OrgCourse c where c.deleteFlag is false";
+
+		// 2. 查询该机构下所有的科目对应的类别
+		String hql_type = "select distinct c.category.categoryId,c.category.categoryName from OrgCourse c where " + " c.deleteFlag is false order by c.createTime ";
+
+		List<Object> args = new ArrayList<Object>(1);
+		// 如果是游客班 查所有机构 1:表示游客班
+//		if (!orgClassService.isCurrentVistorClass()) {
+//			hql = hql.concat(" and c.org.organizationId=?");
+//			hql_type = "select distinct c.category.categoryId,c.category.categoryName from OrgCourse c where " + " c.org.organizationId=? and c.deleteFlag is false order by c.createTime ";
+//			args = CollectionUtils.newList(ClientUtils.getOrgId());
+//		}
+
+		// 1. 查询该机构下所有的科目
+		List<OrgCollegeCourse> lstCourse = categoryService.queryOrgCourseListNew(hql, args);
+
+		// 2. 查询该机构下所有的科目对应的类别
+		List<OrgCourseCategory> lstCategory = categoryService.queryOrgCourseCategoryList(hql_type, args);
+
+		// 组装结构
+		List<OrgCollegeCourse> newLstCourse = null;
+		for (OrgCourseCategory category : lstCategory) {
+			newLstCourse = new ArrayList<OrgCollegeCourse>();
+			for (OrgCollegeCourse course : lstCourse) {
+				if (category.getCategoryId().equals(course.getCourseCategoryId())) {
+					newLstCourse.add(course);
+				}
+			}
+			category.setCourseList(newLstCourse);
+		}
+		// 不限制值
+		String not_limit = Constants.NOT_LIMIT_VALUE;
+		// 重新组装类型 添加不限
+		List<OrgCourseCategory> lstLastCategory = new ArrayList<OrgCourseCategory>();
+		// 添加第一个不限
+		OrgCourseCategory category = new OrgCourseCategory();
+		category.setCategoryId(not_limit);
+		category.setCategoryName("不限");
+
+		List<OrgCollegeCourse> lstLastCourse = new ArrayList<OrgCollegeCourse>();
+		OrgCollegeCourse course = new OrgCollegeCourse();
+		course.setCourseId(not_limit);
+		course.setName("不限");
+
+		lstLastCategory.add(category);
+		lstLastCategory.addAll(lstCategory);
+
+		for (OrgCourseCategory cate : lstLastCategory) {
+			lstLastCourse = new ArrayList<OrgCollegeCourse>();
+			lstLastCourse.add(course);
+			if (not_limit.equals(cate.getCategoryId())) {// 不限
+				lstLastCourse.addAll(lstCourse);
+			} else {
+				lstLastCourse.addAll(cate.getCourseList());
+			}
+
+			cate.setCourseList(lstLastCourse);
+		}
+
+		return lstLastCategory;
+	}
+
+	/******************************************************************* 上面为App接口,下面为后台接口 **************************/
+
+	/**
+	 * 科目类别列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	public @ResponseBody List<OrgCourseCategory> list() {
+		Organization org = commonDAO.read(Organization.class, ClientUtils.getOrgId());
+
+		return commonDAO.find("from OrgCourseCategory where deleteFlag is false and categoryLevel = ? and type = ?", CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_SECOND, org.getType()), OrgCourseCategory.class);
+	}
+
+	/**
+	 * 根据科目ID查询科目
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/{courceTypeId}", method = RequestMethod.GET)
+	public String get(@PathVariable String courceTypeId) {
+		// TODO
+		return null;
+	}
+
+	/**
+	 * 新增
+	 * 
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.POST)
+	public String add() {
+		// TODO
+		return null;
+	}
+
+	/**
+	 * 删除
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/{courceTypeId}", method = RequestMethod.DELETE)
+	public String delete(@PathVariable String courceTypeId) {
+		// TODO
+		return null;
+	}
+
+	/**
+	 * 更新
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/{courceTypeId}", method = RequestMethod.POST)
+	public String update(@PathVariable String courceTypeId) {
+		// TODO
+		return null;
+	}
+
+	/**
+	 * 新增类别层级
+	 * 
+	 * @return
+	 */
+	
+	
+	
+	@RequestMapping(value = "/addCategory", method = RequestMethod.POST)
+	public @ResponseBody Result addCategory(String id, String name, String code, String type) {
+		
+		Result result = categoryService.addCategory(null, id, name, code, type);
+		
+		if(result.isSuccess()){
+			return result;
+		}
+		
+		return new Result(false,"参数错误");
+		
+	}
+
+	/**
+	 * 类别层级数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/allData", method = RequestMethod.POST)
+	public @ResponseBody List<OrgCategoryLevel> allData() {
+		String hql = " from OrgCategoryLevel where deleteFlag is false and topOrgId = ? order by orderNum desc, createTime asc";
+		Organization org = commonDAO.read(Organization.class, ClientUtils.getOrgId());
+		List<OrgCategoryLevel> lstCate = commonDAO.find(hql, CollectionUtils.newList(org.getTopOrganizationId()), OrgCategoryLevel.class);
+		List<String> levelIds = new ArrayList<String>();
+		for (OrgCategoryLevel orgCategoryLevel : lstCate) {
+			levelIds.add(orgCategoryLevel.getCategoryLevelId());
+		}
+		if(levelIds.isEmpty()){
+			return lstCate;
+		}
+		Map<String,Object> args = new HashMap<String, Object>();
+		args.put("levelIds", levelIds.toArray());
+		hql = "from OrgCollegeCourse where deleteFlag is false and courseCategoryId in (:levelIds) order by code asc";
+		List<OrgCollegeCourse> courses = commonDAO.findByComplexHql(hql, args, OrgCollegeCourse.class);
+		Map<String,List<OrgCollegeCourse>> map = new HashMap<String, List<OrgCollegeCourse>>();
+		for (OrgCollegeCourse orgCollegeCourse : courses) {
+			if(null == orgCollegeCourse){
+				continue;
+			}
+			//去除掉不content内容
+			orgCollegeCourse.setContent("");
+	
+			if(null == map.get(orgCollegeCourse.getCourseCategoryId())){
+				List<OrgCollegeCourse> lstCourse = new ArrayList<OrgCollegeCourse>();
+				lstCourse.add(orgCollegeCourse);
+				map.put(orgCollegeCourse.getCourseCategoryId(), lstCourse);
+			}else{
+				map.get(orgCollegeCourse.getCourseCategoryId()).add(orgCollegeCourse);
+			}
+		}
+		for (OrgCategoryLevel orgCategoryLevel : lstCate) {
+			
+			orgCategoryLevel.setCourses(map.get(orgCategoryLevel.getCategoryLevelId()));
+		}
+		return lstCate;
+	}
+	
+	/**
+	 * 视频类别层级数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/allCountData", method = RequestMethod.POST)
+	public @ResponseBody List<OrgCategoryLevel> allCountData() {
+		return setCount(1);
+	}
+	
+	/**
+	 * 讲义类别层级数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/allHandoutCountData", method = RequestMethod.POST)
+	public @ResponseBody List<OrgCategoryLevel> allHandoutCountData() {
+		return setCount(2);
+	}
+	
+	/**
+	 * 练习类别层级数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/allExerciseCountData", method = RequestMethod.POST)
+	public @ResponseBody List<OrgCategoryLevel> allExersiseCountData() {
+		return setCount(3);
+	}
+	
+	/**
+	 * 讲义类别层级数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/allArticleCountData", method = RequestMethod.POST)
+	public @ResponseBody List<OrgCategoryLevel> allArticleCountData() {
+		return setCount(4);
+	}
+	
+	/**
+	 * 查询视频讲义练习在各个科目下的数量
+	 * @param type 1:视频 2:讲义 3:练习
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private List<OrgCategoryLevel> setCount(int type){
+		String hql = " from OrgCategoryLevel where deleteFlag is false and topOrgId = ? order by level asc, code asc";
+		Organization org = commonDAO.read(Organization.class, ClientUtils.getOrgId());
+		List<OrgCategoryLevel> lstCate = commonDAO.find(hql, CollectionUtils.newList(org.getTopOrganizationId()), OrgCategoryLevel.class);
+		String sql = "";
+		switch (type) {
+		case 1:
+			sql = "select r.college_course_id,count(1) from media_video_re_course r, media_video v where r.delete_flag is false and r.org_id = ? and v.video_id = r.video_id and v.delete_flag is false group by college_course_id " ;
+			break;
+		case 2:
+			sql = "select r.college_course_id,count(1) from sch_handout_re_course r, sch_handout v  where r.delete_flag is false and r.org_id = ? and v.handout_id = r.handout_id and v.delete_flag is false  group by college_course_id" ;
+			break;
+		case 3:
+			sql = "select r.college_course_id,count(1) from exercise_re_course r where r.delete_flag is false and r.org_id = ? group by college_course_id" ;
+			break;
+		case 4:
+			sql = "select r.college_course_id,count(1) from sch_article_re_course r, sch_article v  where r.delete_flag is false and r.org_id = ? and v.ARTICLE_ID = r.ARTICLE_ID and v.delete_flag is false  group by college_course_id" ;
+			break;
+		default:
+			break;
+		}
+		List<Object[]> lst = this.commonDAO.findBySql(sql, CollectionUtils.newList(ClientUtils.getOrgId()));
+		
+		Map<String,Integer> map = new HashMap<String,Integer>(5);
+    	for (Object[] obj : lst) {
+    		map.put(String.valueOf(obj[0]), Integer.parseInt(String.valueOf(obj[1])));
+    	}
+		
+		for (OrgCategoryLevel orgCategoryLevel : lstCate) {
+			hql = "from OrgCollegeCourse where deleteFlag is false and courseCategoryId = ? order by code asc";
+			List<OrgCollegeCourse> courses = commonDAO.find(hql, CollectionUtils.newList(orgCategoryLevel.getCategoryLevelId()), OrgCollegeCourse.class);
+			
+			for(OrgCollegeCourse course : courses){
+				if(type==1){
+					course.setVideoCount(null != map.get(course.getCollegeCourseId()) ? map.get(course.getCollegeCourseId()) : 0);
+				}else if(type==2){
+					course.setHandoutCount(null != map.get(course.getCollegeCourseId()) ? map.get(course.getCollegeCourseId()) : 0);
+				}else if(type==3){
+					course.setGroupCount(null != map.get(course.getCollegeCourseId()) ? map.get(course.getCollegeCourseId()) : 0);
+				}else if(type==4){
+					course.setArticleCount(null != map.get(course.getCollegeCourseId()) ? map.get(course.getCollegeCourseId()) : 0);
+				}
+				course.setContent(null);
+			}
+			orgCategoryLevel.setCourses(courses);
+		}
+		
+		return lstCate;
+	}
+
+	/**
+	 * ztree层级数据
+	 * 
+	 * @return
+	 *//*
+	@RequestMapping(value = "/allHierarchyData", method = RequestMethod.POST)
+	public @ResponseBody List<OrgCourseCategory> allHierarchyData() {
+
+		return sysBusinessCacheService.getOrgCourseCategory();
+		
+	}
+	
+	*//**
+	 * ztree层级数据
+	 * 
+	 * @return
+	 *//*
+	@RequestMapping(value = "live/allHierarchyData", method = RequestMethod.POST)
+	public @ResponseBody ResultJson allLiveHierarchyData() {
+
+		return sysBusinessCacheService.getLiveOrgCourseCategory();
+		
+	}*/
+
+	/**
+	 * 查询
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/oneMsg", method = RequestMethod.POST)
+	public @ResponseBody OrgCategoryLevel oneMsg(String id) {
+		String hql = "from OrgCategoryLevel where deleteFlag is false and categoryLevelId = ?";
+
+		return commonDAO.findUnique(hql, CollectionUtils.newList(id), OrgCategoryLevel.class);
+	}
+	
+	/**
+	 * 查询专业信息
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/oneCourse", method = RequestMethod.POST)
+	public @ResponseBody Result oneCourse(String id) {
+		String hql = "from OrgCollegeCourse where deleteFlag is false and collegeCourseId = ?";
+		OrgCollegeCourse occ = commonDAO.findUnique(hql, CollectionUtils.newList(id), OrgCollegeCourse.class);
+		
+		Map<String,Object> data = new HashMap<String,Object>();
+		data.put("name", occ.getName());
+		data.put("content", occ.getContent());
+		data.put("price", occ.getPrice());
+		data.put("courseId", occ.getCourseId());
+		data.put("collegeCourseId", occ.getCollegeCourseId());
+		data.put("relation","");
+		Result result = new Result(true,null,data);
+		
+		hql = " from OrgCourse where deleteFlag is false and courseId = ?";
+		OrgCourse course = commonDAO.findUnique(hql, CollectionUtils.newList(occ.getCourseId()), OrgCourse.class);
+		if(null == course){
+			return result;
+		}
+		
+		hql = " from OrgCourseCategory where deleteFlag is false and categoryId = ?";
+		OrgCourseCategory cates = commonDAO.findUnique(hql, CollectionUtils.newList(course.getCourseCategoryId()), OrgCourseCategory.class);
+		
+		StringBuffer sb = new StringBuffer(course.getName()).append('/');
+		sb.insert(0, cates.getCategoryName()+"/");
+		int i = 0;
+		while(cates.getCategoryLevel()==OrgCourseCategory.CATEGORY_LEVEL_FIRST){
+			i++;
+			hql = " from OrgCourseCategory where deleteFlag is false and categoryId = ?";
+			cates = commonDAO.findUnique(hql, CollectionUtils.newList(cates.getParentCategoryId()),OrgCourseCategory.class);
+			if(cates==null){
+				break;
+			}
+			sb.insert(0,cates.getCategoryName()+"/");
+			if(i==10){
+				break;
+			}
+		}
+		if(sb.length()!=0){
+			data.put("relation",sb.deleteCharAt(sb.length()-1).toString() );
+		}
+		
+		return result;
+	}
+
+	/**
+	 * 获取机构名字
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/getOrgName", method = RequestMethod.POST)
+	public @ResponseBody Result getOrgName() {
+		Organization org = commonDAO.read(Organization.class, ClientUtils.getOrgId());
+
+		return new Result(true, org.getName());
+	}
+
+	/**
+	 * 删除科目
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/deleteCate", method = RequestMethod.POST)
+	public @ResponseBody Result deleteCate(String id) {
+
+		return categoryService.doDeleteCate(id);
+	}
+
+	/**
+	 * 删除专业
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/deleteCourse", method = RequestMethod.POST)
+	public @ResponseBody Result deleteCourse(String id) {
+
+		return categoryService.doDeleteCourse(id);
+	}
+
+	/**
+	 * 3初始化科目
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/initCourse", method = RequestMethod.POST)
+	public @ResponseBody Result initCourse() {
+		String hql = " from OrgCollegeCourse where deleteFlag is false ";
+		List<OrgCollegeCourse> lstCourse = commonDAO.find(hql, OrgCollegeCourse.class);
+		int i = 0;
+		
+		/*for (OrgCollegeCourse orgCollegeCourse : lstCourse) {
+			Organization org = commonDAO.read(Organization.class, orgCollegeCourse.getOrganizationId());
+			hql = " from OrgCourseCategory where deleteFlag is false and categoryLevel !=? and type = ? and categoryType = ?";
+			OrgCourseCategory c = commonDAO.findUnique(hql, CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_FIRST,org.getType(),orgCollegeCourse.getType()), OrgCourseCategory.class);
+			if(c!=null){
+				orgCollegeCourse.setCourseCategoryId(c.getCategoryId());
+				orgCollegeCourse.setCourseCategoryName(c.getCategoryName());
+			}
+		
+		}*/
+		Map<String,Object> map = new HashMap<String, Object>();
+		Map<String,Object> courseMap = new HashMap<String, Object>();
+		for (OrgCollegeCourse orgCollegeCourse : lstCourse) {
+			Organization org = commonDAO.read(Organization.class, orgCollegeCourse.getOrganizationId());
+			hql = " from OrgCourseCategory where categoryId = ? and deleteFlag is false";
+			OrgCourseCategory cate = commonDAO.findUnique(hql, CollectionUtils.newList(orgCollegeCourse.getCourseCategoryId()), OrgCourseCategory.class);
+			if(cate==null){
+				continue;
+			}
+			//hql = " from OrgCategoryLevel where topOrgId = ? and categoryName = ? and deleteFlag is false";
+			//OrgCategoryLevel level = commonDAO.findUnique(hql,CollectionUtils.newList(orgCollegeCourse.getTopOrgId(),cate.getCategoryName()),OrgCategoryLevel.class);
+			OrgCategoryLevel level = (OrgCategoryLevel) map.get(org.getTopOrganizationId()+"-"+cate.getCategoryName());
+			if(level==null){
+				level = new OrgCategoryLevel();
+				level.setCategoryName(cate.getCategoryName());
+				level.setCode(cate.getCode());
+				level.setDeleteFlag(false);
+				level.setFullName(cate.getFullName());
+				level.setImgPath(cate.getImgPath());
+				level.setLevel(BigDecimal.ONE.shortValue());
+				level.setParentId(null);
+				level.setOrgId(orgCollegeCourse.getOrganizationId());
+				level.setTopOrgId(org.getTopOrganizationId());
+				TraceUtils.setCreateTrace(level);
+				commonService.save(level);
+				map.put(org.getTopOrganizationId()+"-"+cate.getCategoryName(), level);
+			}
+			
+			//hql = " from OrgCollegeCourse where deleteFlag is false and topOrgId = ? and courseId = ?";
+			//OrgCollegeCourse oc = commonDAO.findUnique(hql, CollectionUtils.newList(org.getTopOrganizationId(),orgCollegeCourse.getCourseId()), OrgCollegeCourse.class);
+			OrgCollegeCourse oc = (OrgCollegeCourse) courseMap.get(org.getTopOrganizationId()+"-"+orgCollegeCourse.getCourseId());
+			if(oc==null){
+				orgCollegeCourse.setTopOrgId(org.getTopOrganizationId());
+				orgCollegeCourse.setCourseCategoryId(level.getCategoryLevelId());
+				orgCollegeCourse.setCourseCategoryName(level.getCategoryName());
+				commonService.save(orgCollegeCourse);
+				courseMap.put(org.getTopOrganizationId()+"-"+orgCollegeCourse.getCourseId(), orgCollegeCourse);
+			}
+			
+			i++;
+		}
+		return new Result(true,"总共有"+lstCourse.size()+",初始化了"+i+"条");
+	}
+	
+	/**
+	 * 2先初始化课件数据,再初始化上面的科目
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/initCourseWare", method = RequestMethod.POST)
+	public @ResponseBody Result initCourseWare() {
+		
+		//视频
+		int i = 0;
+		String hql = " from MediaVideoReCourse where deleteFlag is false";
+		List<MediaVideoReCourse> videos = commonDAO.find(hql, MediaVideoReCourse.class);
+		for (MediaVideoReCourse course : videos) {
+			hql = " from OrgCollegeCourse where collegeCourseId = ? and deleteFlag is false";
+			OrgCollegeCourse oc = commonDAO.findUnique(hql, CollectionUtils.newList(course.getCollegeCourseId()), OrgCollegeCourse.class);
+			if(oc==null){
+				continue;
+			}
+			course.setOrgId(oc.getOrganizationId());
+			TraceUtils.setUpdateTrace(course);
+			commonService.save(course);
+			i++;
+		}
+		//讲义
+		int y = 0;
+		hql = " from SchHandoutReCourse where deleteFlag is false";
+		List<SchHandoutReCourse> handouts = commonDAO.find(hql, SchHandoutReCourse.class);
+		for (SchHandoutReCourse course : handouts) {
+			hql = " from OrgCollegeCourse where collegeCourseId = ? and deleteFlag is false";
+			OrgCollegeCourse oc = commonDAO.findUnique(hql, CollectionUtils.newList(course.getCollegeCourseId()), OrgCollegeCourse.class);
+			if(oc==null){
+				continue;
+			}
+			course.setOrgId(oc.getOrganizationId());
+			TraceUtils.setUpdateTrace(course);
+			commonService.save(course);
+			y++;
+		}
+		//练习
+		int z = 0;
+		hql = " from ExerciseReCourse where deleteFlag is false";
+		List<ExerciseReCourse> exers = commonDAO.find(hql, ExerciseReCourse.class);
+		for (ExerciseReCourse course : exers) {
+			hql = " from OrgCollegeCourse where collegeCourseId = ? and deleteFlag is false";
+			OrgCollegeCourse oc = commonDAO.findUnique(hql, CollectionUtils.newList(course.getCollegeCourseId()), OrgCollegeCourse.class);
+			if(oc==null){
+				continue;
+			}
+			course.setOrgId(oc.getOrganizationId());
+			TraceUtils.setUpdateTrace(course);
+			commonService.save(course);
+			z++;
+		}
+		return new Result(true,"视频总共"+videos.size()+"个,成功了"+i+"个"+"讲义总共"+handouts.size()+"个,成功了"+y+"个"+"练习总共"+exers.size()+"个,成功了"+z+"个");
+	}
+	
+	/**
+	 * 1初始化班级 机构ID
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/initClass", method = RequestMethod.POST)
+	public @ResponseBody Result initClass() {
+		String hql = " from ClsClass where deleteFlag is false ";
+		List<ClsClass> ocs = commonDAO.find(hql, ClsClass.class);
+		int i = 0;
+		for (ClsClass orgClass : ocs) {
+			hql = " from OrgCollegeCourse where collegeCourseId = ? and deleteFlag is false";
+			OrgCollegeCourse course = commonDAO.findUnique(hql,CollectionUtils.newList(orgClass.getCollegeCourseId()), OrgCollegeCourse.class);
+			if(course==null){
+				continue;
+			}
+			hql = " from Organization where organizationId = ? and deleteFlag is false";
+			Organization org = commonDAO.findUnique(hql, CollectionUtils.newList(course.getOrganizationId()), Organization.class);
+			if(org==null){
+				continue;
+			}
+			orgClass.setOrgId(org.getOrganizationId());
+			TraceUtils.setUpdateTrace(orgClass);
+			commonService.save(orgClass);
+			i++;
+		}
+		return new Result(true,"班级总共"+ocs.size()+",成功了"+i+"个");
+	}
+	
+	/**
+	 * 初始化levelCode
+	 * 
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	@RequestMapping(value = "/initLevel", method = RequestMethod.GET)
+	public @ResponseBody Result initLevel() {
+		String hql = " from OrgCategoryLevel where deleteFlag is false and level = ?";
+//		List<OrgCategoryLevel> parentsFirst = commonDAO.find(hql, CollectionUtils.newList(OrgCategoryLevel.CATEGORY_LEVEL_FIRST), OrgCategoryLevel.class);
+//		for (OrgCategoryLevel orgCategoryLevel : parentsFirst) {
+//			if(StringUtils.isBlank(orgCategoryLevel.getCategoryName())||StringUtils.isNotBlank(orgCategoryLevel.getLevelCode())){
+//				continue;
+//			}
+//			String levelCode = generateLevelCode(orgCategoryLevel.getCategoryName());
+//			String code = cacheService.get("course1_"+levelCode, String.class);
+//			if(code==null){
+//				orgCategoryLevel.setLevelCode(levelCode+"_00");
+//				commonService.save(orgCategoryLevel);
+//				cacheService.set("course1_"+levelCode, 24*60*60, orgCategoryLevel.getCategoryLevelId());
+//				continue;
+//			}else{
+//				int i = 0;
+//				String lc = "";
+//				do{
+//					i++;
+//					lc = levelCode+i;
+//				}while(null!=cacheService.get("course1_"+levelCode+i, String.class));
+//				orgCategoryLevel.setLevelCode(lc+"_00");
+//				commonService.save(orgCategoryLevel);
+//				cacheService.set("course1_"+lc, 24*60*60, orgCategoryLevel.getCategoryLevelId());
+//				continue;
+//			}
+//			
+//		}
+//		
+		initNextLevel(Short.parseShort("2"));
+		initNextLevel(Short.parseShort("3"));
+		initNextLevel(Short.parseShort("4"));
+		initNextLevel(Short.parseShort("5"));
+		initNextLevel(Short.parseShort("6"));
+		initNextLevel(Short.parseShort("7"));
+		initNextLevel(Short.parseShort("8"));
+		initNextLevel(Short.parseShort("9"));
+		initNextLevel(Short.parseShort("10"));
+		
+		return new Result(true);
+	}
+	
+	@SuppressWarnings("unused")
+	private void initNextLevel(short level){
+		String hql = " from OrgCategoryLevel where deleteFlag is false and level = ?";
+		List<OrgCategoryLevel> parentsSecond = commonDAO.find(hql, CollectionUtils.newList(level), OrgCategoryLevel.class);
+		for (OrgCategoryLevel orgCategoryLevel : parentsSecond) {
+			if(StringUtils.isNotBlank(orgCategoryLevel.getLevelCode())){
+				continue;
+			}
+			
+			OrgCategoryLevel parent = commonDAO.read(OrgCategoryLevel.class, orgCategoryLevel.getParentId());
+			if(null==parent||StringUtils.isBlank(parent.getLevelCode())){
+				continue;
+			}
+			String levelCode = parent.getLevelCode()+"00";
+//			String code = cacheService.get("course1_"+levelCode, String.class);
+			String code = null;
+			if(code==null){
+				orgCategoryLevel.setLevelCode(levelCode);
+				commonService.save(orgCategoryLevel);
+//				cacheService.set("course1_"+levelCode, 24*60*60, orgCategoryLevel.getCategoryLevelId());
+				continue;
+			}else{
+				int i = 0;
+				String lc = "";
+				do{
+					i++;
+					String h = String.valueOf(i);
+					if(i<10){
+						h = "0"+i;
+					}
+					lc = parent.getLevelCode()+h;
+//				}while(null!=cacheService.get("course1_"+lc, String.class));
+				}while(true);
+//				orgCategoryLevel.setLevelCode(lc);
+//				commonService.save(orgCategoryLevel);
+//				cacheService.set("course1_"+lc, 24*60*60, orgCategoryLevel.getCategoryLevelId());
+//				continue;
+			}
+			
+		}
+	}
+	
+	
+	@SuppressWarnings("unused")
+	private String generateLevelCode(String name) {
+
+		// 转拼音
+		//使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号
+		String[] arrUnidecode = WordProcessUtils.toPinyin(name.replace(" ",""), " ").replaceAll("'", "").split(" ");
+		
+		String orgCode = "";
+		if(null != arrUnidecode){
+			for(String str : arrUnidecode){
+				orgCode = orgCode.concat(str.substring(0,1));
+			}
+		}
+		
+		
+		return orgCode;
+	}
+	
+	public static void main(String[] args) {
+		String[] arrUnidecode = WordProcessUtils.toPinyin("22".replace(" ","")).replaceAll("'", "").split(" ");
+		String orgCode = "";
+		if(null != arrUnidecode){
+			for(String str : arrUnidecode){
+				orgCode = orgCode.concat(str.substring(0,1));
+			}
+		}
+		System.out.println(orgCode);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/action/CourceController.java b/src/main/java/com/qxueyou/scc/courseware/action/CourceController.java
new file mode 100644
index 0000000..1ad514a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/action/CourceController.java
@@ -0,0 +1,262 @@
+package com.qxueyou.scc.courseware.action;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.courseware.service.ICourceCategoryService;
+import com.qxueyou.scc.courseware.service.ICourseService;
+import com.qxueyou.scc.courseware.service.IOrgCourseService;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourse;
+
+/**
+ * 科目管理controller
+ * 
+ * @author 德虎
+ * @history 2014-11-25 新建 夏德虎
+ * 
+ */
+@Controller
+@RequestMapping(value = "/org/cource")
+public class CourceController {
+
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	private ICourceCategoryService categoryService;
+
+	@Autowired
+	private IOrgCourseService orgCourseService;
+	
+	@SuppressWarnings("unused")
+	@Autowired
+	private IClassService orgClassService;
+	
+	@Autowired
+	private ICourseService service;
+	
+	/**
+	 * APP2.0: 查询科目内容
+	 * URL:    /org/cource/queryCourseNew/{courseId}
+	 * 
+	 * @param courseId   科目ID  
+	 * @return
+	 */
+	@RequestMapping(value = "queryCourseNew/{courseId}", method = RequestMethod.GET)
+	public @ResponseBody
+	OrgCollegeCourse queryCourse(@PathVariable String courseId) {
+
+		OrgCollegeCourse course = commonDAO.read(OrgCollegeCourse.class, courseId);
+		
+//		// 如果是游客班 	 1:表示游客班	
+//		if(orgClassService.isCurrentVistorClass()){
+//			//Organization org = course.getOrg();
+//			Organization org = commonDAO.read(Organization.class, course.getTopOrgId());
+//			course.setOrgName(org.getName());
+////			course.setOrgTel(org.getTel());
+//		}
+		
+		return course;
+	}
+
+	/**
+	 * APP2.0: 推荐课程
+	 * URL:    /org/cource/recommendCourseNew
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "recommendCourseNew", method = RequestMethod.GET)
+	public @ResponseBody
+	List<OrgCollegeCourse> recommendCourse() {
+
+		// 1. 查询该机构下推荐课程 只取前三个
+		String hql = "select courseId,name,price,imgPath,courseCategoryId "
+				+ " from OrgCourse c where c.deleteFlag is false and c.recommend is true";
+		
+		List<Object> args = new ArrayList<Object>(1);
+		// 如果是游客班  查所有机构	 1:表示游客班		 
+//		if(!orgClassService.isCurrentVistorClass()){
+//			 hql += " and c.org.organizationId=?";
+//			 args = CollectionUtils.newList(ClientUtils.getOrgId());
+//		}
+		
+		
+		List<OrgCollegeCourse> lstCourse = categoryService.queryOrgCourseList(hql, args);
+
+		if (lstCourse.isEmpty()) {
+			return lstCourse;
+		}
+
+		// 只取前三项数据
+		List<OrgCollegeCourse> lstResultCourse = new ArrayList<OrgCollegeCourse>();
+		int count = lstCourse.size() >= 3 ? 3 : lstCourse.size();
+		for (int i = 0; i < count; i++) {
+			lstResultCourse.add(lstCourse.get(i));
+		}
+
+		return lstResultCourse;
+	}
+	
+	/******************************************************************* 上面为App接口,下面为后台接口 **************************/
+
+	/**
+	 * 科目列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	public String list() {
+		return "/org/Course";
+	}
+
+	/**
+	 * 获取列表数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/data", method = RequestMethod.GET)
+	public @ResponseBody
+	List<OrgCollegeCourse> data() {
+
+		return orgCourseService.queryCourseList(ClientUtils.getOrgId());
+
+	}
+
+	/**
+	 * 根据科目ID查询科目
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/read/{courseId}", method = RequestMethod.GET)
+	public @ResponseBody
+	OrgCollegeCourse read(@PathVariable String courseId) {
+		return commonDAO.read(OrgCollegeCourse.class, courseId);
+	}
+
+	/**
+	 * 专业编辑 - 选择科目类别后加载专业列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/loadCourse", method = RequestMethod.GET)
+	public @ResponseBody
+	List<OrgCourse> loadCourse( String courseCategoryId,String courseId) {
+		
+		List<OrgCourse> orgCourse = orgCourseService.loadCourse(courseCategoryId, courseId);
+		
+		return orgCourse;
+	}
+	
+	/**
+	 * 新增
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/add", method = RequestMethod.POST)
+	public @ResponseBody
+	Result add(OrgCollegeCourse course) {
+
+		return orgCourseService.insertCourse(course);
+
+	}
+
+	/**
+	 * 编辑
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/edit", method = RequestMethod.GET)
+	public String edit() {
+
+		return "/org/CourseEdit";
+	}
+
+	/**
+	 * 删除
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.POST)
+	public @ResponseBody
+	Result delete(String courseIds) {
+
+		// 保存到服务器
+		return orgCourseService.deleteCourses(courseIds.split(","));
+
+	}
+	
+	/**
+	 * 推荐
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/recommend", method = RequestMethod.POST)
+	public @ResponseBody
+	Result recommend(String courseIds) {
+
+		// 保存到服务器
+		return orgCourseService.doRecommend(courseIds.split(","));
+
+	}
+	
+	/**
+	 * 取消推荐
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/unrecommend", method = RequestMethod.POST)
+	public @ResponseBody
+	Result unrecommend(String courseIds) {
+
+		// 保存到服务器
+		return orgCourseService.doUnRecommend(courseIds.split(","));
+
+	}
+
+	/**
+	 * 更新
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/update", method = RequestMethod.POST)
+	public @ResponseBody
+	Result update(OrgCollegeCourse course) {
+		return orgCourseService.updateCourse(course);
+	}
+
+	/**
+	 * 科目介绍预览
+	 * @param orgClass
+	 * @param mobilePhone
+	 * @return
+	 */
+//	@RequestMapping(value = "/preview", method = RequestMethod.POST)
+//	public @ResponseBody Result doPreviewNotice(OrgCollegeCourse orgCourse,String mobilePhone) {
+//		return orgCourseService.doPreviewCourse(orgCourse,mobilePhone);
+//	}
+	
+	
+	/**
+	 * 查询所有机构项目
+	 * @return
+	 */
+	@RequestMapping(value="/allCourseName",method=RequestMethod.GET)
+	@ResponseBody
+	public List<Map<String, Object>> getCourseName() {
+		return  service.queryCourseName();
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/service/ICourceCategoryService.java b/src/main/java/com/qxueyou/scc/courseware/service/ICourceCategoryService.java
new file mode 100644
index 0000000..dc3a1a9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/service/ICourceCategoryService.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.courseware.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourseCategory;
+import com.qxueyou.scc.org.model.Organization;
+
+public interface ICourceCategoryService {
+	/**
+	 * 查询科目list  根据条件
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<OrgCollegeCourse> queryOrgCourseList(String hql, List<Object> args);
+	
+	/**
+	 * 查询科目list  根据条件
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<OrgCollegeCourse> queryOrgCourseListNew(String hql, List<Object> args);
+	
+	/**
+	 * 查询科目类型list  根据条件
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<OrgCourseCategory> queryOrgCourseCategoryList(String hql, List<Object> args);
+	
+	/**
+	 * 组装   全部课程    所有查询条件
+	 * @return
+	 * @version 2.0
+	 */
+	Map<String,Object> generateAllCourseCondition();
+	
+	Result insertLevelCategory(String id,String name,String code,String type);
+	
+	Result doDeleteCate(String id);
+	
+	Result doDeleteCourse(String id);
+	
+	/**
+	 * 新增科目
+	 * @param id
+	 * @param name
+	 * @param code
+	 * @param type  
+	 * @return
+	 */
+	Result addCategory(Organization org, String id, String name, String code, String type);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/service/ICourseService.java b/src/main/java/com/qxueyou/scc/courseware/service/ICourseService.java
new file mode 100644
index 0000000..8645014
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/service/ICourseService.java
@@ -0,0 +1,174 @@
+package com.qxueyou.scc.courseware.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 项目服务接口
+ * @author 岩龙
+ * @createtime 2017-10-31
+ */
+public interface ICourseService {
+
+	/**
+	 * 查询科目类别
+	 * @param categoryId 当前目录id
+	 * @return
+	 */
+	public List<Map<String, Object>> queryCategoryList() ;
+	
+	/**
+	 * 添加科目类别
+	 * @param parentId 父节点id
+	 * @param catalogName 目录名 
+	 * @return
+	 */
+	public Result insertCourseCategory(String parentId,String catalogName);
+	
+	/**
+	 * 修改科目类别
+	 * @param categoryId  类别id
+	 * @param categoryName 类别名
+	 * @return
+	 */
+	public Result updateCourseCategory(String categoryId,String categoryName);
+	
+	/**
+	 * 删除科目类别
+	 * @param categoryId 当前目录id
+	 * @return
+	 */
+	public Result deleteCategory(String categoryId) ;
+
+	
+	
+	/**
+	 * 查询项目
+	 * @param categoryId 类别id
+	 * @return
+	 */
+	public List<Map<String, Object>> queryCourse(String categoryId) ;
+	
+	/**
+	 * 添加项目
+	 * @param categoryId 科目类别id
+	 * @param courseName 项目名
+	 * @return
+	 */
+	public Result insertCourse(String categoryId,String courseName);
+	
+	/**
+	 * 修改项目
+	 * @param courseId 项目id
+	 * @param courseName 项目名
+	 * @return
+	 */
+	public Result updateCourse(String courseId,String courseName);
+	
+	/**
+	 * 删除项目
+	 * @param courseId  项目id
+	 * @return
+	 */
+	public Result deleteCourse(String courseId);
+	
+	
+	/**
+	 * 查询课程
+	 * @param courseId 项目id
+	 * @return
+	 */
+	public List<Map<String, Object>> querySubject(String courseId);
+	
+	
+	/**
+	 * 添加课程
+	 * @param courseId 项目id
+	 * @param subjectName 课程名
+	 * @return
+	 */
+	public Result insertSubject(String courseId,String subjectName);
+	
+	/**
+	 *  修改课程
+	 * @param subjectId 课程id
+	 * @param subjectName 课程名
+	 * @return
+	 */
+	public Result updateSubject(String subjectId,String subjectName);
+	
+	/**
+	 * 删除课程
+	 * @param subjectId  课程id
+	 * @return
+	 */
+	public Result deleteSubject(String subjectId);
+	
+	
+	/**
+	 * 查询章
+	 * @param subjectId 课程Id
+	 * @return
+	 */
+	public List<Map<String, Object>> queryChapter(String subjectId);
+	
+	/**
+	 * 查询节
+	 * @param id
+	 * @return
+	 */
+	public List<Map<String, Object>> querychildChapter(String id);
+	
+	/**
+	 * 添加章节
+	 * @param subjectId 课程Id
+	 * @param chapterName 父章节Id
+	 * @param chapterName 章节名称
+	 * @param courseId 项目Id
+	 * @return
+	 */
+	public Result insertChapter(String subjectId,String chapterId,String chapterName,String courseId);
+	
+	
+	
+	/**
+	 * 修改章节
+	 * @param chapterId 章节id
+	 * @param chapterName 章节名称
+	 * @return
+	 */
+	public Result updateChapter(String chapterId,String chapterName);
+	
+	/**
+	 * 删除章节
+	 * @param chapterId
+	 * @return
+	 */
+	public Result deleteChapter(String chapterId);
+
+	/**
+	 * 查询所有机构项目名
+	 * @return
+	 */
+	public List<Map<String, Object>> queryCourseName();
+	
+	
+	/**
+	 * 删除树节点
+	 * @param id
+	 * @param type
+	 * @return
+	 */
+	public Result deleteNode(String id, String type);
+	
+	/**
+	 * pc端显示项目名称
+	 * @return
+	 */
+	List<Map<String, Object>> findclassNameByCourse(String mode);
+
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/service/IOrgCourseService.java b/src/main/java/com/qxueyou/scc/courseware/service/IOrgCourseService.java
new file mode 100644
index 0000000..c3f0fa1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/service/IOrgCourseService.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.courseware.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourse;
+
+
+public interface IOrgCourseService {
+	
+	/**
+	 * 后台  科目列表
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	public List<OrgCollegeCourse> queryCourseList(String OrgId);
+	
+	/**
+	 * 新增科目
+	 * @param course
+	 * @return
+	 */
+	Result insertCourse(OrgCollegeCourse course);
+	
+	/**
+	 * 更新科目
+	 * @param course
+	 * @return
+	 */
+	Result updateCourse(OrgCollegeCourse course);
+	
+	/**
+	 * 删除科目
+	 * @param courseIds
+	 * @return
+	 */
+	Result deleteCourses(String[] courseIds);
+	
+	/**
+	 * 推荐科目
+	 * @param courseIds
+	 * @return
+	 */
+	Result doRecommend(String[] courseIds);
+	
+	/**
+	 * 取消推荐科目
+	 * @param courseIds
+	 * @return
+	 */
+	Result doUnRecommend(String[] courseIds);
+
+	/**
+	 * 专业编辑 - 选择科目类别后加载专业列表
+	 * 
+	 * @return
+	 */
+	List<OrgCourse> loadCourse(String courseCategoryId, String courseId);
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/courseware/service/impl/CourceCategoryAppService.java b/src/main/java/com/qxueyou/scc/courseware/service/impl/CourceCategoryAppService.java
new file mode 100644
index 0000000..c754ce0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/service/impl/CourceCategoryAppService.java
@@ -0,0 +1,477 @@
+package com.qxueyou.scc.courseware.service.impl;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.base.util.WordProcessUtils;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.service.IMediaVideoService;
+import com.qxueyou.scc.org.dao.OrgDAO;
+import com.qxueyou.scc.org.model.OrgCategoryLevel;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourseCategory;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.courseware.service.ICourceCategoryService;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.school.service.IHandoutService;
+import com.qxueyou.scc.sys.model.SysCondition;
+
+@Service(value = "courceCategoryAppService")
+public class CourceCategoryAppService  extends CommonAppService implements ICourceCategoryService {
+	
+	private OrgDAO orgDAO;
+	
+	/**
+	 * IHandoutService服务
+	 */
+	@Autowired
+	IHandoutService handoutService;
+	
+	@Autowired
+	private IMediaVideoService mediaVideoService;
+	
+	public OrgDAO getOrgDAO() {
+		return orgDAO;
+	}
+
+	/**
+     * 依赖注入
+     *
+     * @param commonDAO
+     */
+	@Autowired(required = false)
+	public void setOrgDAO(@Qualifier("orgDAO")
+		OrgDAO orgDAO) {
+		this.orgDAO = orgDAO;
+	}
+
+	@Override
+	public List<OrgCollegeCourse> queryOrgCourseList(String hql, List<Object> args) {
+		return orgDAO.queryOrgCourseList(hql, args);
+	}
+
+	@Override
+	public List<OrgCourseCategory> queryOrgCourseCategoryList(String hql,
+			List<Object> args) {
+		return orgDAO.queryOrgCourseCategoryList(hql, args);
+	}
+
+	@Override
+	public List<OrgCollegeCourse> queryOrgCourseListNew(String hql, List<Object> args) {
+		return orgDAO.queryOrgCourseListNew(hql, args);
+	}
+	
+	/**
+	 * 组装   全部课程    所有查询条件
+	 * 
+	 * @return
+	 * @version 2.0
+	 */
+	public Map<String,Object> generateAllCourseCondition(){
+		
+		Map<String,Object> result = new HashMap<String,Object>(3);
+		
+		// 1.课程分类
+		String firstHql = "select c from OrgCourseCategory c where c.deleteFlag is false and c.categoryLevel = ? order by c.code asc ";
+		List<OrgCourseCategory> lstFirstCategory = this.find(firstHql, 
+				CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_FIRST) , OrgCourseCategory.class);
+		
+		String secondHql = "select c from OrgCourseCategory c where c.deleteFlag is false and c.categoryLevel = ? and type <> ? order by c.code asc ";
+		List<OrgCourseCategory> lstSecondCategory = this.find(secondHql, 
+				CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_SECOND,Organization.ORG_TYPE_DEGREE_EDUCATION) , OrgCourseCategory.class);
+		
+		
+		// 1.1 第二层
+		Map<String,List<OrgCourseCategory>> secondMap = new HashMap<String,List<OrgCourseCategory>>(lstFirstCategory.size());
+		for(OrgCourseCategory second : lstSecondCategory ){
+			if(StringUtils.isNotBlank(second.getParentCategoryId()) && null == secondMap.get(second.getParentCategoryId())){
+				secondMap.put(second.getParentCategoryId(), CollectionUtils.newList(OrgCourseCategory.class, second));
+			}else if(StringUtils.isNotBlank(second.getParentCategoryId())){
+				secondMap.get(second.getParentCategoryId()).add(second);
+			}
+		}
+		
+		// 组装的数据格式
+		Map<String,Object> sMap;
+		List<Map<String,Object>> lstS ;
+		
+		Map<String,Object> fMap;
+		List<Map<String,Object>> lstF = new ArrayList<Map<String,Object>>();
+		
+		int fIndex = 0; 
+		int sIndex = 0; 
+		
+		// 循环
+		for(OrgCourseCategory first : lstFirstCategory){
+			
+			fIndex = fIndex + 1 ;
+			sIndex = 0; 
+			fMap = new HashMap<String,Object>();
+			lstS = new ArrayList<Map<String,Object>>();
+			
+			fMap.put("index", fIndex );
+			fMap.put("categoryId", first.getCategoryId());
+			fMap.put("categoryName", first.getCategoryName());
+			fMap.put("code", first.getCode());
+			fMap.put("parentId", null);
+			
+			// 第二层
+			if(null != secondMap.get(first.getCategoryId()) ){
+				for(OrgCourseCategory second : secondMap.get(first.getCategoryId())){
+					
+					sIndex = sIndex + 1 ;
+					sMap = new HashMap<String,Object>();
+					
+					sMap.put("index", sIndex );
+					sMap.put("categoryId", second.getCategoryId());
+					sMap.put("categoryName", second.getCategoryName());
+					sMap.put("code", second.getCode());
+					sMap.put("parentId", second.getParentCategoryId());
+					lstS.add(sMap);
+				}
+			}
+			
+			fMap.put("children", lstS);
+			
+			lstF.add(fMap);
+		}
+		
+		result.put("course", lstF);
+		
+		// 2.排序
+		List<Map<String,Object>> lstSort = new ArrayList<Map<String,Object>>(5);
+		Map<String,Object> sort;
+		
+		String sortHql = "from SysCondition s where s.deleteFlag is false and s.module = ? order by s.order asc ";
+		List<SysCondition> lstSorts = this.find(sortHql, CollectionUtils.newList(SysCondition.MODULE_COURSE_MARKET_SORT), SysCondition.class);
+		
+		for(SysCondition s : lstSorts ){
+			sort = new HashMap<String,Object>(3);
+			sort.put("index", s.getOrder());
+			sort.put("code", s.getCode());
+			sort.put("name", s.getName());
+			lstSort.add(sort);
+		}
+		result.put("sort", lstSort);
+		
+		// 3.地区
+		List<Map<String,Object>> lstCity = new ArrayList<Map<String,Object>>(6);
+		Map<String,Object> city;
+		
+		String cityHql = "from SysCondition s where s.deleteFlag is false and s.module = ? order by s.order asc ";
+		List<SysCondition> lstCitys = this.find(cityHql, CollectionUtils.newList(SysCondition.MODULE_COURSE_MARKET_CITY), SysCondition.class);
+		
+		for(SysCondition s : lstCitys ){
+			city = new HashMap<String,Object>(3);
+			city.put("index", s.getOrder());
+			city.put("code", s.getCode());
+			city.put("name", s.getName());
+			lstCity.add(city);
+		}
+		result.put("city", lstCity);
+		
+		
+		return result ;
+	}
+	
+	public Result insertLevelCategory(String id,String name,String code,String type){
+		Organization org = read(Organization.class, ClientUtils.getOrgId());
+		Result result = new Result(true);
+		//保存
+		if("save".equals(type)){
+			OrgCategoryLevel ocl = read(OrgCategoryLevel.class, id);
+			ocl.setCategoryName(name);
+			ocl.setCode(code);
+			save(ocl);
+			result.setData(ocl);
+			return result;
+		}
+		//增加同级
+		if("add".equals(type)){
+			OrgCategoryLevel ocl0 = read(OrgCategoryLevel.class, id);
+			OrgCategoryLevel ocl = new OrgCategoryLevel();
+			ocl.setCategoryName(name);
+			ocl.setCode(code);
+			ocl.setDeleteFlag(false);
+			ocl.setFullName(name);
+			ocl.setImgPath(null);
+			ocl.setLevel(ocl0.getLevel());
+			ocl.setParentId(ocl0.getParentId());
+			OrgCategoryLevel parent = read(OrgCategoryLevel.class, ocl0.getParentId());
+			ocl.setOrgId(ClientUtils.getOrgId());
+			ocl.setTopOrgId(org.getTopOrganizationId());
+			TraceUtils.setCreateTrace(ocl);
+			
+			result.setData(insertOcl(ocl,parent,name));
+			return result;
+		}
+		
+		//增加下级
+		if("addNext".equals(type)){
+			OrgCategoryLevel parent = read(OrgCategoryLevel.class, id);
+			OrgCategoryLevel ocl = new OrgCategoryLevel();
+			ocl.setCategoryName(name);
+			ocl.setCode(code);
+			ocl.setDeleteFlag(false);
+			ocl.setFullName(name);
+			ocl.setImgPath(null);
+			ocl.setParentId(id);
+			
+			ocl.setOrgId(ClientUtils.getOrgId());
+			ocl.setTopOrgId(org.getTopOrganizationId());
+			TraceUtils.setCreateTrace(ocl);
+			
+			result.setData(insertOcl(ocl,parent,name));
+			return result;
+		}
+		
+		return new Result(false,"参数错误");
+		
+	
+	}
+	
+	private OrgCategoryLevel insertOcl(OrgCategoryLevel ocl,OrgCategoryLevel parent,String name){
+		int loop = 0;
+		String levelCode = "";
+		String origLevelCode = "";
+		OrgCategoryLevel origCateLevel ;
+		//BeanUtils.copyProperties(ocl, origCateLevel);
+		if(parent==null){
+			// 首层:直接生成
+			levelCode = UUIDUtils.generateUUID();
+			origLevelCode = levelCode;
+		}else{
+			// 下层:根据parent生成
+			levelCode = parent.getLevelCode()+"00";
+		}
+		do {
+
+			try {
+
+				origCateLevel = new OrgCategoryLevel();
+				BeanUtils.copyProperties(ocl ,  origCateLevel);
+				if(parent==null){ // 首层:直接生成
+					origCateLevel.setLevel(BigDecimal.ONE.shortValue());
+					origCateLevel.setLevelCode(levelCode+"_00");
+				}else{ // 下层:根据parent生成
+					origCateLevel.setLevel(new BigDecimal(parent.getLevel()).add(BigDecimal.ONE).shortValue());
+					origCateLevel.setLevelCode(levelCode);
+				}
+				save(origCateLevel);
+				flush();
+				
+				return origCateLevel ;
+				// break;
+
+			} catch (Exception e) {
+				
+				clearCache();
+				
+				loop++;
+				if(parent==null){
+					// 首层:直接生成
+					levelCode = origLevelCode.concat(String.valueOf(loop));
+				}else{
+					// 下层:根据parent生成
+					String h = String.valueOf(loop);
+					if(loop<10){
+						h = "0"+loop;
+					}
+					levelCode = parent.getLevelCode().concat(h);
+				}
+				
+			}
+
+		} while (loop < 1000);
+		
+		return null ;
+	}
+	
+	@SuppressWarnings("unused")
+	private String generateLevelCode(String name) {
+
+		// 转拼音
+		//使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号
+		String[] arrUnidecode = WordProcessUtils.toPinyin(name," ").replaceAll("'", "").split(" ");
+		
+		String orgCode = "";
+		if(null != arrUnidecode){
+			for(String str : arrUnidecode){
+				orgCode = orgCode.concat(str.substring(0,1));
+			}
+		}
+		
+		
+		return orgCode;
+	}
+	
+	public Result doDeleteCate(String id){
+		boolean flag = false;
+		String hql = " from OrgCategoryLevel where deleteFlag is false and (categoryLevelId = ? or parentId = ?)";
+		List<OrgCategoryLevel> lstCate = find(hql, CollectionUtils.newList(id,id), OrgCategoryLevel.class);
+		for (OrgCategoryLevel orgCategoryLevel : lstCate) {
+			hql = " from OrgCollegeCourse where deleteFlag is false and courseCategoryId = ?";
+			List<OrgCollegeCourse> course = find(hql, CollectionUtils.newList(orgCategoryLevel.getCategoryLevelId()), OrgCollegeCourse.class);
+			for (OrgCollegeCourse orgCollegeCourse : course) {
+				hql = " from ClsClass where collegeCourseId = ? and deleteFlag is false";
+				List<ClsClass> classes = find(hql, CollectionUtils.newList(orgCollegeCourse.getCollegeCourseId()), ClsClass.class);
+				if(!classes.isEmpty()){
+					flag = true;
+					break;
+				}
+				
+			}
+			if(flag){
+				break;
+			}
+			
+		}
+		if(flag){
+			return new Result(false,"该分类下的科目下存在班级,请先删除班级");
+		}
+		for (OrgCategoryLevel orgCategoryLevel : lstCate) {
+			hql = " from OrgCollegeCourse where deleteFlag is false and courseCategoryId = ?";
+			List<OrgCollegeCourse> course = find(hql, CollectionUtils.newList(orgCategoryLevel.getCategoryLevelId()), OrgCollegeCourse.class);
+			for (OrgCollegeCourse orgCollegeCourse : course) {
+				doDeleteCourse(orgCollegeCourse.getCollegeCourseId());
+			}
+			orgCategoryLevel.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(orgCategoryLevel);
+			save(orgCategoryLevel);
+			
+		}
+		return new Result(true);
+	}
+	
+	public Result doDeleteCourse(String id){
+		String hql = " from ClsClass where deleteFlag is false and collegeCourseId = ?";
+		ClsClass cls = findUnique(hql, CollectionUtils.newList(id), ClsClass.class);
+		if(cls!=null){
+			return new Result(false,"该科目下存在班级,请先删除班级");
+		}
+		//删除所有视频
+		doDeleteVideo(id);
+		//删除所有练习
+		doDeleteExe(id);
+		//删除所有讲义
+		doDeleteHandout(id);
+		
+		hql = " from OrgCollegeCourse where deleteFlag is false and collegeCourseId = ?";
+		OrgCollegeCourse course = findUnique(hql, CollectionUtils.newList(id), OrgCollegeCourse.class);
+		course.setDeleteFlag(true);
+		TraceUtils.setUpdateTrace(course);
+		return save(course);
+	}
+	
+	private void doDeleteVideo(String id){
+		String hql = " from MediaVideo where (videoId in "
+				+ " (select videoId from MediaVideoReCourse where collegeCourseId = ? and deleteFlag is false)"
+				+ " or originVideoId in (select videoId from MediaVideoReCourse where collegeCourseId = ? and deleteFlag is false))"
+				+ " and deleteFlag is false";
+		List<MediaVideo> lstVideo = find(hql, CollectionUtils.newList(id,id), MediaVideo.class);
+		for (MediaVideo mv : lstVideo) {
+			mv.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(mv);
+			this.mediaVideoService.saveVideo(mv);
+		}
+	}
+	private void doDeleteExe(String id){
+		String hql = " from ExerciseGroup where (groupId in (select groupId from ExerciseReCourse where collegeCourseId = ? and deleteFlag is false)"
+				+ " or originExerciseId in (select groupId from ExerciseReCourse where collegeCourseId = ? and deleteFlag is false))"
+				+ " and deleteFlag is false";
+		List<ExerciseGroup> groups = find(hql,CollectionUtils.newList(id,id),ExerciseGroup.class);
+		for (ExerciseGroup g : groups){
+			g.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(g);
+			save(g);
+		}
+	}
+	
+	private void doDeleteHandout(String id){
+		String hql = " from SchHandout where (handoutId in "
+				+ "(select handoutId from SchHandoutReCourse where collegeCourseId = ? and deleteFlag is false"
+				+ ") or originHandoutId in (select handoutId from SchHandoutReCourse where collegeCourseId = ? and deleteFlag is false ))"
+				+ "and deleteFlag is false";
+		List<SchHandout> handouts = find(hql,CollectionUtils.newList(id,id),SchHandout.class);
+		for(SchHandout handout : handouts){
+			handout.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(handout);
+			this.handoutService.saveHandout(handout);
+		}
+	}
+	
+	/**
+	 * 新增科目
+	 * @param id
+	 * @param name
+	 * @param code
+	 * @param type  
+	 * @return
+	 */
+	@Override
+	public Result addCategory(Organization org, String id, String name, String code, String type) {
+		Result result = new Result(true);
+		//保存
+		if("save".equals(type)){
+			OrgCategoryLevel ocl = this.read(OrgCategoryLevel.class, id);
+			ocl.setCategoryName(name);
+			ocl.setCode(code);
+			this.save(ocl);
+			result.setData(ocl);
+			return result;
+		}
+		//增加同级
+		if("add".equals(type)){
+			OrgCategoryLevel ocl0 = this.read(OrgCategoryLevel.class, id);
+			OrgCategoryLevel ocl = new OrgCategoryLevel();
+			ocl.setCategoryName(name);
+			ocl.setCode(code);
+			ocl.setDeleteFlag(false);
+			ocl.setFullName(name);
+			ocl.setImgPath(null);
+			ocl.setLevel(ocl0.getLevel());
+			ocl.setParentId(ocl0.getParentId());
+			OrgCategoryLevel parent = this.read(OrgCategoryLevel.class, ocl0.getParentId());
+			TraceUtils.setCreateTrace(ocl);
+			
+			result.setData(insertOcl(ocl,parent,name));//插入ocl
+			return result;
+		}
+		
+		//增加下级
+		if("addNext".equals(type)){
+			OrgCategoryLevel parent = this.read(OrgCategoryLevel.class, id);
+			OrgCategoryLevel ocl = new OrgCategoryLevel();
+			ocl.setCategoryName(name);
+			ocl.setCode(code);
+			ocl.setDeleteFlag(false);
+			ocl.setFullName(name);
+			ocl.setImgPath(null);
+			ocl.setParentId(id);
+			TraceUtils.setCreateTrace(ocl);
+			
+			result.setData(insertOcl(ocl,parent,name));
+			return result;
+		}
+		
+		return new Result(false);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/service/impl/CourseService.java b/src/main/java/com/qxueyou/scc/courseware/service/impl/CourseService.java
new file mode 100644
index 0000000..84908e5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/service/impl/CourseService.java
@@ -0,0 +1,326 @@
+package com.qxueyou.scc.courseware.service.impl;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.courseware.service.ICourseService;
+import com.qxueyou.scc.org.model.OrgCategoryLevel;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+
+/**
+ * 项目服务类
+ * 
+ * @author 岩龙
+ * @createtime 2017-10-31
+ */
+@Service
+public class CourseService extends CommonAppService implements ICourseService {
+
+	public List<Map<String, Object>> queryCategoryList() {
+		String hql = "select categoryLevelId as id ,categoryName as name ,parentId as parentId,'category' as iconSkin,'true' as isParent , 'category' as type "
+				+ "from OrgCategoryLevel " + "where parentId is null and deleteFlag is false";
+
+		List<Map<String, Object>> result = findListWithMapByHql(hql, null);
+		// List<OrgCategoryLevel> result = find(hql,
+		// CollectionUtils.newList(categoryId), OrgCategoryLevel.class);
+
+		return result;
+
+	}
+
+	public Result insertCourseCategory(String parentId, String categoryName) {
+		OrgCategoryLevel vo = new OrgCategoryLevel();
+
+		TraceUtils.setCreateTrace(vo);
+		vo.setDeleteFlag(false);
+
+		vo.setParentId(parentId);
+		vo.setCategoryName(categoryName);
+		vo.setOrgId(ClientUtils.getOrgId());
+		vo.setTopOrgId(ClientUtils.getTopOrgId());
+
+		save(vo);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result updateCourseCategory(String categoryId, String categoryName) {
+		OrgCategoryLevel categoryLevel = read(OrgCategoryLevel.class, categoryId);
+
+		TraceUtils.setCreateTrace(categoryLevel);
+		categoryLevel.setCategoryName(categoryName);
+
+		save(categoryLevel);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result deleteCategory(String categoryId) {
+		this.bulkUpdate("update OrgCategoryLevel set deleteFlag is true where categoryLevelId=?",
+				new Object[] { categoryId });
+
+		return new Result(true, "Operation Success");
+	}
+
+	@Override
+	public List<Map<String, Object>> queryCourse(String categoryId) {
+		String hql = "select collegeCourseId as id , name as name ,courseCategoryId as parentId ,'course' as iconSkin,'true' as isParent,'course' as type  "
+				+ " from OrgCollegeCourse" + " where courseCategoryId =:categoryId  and deleteFlag is false";
+
+		return findListWithMapByHql(hql, CollectionUtils.newObjectMap("categoryId", categoryId));
+	}
+
+	@Override
+	public Result insertCourse(String categoryId, String courseName) {
+		OrgCollegeCourse course = new OrgCollegeCourse();
+		TraceUtils.setCreateTrace(course);
+		course.setDeleteFlag(false);
+
+		course.setCourseCategoryId(categoryId);
+		course.setName(courseName);
+		course.setOrganizationId(ClientUtils.getOrgId());
+		course.setTopOrgId(ClientUtils.getTopOrgId());
+		course.setPrice(BigDecimal.ONE);
+
+		save(course);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result updateCourse(String courseId, String courseName) {
+		OrgCollegeCourse course = read(OrgCollegeCourse.class, courseId);
+
+		TraceUtils.setUpdateTrace(course);
+		course.setName(courseName);
+
+		save(course);
+
+		return new Result(true, "Operation Success");
+	}
+
+	@Override
+	public Result deleteCourse(String courseId) {
+
+		this.bulkUpdate("update OrgCollegeCourse set deleteFlag is true where collegeCourseId=?",
+				new Object[] { courseId });
+
+		return new Result(true, "Operation Success");
+	}
+
+	@Override
+	public List<Map<String, Object>> querySubject(String courseId) {
+		String hql = "select subjectId as id ,name as name ,collegeCourseId as parentId ,'subject' as iconSkin,'true' as isParent,'subject' as type"
+				+ " from  SchSubject " + "where collegeCourseId=:courseId and  deleteFlag is false";
+
+		return findListWithMapByHql(hql, CollectionUtils.newObjectMap("courseId", courseId));
+	}
+
+	@Override
+	public Result insertSubject(String courseId, String subjectName) {
+		Subject subject = new Subject();
+
+		TraceUtils.setCreateTrace(subject);
+		subject.setDeleteFlag(false);
+
+		subject.setName(subjectName);
+
+		save(subject);
+
+		return new Result(true, "Operation Success");
+	}
+
+	@Override
+	public Result updateSubject(String subjectId, String subjectName) {
+		Subject subject = read(Subject.class, subjectName);
+
+		TraceUtils.setUpdateTrace(subject);
+		subject.setName(subjectName);
+
+		save(subject);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result deleteSubject(String subjectId) {
+
+		this.bulkUpdate("update SchSubject set deleteFlag is true where subjectId=?", new Object[] { subjectId });
+
+		return new Result(true, "Operation Success");
+	}
+
+	@Override
+	public List<Map<String, Object>> queryChapter(String subjectId) {
+		String hql = "select chapterId as id ,name as name,parentChapterId as parentId,'chapter' as iconSkin,'true' as isParent,'chapter' as type "
+				+ " from SchChapter "
+				+ "where subjectId =:subjectId and parentChapterId is null and deleteFlag is false ";
+
+		// List<SchChapter> result = find(hql,
+		// CollectionUtils.newList(subjectId), SchChapter.class);
+
+		return findListWithMapByHql(hql, CollectionUtils.newObjectMap("subjectId", subjectId));
+	}
+
+	@Override
+	public List<Map<String, Object>> querychildChapter(String id) {
+		String hql = "select chapterId as id ,name as name,parentChapterId as parentId,'section' as iconSkin,'false' as isParent,'section' as type "
+				+ " from SchChapter " + "where parentChapterId =:parentChapterId and deleteFlag is false ";
+
+		return findListWithMapByHql(hql, CollectionUtils.newObjectMap("parentChapterId", id));
+	}
+
+	@Override
+	public Result insertChapter(String subjectId, String chapterId, String chapterName, String courseId) {
+		SubjectChapter chapter = new SubjectChapter();
+
+		TraceUtils.setCreateTrace(chapter);
+		chapter.setDeleteFlag(false);
+
+		chapter.setSubjectId(subjectId);
+		chapter.setParentChapterId(chapterId);
+		chapter.setName(chapterName);
+
+		save(chapter);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result updateChapter(String chapterId, String chapterName) {
+		SubjectChapter schChapter = read(SubjectChapter.class, chapterId);
+
+		TraceUtils.setUpdateTrace(schChapter);
+		schChapter.setName(chapterName);
+
+		save(schChapter);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result deleteChapter(String chapterId) {
+		this.bulkUpdate("update SchChapter set deleteFlag is true where chapterId=?", new Object[] { chapterId });
+
+		return new Result(true, "操作成功!");
+	}
+
+	// 显示有过班级的项目名称
+	@Override
+	public List<Map<String, Object>> queryCourseName() {
+		String hql = "select collegeCourseId as id , name as name  from OrgCollegeCourse where  deleteFlag is false  order by createTime asc";
+
+		return findListWithMapByHql(hql, null);
+	}
+
+	// PC端首页显示有过班级的项目名称
+	@Override
+	public List<Map<String, Object>> findclassNameByCourse(String mode) {
+		String hql = "select  distinct  c.collegeCourseId as id , c.name as name  from OrgCollegeCourse c ,ClsClass o where  o.deleteFlag is false and c.deleteFlag is false and o.collegeCourseId =c.collegeCourseId ";
+
+		Map<String,Object> map =new HashMap<String, Object>();
+		if (mode.equals("0")) {
+			hql = hql.concat(" and o.mode = 0 and o.approveStatus = 4  and o.signupEndTime>:nowDate ");
+			map.put("nowDate", new Date());
+		}
+		if (mode.equals("1")) {
+			hql = hql.concat(" and o.mode = 1 and o.approveStatus = 4 ");
+		}
+		List<Map<String, Object>> lstCourse = findListWithMapByHql(hql, map);
+		return lstCourse;
+	}
+
+	/**
+	 * 删除科目下的项目
+	 * 
+	 * @param categoryId
+	 * @return
+	 */
+	public Result deleteCourseByParentId(String categoryId) {
+		String hql = "from OrgCollegeCourse where courseCategoryId=? and  deleteFlag =false ";
+
+		List<OrgCollegeCourse> list = find(hql, CollectionUtils.newList(categoryId), OrgCollegeCourse.class);
+
+		for (OrgCollegeCourse orgCollegeCourse : list) {
+			TraceUtils.setUpdateTrace(orgCollegeCourse);
+			orgCollegeCourse.setDeleteFlag(true);
+			save(orgCollegeCourse);
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * 删除项目下的课程
+	 * 
+	 * @param courseId
+	 * @return
+	 */
+	public Result deleteSubjectByParentId(String courseId) {
+		String hql = "from SchSubject where collegeCourseId= ? and  deleteFlag = false";
+
+		List<Subject> list = find(hql, CollectionUtils.newList(courseId), Subject.class);
+
+		for (Subject schSubject : list) {
+			TraceUtils.setUpdateTrace(schSubject);
+			schSubject.setDeleteFlag(true);
+			save(schSubject);
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * 删除节
+	 * 
+	 * @param chapterId
+	 * @return
+	 */
+	public Result deleteChapterByParentId(String chapterId) {
+		String hql = "from SchChapter where parentChapterId=? and deleteFlag = false ";
+
+		List<SubjectChapter> list = find(hql, CollectionUtils.newList(chapterId), SubjectChapter.class);
+
+		for (SubjectChapter schChapter : list) {
+			TraceUtils.setUpdateTrace(schChapter);
+			schChapter.setDeleteFlag(true);
+			save(schChapter);
+		}
+
+		return new Result(true);
+
+	}
+
+	/**
+	 * 删除树节点
+	 */
+	public Result deleteNode(String id, String type) {
+		if (type.equals("category")) {
+			return this.deleteCategory(id);
+
+		} else if (type.equals("course")) {
+			return this.deleteCourse(id);
+
+		} else if (type.equals("subject")) {
+			return this.deleteSubject(id);
+
+		} else if (type.equals("chapter") || type.equals("section")) {
+			return this.deleteChapter(id);
+		} else {
+			return new Result(false, "Parameter error");
+		}
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/courseware/service/impl/OrgCourseService.java b/src/main/java/com/qxueyou/scc/courseware/service/impl/OrgCourseService.java
new file mode 100644
index 0000000..c495822
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/courseware/service/impl/OrgCourseService.java
@@ -0,0 +1,268 @@
+package com.qxueyou.scc.courseware.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+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.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.courseware.service.IOrgCourseService;
+import com.qxueyou.scc.org.dao.OrgCourseDAO;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourse;
+import com.qxueyou.scc.org.model.Organization;
+
+@Service
+public class OrgCourseService extends CommonAppService implements
+		IOrgCourseService {
+	
+	@SuppressWarnings("unused")
+	private final Logger log = LogManager.getLogger("OrgCourseService");
+	
+	private OrgCourseDAO orgCourseDAO;
+	
+	public OrgCourseDAO getOrgCourseDAO() {
+		return orgCourseDAO;
+	}
+	
+	/**
+     * 依赖注入
+     *
+     * @param lessonDAO
+     */
+	@Autowired(required = false)
+	public void setOrgCourseDAO(@Qualifier("orgCourseDAO") OrgCourseDAO orgCourseDAO) {
+		this.orgCourseDAO = orgCourseDAO;
+	}
+	
+	/**
+	 * 后台  科目列表
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	public List<OrgCollegeCourse> queryCourseList(String orgId){
+		
+		String sql = " select o.college_course_id as collegeCourseId ,o.course_category_name as courseCategoryName, o.price , o.name, " 
+				   + " concat(s.count_class,'') as classCount " 
+				   + " from org_college_course o left join ( "
+				   + " select  c.college_course_id,count(c.class_id) count_class from org_class c where c.delete_flag = 0 group by c.college_course_id ) "
+				   + " s  on  o.college_course_id = s.college_course_id where o.delete_flag = 0 and o.organization_id = ? order by o.create_time desc " ;
+		
+		return orgCourseDAO.queryCourseList(sql, CollectionUtils.newList(orgId));
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.qxueyou.scc.org.service.IOrgCourseService#insertCourse(com
+	 * .iqtogether.qxueyou.org.model.OrgCourse)
+	 */
+	@Override
+	public Result insertCourse(OrgCollegeCourse course) {
+
+		if(StringUtils.isNotBlank(course.getCollegeCourseId())){ // 编辑
+			String hql = " from ClsClass where collegeCourseId = ? and deleteFlag is false";
+			List<ClsClass> classes = find(hql, CollectionUtils.newList(course.getCollegeCourseId()), ClsClass.class);
+			for (ClsClass orgClass : classes) {
+				orgClass.setCollegeCourseName(course.getName());
+				TraceUtils.setUpdateTrace(orgClass);
+				save(orgClass);
+			}
+			
+			OrgCollegeCourse dbCourse = read(OrgCollegeCourse.class, course.getCollegeCourseId());
+			dbCourse.setContent(course.getContent());
+			dbCourse.setCourseCategoryId(course.getCourseCategoryId());
+			dbCourse.setCourseCategoryName(course.getCourseCategoryName());
+			dbCourse.setImgPath(course.getImgPath());
+			dbCourse.setName(course.getName());
+			dbCourse.setPrice(course.getPrice());
+			dbCourse.setRecommend(course.isRecommend());
+			dbCourse.setTeacher(course.getTeacher());
+			dbCourse.setCourseId(course.getCourseId());
+			dbCourse.setCode(course.getName());//增加设置code
+			TraceUtils.setUpdateTrace(dbCourse);
+			Result result = save(dbCourse);
+			result.setMsg(course.getCollegeCourseId());
+			
+			OrgCollegeCourse occ = new OrgCollegeCourse();
+			occ.setCollegeCourseId(dbCourse.getCollegeCourseId());
+			occ.setName(dbCourse.getName());
+			occ.setCollegeId(dbCourse.getCollegeId());
+			occ.setCode(dbCourse.getCode());
+			occ.setContent(dbCourse.getContent());
+			occ.setCourseCategoryId(dbCourse.getCourseCategoryId());
+			occ.setCourseCategoryName(dbCourse.getCourseCategoryName());
+			occ.setCourseId(dbCourse.getCourseId());
+			occ.setPrice(dbCourse.getPrice());
+			result.setData(occ);
+			return result;
+		}
+		
+		// 设置基本信息
+		TraceUtils.setCreateTrace(course);
+
+		course.setDeleteFlag(false);
+		course.setOrganizationId(ClientUtils.getOrgId());
+		course.setCode(course.getName());
+		course.setCourseId(course.getCourseId());
+		
+		Organization org = read(Organization.class,ClientUtils.getOrgId());
+		course.setTopOrgId(org.getTopOrganizationId());
+		Result result = insert(course);
+		result.setMsg(course.getCollegeCourseId());
+		result.setData(course);
+		
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.qxueyou.scc.org.service.IOrgCourseService#updateCourse(com
+	 * .iqtogether.qxueyou.org.model.OrgCourse)
+	 */
+	@Override
+	public Result updateCourse(OrgCollegeCourse course) {
+
+		// 设置基本信息
+		String hql = " from ClsClass where collegeCourseId = ? and deleteFlag is false";
+		List<ClsClass> classes = find(hql, CollectionUtils.newList(course.getCollegeCourseId()), ClsClass.class);
+		for (ClsClass orgClass : classes) {
+			orgClass.setCollegeCourseName(course.getName());
+			TraceUtils.setUpdateTrace(orgClass);
+			save(orgClass);
+		}
+
+		OrgCollegeCourse dbCourse = read(OrgCollegeCourse.class, course.getCollegeCourseId());
+
+		dbCourse.setContent(course.getContent());
+		dbCourse.setCourseCategoryId(course.getCourseCategoryId());
+		dbCourse.setCourseCategoryName(course.getCourseCategoryName());
+		dbCourse.setImgPath(course.getImgPath());
+		dbCourse.setName(course.getName());
+		dbCourse.setPrice(course.getPrice());
+		dbCourse.setRecommend(course.isRecommend());
+		dbCourse.setTeacher(course.getTeacher());
+		dbCourse.setCourseId(course.getCourseId());
+		//增加设置code
+		dbCourse.setCode(course.getName());
+		TraceUtils.setUpdateTrace(dbCourse);
+		Result result = save(dbCourse);
+		result.setMsg(course.getCollegeCourseId());
+		
+		OrgCollegeCourse occ = new OrgCollegeCourse();
+		occ.setCollegeCourseId(dbCourse.getCollegeCourseId());
+		occ.setName(dbCourse.getName());
+		occ.setCollegeId(dbCourse.getCollegeId());
+		occ.setCode(dbCourse.getCode());
+		occ.setContent(dbCourse.getContent());
+		occ.setCourseCategoryId(dbCourse.getCourseCategoryId());
+		occ.setCourseCategoryName(dbCourse.getCourseCategoryName());
+		occ.setCourseId(dbCourse.getCourseId());
+		occ.setPrice(dbCourse.getPrice());
+		
+		result.setData(occ);
+		return result;
+	}
+
+	/**
+	 * 专业编辑 - 选择科目类别后加载专业列表
+	 * 
+	 * @return
+	 */
+	@Override
+	public List<OrgCourse> loadCourse( String courseCategoryId,String courseId) {
+		
+		// 查询当前机构的专业
+		String hql_coll = "from OrgCollegeCourse where deleteFlag is false and organizationId = ? and courseId is not null";
+		List<OrgCollegeCourse> orgCollLst = find(hql_coll, CollectionUtils.newList(ClientUtils.getOrgId()), OrgCollegeCourse.class);
+		
+		// 过滤掉courseID
+		String courseIds = "";
+		for (int i = 0; i < orgCollLst.size(); i++) {
+			
+			if( StringUtils.isNotBlank(courseId) && courseId.equals(orgCollLst.get(i).getCourseId())){
+				continue;
+			}
+			courseIds = courseIds.concat(orgCollLst.get(i).getCourseId()).concat(",");
+			
+		}
+		
+		// 根据选择的科目ID查询专业ID
+		String hql = "from OrgCourse where deleteFlag is false and courseCategoryId = ? ";
+		List<OrgCourse> orgCourse = find(hql, CollectionUtils.newList(courseCategoryId), OrgCourse.class);
+		
+		// 过滤当前机构已经添加的专业列表
+		List<OrgCourse> orgCourseLst = new ArrayList<OrgCourse>(orgCourse.size());
+		for (OrgCourse course : orgCourse) {
+			if(!ArrayUtils.contains(courseIds.split(","), course.getCourseId())){
+				orgCourseLst.add(course);
+			}
+		}
+		
+		return orgCourseLst;
+	}
+
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.qxueyou.scc.org.service.IOrgCourseService#deleteCourses(java.lang.String[])
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public Result deleteCourses(String[] courseIds) {
+
+		getCommonDAO().bulkUpdateInLoop(
+				"update OrgCollegeCourse set deleteFlag = true where collegeCourseId = ?",
+				courseIds);
+		
+		//发送消息异步维护科目关联关系
+		for(String courseId:courseIds){
+//			sendUpdateCourseRelationMsg(courseId);
+		}
+
+		return new Result(true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.qxueyou.scc.org.service.IOrgCourseService#doRecommend(java.lang.String[])
+	 */
+	@Override
+	public Result doRecommend(String[] courseIds) {
+		getCommonDAO().bulkUpdateInLoop(
+				"update OrgCourse set recommend = true where courseId = ?",
+				courseIds);
+
+		return new Result(true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.qxueyou.scc.org.service.IOrgCourseService#doUnRecommend(java.lang.String[])
+	 */
+	@Override
+	public Result doUnRecommend(String[] courseIds) {
+		getCommonDAO().bulkUpdateInLoop(
+				"update OrgCourse set recommend = false where courseId = ?",
+				courseIds);
+
+		return new Result(true);
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/evaluate/action/EvaluateTemplateController.java b/src/main/java/com/qxueyou/scc/evaluate/action/EvaluateTemplateController.java
new file mode 100644
index 0000000..2cef816
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/evaluate/action/EvaluateTemplateController.java
@@ -0,0 +1,135 @@
+package com.qxueyou.scc.evaluate.action;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.evaluate.service.IEvaluateTemplateService;
+import com.qxueyou.scc.exercise.model.ExerciseItemScore;
+import com.qxueyou.scc.school.model.SchEvaluateTemplate;
+
+/**
+ * 评分模板控制器,基本和练习一致
+ * @author Ody.yuan
+ *
+ */
+@Controller
+@RequestMapping(value = "/evaluateTemplate")
+public class EvaluateTemplateController {
+	
+//	private Logger log = LogManager.getLogger("EvaluateTemplateController");
+	
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	@Autowired
+	private IEvaluateTemplateService evaluateTemplateService;
+	
+	/**
+	 * 评估模板主页
+	 * 
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	public String listPage() {
+		return "/school/EvaluateTemplate";
+	}
+	
+	/**
+	 * 后台
+	 * 评估模板列表,获取列表数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody List<SchEvaluateTemplate> data(String evalRangeType) {
+		
+		String hql = "from SchEvaluateTemplate where ORG_ID=? ";
+		hql = hql.concat("and deleteFlag is false order by createTime desc  ");
+		
+		List<SchEvaluateTemplate> result = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getOrgId()), SchEvaluateTemplate.class);
+		
+		return result;
+	}
+	
+	/**
+	 * 删除评估模板
+	 * 
+	 * @return
+	 */
+	
+	@RequestMapping(value = "delete", method = RequestMethod.POST)
+	@ResponseBody
+	public Result delete(String groupId,String templateId) {
+		int iCount = this.commonDAO.findCount("from SchEvaluate s where s.evalTemplateId = ? and s.deleteFlag is false", CollectionUtils.newList(templateId));
+		if(iCount > 0){
+			return new Result(false, "有问卷正在使用此模板,不能删除!");
+		}
+		return evaluateTemplateService.deleteEvaluateTemplate(groupId,templateId);
+	}
+	
+	/**
+	 * 查询模板是否添加了问卷
+	 * 
+	 * @param templateId
+	 * @return
+	 */
+	@RequestMapping(value = "validateTemplate", method = RequestMethod.GET)
+	@ResponseBody
+	public Result validateTemplate(String templateId) {
+		int iCount = this.commonDAO.findCount("from SchEvaluate s where s.evalTemplateId = ? and s.deleteFlag is false", CollectionUtils.newList(templateId));
+		return new Result(iCount>0);
+	}
+	
+	
+	/**
+	 * 获取评分标准
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "score/{exerciseId}", method = RequestMethod.GET)
+	public @ResponseBody List<ExerciseItemScore> queryExerciseScore(@PathVariable String exerciseId) {
+		
+		String hql = "from ExerciseItemScore where exerciseItemId = ? and deleteFlag is false";
+		
+		List<ExerciseItemScore> scores = commonDAO.find(hql, CollectionUtils.newList(exerciseId), ExerciseItemScore.class);
+		
+		return scores;
+	}
+	
+	/**
+	 * 获取评分标准
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "score/delete", method = RequestMethod.POST)
+	@ResponseBody 
+	public Result deleteExerciseScore(String exerciseScoreId) {
+			
+		String hql = "update ExerciseItemScore set deleteFlag = true where exerciseItemScoreId = ?";
+		
+		return  this.commonDAO.bulkUpdateInLoop(hql, exerciseScoreId.split(","));
+		
+	}
+	
+	/**
+	 * 编辑模板
+	 * 
+	 * @param evaluateTemplateId
+	 * @return
+	 */
+	@RequestMapping(value = "read", method = RequestMethod.GET)
+	public @ResponseBody Result read(String evaluateTemplateId) {
+		return new Result(true, "", this.commonDAO.read(SchEvaluateTemplate.class, evaluateTemplateId));
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/evaluate/dao/EvaluateRepository.java b/src/main/java/com/qxueyou/scc/evaluate/dao/EvaluateRepository.java
new file mode 100644
index 0000000..d9cdacb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/evaluate/dao/EvaluateRepository.java
@@ -0,0 +1,17 @@
+package com.qxueyou.scc.evaluate.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.service.IBaseJpaRepository;
+import com.qxueyou.scc.school.model.SchEvaluate;
+
+/**
+ * 评估
+ * @author zhiyong
+ *
+ */
+@Repository
+public interface EvaluateRepository extends IBaseJpaRepository<SchEvaluate>{
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateService.java b/src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateService.java
new file mode 100644
index 0000000..fe3b7cf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateService.java
@@ -0,0 +1,122 @@
+package com.qxueyou.scc.evaluate.service;
+
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.ResultJson;
+import com.qxueyou.scc.school.model.SchEvaluate;
+import com.qxueyou.scc.school.model.TeachEvaScoreResult;
+
+public interface IEvaluateService {
+	
+	/**
+	 * 查询列表数据
+	 * @param pageNum
+	 * @param pageSize
+	 * @return
+	 */
+	ResultJson queryList(Integer pageNum, Integer pageSize, String keyword, String sort);
+	
+	/**
+	 * 获取范围选择
+	 * 
+	 * type:   lesson:课程  class:班级     person:人员
+	 * 
+	 * @return
+	 */
+	ResultJson queryRangeList(String type,String searchName);
+	
+	/**
+	 * 后台新增评估
+	 * @param eva
+	 * @return
+	 */
+	ResultJson addOrUpdateEvaluate(SchEvaluate eva);
+	
+	/**
+	 * 获取基本信息
+	 * @param eva
+	 * @return
+	 */
+	ResultJson queryBaseInfo(String evaluateId);
+	
+	/**
+	 * 删除
+	 * @param evaluateIds
+	 * @return
+	 */
+	ResultJson delete(String evaluateIds);
+	
+	/**
+	 * 激活
+	 * @param evaluateIds
+	 * @return
+	 */
+	ResultJson doActive(String evaluateIds);
+	
+	/**
+	 * 撤回
+	 * @param evaluateIds
+	 * @return
+	 */
+	ResultJson doWithdraw(String evaluateIds);
+	
+	/**
+	 * 复制
+	 * @param evaluateIds
+	 * @return
+	 */
+	ResultJson doCopy(SchEvaluate eva);
+	
+	/**
+	 *  查看结果  问卷整体情况
+	 * @param evaluateId
+	 * @param groupId
+	 * @param evalRangeType
+	 * @return
+	 */
+	ResultJson queryEvaluateDetail(String evaluateId,String groupId);
+	
+	/**
+	 * 查询问卷统计
+	 * @param groupId
+	 * @param evaluateId
+	 * @return
+	 */
+	ResultJson queryEvaluateStatis(String groupId,String evaluateId);
+	
+	/**
+	 * 微信端提交答案
+	 * @param score
+	 * @return
+	 */
+	ResultJson doSubmitTeachEvalScoreData(TeachEvaScoreResult scoreResult, String userId);
+	
+	
+	/**
+	 * 查询学生评估list
+	 * @return
+	 */
+	ResultJson queryStuEvaluateList(Pager pager);
+	
+	
+	/**
+	 * 获取评估题目(新接口)
+	 * @param templateId
+	 * @return
+	 */
+	ResultJson doGetEvalExerItemResponseDataNew(String evaluateId);
+	
+	/**
+	 * 查询学生评估count
+	 * @return
+	 */
+	public Map<String, Object> queryStuEvaluateCount();
+	
+	/**
+	 * 更新评估表记录
+	 * @return
+	 */
+	public SchEvaluate updateEvaluateCount(String evaluateId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateTemplateService.java b/src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateTemplateService.java
new file mode 100644
index 0000000..d942c35
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateTemplateService.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.evaluate.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchEvaluateTemplate;
+
+public interface IEvaluateTemplateService {
+	
+	/**
+	 * 新增评估模板
+	 * @param name
+	 * @return
+	 */
+	public abstract String insertEvaluateTemplate(SchEvaluateTemplate schEvaluateTemplate);
+	
+	
+	/**
+	 * 删除评估模板
+	 * @param ids
+	 * @param templateId
+	 * @return
+	 */
+	public abstract Result deleteEvaluateTemplate(String ids,String templateId);
+	
+	/**
+	 * 增加评分标准
+	 * @param exerciseId
+	 * @param type
+	 * @param lstScore
+	 * @return
+	 */
+	public abstract Result insertExerciseScore(String exerciseId,short type,List<String> lstScore,String scoreAnswer, String exerciseItemScoreId);
+	
+	/**
+	 * 批量删除ExerciseGroup,删除逻辑
+	 * @param groupId 主键,
+	 * @return
+	 */
+	public  Result deleteExerciseGroup(String groupId);
+}
diff --git a/src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateService.java b/src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateService.java
new file mode 100644
index 0000000..bb89a25
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateService.java
@@ -0,0 +1,1108 @@
+package com.qxueyou.scc.evaluate.service.impl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.querydsl.core.QueryResults;
+import com.querydsl.core.Tuple;
+import com.querydsl.core.types.Predicate;
+import com.qxueyou.scc.admin.classes.model.QClsClass;
+import com.qxueyou.scc.admin.classes.model.QClsClassReSubject;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.ResultJson;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QueryDslOptionBuilder;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.evaluate.dao.EvaluateRepository;
+import com.qxueyou.scc.evaluate.service.IEvaluateService;
+import com.qxueyou.scc.evaluate.service.IEvaluateTemplateService;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemScore;
+import com.qxueyou.scc.exercise.model.ExerciseObjectImg;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.QExerciseGroup;
+import com.qxueyou.scc.exercise.model.QExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.QExerciseRecord;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.exercise.util.ExerciseUtils;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.school.model.EvaluateStuStudentV;
+import com.qxueyou.scc.school.model.QEvaluateStuStudentV;
+import com.qxueyou.scc.school.model.QSchEvaRecordRe;
+import com.qxueyou.scc.school.model.QSchEvaluate;
+import com.qxueyou.scc.school.model.QSchEvaluateTemplate;
+import com.qxueyou.scc.school.model.SchEvaRecordRe;
+import com.qxueyou.scc.school.model.SchEvaluate;
+import com.qxueyou.scc.school.model.SchEvaluateDetail;
+import com.qxueyou.scc.school.model.SchEvaluateTemplate;
+import com.qxueyou.scc.school.model.TeachEvaScoreData;
+import com.qxueyou.scc.school.model.TeachEvaScoreResult;
+import com.qxueyou.scc.teach.student.model.QStuStudent;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.subject.model.QSubject;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.user.model.QUser;
+
+@Service
+public class EvaluateService extends CommonAppService implements IEvaluateService {
+	
+	private final Logger log = LogManager.getLogger(EvaluateService.class);
+	
+	@Autowired
+	EvaluateRepository evaRepository;
+	
+	@Autowired
+	IEvaluateTemplateService templateService;
+	
+	@Autowired
+	ITeacherService teacherService;
+	
+	@Autowired
+	IExerciseService exerciseService;
+	
+	@Autowired
+	IMsgInfoService msgInfoService;
+
+	/**
+	 * 查询列表数据
+	 * @param pageNum
+	 * @param pageSize
+	 * @return
+	 */
+	@Override
+	public ResultJson queryList(Integer pageNum, Integer pageSize, String keyword, String sort) {
+		
+		QSchEvaluate qEva = QSchEvaluate.schEvaluate;
+		QSchEvaluateTemplate template = QSchEvaluateTemplate.schEvaluateTemplate;
+		QExerciseGroup group = QExerciseGroup.exerciseGroup;
+		QSubject subject = QSubject.subject;
+		
+		// 搜索名
+		keyword = StringUtils.isBlank(keyword) ? null : "%"+keyword+"%";
+		
+		// 获取查询结果集合
+		QueryResults<Tuple> results = this.getQueryFactory()
+			.select(qEva, group,subject)
+			.from(qEva, template, group,subject)
+			.where(new QueryDslOptionBuilder()
+					.and(qEva.evalTemplateId::eq, template.evaluateTemplateId)
+					.and(template.groupId::eq,group.groupId)
+					.and(qEva.evalRangeId::eq,subject.subjectId)
+					.and(qEva.createId::eq,ClientUtils.getUserId())
+					.and(qEva.evaluateName::like, keyword)
+					.and(qEva.deleteFlag::eq,false)
+					.build()
+					)
+			.orderBy(qEva.createTime.desc())
+			.fetchResults();
+		
+		// 封装参数
+		List<Map<String,Object>> resultLst = 
+				results.getResults()
+				.stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(2);
+			    	map.put("evaluateId", tuple.get(qEva).getEvaluateId());
+			    	map.put("evaluateName", tuple.get(qEva).getEvaluateName());
+			    	map.put("evalRangeId", tuple.get(qEva).getEvalRangeId());
+			    	map.put("evalRangeType", tuple.get(qEva).getEvalRangeType());
+			    	map.put("evalRangeName", tuple.get(subject).getName());
+			    	map.put("evalRangeCount", tuple.get(qEva).getEvalRangeCount());
+			    	map.put("evalObjectName", tuple.get(qEva).getEvalObjectName());
+			    	map.put("status", tuple.get(qEva).getStatus());
+			    	map.put("endTime", tuple.get(qEva).getEndTime());
+			    	map.put("createTime", tuple.get(qEva).getCreateTime());
+			    	map.put("groupId",  tuple.get(group).getGroupId());
+			    	map.put("exerCount",  tuple.get(group).getAllCount());
+			    	map.put("evaluateCount",  this.getEvaluateCount(tuple.get(qEva).getEvaluateId()));//已评估人数
+			    	map.put("evaluateAllCount",  this
+							.queryEvaluateAllCount(tuple.get(qEva).getEvalRangeType(), tuple.get(qEva).getEvalRangeId().split(",")));//应评估人数
+			    	return map;
+			    }).collect(Collectors.toList());
+		
+		
+		return new ResultJson(true, "success", 
+				CollectionUtils.newObjectMap("allCount",results.getTotal(),"datas",resultLst));
+	}
+
+	/**
+	 * 获取范围选择
+	 * 
+	 * type:   lesson:课程  class:班级     person:人员
+	 * 
+	 * @return
+	 */
+	@Override
+	public ResultJson queryRangeList(String type,String searchName) {
+		
+		List<Tuple> tupleLst = null;
+		// 搜索名
+		searchName = StringUtils.isBlank(searchName) ? null : "%"+searchName+"%";
+		
+		if(ClientUtils.isAdmin()){// 管理员
+			
+			tupleLst = getAdminRangeList(type,searchName);
+		}else{// 老师
+			
+			tupleLst = getTeacherRangeList(type,searchName);
+		}
+		
+		// 统一处理返回数据
+		List<Map<String,Object>> resultLst = tupleLst.stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(2);
+			    	map.put("name", tuple.get(0, String.class));
+			    	map.put("id",  tuple.get(1, String.class));
+			    	return map;
+			    }).collect(Collectors.toList());
+		
+		return new ResultJson(true, "success", resultLst);
+	}
+
+	/**
+	 * 获取管理员范围选择
+	 * @param type
+	 * @return
+	 */
+	private List<Tuple> getAdminRangeList(String type,String searchName){
+		QSubject subject = QSubject.subject;
+		QClsClass cls = QClsClass.clsClass;
+		QUser user = QUser.user;
+		List<Tuple> tupleLst = null;
+		
+		if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程
+			
+			tupleLst = this.getQueryFactory().select(subject.name.as("name"),subject.subjectId.as("id")).distinct()
+			    .from(subject)
+			    .where(subject.type.eq(Subject.TYPE_ORG_SUBJECT)
+						.and(subject.status.eq(Subject.STATUS_ISSUED))
+						.and(subject.origSubjectId.isNull())
+						.and(subject.deleteFlag.isFalse()))
+			    .orderBy(subject.createTime.desc())
+			    .fetch();
+			
+		}else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级
+			
+			tupleLst = this.getQueryFactory().select(cls.name.as("name"),cls.classId.as("id")).distinct()
+				    .from(cls)
+				    .where( new QueryDslOptionBuilder()
+							.and(cls.name::like, searchName)
+							.and(cls.deleteFlag::eq, false)
+							.build())
+				    .orderBy(cls.createTime.desc())
+				    .fetch();
+		}else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员
+			QStuStudent stu = QStuStudent.stuStudent;
+
+			tupleLst = this.getQueryFactory().select(user.name.as("name"),user.userId.as("id")).distinct()
+				    .from(stu, user)
+				    .where(new QueryDslOptionBuilder()
+							.and(stu.name::like, searchName)
+							.and(stu.deleteFlag::eq, false).and(user.userId::eq, stu.userId).and(user.deleteFlag::eq, false)
+							.and(stu.status::eq, StuStudent.STATUS_ACTIVE)
+							.build())
+				    .orderBy(stu.createTime.desc())
+				    .fetch();
+		}
+		
+		return tupleLst;
+	}
+	
+	/**
+	 * 	获取老师范围选择
+	 * @param type
+	 * @return
+	 */
+	private List<Tuple> getTeacherRangeList(String type,String searchName){
+		QSubject subject = QSubject.subject;
+		QClsClassReSubject re = QClsClassReSubject.clsClassReSubject;
+		QClsClass cls = QClsClass.clsClass;
+		
+		List<Tuple> tupleLst = null;
+		String teacherId =  teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+		
+		if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程
+			
+			tupleLst = this.getQueryFactory().select(subject.name.as("name"),subject.subjectId.as("id")).distinct()
+				    .from(subject)
+				    .where(subject.createId.eq(ClientUtils.getUserId())
+							.and(subject.type.eq(Subject.TYPE_ORG_SUBJECT))
+							.and(subject.status.eq(Subject.STATUS_ISSUED))
+							.and(subject.origSubjectId.isNull())
+							.and(subject.deleteFlag.isFalse()))
+				    .orderBy(subject.createTime.desc())
+				    .fetch();
+			
+		}else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级
+			
+			tupleLst = this.getQueryFactory().select(cls.name.as("name"),cls.classId.as("id")).distinct()
+				    .from(subject, re, cls)
+				    .where(new QueryDslOptionBuilder()
+							.and(subject.subjectId::eq, re.subjectId)
+							.and(re.classId::eq, cls.classId)
+							.and(subject.teacherId::eq, teacherId)
+							.and(subject.name::like, searchName)
+							.and(subject.status::eq, Subject.STATUS_ISSUED)
+							.and(subject.deleteFlag::eq, false)
+							.and(cls.deleteFlag::eq, false)
+							.build()).groupBy(cls.classId)
+				    .orderBy(subject.createTime.desc())
+				    .fetch();
+			
+		}else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员
+			QStuStudent stu = QStuStudent.stuStudent;
+			
+			tupleLst = this.getQueryFactory().select(stu.name.as("name"),stu.userId.as("id")).distinct()
+				    .from(stu,cls,subject, re)
+				    .where(new QueryDslOptionBuilder()
+							.and(stu.classId::like, cls.classId)
+							.and(stu.status::eq, StuStudent.STATUS_ACTIVE)
+							.and(stu.name::like, searchName)
+							.and(stu.deleteFlag::eq, false)
+							.and(subject.subjectId::eq, re.subjectId)
+							.and(re.classId::eq, cls.classId)
+							.and(subject.teacherId::eq, teacherId)
+							.and(subject.name::like, searchName)
+							.and(subject.status::eq, Subject.STATUS_ISSUED)
+							.and(subject.deleteFlag::eq, false)
+							.and(cls.deleteFlag::eq, false)
+							.build()
+							).groupBy(stu.userId)
+				    .orderBy(stu.createTime.desc())
+				    .fetch();
+		}
+		
+		return tupleLst;
+	}
+
+	/**
+	 * 后台新增评估
+	 * @param eva
+	 * @return
+	 */
+	@Override
+	public ResultJson addOrUpdateEvaluate(SchEvaluate eva) {
+		String evaluateId = eva.getEvaluateId();
+		String groupId = null;
+		if(StringUtils.isBlank(evaluateId)){// 新增
+			//1、插入组
+			ExerciseGroup obj = this.insertExerciseGroup(eva.getEvaluateName(),
+					ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE);
+			
+			//2、插入评估模板
+			SchEvaluateTemplate objTemplate = new SchEvaluateTemplate();
+			TraceUtils.setCreateTrace(objTemplate);
+			objTemplate.setEvaluateTemplateName(eva.getEvaluateName());
+			objTemplate.setGroup_name(obj.getName());
+			objTemplate.setGroupId(obj.getGroupId());
+			objTemplate.setOrgId(ClientUtils.getOrgId());
+			objTemplate.setOrgName(ClientUtils.getOrgName());
+			this.save(objTemplate);
+			
+			// 3、插入评估表
+			eva.setEvalTemplateId(objTemplate.getEvaluateTemplateId());
+			eva.setEvalTemplateName(objTemplate.getEvaluateTemplateName());
+			eva.setEvaluateCount(BigInteger.ZERO);
+			eva.setScore(BigDecimal.ZERO);
+			eva.setStatus((short)0);
+			eva.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(eva);
+			evaRepository.save(eva);
+			
+			evaluateId = eva.getEvaluateId();
+			groupId = obj.getGroupId();
+		}else{// 编辑
+			SchEvaluate newEva = this.read(SchEvaluate.class, eva.getEvaluateId());
+			
+			newEva.setEvaluateName(eva.getEvaluateName());
+			newEva.setEvalObjectName(eva.getEvalObjectName());
+			newEva.setEndTime(eva.getEndTime());
+			newEva.setEvalRangeType(eva.getEvalRangeType());
+			newEva.setEvalRangeId(eva.getEvalRangeId());
+			newEva.setEvalRangeName(eva.getEvalRangeName());
+			TraceUtils.setUpdateTrace(newEva);
+			evaRepository.save(newEva);
+		}
+		
+		return new ResultJson(true, "success", CollectionUtils.newObjectMap("evaluateId", evaluateId, "groupId", groupId));
+	}
+	
+	/**
+	 * :后台 插入评估模板时调用
+	 * 
+	 * @param name
+	 * @param type
+	 * @return
+	 */
+	public ExerciseGroup insertExerciseGroup(String name, short type) {
+
+		ExerciseGroup obj = new ExerciseGroup();
+		TraceUtils.setCreateTrace(obj);
+		obj.setName(name);
+		obj.setType(type);
+		obj.setClassId(ClientUtils.getClassId());
+		obj.setOrgId(ClientUtils.getOrgId());
+		obj.setAllCount(BigInteger.ZERO);
+		this.save(obj);
+
+		// 保存
+		return obj;
+	}
+
+	/**
+	 * 查询基本信息
+	 */
+	@Override
+	public ResultJson queryBaseInfo(String evaluateId) {
+		
+		SchEvaluate eva = evaRepository.getOne(evaluateId);
+		QSchEvaluate qEva = QSchEvaluate.schEvaluate;
+		QSchEvaluateTemplate template = QSchEvaluateTemplate.schEvaluateTemplate;
+		QExerciseGroup group = QExerciseGroup.exerciseGroup;
+		
+		// 获取查询结果集合
+		ExerciseGroup g = this.getQueryFactory()
+			.select(group)
+			.from(qEva, template, group)
+			.where(new QueryDslOptionBuilder()
+					.and(qEva.evalTemplateId::eq, template.evaluateTemplateId)
+					.and(template.groupId::eq,group.groupId)
+					.and(qEva.evaluateId::eq,evaluateId)
+					.and(qEva.deleteFlag::eq,false)
+					.build()
+					)
+			.fetchOne();
+		
+		return new ResultJson(true, "success", 
+				CollectionUtils.newObjectMap("evaluateName",eva.getEvaluateName(),
+					"evaluateId",eva.getEvaluateId(),
+					"evalObjectName",eva.getEvalObjectName(),
+					"endTime",eva.getEndTime(),
+					"createTime",eva.getCreateTime(),
+					"evalRangeType",eva.getEvalRangeType(),
+					"evaluateCount",g.getAllCount(),
+					"evalRangeId",eva.getEvalRangeId(),
+					"evalRangeName",eva.getEvalRangeName()));
+	}
+	
+	/**
+	 * 删除
+	 */
+	@Override
+	public ResultJson delete(String evaluateIds){
+		QSchEvaluate qEva = QSchEvaluate.schEvaluate;
+		
+		this.getQueryFactory()
+		.update(qEva)
+		.set(qEva.deleteFlag, true)
+		.where(qEva.evaluateId.in(evaluateIds.split(",")))
+		.execute();
+		
+		return new ResultJson(true, "success");
+	}
+	
+	/**
+	 * 激活
+	 */
+	@Override
+	public ResultJson doActive(String evaluateIds){
+		
+		QSchEvaluate qEva = QSchEvaluate.schEvaluate;
+		
+		 this.getQueryFactory()
+		 .update(qEva)
+		 .set(qEva.status, SchEvaluate.STATUS_EVA)
+		 .where(qEva.evaluateId.in(evaluateIds.split(",")))
+		 .execute();
+		 
+		if(StringUtils.isNotEmpty(evaluateIds)){
+			String []  arrIds = evaluateIds.split(",");
+			for(String evaluateId:arrIds){
+				this.doSendhMsg(evaluateId);
+			}
+		}
+		 
+		return new ResultJson(true, "success");
+	}
+	
+	//发布消息
+    private void doSendhMsg(String evaluateId){
+    	SchEvaluate  evaluate = this.read(SchEvaluate.class,evaluateId);
+    	
+    	List<Map<String,Object>> lst=  this.queryNotAnswerEvaLst(evaluateId,  new ArrayList<String>(1));
+    	
+    	List<String> lstUserIds = null;
+    	if(lst!=null && lst.size()>0){
+    		lstUserIds = new ArrayList<String>(lst.size());
+    		for(Map<String,Object> map:lst){
+    			lstUserIds.add((String)map.get("userId"));
+    		}
+    		
+    		Map<String,String> attrs = CollectionUtils.newStringMap("evaluateId",evaluate.getEvaluateId(),"evaluateName",evaluate.getEvaluateName(),
+					"templateId",evaluate.getEvalTemplateId(),"evalRangeName",evaluate.getEvalRangeName(),"creator",evaluate.getCreator());
+    		
+    		msgInfoService.doSendTextMsgToUsersLoop(lstUserIds, MsgInfo.TYPE_EVALUATE, "发布了问卷调查", attrs);
+    	}
+	}
+	
+	/**
+	 *回退
+	 */
+	@Override
+	public ResultJson doWithdraw(String evaluateIds){
+		QSchEvaluate qEva = QSchEvaluate.schEvaluate;
+		
+		this.getQueryFactory()
+		 .update(qEva)
+		 .set(qEva.status, SchEvaluate.STATUS_NOT_EVA)
+		 .where(qEva.evaluateId.in(evaluateIds.split(",")))
+		 .execute();
+		
+		return new ResultJson(true, "success");
+	}
+	
+	/**
+	 * 复制
+	 */
+	@Override
+	public ResultJson doCopy(SchEvaluate eva){
+		try {
+			SchEvaluate schEva = evaRepository.getOne(eva.getEvaluateId());
+			SchEvaluateTemplate oldTemplate = this.read(SchEvaluateTemplate.class, schEva.getEvalTemplateId());
+			
+			// 1、生成习题组
+			String newGroupId = exerciseService.doCopyExerciseByEvaluate(oldTemplate.getGroupId());
+			
+			// 2、生成模板
+			SchEvaluateTemplate newTemplate = new SchEvaluateTemplate();
+			
+			BeanUtils.copyProperties(newTemplate, oldTemplate);
+			newTemplate.setEvaluateTemplateId(null);
+			newTemplate.setGroupId(newGroupId);
+			TraceUtils.setCreateTrace(newTemplate);
+			this.save(newTemplate);
+		
+			// 3、生成评估表
+			SchEvaluate newEva = new SchEvaluate();
+			BeanUtils.copyProperties(newEva, eva);
+			newEva.setEvaluateId(null);
+			newEva.setEvalTemplateId(newTemplate.getEvaluateTemplateId());
+			newEva.setEvalTemplateName(newTemplate.getEvaluateTemplateName());
+			newEva.setEvaluateCount(BigInteger.ZERO);
+			newEva.setScore(BigDecimal.ZERO);
+			newEva.setStatus((short)0);
+			newEva.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(newEva);
+			this.save(newEva);
+			
+			return new ResultJson(true, "success", CollectionUtils.newObjectMap("evaluateId", newEva.getEvaluateId(), "groupId", newGroupId));
+			
+		} catch (Exception e) {
+			log.error("doCopy评估复制:复制练习BeanUtils.copyProperties()方法copy失败", e);
+		}
+		
+		return new ResultJson(false);
+	}
+	
+	/**
+	 *  查看结果  问卷整体情况
+	 * @param evaluateId
+	 * @param groupId
+	 * @param evalRangeType
+	 * @return
+	 */
+	@Override
+	public ResultJson queryEvaluateDetail(String evaluateId,String groupId){
+		
+		// 1、查询已提交问卷list
+		List<Map<String, Object>> answerUserLst = queryAnswerEvaLst(evaluateId);
+		
+		// 已经答题过的学员id
+		List<String> userAnswerList = new ArrayList<String>(answerUserLst.size());
+		for(Map<String,Object> map:answerUserLst){
+			userAnswerList.add(String.valueOf(map.get("userId")));
+		}
+		
+		// 2、查询未提交答案list
+		List<Map<String,Object>> notAnswerUserLst = this.queryNotAnswerEvaLst(evaluateId, userAnswerList);
+		
+		
+		return new ResultJson(true, "success", 
+				CollectionUtils.newObjectMap("answerUserLst",answerUserLst,
+						"notAnswerUserLst",notAnswerUserLst));
+	}
+
+	/**
+	 *  查询已答题的学员list
+	 * @param evaluateId
+	 * @return
+	 */
+	private List<Map<String, Object>> queryAnswerEvaLst(String evaluateId) {
+		
+		QExerciseRecord record = QExerciseRecord.exerciseRecord;
+		QSchEvaRecordRe reEva = QSchEvaRecordRe.schEvaRecordRe;
+		
+		List<Map<String,Object>> answerUserLst = this.getQueryFactory()
+				.select(record).from(record, reEva)
+				.where(record.recordId.eq(reEva.exerciseRecordId)
+					.and(reEva.evaluateId.eq(evaluateId))
+					.and(record.deleteFlag.eq(false)))
+				.orderBy(record.submitTime.desc())
+				.fetch()
+				.stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(4);
+			    	map.put("recordId", tuple.getRecordId());
+			    	map.put("userId", tuple.getUserId());
+			    	map.put("userName", tuple.getUserName());
+			    	map.put("submitTime", tuple.getSubmitTime());
+			    	return map;
+			    }).collect(Collectors.toList());
+		
+		return answerUserLst;
+	}
+	
+	/**
+	 * 查询未答题的学员list
+	 * @param rangeType
+	 * @param evalRangeIds
+	 * @param userAnswerList
+	 * @return
+	 */
+	private List<Map<String,Object>> queryNotAnswerEvaLst(String evaluateId,List<String> userAnswerList ){
+		
+		SchEvaluate eva = this.read(SchEvaluate.class, evaluateId);
+		String[] evalRangeIds = eva.getEvalRangeId().split(",");
+		String rangeType = eva.getEvalRangeType();
+		
+		QClsClassReSubject re = QClsClassReSubject.clsClassReSubject;
+		QStuStudent stu = QStuStudent.stuStudent;
+		QSubject qSubject = QSubject.subject;
+		
+		Predicate predicate = null;
+		if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程
+			
+			predicate = stu.classId.in(getQueryFactory().select(re.classId).from(re,qSubject)
+					.where(qSubject.origSubjectId.in(evalRangeIds).and(re.subjectId.eq(qSubject.subjectId))
+							.and(qSubject.deleteFlag.isFalse()).and(re.deleteFlag.eq(false))));
+		}else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级
+			
+			predicate = stu.classId.in(evalRangeIds);
+		}else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员
+			
+			predicate = stu.userId.in(evalRangeIds);
+		}
+		
+		List<Map<String,Object>> notAnswerUserLst = this.getQueryFactory().select(stu.userId, stu.name).distinct()
+			    .from(stu)
+			    .where(stu.userId.notIn(userAnswerList)// 过滤掉已经答题过的学员
+			    		.and(stu.deleteFlag.eq(false))
+			    		.and(predicate))
+			    .orderBy(stu.createTime.desc())
+			    .fetch()
+				.stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(4);
+			    	map.put("recordId", null);
+			    	map.put("userId", tuple.get(0,String.class));
+			    	map.put("userName", tuple.get(1,String.class));
+			    	map.put("submitTime", null);
+			    	return map;
+			    }).collect(Collectors.toList());
+			    
+		return notAnswerUserLst;
+	}
+	
+	
+	/**  ------前端       ---------------------------start------------------------------------------------------------------ */
+	
+	/**
+	 * 提交答案
+	 * @param score
+	 * @return
+	 */
+	@Override
+	public ResultJson doSubmitTeachEvalScoreData(TeachEvaScoreResult scoreResult, String userId) {
+		
+		List<TeachEvaScoreData> lstScore = scoreResult.getItems();
+		String evaluateId = scoreResult.getEvaluateId();
+		
+		// 1.操作ExerciseRecord做题记录
+		ExerciseRecord record = this.doOperExerciseRecord(scoreResult);
+		
+		if(null == record){
+			return new ResultJson(false,"您已经提交,不能重复提交");
+		}
+		String exerciseRecordId = record.getRecordId();
+		
+		if(!scoreResult.getItems().isEmpty()){
+			// 2.记录练习答案  ExerciseItemAnswerU
+			this.doOperExerciseItemAnswerUBatch(lstScore, exerciseRecordId);
+		}
+		
+		// 3.插入评估记录关联表
+		this.doOperSchEvaRecordRe(exerciseRecordId, evaluateId);
+		
+		// 4.更新评估表的完成人数
+		SchEvaluate eval = this.updateEvaluateCount(evaluateId);
+		
+		if(!scoreResult.getItems().isEmpty()){
+			// 5.插入评估明细表
+			this.insertEvaluateDetailBatch(lstScore,evaluateId);
+		}
+		
+		return new ResultJson(true, "操作成功", 
+				CollectionUtils.newObjectMap("doNumber", eval.getEvaluateCount(), "recordId", exerciseRecordId));
+	}
+	
+	
+	/**
+	 * 操作本次做题记录
+	 * @return
+	 */
+	public ExerciseRecord doOperExerciseRecord(TeachEvaScoreResult scoreResult) {
+		
+		String hql = "select count(r.recordId) from SchEvaRecordRe re, ExerciseRecord r "
+				+ " where re.exerciseRecordId=r.recordId and re.evaluateId=? and r.userId=? and r.deleteFlag is false";
+		
+		int count = this.findCount(hql, CollectionUtils.newList(scoreResult.getEvaluateId(), ClientUtils.getUserId()));
+		
+		if(count > 0){
+			return null;
+		}
+		
+		String doCount = String.valueOf(scoreResult.getItems().size());
+		
+		// 2.查询总题目数
+		ExerciseGroup group = this.findUnique("select g from ExerciseGroup g,SchEvaluate e,SchEvaluateTemplate t "
+				+ "where g.groupId=t.groupId and e.evalTemplateId=t.evaluateTemplateId and e.evaluateId=?"
+				+ " and g.deleteFlag is false and e.deleteFlag is false ",  
+				CollectionUtils.newList(scoreResult.getEvaluateId()), ExerciseGroup.class);
+		BigInteger allCount = group.getAllCount();
+		
+		// 3.查询做题记录obj
+		BigDecimal completionRate =  ExerciseUtils.parseStrToBigDecimal(doCount, String.valueOf(allCount));
+		
+		ExerciseRecord record = new ExerciseRecord();
+		record.setExerciseGroupId(group.getGroupId());
+		record.setUserId(ClientUtils.getUserId());
+		record.setDeleteFlag(false);
+		record.setScore(scoreResult.getScore());
+		record.setTitleMaxNumber(scoreResult.getCurrTitleNum());
+		record.setStatus(ExerciseRecord.STATUS_SUBMIT);
+		record.setSubmitTime(new Date(System.currentTimeMillis()));
+		record.setCompletionRate(completionRate);
+		record.setDoCount(new BigInteger(doCount));
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+		
+		return record;
+	}
+	
+	/**
+	 * 批量增加或修改练习记录答案
+	 * @return
+	 */
+	public Result doOperExerciseItemAnswerUBatch(List<TeachEvaScoreData> lstScore, String exerciseRecordId) {
+		String userId = ClientUtils.getUserId();
+		
+		List<ExerciseItemAnswerU> lstNewAnswerU = new ArrayList<ExerciseItemAnswerU>(lstScore.size());
+		// 组装答案记录
+		ExerciseItemAnswerU	answerU = null;
+		for(TeachEvaScoreData score:lstScore){
+			if(StringUtils.isBlank(score.getAnswer())){
+				continue;
+			}
+			answerU = new ExerciseItemAnswerU();
+			
+			answerU.setExerciseItemId(score.getExerciseId());
+			answerU.setExerciseRecordId(exerciseRecordId);
+			answerU.setAnswer(score.getAnswer());
+			answerU.setUserId(userId);
+			answerU.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(answerU);
+			lstNewAnswerU.add(answerU);
+		}
+		
+		// 批量保存
+		this.saveOrUpdateAll(lstNewAnswerU);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 批量增加或修改评估明细记录
+	 * @return
+	 */
+	public Result insertEvaluateDetailBatch(List<TeachEvaScoreData> lstScore,String evaluateId) {
+		
+		Map<String, Object> argsMap = new HashMap<String, Object>(lstScore.size());
+		
+		Object[] args = new Object[lstScore.size()];
+		for(int i=0; i<lstScore.size(); i++){
+			args[i] = lstScore.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+		
+		String hql_score = "from ExerciseItemScore where exerciseItemId in (:exerciseIds)  and deleteFlag is false ";
+		List<ExerciseItemScore> lstscores = this.findByComplexHql(hql_score, argsMap, ExerciseItemScore.class);
+		Map<String, String> scoreMap = new HashMap<String,String>(lstscores.size());
+		for(ExerciseItemScore score:lstscores){
+			scoreMap.put(score.getExerciseItemId()+score.getExerciseItemAnswer(), score.getScore());
+		}
+		
+		String userId = ClientUtils.getUserId();
+		String userName = ClientUtils.getUserName();
+		
+		List<SchEvaluateDetail> lstDetail = new ArrayList<SchEvaluateDetail>(lstScore.size());
+		SchEvaluateDetail record = null;
+		for(TeachEvaScoreData score:lstScore){
+			record = new SchEvaluateDetail();
+			record.setEvaluateId(evaluateId);
+			if(scoreMap.get(score.getExerciseId()+score.getAnswer()) == null){
+				record.setScore(BigDecimal.ZERO);
+			}else{
+				record.setScore(new BigDecimal(scoreMap.get(score.getExerciseId()+score.getAnswer())));
+			}
+			record.setEvaluaterId(userId);
+			record.setEvaluater(userName);
+			record.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(record);
+			
+			lstDetail.add(record);
+		}
+		
+		// 批量保存
+		this.saveOrUpdateAll(lstDetail);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 新增评估与记录关联表
+	 * @param groupId
+	 * @return 
+	 */
+	public Result doOperSchEvaRecordRe(String recordId, String evaluateId) {
+
+		String hql = "from SchEvaRecordRe where evaluateId=? and exerciseRecordId=?";
+		
+		List<SchEvaRecordRe> recordLst = this.find(hql, 
+				CollectionUtils.newList(evaluateId, recordId), SchEvaRecordRe.class);
+		
+		if(!recordLst.isEmpty()){
+			return new Result(true);
+		}
+		
+		SchEvaRecordRe record = new SchEvaRecordRe();
+		record.setEvaluateId(evaluateId);
+		record.setExerciseRecordId(recordId);
+		//记录答题所在班级
+		if(null != ClientUtils.getUserInfo()){
+			record.setClassId(ClientUtils.getClassId());
+			record.setOrgId(ClientUtils.getOrgId());
+		}
+		
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 更新评估表记录
+	 * @return
+	 */
+	public SchEvaluate updateEvaluateCount(String evaluateId) {
+		
+		SchEvaluate record = this.read(SchEvaluate.class, evaluateId);
+		
+		if(record == null){
+			return null; 
+		}
+		
+		record.setEvaluateCount(BigInteger.valueOf(this.getEvaluateCount(evaluateId)));
+		TraceUtils.setUpdateTrace(record);
+		
+		// 保存
+		this.save(record);
+		
+		return record;
+	}
+	
+	/**
+	 * 查询问卷统计
+	 * @param groupId
+	 * @param evaluateId
+	 * @return
+	 */
+	@Override
+	public ResultJson queryEvaluateStatis(String groupId, String evaluateId) {
+
+		List<ExerciseItem> items =  exerciseService.readExerciseItems4Evaluate(groupId);
+		
+		SchEvaluate objSchEvaluate = this.read(SchEvaluate.class, evaluateId);
+		
+		QExerciseRecord record = QExerciseRecord.exerciseRecord;
+		QExerciseItemAnswerU answerU = QExerciseItemAnswerU.exerciseItemAnswerU;
+		QSchEvaRecordRe re = QSchEvaRecordRe.schEvaRecordRe;
+		QUser qUser = QUser.user;
+		
+		for (ExerciseItem objExerciseItem : items) {
+			
+			List<Tuple> lstTuple = this.getQueryFactory().select(answerU, qUser)
+			.from(record,answerU,re,qUser)
+			.where(record.recordId.eq(answerU.exerciseRecordId)
+					.and(record.recordId.eq(re.exerciseRecordId))
+					.and(re.evaluateId.eq(evaluateId)).and(qUser.userId.eq(record.userId))
+					.and(answerU.exerciseItemId.eq(objExerciseItem.getExerciseId()))
+					.and(answerU.deleteFlag.eq(false))
+					.and(record.deleteFlag.eq(false))
+					).orderBy(answerU.createTime.desc()).fetch();
+			
+			if(lstTuple != null && !lstTuple.isEmpty()) {
+				List<ExerciseItemAnswerU> lstExerciseItemAnswerU = new ArrayList<>();
+				for(Tuple tuple : lstTuple) {
+					ExerciseItemAnswerU objExerciseItemAnswerU = tuple.get(answerU);
+					objExerciseItemAnswerU.setImgPath(tuple.get(qUser).getImgPath());
+					lstExerciseItemAnswerU.add(objExerciseItemAnswerU);
+				}
+				
+				// 查询答案
+				objExerciseItem.setExerciseItemAnswerU(lstExerciseItemAnswerU);
+			}
+		}
+		objSchEvaluate.setEvaluateCount(BigInteger.valueOf(this.getEvaluateCount(evaluateId)));
+		// 查询应评估总人数
+		objSchEvaluate.setEvaluateAllCount(BigInteger.valueOf(this
+				.queryEvaluateAllCount(objSchEvaluate.getEvalRangeType(),objSchEvaluate.getEvalRangeId().split(","))));
+		
+		//拼装前端所需要的数据
+		 Map<String, Object> resultMap = 
+				 ExerciseUtils.packageExerciseDetail(items, objSchEvaluate);
+		
+		return new ResultJson(true, "success", resultMap);
+	}
+	
+	/**
+	 * 查询应评估人数
+	 * @param rangeType
+	 * @param evalRangeIds
+	 * @return
+	 */
+	private long queryEvaluateAllCount(String rangeType, String[] evalRangeIds){
+		
+		QClsClassReSubject re = QClsClassReSubject.clsClassReSubject;
+		QStuStudent stu = QStuStudent.stuStudent;
+		QSubject qSubject = QSubject.subject;
+		
+		Predicate predicate = null;
+		if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程
+			
+			predicate = stu.classId.in(getQueryFactory().select(re.classId).from(re,qSubject)
+					.where(qSubject.origSubjectId.in(evalRangeIds).and(re.subjectId.eq(qSubject.subjectId))
+							.and(qSubject.deleteFlag.isFalse()).and(re.deleteFlag.eq(false))));
+		}else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级
+			
+			predicate = stu.classId.in(evalRangeIds);
+		}else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员
+			
+			return evalRangeIds.length;
+		}
+		
+		long allCount = this.getQueryFactory()
+			    .from(stu)
+			    .where(stu.deleteFlag.eq(false).and(predicate).and(stu.status.eq(StuStudent.STATUS_ACTIVE))).groupBy(stu.userId)
+			    .fetchCount();
+		
+		return allCount;
+	}
+	
+	/**
+	 * 获取问卷答卷人数
+	 * 
+	 * @param schEvaluateId
+	 * @param classId
+	 * @return
+	 */
+	private long getEvaluateCount(String evaluateId){
+		QSchEvaRecordRe re = QSchEvaRecordRe.schEvaRecordRe;
+		QExerciseRecord record = QExerciseRecord.exerciseRecord;
+		
+		long count = this.getQueryFactory().from(re,record)
+				.where(re.exerciseRecordId.eq(record.recordId)
+						.and(record.deleteFlag.eq(false))
+						.and(re.evaluateId.eq(evaluateId))
+						).groupBy(record.userId)
+				.fetchCount();
+		
+		return count;
+	}
+
+	/**
+	 * 查询学生评估list
+	 * @return
+	 */
+	@Override
+	public ResultJson queryStuEvaluateList(Pager pager) {
+		
+		QEvaluateStuStudentV view = QEvaluateStuStudentV.evaluateStuStudentV;
+		List<EvaluateStuStudentV> lstView = this.getQueryFactory()
+				.selectFrom(view)
+				.where(view.id.userId.eq(ClientUtils.getUserId())).limit(pager.getPageSize()).offset(pager.getOffset())
+				.orderBy(view.createTime.desc())
+				.fetch();
+		
+		QSchEvaRecordRe re = QSchEvaRecordRe.schEvaRecordRe;
+		QExerciseRecord r= QExerciseRecord.exerciseRecord;
+		
+		ExerciseRecord record = null;
+		for(EvaluateStuStudentV evaV:lstView){
+			
+			record = this.getQueryFactory().select(r)
+			.from(re,r)
+			.where(re.exerciseRecordId.eq(r.recordId)
+					.and(re.evaluateId.eq(evaV.getId().getEvaluateId()))
+					.and(r.userId.eq(evaV.getId().getUserId()))
+					.and(r.deleteFlag.eq(false))
+					).groupBy(r.userId).fetchOne();
+			if(record != null) {
+				evaV.setExerciseRecordId(record.getRecordId());
+				evaV.setGroupId(record.getExerciseGroupId());
+			}
+			
+			evaV.setEvaluateId(evaV.getId().getEvaluateId());
+			evaV.setUserId(evaV.getId().getUserId());
+		}
+		
+		return new ResultJson(true,"success",lstView);
+	}
+	
+	/**
+	 * 查询学生评估count
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> queryStuEvaluateCount() {
+		
+		QEvaluateStuStudentV view = QEvaluateStuStudentV.evaluateStuStudentV;
+		
+		long allCount = this.getQueryFactory()
+				.selectFrom(view)
+				.where(view.id.userId.eq(ClientUtils.getUserId()))
+				.fetchCount();
+		QSchEvaRecordRe re = QSchEvaRecordRe.schEvaRecordRe;
+		QExerciseRecord r= QExerciseRecord.exerciseRecord;
+		
+		long doCount = this.getQueryFactory().select(view).distinct()
+			.from(re,r, view)
+			.where(re.exerciseRecordId.eq(r.recordId)
+					.and(re.evaluateId.eq(view.id.evaluateId))
+					.and(r.userId.eq(ClientUtils.getUserId())).and(view.id.userId.eq(ClientUtils.getUserId()))
+					.and(r.deleteFlag.eq(false))
+					).fetchCount();
+		
+		return CollectionUtils.newObjectMap("allCount", allCount, "doCount", doCount);
+	}
+
+	/**
+	 * 获取评估题目
+	 * @param templateId
+	 * @param status
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	@Override
+	public ResultJson doGetEvalExerItemResponseDataNew(String evaluateId) {
+		String groupId = this.findUnique("select t.groupId from SchEvaluateTemplate t,SchEvaluate e "
+				+ "where t.evaluateTemplateId=e.evalTemplateId and e.evaluateId=?", 
+				CollectionUtils.newList(evaluateId),String.class);
+		
+		// 2.查找评估组下所有对应的练习
+		String hql_item = "select item"
+				+ " from ExerciseItem item, ExerciseGroupItemRe re, ExerciseGroup g"
+				+ " where item.exerciseId=re.exerciseItemId "
+				+ "	and re.exerciseGroupId=g.groupId"
+				+ " and g.groupId=? "
+				+ " and g.deleteFlag is false"
+				+ " and re.deleteFlag is false"
+				+ " and item.deleteFlag is false"
+				+ " order by re.itemOrder";
+				
+		List<ExerciseItem> lstItems = this.find(hql_item, CollectionUtils.newList(groupId), ExerciseItem.class);
+		if(lstItems.isEmpty()){
+			return new ResultJson(false,"当前评估未添加题目");
+		}
+		//查询用户所填答案
+		List<ExerciseItemAnswerU> lstUserAnswer = null;
+		String exerciseRecordId = this.findUnique("select r.recordId from SchEvaRecordRe re, ExerciseRecord r "
+				+ "where re.exerciseRecordId=r.recordId and re.evaluateId=? and r.deleteFlag is false and r.userId = ?",
+				CollectionUtils.newList(evaluateId, ClientUtils.getUserId()), String.class);
+		if(StringUtils.isNoneBlank(exerciseRecordId)){
+			String hql_options = "select o from ExerciseItemAnswerU o where o.exerciseRecordId = ? and o.deleteFlag is false";
+			lstUserAnswer = this.find(hql_options, CollectionUtils.newList(exerciseRecordId), ExerciseItemAnswerU.class);
+		}
+		// 2.1.组装参数 用于查询问卷选项图片
+		Map<String, Object> argsImgMap = new HashMap<String, Object>();
+		String argImgs = "";
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for(int i=0; i<lstItems.size(); i++){
+			ExerciseItem objExerciseItem = lstItems.get(i);
+			args[i] = objExerciseItem.getExerciseId();
+			objExerciseItem.setAnswer(null);
+			List<ExerciseItemOption> options = objExerciseItem.getOptions();
+			if(options == null || options.isEmpty()){
+				continue;
+			}else{
+				for(int j=0; j<options.size(); j++){
+					argImgs = argImgs.concat(options.get(j).getOptionId().concat(j == (options.size() - 1)?"":";"));
+				}
+			}
+		}
+		argsMap.put("exerciseIds", args);
+		argsImgMap.put("optionIds", argImgs.split(";"));
+		// 2-3-1查询题目是否关联图片
+		String hql_itemImgs = "from ExerciseObjectImg where exerciseObjectId in (:exerciseIds) and deleteFlag is false and objectType=1 order by exerciseObjectId,imgOrder ";
+		List<ExerciseObjectImg> lstItemImgs = this.findByComplexHql(hql_itemImgs, argsMap, ExerciseObjectImg.class);
+		// 2-3-2查询题目选项是否关联图片
+		String hql_optionImgs = "from ExerciseObjectImg where exerciseObjectId in (:optionIds) and deleteFlag is false and objectType=2";
+		List<ExerciseObjectImg> lstOptionImgs = this.findByComplexHql(hql_optionImgs, argsImgMap, ExerciseObjectImg.class);
+
+		// 重新组装练习选项
+		ExerciseUtils.packageExerciseItem(lstItems, lstUserAnswer, lstOptionImgs);
+		
+		Map<String, List<ExerciseObjectImg>> imgItemMap = ExerciseUtils.packageExerciseItemImg(lstItemImgs);
+		
+		for(ExerciseItem item:lstItems){
+			// 4.5题目中是否有图片
+			if(imgItemMap.get(item.getExerciseId()) != null){
+				item.setImgs(imgItemMap.get(item.getExerciseId()));
+			}
+		}
+		
+		
+		return new ResultJson(true,"success",lstItems);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateTemplateService.java b/src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateTemplateService.java
new file mode 100644
index 0000000..69ef136
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateTemplateService.java
@@ -0,0 +1,156 @@
+package com.qxueyou.scc.evaluate.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.evaluate.service.IEvaluateTemplateService;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemScore;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.school.model.SchEvaluateTemplate;
+
+@Service
+public class EvaluateTemplateService extends CommonAppService implements IEvaluateTemplateService {
+	
+	@Autowired
+	private IExerciseService exerciseService;
+	
+	/**
+	 *  新增评估模板
+	 */
+	public String insertEvaluateTemplate(SchEvaluateTemplate schEvaluateTemplate){
+		String evaluateTemplateId = schEvaluateTemplate.getEvaluateTemplateId();
+		if(StringUtils.isBlank(evaluateTemplateId)){
+			//插入组
+			ExerciseGroup obj = exerciseService.insertExerciseGroup(schEvaluateTemplate.getEvaluateTemplateName(),ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE);
+			if(null != obj){
+				//插入评估模板
+				SchEvaluateTemplate objTemplate = new SchEvaluateTemplate();
+				TraceUtils.setCreateTrace(objTemplate);
+				objTemplate.setEvaluateTemplateName(schEvaluateTemplate.getEvaluateTemplateName());
+				objTemplate.setGroup_name(obj.getName());
+				objTemplate.setTemplateType(schEvaluateTemplate.getTemplateType());
+				objTemplate.setEvaluateRangeType(schEvaluateTemplate.getEvaluateRangeType());
+				objTemplate.setGroupId(obj.getGroupId());
+				objTemplate.setOrgId(ClientUtils.getOrgId());
+				objTemplate.setOrgName(ClientUtils.getOrgName());
+				save(objTemplate);
+				evaluateTemplateId = objTemplate.getEvaluateTemplateId();
+			}
+		}else{
+			SchEvaluateTemplate objSchEvaluateTemplate = this.read(SchEvaluateTemplate.class, evaluateTemplateId);
+			TraceUtils.setUpdateTrace(objSchEvaluateTemplate);
+			objSchEvaluateTemplate.setEvaluateTemplateName(schEvaluateTemplate.getEvaluateTemplateName());
+			objSchEvaluateTemplate.setTemplateType(schEvaluateTemplate.getTemplateType());
+			objSchEvaluateTemplate.setEvaluateRangeType(schEvaluateTemplate.getEvaluateRangeType());
+			save(objSchEvaluateTemplate);
+		}
+		
+		return evaluateTemplateId;
+	}
+	
+	
+	/**
+	 * 删除评估模板
+	 * @param ids
+	 * @param templateId
+	 * @return
+	 */
+	public Result deleteEvaluateTemplate(String groupId,String templateId){
+		Result objResult = null ; 
+		if(StringUtils.isNotBlank(groupId)){
+			this.deleteExerciseGroup(groupId);
+			
+			Object[] arrtemplateId = templateId.split(",");
+			String hql = "update SchEvaluateTemplate set deleteFlag = true where evaluateTemplateId=?";
+			objResult = bulkUpdateInLoop(hql, arrtemplateId);
+		}
+		
+		return objResult;
+	}
+	
+	/**
+	 * 批量删除ExerciseGroup,删除逻辑:修改评估模板的同时修改习题组和练习题
+	 * @param groupId 主键,多个id时以","分隔
+	 * @return
+	 */
+	@Override
+	public Result deleteExerciseGroup(String groupId) {
+		
+		//逻辑删除,只需要修改exercise_group、exercise_item的删除标识即可
+		if(StringUtils.isNotBlank(groupId)){
+			//需要删除的练习组
+			Object[] arrGroupId = groupId.split(",");
+		
+			String exeGroupHql = " from ExerciseGroup where groupId in (:groupId) ";
+			
+			Map<String,Object> groupIdMap = new HashMap<String,Object>(1);
+			groupIdMap.put("groupId", CollectionUtils.newList(arrGroupId));
+			
+			List<ExerciseGroup> exeGroupList = this.findByComplexHql(exeGroupHql, groupIdMap, ExerciseGroup.class);
+			
+			//删除习题组
+			if(exeGroupList != null){
+				for(ExerciseGroup group : exeGroupList){
+					group.setDeleteFlag(true);
+				}
+			}
+			//20150618:配合前台app,所有修改同时修改group表最后修改时间
+			updateGroupUpdateTimeByList(exeGroupList);
+			
+			String exeItemHql = "select i from ExerciseGroupItemRe g, ExerciseItem i where g.exerciseItemId = i.exerciseId and g.exerciseGroupId in (:groupId)";
+			
+			List<ExerciseItem> exeItemList = this.findByComplexHql(exeItemHql, groupIdMap, ExerciseItem.class);
+			
+			//删除习题
+			if(exeItemList != null){
+				for(ExerciseItem item : exeItemList){
+					item.setDeleteFlag(true);
+				}
+				saveOrUpdateAll(exeItemList);
+			}							
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 所有练习修改操作需要同时修改group的updateTime
+	 * @param lstGroup
+	 */
+	private void updateGroupUpdateTimeByList(List<ExerciseGroup> lstGroup){
+		if(null != lstGroup && !lstGroup.isEmpty()){
+			for( ExerciseGroup obj : lstGroup){
+				obj.setUpdateTime(new Date(System.currentTimeMillis()));
+			}
+			saveOrUpdateAll(lstGroup);
+		}
+	}
+	
+	/**
+	 * 增加评分标准   
+	 * @param exerciseId
+	 * @param type
+	 * @param lstScore
+	 * @return
+	 */
+	public Result insertExerciseScore(String exerciseId,short type,List<String> lstScore,String scoreAnswer, String exerciseItemScoreId){
+		List<ExerciseItemScore> lstItemScore = new ArrayList<ExerciseItemScore>();
+		
+		return saveOrUpdateAll(lstItemScore);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/action/ExamBatchController.java b/src/main/java/com/qxueyou/scc/exam/action/ExamBatchController.java
new file mode 100644
index 0000000..1986b04
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/action/ExamBatchController.java
@@ -0,0 +1,159 @@
+package com.qxueyou.scc.exam.action;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.exam.model.ExamBatchInfo;
+import com.qxueyou.scc.exam.service.IExamBatchService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * exam batch controller.
+ *
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ *
+ */
+@Api(tags="考试批次管理接口")
+@Controller
+@RequestMapping(value = "/exam/exambatch")
+public class ExamBatchController {
+	//分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE=Integer.MAX_VALUE;
+	private static final int DEFAULT_PAGE_NUM=1;
+
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	@Qualifier("commonAppService")
+	ICommonService commonService;
+
+	@Autowired
+	IExamBatchService examBatchService;
+
+	/**
+	 * 考试批次列表
+	 * */
+	@ApiOperation(value = "考试批次列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=false),
+	})
+	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	public @ResponseBody Result pageList(String examId,Integer pageSize,Integer pageNum){
+		Result result = new Result(Boolean.TRUE);
+		Pager pager = new Pager();
+		// 查询记录数
+		String hqlCount="from ExamBatchInfo where examId=? and deleteFlag is false";
+		int totalCount = commonDAO.findCount(hqlCount, CollectionUtils.newList(examId));
+
+        // page赋值
+        pager.setTotalCount(totalCount);
+        pager.setPageSize(pageSize!=null&&pageSize>0?pageSize:DEFAULT_PAGE_SIZE);
+        pager.setPageNum (pageNum!=null&&pageNum>0?pageNum:DEFAULT_PAGE_NUM);
+
+    	String hql = "from ExamBatchInfo where examId=? and deleteFlag is false order by createTime DESC";
+		List<ExamBatchInfo> list = commonDAO.findList(hql, pager, CollectionUtils.newList(examId), ExamBatchInfo.class);
+		result.addData("list",list);
+		result.addData("pager", pager);
+		return result;
+	}
+
+	/**
+	 * 详情页面数据
+	 * @param examBatchId
+	 * @return
+	 */
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String examBatchId) {
+		Result result = new Result(true);
+		result.addData("detail",examBatchService.queryExamBatchDetail(examBatchId));
+		return result;
+	}
+	/**
+	 * 获取批次
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/getExam", method = RequestMethod.GET)
+	public @ResponseBody Result getBatch() {
+		Result result = new Result(true);
+		List<Map<String, Object>> list = examBatchService.queryListForIdName();
+		result.setData(list);
+		return result;
+	}
+	/**
+	 * 获取批次
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/getComNameByBatchId", method = RequestMethod.GET)
+	public @ResponseBody Result getComNameByBatchId(String id) {
+		Result result = new Result(true);
+		List<String> list = examBatchService.queryComNameByBatchId(id);
+		result.setData(list);
+		return result;
+	}
+	/**
+	 * 获取批次
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/getStudentNoByComNameAndBatch", method = RequestMethod.POST)
+	public @ResponseBody Result getStudentNoByComNameAndBatch(@RequestBody  Map<String, String> map) {
+		Result result = new Result(true);//map.get("comName")
+		List<String> list = examBatchService.queryStudentNoByComNameAndBatch("",map.get("classId"));
+		result.setData(list);
+		return result;
+	}
+
+
+
+	/**
+	 * 保存
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExamBatchInfo examBatchInfo) {
+		Result result = null;
+		if(StringUtils.isEmpty(examBatchInfo.getExamBatchId())){
+			String examBatchId = examBatchService.addExamBatch(examBatchInfo);
+			result = new Result(true);
+			result.addData("examBatchId",examBatchId);
+		}else{
+			result= examBatchService.updateExamBatch(examBatchInfo);
+		}
+		return result;
+	}
+
+	/**
+	 * 删除
+	 * @param examBatchIds
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.GET)
+	public @ResponseBody Result publish(String examBatchIds) {
+		Result result = new Result(true);
+		if(StringUtils.isNotEmpty(examBatchIds)){
+			result = examBatchService.deleteExamBatch(examBatchIds.split(","));
+		}
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/action/ExamController.java b/src/main/java/com/qxueyou/scc/exam/action/ExamController.java
new file mode 100644
index 0000000..4f61ae9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/action/ExamController.java
@@ -0,0 +1,685 @@
+package com.qxueyou.scc.exam.action;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.student.service.IStudentService;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+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.Qualifier;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.exam.model.ExamBatchInfo;
+import com.qxueyou.scc.exam.model.ExamInfo;
+import com.qxueyou.scc.exam.model.ExamPaperInfo;
+import com.qxueyou.scc.exam.model.ExamReExamPaper;
+import com.qxueyou.scc.exam.model.ExamResultV;
+import com.qxueyou.scc.exam.service.IExamPaperService;
+import com.qxueyou.scc.exam.service.IExamService;
+import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.service.IUserService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * exam controller.
+ *
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ *
+ */
+@Api(tags = "考试管理接口")
+@Controller
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "/exam/exam")
+public class ExamController {
+	private final Logger log = LogManager.getLogger(ExamController.class);
+
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+
+	//生成密码长度
+	private static final int EXAM_CERT_PWD_LENGTH = 8;
+
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	IStudentService studentService;
+
+	@Autowired
+	@Qualifier("commonAppService")
+	ICommonService commonService;
+
+	@Autowired
+	IExerciseGroupService exerciseGroupService;
+
+	@Autowired
+	IExamService examService;
+
+	@Autowired
+	IUserService userService;
+
+	@Autowired
+	IExamPaperService examPaperService;
+
+	@Autowired
+	private IExerciseVerService exerciseVerService;
+
+	@Autowired
+	IClassService classService;
+
+	/**
+	 * 考试列表
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody Result list(String keyword,String classId,String subjectId,Short status,Integer pageSize,Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		//总考试数量
+		int totalCount = examService.listCount(keyword == null ? "" : keyword.trim(),classId,subjectId,status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+
+		List<ExamInfo> list = examService.list(keyword == null ? "" : keyword.trim(),classId,subjectId,status,pageSize,pageNum);
+
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("examId", "examId", "examName", "examName", "examStatus", "examStatus","examType","examType",
+	            		"totalScore","totalScore","creator", "creator", "updateTime", "updateTime","reExamPapers","reExamPapers",
+	            		"subject.name","subjectName","examBatchInfos","examBatchInfos"));
+
+
+
+		if(listResult!=null && listResult.size()>0){
+			//查询待批阅,已批阅,未提交数量
+			Map<String,Integer> countMap = examService.queryExamResultStatusCount(QBeanUtils.listPropertyVal(list, "examId"));
+			countMap = countMap==null?new HashMap<String,Integer>(1):countMap;
+			Integer tempCount = null;
+
+			for (Map<String, Object> item : listResult) {
+				List<ExamReExamPaper> reExamPapers  =  (List<ExamReExamPaper>)item.get("reExamPapers");
+				if(reExamPapers!= null && reExamPapers.size()>0){
+					String [] arrPaperNames = new String[reExamPapers.size()];
+					for(int i =0;i<reExamPapers.size();i++){
+						arrPaperNames[i] = reExamPapers.get(i).getExamPaperName();
+					}
+					item.put("paperNames", arrPaperNames);
+				}else{
+					item.put("paperNames", new String[]{});
+				}
+
+				item.put("progressStatus", this.getExamProgressStatus((List<ExamBatchInfo>) item.get("examBatchInfos")));
+
+				tempCount = countMap.get(item.get("examId") + "-" + ExerciseRecord.STATUS_CHECK);
+				item.put("checkedCount", tempCount==null?0:tempCount);
+
+				tempCount = countMap.get(item.get("examId") + "-" + ExerciseRecord.STATUS_SUBMIT);
+				item.put("toCheckCount",tempCount==null?0:tempCount);
+
+				tempCount = countMap.get(item.get("examId") + "-" + ExerciseRecord.STATUS_NOT_SUBMIT);
+				item.put("unCommitCount",tempCount==null?0:tempCount);
+
+				item.remove("examBatchInfos");
+				item.remove("reExamPapers");
+			}
+		}
+
+		return new Result(true,"",CollectionUtils.newObjectMap("examList",listResult,"page",pager));
+	}
+
+	private String getExamProgressStatus(List<ExamBatchInfo> lstBatchInfos){
+
+		if(lstBatchInfos == null ||lstBatchInfos.size()==0){
+			return "已结束";
+		}
+
+		String progressStatus="待开始";
+		Date now = new Date();
+
+		//根据开始时间倒序
+		lstBatchInfos.sort(new Comparator<ExamBatchInfo>(){
+			@Override
+			public int compare(ExamBatchInfo o1, ExamBatchInfo o2) {
+				return (int)(o1.getStartTime().getTime()- o2.getStartTime().getTime());
+			}
+		});
+
+			//如果所有批次都小于当前时间,则已结束,如果有一个批次正在进行中,则进行中
+		if(lstBatchInfos.get(0).getEndTime().getTime()<now.getTime()){
+			progressStatus="已结束";
+		}else{
+			for(ExamBatchInfo f : lstBatchInfos){
+				if(f.getStartTime().getTime()<=now.getTime() && f.getEndTime().getTime()>=now.getTime()){
+					progressStatus = "进行中";
+					break;
+				}
+			}
+		}
+		return progressStatus;
+	}
+
+
+	/**
+	 * 教师查看考试成绩列表
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "老师查看学生考试结果列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true),
+		@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="批次id", required=true),
+		@ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id", required=true),
+	})
+	@RequestMapping(value = "teacher/examresultlist", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentExamResultList(String examId, String examBatchId, String classId,String keyword, Integer pageSize, Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+
+		//总考试数量
+		int totalCount = examService.listResultCount(examId,
+					StringUtils.isEmpty(examBatchId)?null:new String[]{examBatchId}, classId, keyword == null ? "" : keyword.trim());
+
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+
+		List<ExamResultV> list = examService.listResult(examId,
+					StringUtils.isEmpty(examBatchId)?null:new String[]{examBatchId}, classId, keyword == null ? "" : keyword.trim(), pageSize,pageNum);
+
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("id.studentNo", "studentNo", "studentName", "studentName", "id.classId", "classId",
+	            		"className","className","id.examBatchId","examBatchId","examBatchNo","examBatchNo","startTime", "startTime", "endTime", "endTime","submitTime","submitTime",
+	            		"score","studentScore","status","status","paperCode","paperCode","accuracy","accuracy","completionRate","completeRate",
+	            		"userId","studentUserId","passingScore","passingScore","sex","sex","mobilePhone","mobilePhone"));
+
+		int rank = 1;
+		for(Map<String, Object>  map:listResult){
+			map.put("rank", rank);
+			map.put("isPass", (map.get("studentScore")==null ? BigDecimal.ZERO :(BigDecimal)map.get("studentScore"))
+					.compareTo((BigDecimal)map.get("passingScore")) == -1 ? "否" : "是");
+			rank++;
+		}
+
+		return new Result(true,"",CollectionUtils.newObjectMap("list",listResult,"page",pager,"examInfo",this.commonDAO.read(ExamInfo.class, examId)));
+	}
+
+	/**
+	 * 详情页面数据
+	 *
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "详情页面数据")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true),
+	})
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String examId) {
+		return new Result(true,"",CollectionUtils.newObjectMap("detail",examService.queryExamDetail(examId)));
+	}
+
+	@ApiOperation(value = "获取补考考试,根据maxLateMin标记")
+	@ApiImplicitParams({
+//		@ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true),
+	})
+	@RequestMapping(value = "/getReExam", method = RequestMethod.GET)
+	public @ResponseBody Result getReExam() {
+		return new Result(true,"",CollectionUtils.newObjectMap("examInfo",examService.queryReExam()));
+	}
+
+	/**
+	 * 保存
+	 *
+	 * @param examInfo
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExamInfo examInfo) {
+		Result result = null;
+		if (StringUtils.isEmpty(examInfo.getExamId())) {
+			examInfo.setOrgId(ClientUtils.getOrgId());
+			String examId = examService.addExam(examInfo);
+			result = new Result(true,"",CollectionUtils.newObjectMap("examId", examId));
+		} else {
+			result = examService.updateExam(examInfo);
+		}
+		return result;
+	}
+
+	/**
+	 * 保存
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/saveRemedy", method = RequestMethod.POST)
+	public @ResponseBody Result saveRemedy(@RequestBody ExamBatchInfo examBatchInfo) {
+		Result result = null;
+		//获取考试ID
+		String examId = examBatchInfo.getExamId();
+		//获取开始时间
+		Date startTime = examBatchInfo.getStartTime();
+		//获取结束时间
+		Date endTime = examBatchInfo.getEndTime();
+		//生成补考考试
+			examService.addRemedy(examId,startTime,endTime);
+			result = new Result(true,"",CollectionUtils.newObjectMap("examId", examId));
+
+		return result;
+	}
+
+	/**
+	 * 删除
+	 *
+	 * @param examIds
+	 * @return
+	 */
+	@ApiOperation(value = "删除考试", notes = "根据传入的考试ID字符串参数进行删除(多个ID以逗号分割, 如:examId1,examId2)", httpMethod = "GET")
+	@ApiImplicitParam(name = "examIds", value = "考试ID字符串", required = true, dataType = "String", paramType = "body")
+	@RequestMapping(value = "delete", method = RequestMethod.GET)
+	public @ResponseBody Result delete(String examIds) {
+		Result result = new Result(true);
+		if (StringUtils.isNotEmpty(examIds)) {
+			result = examService.deleteExam(examIds.split(","));
+		}
+		return result;
+	}
+
+   /**
+	 * 设置考试题目
+	 *
+	 * @param examInfo
+	 * @return
+	 */
+	@RequestMapping(value = "/savePaper", method = RequestMethod.POST)
+	public @ResponseBody Result savePaper(@RequestBody ExamInfo examInfo) {
+		return examService.updateExamPaperInfo(examInfo);
+	}
+
+	/**
+	 * 发布考试
+	 *
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publishExam(String examIds) {
+		if (StringUtils.isEmpty(examIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.examService.doPublishExam(examIds.split(","));
+	}
+
+	/**
+	 * 撤回考试
+	 *
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/revoke", method = RequestMethod.GET)
+	public @ResponseBody Result revokeExam(String examIds) {
+		if (StringUtils.isEmpty(examIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.examService.doRevokeExam(examIds.split(","));
+	}
+
+	/**
+	 * 学生考试信息列表
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "学生考试信息列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="keyword", dataType="String", paramType="query", value="关键字考试名称模糊查询"),
+		@ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"),
+		@ApiImplicitParam(name="subjectId", dataType="String", paramType="query", value="课程id", required=false),
+		@ApiImplicitParam(name="status", dataType="String", paramType="query", value="状态(默认全部,1未开始,2未交卷,3已交卷,4逾期未交,5已批阅)", required=false),
+	})
+	@RequestMapping(value = "/student/list", method = RequestMethod.GET)
+	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;
+		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;
+		if(!StringUtils.isEmpty(classId)){
+			classIds = new String[]{classId};
+		}else{
+			List<ClsClass> listClasses = classService.queryStudentClassesByUserId(ClientUtils.getUserId());
+			if(listClasses!=null && listClasses.size()>0){
+				classIds = QBeanUtils.listPropertyVal(listClasses, "classId").toArray(new String [listClasses.size()]);
+			}
+		}
+
+		int totalCount = examService.listStudentExamCount(keyword == null ? "" : keyword.trim(),classIds,subjectId,status);
+//		System.out.println("totalCount"+totalCount);
+		List<ExamResultV> list = examService.listStudentExam(keyword == null ? "" : keyword.trim(),classIds,subjectId,status,pageSize,pageNum,ClientUtils.getUserId());
+//		System.out.println("totalCount"+list);
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("examId", "examId", "examName", "examName", "id.examBatchId", "examBatchId", "startTime","startTime","endTime", "endTime",
+	            							 "id.classId", "classId","totalScore","totalScore","passingScore","passingScore","remainingSeconds","remainingSeconds",
+	            							 "exerciseGroupId","groupId","score","score","status","status","subjectName","subjectName"));
+
+		if(listResult!=null && listResult.size()>0){
+			for(Map<String, Object> map : listResult){
+				map.put("status", map.get("status")==null?0:Integer.valueOf((String)map.get("status")));
+			}
+		}
+		return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult,"examCount",totalCount));
+	}
+	/**
+	 * 学生考试信息列表
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "学生考试信息列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"),
+	})
+	@RequestMapping(value = "/student/nowExam", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentExam(String classId) {
+		//获取当前考试列表以结束时间排序最新的在最前面
+		String [] classIds= null;
+		if(!StringUtils.isEmpty(classId)){
+			classIds = new String[]{classId};
+		}else{
+			List<ClsClass> listClasses = classService.queryStudentClassesByUserId(ClientUtils.getUserId());
+			if(listClasses!=null && listClasses.size()>0){
+				classIds = QBeanUtils.listPropertyVal(listClasses, "classId").toArray(new String [listClasses.size()]);
+			}
+		}
+		List<ExamResultV> list = examService.studentExam(classIds);
+
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("examId", "examId", "examName", "examName", "id.examBatchId", "examBatchId", "startTime","startTime","endTime", "endTime",
+												 "id.classId", "classId","totalScore","totalScore","passingScore","passingScore","remainingSeconds","remainingSeconds",
+	            							 "exerciseGroupId","groupId","score","score","status","status","subjectName","subjectName"));
+
+		if(listResult!=null && listResult.size()>0){
+			for(Map<String, Object> map : listResult){
+				map.put("status", map.get("status")==null?0:Integer.valueOf((String)map.get("status")));
+			}
+		}
+		return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult!=null && listResult.size()>0?listResult.get(0):null));
+	}
+
+	@ApiOperation(value = "学生考试信息列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="班级id"),
+		@ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id")
+	})
+	@RequestMapping(value = "/student/record", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentRecord(String examBatchId, String classId) {
+		// 查询是否有进行中的考试
+		ExerciseRecord record = commonDAO.findUnique(
+				"from ExerciseRecord where examBatchId=? and classId=? and userId = ? and deleteFlag is false ",
+				CollectionUtils.newList(examBatchId,classId,ClientUtils.getUserId()),
+				ExerciseRecord.class);
+
+		return new Result(true,"",CollectionUtils.newObjectMap("record",record));
+	}
+
+	/**
+	 * 学生考试信息列表
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "学生考试信息列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"),
+	})
+	@RequestMapping(value = "/student/stuMessage", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudent() {
+		StuStudent student = studentService.getStudentByUserId(ClientUtils.getUserId());
+		return new Result(true,"",CollectionUtils.newObjectMap("student",student));
+	}
+
+	/**
+	 * 根据考试批次ID获取考试题目信息
+	 *
+	 * @param examBatchId
+	 * @return
+	 */
+	@ApiOperation(value = "学生开始考试接口")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true),
+		@ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id", required=false)
+	})
+	@RequestMapping(value = "/student/startexam", method = RequestMethod.GET)
+	public @ResponseBody Result doStartExam(String examBatchId, String classId,String studentUserId) {
+
+		if (StringUtils.isEmpty(examBatchId) || StringUtils.isEmpty(classId)) {
+			return new Result(false, "参数错误,班级,考试批次不能为空");
+		}
+
+		Result result = this.examService.doStartExam(examBatchId,classId,StringUtils.isNotEmpty(studentUserId)?studentUserId:ClientUtils.getUserId());
+		ExamPaperInfo paper = (ExamPaperInfo)result.getData("paperInfo");
+		//&& paper.getExerciseGroup().getItems().isEmpty()
+		if(paper!=null ){
+			ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail((String) result.getData("groupId"), examBatchId);
+			paper.setExerciseGroup(exerciseGroup);
+		}
+
+		return result;
+	}
+	@ApiOperation(value = "学生开始补考接口")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true),
+	})
+	@RequestMapping(value = "/student/startReExam", method = RequestMethod.GET)
+	public @ResponseBody Result doStartReExam(String examId) {
+		Result result = this.examService.doStartReExam(examId,ClientUtils.getUserId());
+		ExamPaperInfo paper = (ExamPaperInfo)result.getData("paperInfo");
+		//&& paper.getExerciseGroup().getItems().isEmpty()
+		if(paper!=null ){
+			ExerciseGroup exerciseGroup = exerciseGroupService.queryReExerciseGroupDetail((String) result.getData("groupId"), examId);
+			paper.setExerciseGroup(exerciseGroup);
+		}
+		return result;
+	}
+	@ApiOperation(value = "学生补考记录")
+	@ApiImplicitParams({
+//		@ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true),
+	})
+	@RequestMapping(value = "/student/getReExamRecordList", method = RequestMethod.GET)
+	public @ResponseBody Result getReExamRecordList() {
+		ExamInfo examInfo = examService.queryReExam();
+		if(examInfo!=null){
+			Result reExamRecordList = this.examService.getReExamRecordList(examInfo.getExamId(), ClientUtils.getUserId());
+			List<ExerciseRecord> exerciseRecords= (List<ExerciseRecord>)reExamRecordList.getData();
+			exerciseRecords.forEach(exerciseRecord -> {
+				exerciseRecord.setName(examInfo.getExamName());
+			});
+			return reExamRecordList;
+		}
+		return new Result(false,"没有设置补考");
+	}
+
+	@ApiOperation(value = "学生考试详情")
+	@ApiImplicitParams({@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true)})
+	@RequestMapping(value = "/student/examdetail", method = RequestMethod.GET)
+	public @ResponseBody Result viewExamDetail(String examBatchId) {
+		ExamBatchInfo batchInfo = this.commonService.read(ExamBatchInfo.class, examBatchId);
+		//考试信息
+		ExamInfo examInfo =this.examService.queryExamDetail(batchInfo.getExamId());
+		examInfo.setExamStartTime(batchInfo.getStartTime());
+		examInfo.setExamEndTime(batchInfo.getEndTime());
+
+		// 获取考卷信息
+		Map<String, ExamPaperInfo> paperStatistic  =null;
+		if(examInfo.getExamType()!=ExamInfo.EXAM_TYPE_RANDOM && examInfo.getExamType()!=ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP){
+			paperStatistic = examPaperService.queryExamPaperItemsStatistic(
+					QBeanUtils.listPropertyVal(examInfo.getReExamPapers(), "examPaperId").toArray(new String[examInfo.getReExamPapers().size()]));
+		}
+		return new Result(true,"",CollectionUtils.newObjectMap("examInfo",examInfo,"paperStatistic",paperStatistic));
+	}
+
+	@ApiOperation(value = "提交考试答案")
+	@ApiImplicitParams({@ApiImplicitParam(name="answers", dataType="String", paramType="query", value="提交答案", required=true)})
+	@RequestMapping(value = "/student/submitExam", method = RequestMethod.POST)
+	public @ResponseBody Object doSubmitExamAnswer(@RequestParam(value = "answers") String answers) throws IOException {
+		Result result = new Result(true);
+		// 用户本次做题提交的数据
+		String recordId =null;
+//		try {
+			ExerciseSubmitAnswerData answerData = new ObjectMapper().readValue(answers, ExerciseSubmitAnswerData.class);
+			recordId = answerData.getExerciseRecordId();
+			// 提交试卷答案
+			result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData));
+			// 记录提交的数据日志
+			exerciseVerService.doSaveExerciseDataSubmitLog(answers, recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers");
+//		} catch (Exception e) {
+//			log.error("考试保存错误", e);
+//			result = new Result(false, "提交考试答案请求异常");
+//			exerciseVerService.doSaveExerciseDataSubmitLog(answers, recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Exercise/exerAnswers");
+//		}
+		return result;
+	}
+
+	@ApiOperation(value = "老师阅卷")
+	@ApiImplicitParams({@ApiImplicitParam(name="answerData", dataType="object", paramType="query", value="提交答案", required=true)})
+	@RequestMapping(value = "/teacher/checkExam", method = RequestMethod.POST)
+	public @ResponseBody Object doCheckExam(@RequestBody ExerciseSubmitAnswerData answerData) {
+		Result result = new Result(true);
+		String recordId = null;
+		try {
+			// 提交记录id
+			recordId = answerData.getExerciseRecordId();
+			// 提交试卷答案
+			result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData));
+			// 记录提交的数据日志
+			exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData),recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,"/exam/exam/teacher/checkExam");
+		} catch (Exception e) {
+			log.error("考试保存错误", e);
+			result = new Result(false, "提交练习答案请求异常");
+			exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData),recordId,ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,"/exam/exam/teacher/checkExam");
+		}
+		return result;
+	}
+
+	/**
+	 * 查询考试凭证信息列表
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "查询学生考试凭证")
+	@RequestMapping(value = "/teacher/examacertificatelist", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentExamCertificateList(String examId, String classId, String examBatchId,
+			String keyword, Integer pageSize, Integer pageNum) {
+		Map<String, Object> queryParams = new HashMap<String, Object>();
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("select r.classId from  ExamBatchInfo f,ExamBatchClassRe r where f.examBatchId = r.examBatchId and f.deleteFlag is false and r.deleteFlag is false ");
+
+		// 如果examBatchId为空,则获取考试对应的所有批次
+		if (StringUtils.isNotEmpty(examBatchId)) {
+			hql.append(" and f.examBatchId=:examBatchId");
+			queryParams.put("examBatchId", examBatchId);
+		}else{
+			hql.append(" and f.examId=:examId");
+			queryParams.put("examId", examId);
+		}
+
+		List<String> classLst =this.commonDAO.findByComplexHql(hql.toString(), queryParams, String.class);
+		//如果不存在关联的班级信息,则直接返回
+		if (classLst == null || classLst.size() == 0) {
+			return new Result(false,"无班级考生信息",CollectionUtils.newObjectMap("list",null));
+		}
+
+		// 查询记录数
+		int totalCount = commonDAO.findCountByComplexHql("from StuStudent t WHERE t.classId in(:classIds) and t.deleteFlag is false",
+				CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{})));
+
+		// page赋值
+		Pager page = new Pager();
+		page.setTotalCount(totalCount);
+		page.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE);
+		page.setPageNum(pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM);
+
+		List<Map<String,Object>> lstMap = this.commonDAO.findListWithMapByHql(
+					"select u.userId as userId,c.name as className, u.name as name,u.account as account,u.password as password from StuStudent t,User u,ClsClass c "
+					+ " WHERE t.userId=u.userId and t.classId=c.classId AND t.classId in(:classIds) and t.deleteFlag is false and u.deleteFlag is false",
+				CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{})),page);
+
+		return new Result(true,"",CollectionUtils.newObjectMap("list", lstMap,"page", page));
+	}
+
+	/**
+	 * 学生考试信息列表
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "生成学生考试凭证")
+	@RequestMapping(value = "/teacher/genstudentacertificate", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentExamCertificateList(String examId, String examBatchId) {
+		Map<String, Object> queryParams = new HashMap<String, Object>(1);
+
+		// 如果examBatchId为空,则获取考试对应的所有批次
+		String hql ="select distinct r.classId from  ExamBatchInfo f,ExamBatchClassRe r where f.examBatchId = r.examBatchId  and f.deleteFlag is false and r.deleteFlag is false";
+
+		if (StringUtils.isNotEmpty(examBatchId)) {
+			hql = hql.concat(" and f.examBatchId=:examBatchId  ");
+			queryParams.put("examBatchId", examBatchId);
+		}else{
+			hql = hql.concat(" and f.examId=:examId ");
+			queryParams.put("examId", examId);
+		}
+
+		List<String> classLst =this.commonDAO.findByComplexHql(hql, queryParams, String.class);
+
+		//如果不存在关联的班级信息,则直接返回
+		if (classLst == null || classLst.size() == 0) {
+			return new Result(false, "无班级考生信息",CollectionUtils.newObjectMap("list", null));
+		}
+
+		//查询所有学生用户信息
+		List<User> lstUser = this.commonDAO.findByComplexHql(
+				"select distinct u from StuStudent t,User u WHERE t.userId=u.userId AND t.classId in(:classIds) and t.deleteFlag is false and u.deleteFlag is false",
+				CollectionUtils.newObjectMap("classIds",classLst.toArray(new String[]{})),User.class);
+
+		if(lstUser!=null && lstUser.size()>0){
+			for(User user:lstUser){
+				user.setPassword(RandomStringUtils.random(EXAM_CERT_PWD_LENGTH, false, true));
+			}
+		}
+
+		if(!this.userService.doBatchUpdateUser(lstUser)){
+			return new Result(false,"更新学生考试凭证密码失败!");
+		}
+
+		return new Result(true);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/action/ExamPaperController.java b/src/main/java/com/qxueyou/scc/exam/action/ExamPaperController.java
new file mode 100644
index 0000000..8021f1f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/action/ExamPaperController.java
@@ -0,0 +1,211 @@
+package com.qxueyou.scc.exam.action;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+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 com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.exam.model.ExamPaperInfo;
+import com.qxueyou.scc.exam.service.IExamPaperService;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+
+import io.swagger.annotations.Api;
+
+
+/**
+ * exam paper controller.
+ * 
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ * 
+ */
+@Api(tags="试卷管理接口")
+@Controller
+@RequestMapping(value = "/exam/paper")
+public class ExamPaperController {
+	//分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE=Integer.MAX_VALUE;
+	private static final int DEFAULT_PAGE_NUM=1;
+	
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	@Qualifier("commonAppService")
+	ICommonService commonService;
+	
+	@Autowired	
+	IExamPaperService examPaperService;
+	
+	@Autowired
+	IExerciseService exerciseService;
+	
+	
+	/**
+	 * 试卷列表
+	 * */
+	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	public @ResponseBody Result pageList(String keyword,Short status, Integer pageSize,Integer pageNum){
+		Result result = new Result(Boolean.TRUE);
+		Pager pager = new Pager();
+		List<Object> queryParamLst = null;
+		// 查询记录数
+		String hqlCount="from ExamPaperInfo where createId=? and examPaperName like ?  and deleteFlag is false";
+		if(status!=null){
+			hqlCount = hqlCount.concat(" and paperStatus = ?");
+			queryParamLst =  CollectionUtils.newList(ClientUtils.getUserId(),'%'+(keyword==null?"":keyword.trim())+'%',status);
+		}else{
+			queryParamLst =  CollectionUtils.newList(ClientUtils.getUserId(),'%'+(keyword==null?"":keyword.trim())+'%');
+		}
+		int totalCount = commonDAO.findCount(hqlCount,queryParamLst);
+        
+        // page赋值
+        pager.setTotalCount(totalCount);
+        pager.setPageSize(pageSize!=null&&pageSize>0?pageSize:DEFAULT_PAGE_SIZE);
+        pager.setPageNum (pageNum!=null&&pageNum>0?pageNum:DEFAULT_PAGE_NUM);
+        
+    	StringBuffer hqlBuffer =  new StringBuffer(500);
+		hqlBuffer.append("from ExamPaperInfo where createId=? and examPaperName like ? and deleteFlag is false ");
+		if(status!=null){
+			hqlBuffer.append(" and paperStatus = ? ");
+		}
+		hqlBuffer.append(" order by createTime DESC");
+        
+		List<ExamPaperInfo> list = commonDAO.findList(hqlBuffer.toString(), pager,queryParamLst, ExamPaperInfo.class);
+		if(list!=null && list.size()>0){
+			for( int i =0;i< list.size();i++){
+				list.get(i).setExerciseGroup(null);
+				list.get(i).setSectionInfos(null);
+				list.get(i).setReExamPapers(null);
+			}
+		}
+		result.addData("list", list);
+		result.addData("pager", pager);
+		return result;
+	}
+	
+	/**
+	 * 详情页面数据
+	 * @param examPaperId
+	 * @return
+	 */
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String examPaperId) {
+		Result result = new Result(true);
+		result.addData("detail",examPaperService.queryExamPaperDetail(examPaperId));
+		return result;
+	}
+	
+	/**
+	 * 保存
+	 * 
+	 * @param examInfo
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExamPaperInfo examPaperInfo) {
+		Result result = null;
+		if (StringUtils.isEmpty(examPaperInfo.getExamPaperId())) {
+			examPaperInfo.setOrgId(ClientUtils.getOrgId());
+			 result = examPaperService.addExamPaper(examPaperInfo);
+		} else {
+			result = examPaperService.updateExamPaper(examPaperInfo);
+		}
+		return result;
+	}
+	
+	/**
+	 * 删除
+	 * @param examPaperIds
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.GET)
+	public @ResponseBody Result publish(String examPaperIds) {
+		Result result = new Result(true);
+		if(StringUtils.isNotEmpty(examPaperIds)){
+			result = examPaperService.deleteExamPaper(examPaperIds.split(","));
+		}
+		return result;
+	}
+	
+	@RequestMapping(value = "/item/statistics", method = RequestMethod.GET)
+	public @ResponseBody Result statisticsItem (String examPaperIds) {
+		Result result = new Result(true);
+		List<ExamPaperInfo> lstExamPapers =null;
+		if(StringUtils.isNotEmpty(examPaperIds)){
+			String hql =" from ExamPaperInfo e where e.examPaperId in(:examPaperIds) and e.deleteFlag is false ";
+			Map<String,Object> param =new HashMap<String,Object>();
+			param.put("examPaperIds", examPaperIds.split(","));
+			lstExamPapers =commonDAO.findByComplexHql(hql, param, ExamPaperInfo.class);
+			
+			if(lstExamPapers!=null&&lstExamPapers.size()>0){
+				String [] paperIds = new String[lstExamPapers.size()];
+				for(int i=0;i<lstExamPapers.size();i++){
+					paperIds[i]=lstExamPapers.get(i).getExamPaperId();
+				}
+				Map<String, ExamPaperInfo> statisticsMap = examPaperService.queryExamPaperItemsStatistic(paperIds);
+				String tempExamPaperId = null;
+				for(int i=0;i<lstExamPapers.size();i++){
+					tempExamPaperId =lstExamPapers.get(i).getExamPaperId();
+					lstExamPapers.get(i).setExerciseGroup(null);
+					lstExamPapers.get(i).setSectionInfos(null);
+					lstExamPapers.get(i).setReExamPapers(null);
+					lstExamPapers.get(i).setSingleSelectCount(statisticsMap.get(tempExamPaperId).getSingleSelectCount());
+					lstExamPapers.get(i).setMultiSelectCount(statisticsMap.get(tempExamPaperId).getMultiSelectCount());
+					lstExamPapers.get(i).setJudgeCount(statisticsMap.get(tempExamPaperId).getJudgeCount());
+					lstExamPapers.get(i).setQuestionCount(statisticsMap.get(tempExamPaperId).getQuestionCount());
+					lstExamPapers.get(i).setFillBlanksCount(statisticsMap.get(tempExamPaperId).getFillBlanksCount());
+				}
+			}
+		}
+		result.addData("papers",lstExamPapers);
+		return result;
+	}
+	
+	
+	/**
+	 * 发布试卷
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publishExamPaper(String examPaperIds) {
+		if (StringUtils.isEmpty(examPaperIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.examPaperService.doPublishExamPaper(examPaperIds.split(","));
+	}
+
+	/**
+	 * 撤回试卷
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/revoke", method = RequestMethod.GET)
+	public @ResponseBody Result revokeExamPaper(String examPaperIds) {
+		if (StringUtils.isEmpty(examPaperIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.examPaperService.doRevokeExamPaper(examPaperIds.split(","));
+	}
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/action/ExamPaperSectionController.java b/src/main/java/com/qxueyou/scc/exam/action/ExamPaperSectionController.java
new file mode 100644
index 0000000..ab0bb79
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/action/ExamPaperSectionController.java
@@ -0,0 +1,228 @@
+package com.qxueyou.scc.exam.action;
+
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+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 com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.exam.model.ExamPaperSectionInfo;
+import com.qxueyou.scc.exam.service.IExamPaperSectionService;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+
+import io.swagger.annotations.Api;
+
+
+/**
+ * exam paper section controller.
+ *
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ */
+@Api(tags = "试卷部分管理接口")
+@Controller
+@RequestMapping(value = "/exam/papersection")
+public class ExamPaperSectionController {
+    //分页查询中,默认记录条数和页数
+    private static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
+    private static final int DEFAULT_PAGE_NUM = 1;
+
+    @Autowired
+    private CommonDAO commonDAO;
+
+    @Autowired
+    @Qualifier("commonAppService")
+    ICommonService commonService;
+
+    @Autowired
+    IExamPaperSectionService examPaperSectionService;
+
+    @Autowired
+    IExerciseGroupService exerciseGroupService;
+
+    /**
+     * 试卷部分列表
+     */
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public @ResponseBody
+    Result pageList(String examPaperId, Integer pageSize, Integer pageNum) {
+        Result result = new Result(Boolean.TRUE);
+        Pager pager = new Pager();
+        // 查询记录数
+        String hqlCount = "from ExamPaperSectionInfo where examPaperId=? and deleteFlag is false";
+        int totalCount = commonDAO.findCount(hqlCount, CollectionUtils.newList(examPaperId));
+
+        // page赋值
+        pager.setTotalCount(totalCount);
+        pager.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE);
+        pager.setPageNum(pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM);
+
+        String hql = "from ExamPaperSectionInfo where examPaperId=? and deleteFlag is false order by sectionOrder asc";
+        List<ExamPaperSectionInfo> list = commonDAO.findList(hql, pager, CollectionUtils.newList(examPaperId), ExamPaperSectionInfo.class);
+        result.addData("list", list);
+        result.addData("pager", pager);
+        return result;
+    }
+
+    /**
+     * 详情
+     *
+     * @param examPaperSectionId
+     * @return
+     */
+    @RequestMapping(value = "/detail", method = RequestMethod.GET)
+    public @ResponseBody
+    Result detail(String examPaperSectionId) {
+        Result result = new Result(true);
+        result.addData("detail", examPaperSectionService.queryExamPaperSectionDetail(examPaperSectionId));
+        return result;
+    }
+
+    /**
+     * 保存
+     *
+     * @param examPaperSectionInfo
+     * @return
+     */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public @ResponseBody
+    Result save(@RequestBody ExamPaperSectionInfo examPaperSectionInfo) {
+        Result result = null;
+        if (StringUtils.isEmpty(examPaperSectionInfo.getSectionId())) {
+            String sectionId = examPaperSectionService.addExamPaperSection(examPaperSectionInfo);
+            result = new Result(true);
+            result.addData("sectionId", sectionId);
+        } else {
+            result = examPaperSectionService.updateExamPaperSection(examPaperSectionInfo);
+        }
+        return result;
+    }
+
+    /**
+     * 删除
+     *
+     * @param examPaperSectionIds
+     * @return
+     */
+    @RequestMapping(value = "/delete", method = RequestMethod.GET)
+    public @ResponseBody
+    Result publish(String examPaperSectionIds) {
+        Result result = new Result(true);
+        if (StringUtils.isNotEmpty(examPaperSectionIds)) {
+            result = examPaperSectionService.deleteExamPaperSection(examPaperSectionIds.split(","));
+        }
+        return result;
+    }
+
+    /**
+     * 设置题库
+     *
+     * @param examPaperSectionInfo
+     * @return
+     * @throws Exception
+     */
+    @Deprecated
+    @RequestMapping(value = "/group/save", method = RequestMethod.GET)
+    public @ResponseBody
+    Result saveSectionGroup(String sectionId, String selectedGroupIds, String selectedItemTypes) throws Exception {
+        if (StringUtils.isEmpty(sectionId) || StringUtils.isEmpty(selectedGroupIds) || StringUtils.isEmpty(selectedItemTypes)) {
+            return new Result(false, "请求参数错误!");
+        }
+
+        String[] arrGroupIds = selectedGroupIds.split(",");
+
+        String[] arrItemType = selectedItemTypes.split(",");
+        Short[] itemTypes = new Short[arrItemType.length];
+        for (int i = 0; i < arrItemType.length; i++) {
+            itemTypes[i] = Short.valueOf(arrItemType[i]);
+        }
+
+        return examPaperSectionService.saveExamPaperSectionGroup(sectionId, arrGroupIds, itemTypes);
+    }
+
+    /**
+     * 自主选题
+     *
+     * @param examPaperSectionInfo
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/item/selectedadd", method = RequestMethod.GET)
+    public @ResponseBody
+    Result saveSectionSeletedItems(String sectionId, String sourceGroupId, String selectedItemIds) throws Exception {
+        if (StringUtils.isEmpty(sectionId) || StringUtils.isEmpty(sourceGroupId) || StringUtils.isEmpty(selectedItemIds)) {
+            return new Result(false, "请求参数错误!");
+        }
+
+        String[] arrItemIds = selectedItemIds.split(",");
+        return examPaperSectionService.saveExamPaperSectionItems(sectionId, sourceGroupId, arrItemIds);
+    }
+
+    /**
+     * 交换题目顺序
+     *
+     * @param examPaperSectionInfo
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/item/changeOrder", method = RequestMethod.GET)
+    public @ResponseBody
+    Result changeItemOrder(String paperGroupId, String exerciseItemId1, String exerciseItemId2) throws Exception {
+        return exerciseGroupService.doExchangeExamPaperGroupItemOrder(paperGroupId, exerciseItemId1, exerciseItemId2);
+    }
+
+    /**
+     * 删除题目
+     *
+     * @param examPaperSectionInfo
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/item/delete", method = RequestMethod.GET)
+    public @ResponseBody
+    Result deleteSectionGroupItem(String sectionId, String groupId, String exerciseItemId) throws Exception {
+        return examPaperSectionService.deleteSectionItem(sectionId, groupId, exerciseItemId.split(","));
+    }
+
+    /**
+     * 考试保存题目
+     *
+     * @return
+     */
+    @RequestMapping(value = "/item/save", method = RequestMethod.POST)
+    @ResponseBody
+    public Result addOrUpdateItem(@RequestBody ExerciseGroup exerciseGroup) {
+        Result result = examPaperSectionService.saveSectionItem(exerciseGroup);
+        result.addData("totalScore", examPaperSectionService.updatePaperScore(exerciseGroup.getGroupId()));
+        return result;
+    }
+
+
+    /**
+     * 查询当前题组中被选中的题目ID
+     */
+    @RequestMapping(value = "/group/itemIds", method = RequestMethod.GET)
+    public @ResponseBody
+    Result querySectionSelectedItemIds(String sectionId, String sourceGroupId) {
+        Result result = new Result(Boolean.TRUE);
+        ExamPaperSectionInfo sectionInfo = this.commonDAO.read(ExamPaperSectionInfo.class, sectionId);
+        String hql = "select r.exerciseItemId from ExerciseGroupItemRe r where r.deleteFlag is false and r.exerciseGroupId=:paperGroupId and r.itemOrder>:startIdx and r.itemOrder<=:endIdx and exists ("
+                + " select 1 from ExerciseGroupItemRe r2 where r2.deleteFlag is false and r2.exerciseItemId = r.exerciseItemId  and r2.exerciseGroupId =:sourceGroupId ) order by r.itemOrder asc";
+        List<String> list = commonDAO.findByComplexHql(hql, CollectionUtils.newObjectMap("paperGroupId", sectionInfo.getGroupId(), "startIdx", Integer.valueOf(sectionInfo.getItemStartOrder()), "endIdx", Integer.valueOf(sectionInfo.getItemEndOrder()), "sourceGroupId", sourceGroupId), String.class);
+        result.addData("list", list);
+        return result;
+    }
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/dao/ExamDao.java b/src/main/java/com/qxueyou/scc/exam/dao/ExamDao.java
new file mode 100644
index 0000000..f3bcce9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/dao/ExamDao.java
@@ -0,0 +1,16 @@
+package com.qxueyou.scc.exam.dao;
+
+import com.qxueyou.scc.exam.model.ExamInfo;
+
+/**
+ * 测试集成的JPA使用
+ * @author kevin
+ *
+ */
+public interface ExamDao {
+	
+	 ExamInfo findByName(String name); 
+	 
+	 void saveOrUpdate(ExamInfo examInfo); 
+	  
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/dao/ExamDaoImpl.java b/src/main/java/com/qxueyou/scc/exam/dao/ExamDaoImpl.java
new file mode 100644
index 0000000..8d886a3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/dao/ExamDaoImpl.java
@@ -0,0 +1,31 @@
+package com.qxueyou.scc.exam.dao;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.exam.model.ExamInfo;
+
+/**
+ * 测试集成JPA使用
+ * @author kevin
+ *
+ */
+@Repository
+public class ExamDaoImpl implements ExamDao {
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Override
+	public ExamInfo findByName(String name) {
+		return em.find(ExamInfo.class, name);
+	}
+
+	@Override
+	public void saveOrUpdate(ExamInfo examInfo) {
+		em.persist(examInfo);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/dao/ExamPaperSectionDAO.java b/src/main/java/com/qxueyou/scc/exam/dao/ExamPaperSectionDAO.java
new file mode 100644
index 0000000..85def18
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/dao/ExamPaperSectionDAO.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.exam.dao;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.service.ICacheService;
+
+@Repository
+public class ExamPaperSectionDAO extends BaseDAO{
+	
+	@Autowired
+	ICacheService cacheService;
+	
+	public void deleteItem(String sectionId,List<String> exerciseIds) {
+		for(String exerciseId:exerciseIds) {
+			cacheService.lstRemove(getKey(sectionId), exerciseId);
+		}
+	}
+	
+	public void deleteSectionCache(String sectionId) {
+		cacheService.delete(getKey(sectionId));
+	}
+
+	private String getKey(String sectionId) {
+		return "lst_section_exerciseIds_"+sectionId;
+	}
+	
+	public void addItem(String sectionId,List<String> exerciseIds) {
+		for(String exerciseId:exerciseIds) {
+			cacheService.lstRightPush(getKey(sectionId), exerciseId);
+		}
+	}
+	
+	public void addItem(String sectionId,String exerciseId) {
+		cacheService.lstRightPush(getKey(sectionId), exerciseId);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<String> getItems(String sectionId) {
+		
+		List<Object> ids = cacheService.lstAll(getKey(sectionId));
+		
+		if(ids==null) {
+			return Collections.EMPTY_LIST;
+		}
+		
+		List<String> result = new ArrayList<String>(ids.size());
+		
+		for(Object id:ids) {
+			result.add((String)id);
+		}
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamBatchClassRe.java b/src/main/java/com/qxueyou/scc/exam/model/ExamBatchClassRe.java
new file mode 100644
index 0000000..85fb65f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamBatchClassRe.java
@@ -0,0 +1,203 @@
+package com.qxueyou.scc.exam.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.ITrace;
+
+import java.sql.Timestamp;
+import java.util.Date;
+
+
+/**
+ * The persistent class for the exam_class_re database table.
+ * 
+ */
+@Entity
+@Table(name="exam_class_re")
+@NamedQuery(name="ExamBatchClassRe.findAll", query="SELECT e FROM ExamBatchClassRe e")
+public class ExamBatchClassRe implements Serializable,ITrace {
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -6330667523083207931L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXAM_CLASS_RE_ID", unique=true,nullable=false, length=32)
+	private String examClassReId;
+
+	@Column(name="CLASS_ID")
+	private String classId;
+	
+	@Column(name="CLASS_NAME")
+	private String className;
+
+	@Column(name="EXAM_BATCH_ID")
+	private String examBatchId;
+
+	@Column(name="EXAM_ID")
+	private String examId;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "EXAM_BATCH_ID",referencedColumnName="EXAM_BATCH_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExamBatchInfo examBatchInfo;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "CLASS_ID",referencedColumnName="CLASS_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ClsClass classes;
+
+	public ExamBatchClassRe() {
+	}
+	
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public ClsClass getClasses() {
+		return classes;
+	}
+
+	public void setClasses(ClsClass classes) {
+		this.classes = classes;
+	}
+
+	public String getExamClassReId() {
+		return this.examClassReId;
+	}
+
+	public void setExamClassReId(String examClassReId) {
+		this.examClassReId = examClassReId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public void setCreateTime(Timestamp createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getExamBatchId() {
+		return this.examBatchId;
+	}
+
+	public void setExamBatchId(String examBatchId) {
+		this.examBatchId = examBatchId;
+	}
+
+	public String getExamId() {
+		return this.examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamBatchInfo.java b/src/main/java/com/qxueyou/scc/exam/model/ExamBatchInfo.java
new file mode 100644
index 0000000..4e0e00f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamBatchInfo.java
@@ -0,0 +1,270 @@
+package com.qxueyou.scc.exam.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the exam_batch_info database table. 试卷批次表
+ */
+@Entity
+@Table(name = "exam_batch_info")
+@NamedQuery(name = "ExamBatchInfo.findAll", query = "SELECT e FROM ExamBatchInfo e")
+public class ExamBatchInfo implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "EXAM_BATCH_ID", unique = true, nullable = false, length = 32)
+	private String examBatchId;
+
+	@Column(name = "EXAM_BATCH_NO")
+	private short examBatchNo;
+
+	@Column(name = "EXAM_ID")
+	private String examId;
+
+	@Column(name = "classRoom_id")
+	private String classRoomID;
+
+	@Column(name = "examRoom_id")
+	private String examRoomID;
+
+	@Column(name = "examRoom_name")
+	private String examRoomName;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name = "END_TIME")
+	private Date endTime;
+
+	@Column(name = "BATCH_STATUS")
+	private short batchStatus;
+
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "EXAM_ID",referencedColumnName="EXAM_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExamInfo examInfo;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "examBatchInfo")
+	@Where(clause="DELETE_FLAG=0")
+	private List<ExamBatchClassRe> reClasses;
+	
+	@Transient
+	private String examName;
+	
+	public String getExamName() {
+		return examName;
+	}
+
+	public void setExamName(String examName) {
+		this.examName = examName;
+	}
+
+	public ExamInfo getExamInfo() {
+		return examInfo;
+	}
+
+	public void setExamInfo(ExamInfo examInfo) {
+		this.examInfo = examInfo;
+	}
+
+	public List<ExamBatchClassRe> getReClasses() {
+		return reClasses;
+	}
+
+	public void setReClasses(List<ExamBatchClassRe> reClasses) {
+		this.reClasses = reClasses;
+	}
+
+	public ExamBatchInfo() {
+	}
+	
+	public String getExamBatchId() {
+		return examBatchId;
+	}
+
+	public void setExamBatchId(String examBatchId) {
+		this.examBatchId = examBatchId;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public short getExamBatchNo() {
+		return examBatchNo;
+	}
+
+	public void setExamBatchNo(short examBatchNo) {
+		this.examBatchNo = examBatchNo;
+	}
+
+	public String getExamId() {
+		return examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public short getBatchStatus() {
+		return batchStatus;
+	}
+
+	public void setBatchStatus(short batchStatus) {
+		this.batchStatus = batchStatus;
+	}
+
+	public String getClassRoomID() {
+		return classRoomID;
+	}
+
+	public void setClassRoomID(String classRoomID) {
+		this.classRoomID = classRoomID;
+	}
+
+	public String getExamRoomID() {
+		return examRoomID;
+	}
+
+	public void setExamRoomID(String examRoomID) {
+		this.examRoomID = examRoomID;
+	}
+
+	public String getExamRoomName() {
+		return examRoomName;
+	}
+
+	public void setExamRoomName(String examRoomName) {
+		this.examRoomName = examRoomName;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamInfo.java b/src/main/java/com/qxueyou/scc/exam/model/ExamInfo.java
new file mode 100644
index 0000000..0a231dc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamInfo.java
@@ -0,0 +1,455 @@
+package com.qxueyou.scc.exam.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+/**
+ * The persistent class for the exam_info database table. 考试表
+ */
+
+@Entity
+@Table(name = "exam_info")
+@NamedQuery(name = "ExamInfo.findAll", query = "SELECT e FROM ExamInfo e")
+@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})
+public class ExamInfo implements Serializable,ITrace {
+	
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6364452839157071345L;
+
+	/*
+	 * 草稿 :0  已发布:1
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	public static final short STATUS_PUBLISH = 1;
+	
+	/**
+	 * 试卷类型:1:统一卷,2:AB卷,3:ABC卷,4:随机组卷,5:随机组卷2
+	 */
+	public static final short EXAM_TYPE_A =1;
+	public static final short EXAM_TYPE_AB =2;
+	public static final short EXAM_TYPE_ABC =3;
+	public static final short EXAM_TYPE_RANDOM =4;
+	public static final short EXAM_TYPE_RANDOM_BY_GROUP =5;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "EXAM_ID", unique = true, nullable = false, length = 32)
+	private String examId;
+
+	@Column(name = "DURATION_MIN")
+	private short durationMin;
+
+	@Column(name = "EXAM_NAME")
+	private String examName;
+
+	@Column(name = "EXAM_STATUS")
+	private short examStatus;
+
+	@Column(name = "MAX_LATE_MIN")
+	private short maxLateMin;
+
+	@Column(name = "ORG_ID")
+	private String orgId;
+	
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+
+	@Column(name = "PASSING_SCORE")
+	private float passingScore;
+
+	@Column(name = "SHOW_ANALYSE")
+	private short showAnalyse;
+
+	@Column(name = "SHOW_CORRECT_ANSWER")
+	private short showCorrectAnswer;
+
+	@Column(name = "SHOW_SCORE")
+	private short showScore;	
+	
+	@Column(name = "SHOW_SCORE_TIME")
+	private int showScoreTime;
+
+	@Column(name = "SHOW_TYPE")
+	private short showType;
+
+	@Column(name = "TOTAL_SCORE")
+	private float totalScore;
+
+	@Column(name = "EXAM_TYPE")
+	private short examType;
+
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+//	//考试试卷关联
+//	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+//	@JoinTable(name = "EXAM_RE_EXAM_PAPER", joinColumns = { 
+//			@JoinColumn(name = "EXAM_ID") }, 
+//			inverseJoinColumns = { @JoinColumn(name = "EXAM_PAPER_ID") })
+//	@GeneratedValue(generator = "hibernate-uuid")
+//	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+//	@CollectionId(
+//		        columns = @Column(name="RELATION_ID"), 
+//		        type=@Type(type="string"), 
+//		        generator = "hibernate-uuid"
+//		    )
+//	@Where(clause="DELETE_FLAG=0")
+//	@JsonIgnore
+//	private List<ExamPaperInfo> papers;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "examInfo")
+	@OrderBy(value= "startTime asc")
+//	@JsonIgnore
+	@Where(clause="DELETE_FLAG=0")
+	private List<ExamBatchInfo> examBatchInfos;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "examInfo")
+	@Where(clause="DELETE_FLAG=0")
+	private List<ExamReExamPaper> reExamPapers;
+	
+	@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID",referencedColumnName="SUBJECT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Subject subject;
+	
+	@OneToMany(cascade=CascadeType.ALL ,fetch = FetchType.LAZY)
+	@JoinColumn(name = "EXERCISE_INFO_ID",referencedColumnName="EXAM_ID",updatable=false,insertable=false)
+	@Where(clause="DELETE_FLAG=0")
+	private List<ExerciseItemSet> exerciseItemSets;
+	
+	@Transient
+	private String[] paperNames;
+	
+	@Transient
+	String subjectName;
+
+	@Transient
+	Date examStartTime;
+	
+	@Transient
+	Date examEndTime;
+	
+	@Transient
+	private String sourceGroupIds;
+	
+	@Transient
+	private String sourceGroupNames;
+
+	public ExamInfo() {
+	}
+	
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+
+	public List<ExamBatchInfo> getExamBatchInfos() {
+		return examBatchInfos;
+	}
+
+	public void setExamBatchInfos(List<ExamBatchInfo> examBatchInfos) {
+		this.examBatchInfos = examBatchInfos;
+	}
+
+	public List<ExamReExamPaper> getReExamPapers() {
+		return reExamPapers;
+	}
+
+	public void setReExamPapers(List<ExamReExamPaper> reExamPapers) {
+		this.reExamPapers = reExamPapers;
+	}
+
+	public Date getExamStartTime() {
+		return examStartTime;
+	}
+
+
+	public void setExamStartTime(Date examStartTime) {
+		this.examStartTime = examStartTime;
+	}
+
+
+	public Date getExamEndTime() {
+		return examEndTime;
+	}
+
+
+	public void setExamEndTime(Date examEndTime) {
+		this.examEndTime = examEndTime;
+	}
+	
+	public void setPaperNames(String[] paperNames) {
+		this.paperNames = paperNames;
+	}
+	
+	public String[] getPaperNames() {
+		return paperNames;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public String getExamId() {
+		return this.examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public short getDurationMin() {
+		return this.durationMin;
+	}
+
+	public void setDurationMin(short durationMin) {
+		this.durationMin = durationMin;
+	}
+
+	public String getExamName() {
+		return this.examName;
+	}
+
+	public void setExamName(String examName) {
+		this.examName = examName;
+	}
+
+	public short getMaxLateMin() {
+		return this.maxLateMin;
+	}
+
+	public void setMaxLateMin(short maxLateMin) {
+		this.maxLateMin = maxLateMin;
+	}
+
+	public String getOrgId() {
+		return this.orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public short getShowAnalyse() {
+		return this.showAnalyse;
+	}
+
+	public void setShowAnalyse(short showAnalyse) {
+		this.showAnalyse = showAnalyse;
+	}
+
+	public short getShowCorrectAnswer() {
+		return this.showCorrectAnswer;
+	}
+
+	public void setShowCorrectAnswer(short showCorrectAnswer) {
+		this.showCorrectAnswer = showCorrectAnswer;
+	}
+
+	public short getShowScore() {
+		return this.showScore;
+	}
+
+	public void setShowScore(short showScore) {
+		this.showScore = showScore;
+	}
+
+	public int getShowScoreTime() {
+		return showScoreTime;
+	}
+
+	public void setShowScoreTime(int showScoreTime) {
+		this.showScoreTime = showScoreTime;
+	}
+
+	public short getShowType() {
+		return this.showType;
+	}
+
+	public void setShowType(short showType) {
+		this.showType = showType;
+	}
+
+	public short getExamType() {
+		return examType;
+	}
+
+	public void setExamType(short examType) {
+		this.examType = examType;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public short getExamStatus() {
+		return examStatus;
+	}
+
+	public void setExamStatus(short examStatus) {
+		this.examStatus = examStatus;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public float getPassingScore() {
+		return passingScore;
+	}
+
+	public void setPassingScore(float passingScore) {
+		this.passingScore = passingScore;
+	}
+
+	public float getTotalScore() {
+		return totalScore;
+	}
+
+	public void setTotalScore(float totalScore) {
+		this.totalScore = totalScore;
+	}
+
+	public List<ExerciseItemSet> getExerciseItemSets() {
+		return exerciseItemSets;
+	}
+
+	public void setExerciseItemSets(List<ExerciseItemSet> exerciseItemSets) {
+		this.exerciseItemSets = exerciseItemSets;
+	}
+
+	public String getSourceGroupIds() {
+		return sourceGroupIds;
+	}
+
+	public void setSourceGroupIds(String sourceGroupIds) {
+		this.sourceGroupIds = sourceGroupIds;
+	}
+
+	public String getSourceGroupNames() {
+		return sourceGroupNames;
+	}
+
+	public void setSourceGroupNames(String sourceGroupNames) {
+		this.sourceGroupNames = sourceGroupNames;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamItemV.java b/src/main/java/com/qxueyou/scc/exam/model/ExamItemV.java
new file mode 100644
index 0000000..3f3452c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamItemV.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.exam.model;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "exam_item_v")
+public class ExamItemV implements java.io.Serializable {
+	
+	/**
+	 * uid
+	 */
+	private static final long serialVersionUID = 7252388002860449620L;
+
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "groupId", column = @Column(name = "GROUP_ID")),
+			@AttributeOverride(name = "exerciseItemId", column = @Column(name = "EXERCISE_ITEM_ID")),
+			})
+	private ExamItemVId id;
+	
+	@Column(name="GROUP_NAME")
+	private String groupName;
+	
+	@Column(name="ITEM_ORDER")
+	private String itemOrder;
+	
+	@Column(name="ITEM_TYPE")
+	private short itemType;
+	
+	@Column(name="ITEM_ANSWER")
+	private String itemAnswer;
+	
+	@Column(name = "ITEM_SCORE")
+	private float itemScore;
+	
+	public ExamItemV() {
+	}
+
+	public ExamItemVId getId() {
+		return id;
+	}
+
+	public void setId(ExamItemVId id) {
+		this.id = id;
+	}
+
+	public String getGroupName() {
+		return groupName;
+	}
+
+	public void setGroupName(String groupName) {
+		this.groupName = groupName;
+	}
+
+	public String getItemOrder() {
+		return itemOrder;
+	}
+
+	public void setItemOrder(String itemOrder) {
+		this.itemOrder = itemOrder;
+	}
+
+	public short getItemType() {
+		return itemType;
+	}
+
+	public void setItemType(short itemType) {
+		this.itemType = itemType;
+	}
+
+	public String getItemAnswer() {
+		return itemAnswer;
+	}
+
+	public void setItemAnswer(String itemAnswer) {
+		this.itemAnswer = itemAnswer;
+	}
+
+	public float getItemScore() {
+		return itemScore;
+	}
+
+	public void setItemScore(float itemScore) {
+		this.itemScore = itemScore;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamItemVId.java b/src/main/java/com/qxueyou/scc/exam/model/ExamItemVId.java
new file mode 100644
index 0000000..dbad33e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamItemVId.java
@@ -0,0 +1,72 @@
+package com.qxueyou.scc.exam.model;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * ExamItemVId generated by hbm2java
+ */
+@Embeddable
+public class ExamItemVId implements java.io.Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -3640937536495423279L;
+
+	@Column(name = "GROUP_ID")
+	private String groupId;
+	
+	@Column(name = "EXERCISE_ITEM_ID")
+	private String exerciseItemId;
+
+	public ExamItemVId() {
+	}
+
+	public ExamItemVId(String groupId, String exerciseItemId) {
+		this.groupId = groupId;
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getExerciseItemId() {
+		return exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof ExamItemVId))
+			return false;
+		
+		ExamItemVId castOther = (ExamItemVId) other;
+
+		return (
+				((this.getGroupId() == castOther.getGroupId()) || (this.getGroupId() != null
+				&& castOther.getGroupId() != null && this.getGroupId().equals(castOther.getGroupId())))
+		
+				&& ((this.getExerciseItemId() == castOther.getExerciseItemId()) || (this.getExerciseItemId() != null
+				&& castOther.getExerciseItemId() != null && this.getExerciseItemId().equals(castOther.getExerciseItemId())))
+		);
+	}
+
+	public int hashCode() {
+		int result = 17;
+		result = 37 * result + (getGroupId() == null ? 0 : this.getGroupId().hashCode());
+		result = 37 * result + (getExerciseItemId() == null ? 0 : this.getExerciseItemId().hashCode());
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamPaperInfo.java b/src/main/java/com/qxueyou/scc/exam/model/ExamPaperInfo.java
new file mode 100644
index 0000000..fd65fd3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamPaperInfo.java
@@ -0,0 +1,333 @@
+package com.qxueyou.scc.exam.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+
+/**
+ * The persistent class for the exam_paper_info database table. 试卷表
+ */
+@Entity
+@Table(name = "exam_paper_info")
+@NamedQuery(name = "ExamPaperInfo.findAll", query = "SELECT e FROM ExamPaperInfo e")
+public class ExamPaperInfo implements Serializable,ITrace{
+	private static final long serialVersionUID = 1L;
+	
+	/*
+	 * 草稿 :0  已发布:1
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	public static final short STATUS_PUBLISH = 1;
+	
+	@Id
+	@Column(name = "EXAM_PAPER_ID", unique = true, nullable = false, length = 32)
+	private String examPaperId;
+
+	@Column(name = "DIFFICULT_LEVEL")
+	private short difficultLevel;
+
+	@Column(name = "EXAM_PAPER_NAME")
+	private String examPaperName;
+
+	@Column(name = "PAPER_STATUS")
+	private short paperStatus;
+
+	@Column(name = "GROUP_ID")
+	private String groupId;
+
+	@Column(name = "ORG_ID")
+	private String orgId;
+
+	@Column(name = "TOTAL_SCORE")
+	private short totalScore;
+
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "examPaperInfo")
+	@Where(clause="DELETE_FLAG=0")
+	@JsonIgnore
+	private List<ExamReExamPaper> reExamPapers;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "examPaperInfo")
+	@OrderBy(value="sectionOrder ASC")
+	@Where(clause="DELETE_FLAG=0")
+	List<ExamPaperSectionInfo> sectionInfos;
+	
+//	@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+//	@JoinColumn(name = "GROUP_ID",referencedColumnName="GROUP_ID",updatable=false,insertable=false)
+	@Transient
+	private ExerciseGroup exerciseGroup;
+	
+	@Transient
+	private int singleSelectCount;
+	
+	@Transient
+	private int multiSelectCount;
+	
+	@Transient
+	private int judgeCount;
+	
+	@Transient
+	private int questionCount;
+	
+	@Transient
+	private int fillBlanksCount;
+	
+	@Transient
+	private String relationPaperCode;
+	
+	public ExamPaperInfo() {
+	}
+	
+	public List<ExamPaperSectionInfo> getSectionInfos() {
+		return sectionInfos;
+	}
+
+	public void setSectionInfos(List<ExamPaperSectionInfo> sectionInfos) {
+		this.sectionInfos = sectionInfos;
+	}
+
+	public String getRelationPaperCode() {
+		return relationPaperCode;
+	}
+
+	public void setRelationPaperCode(String relationPaperCode) {
+		this.relationPaperCode = relationPaperCode;
+	}
+
+	public ExerciseGroup getExerciseGroup() {
+		return exerciseGroup;
+	}
+
+	public void setExerciseGroup(ExerciseGroup exerciseGroup) {
+		this.exerciseGroup = exerciseGroup;
+	}
+
+	public String getExamPaperId() {
+		return this.examPaperId;
+	}
+
+	public void setExamPaperId(String examPaperId) {
+		this.examPaperId = examPaperId;
+	}
+
+	public short getDifficultLevel() {
+		return this.difficultLevel;
+	}
+
+	public void setDifficultLevel(short difficultLevel) {
+		this.difficultLevel = difficultLevel;
+	}
+
+	public String getExamPaperName() {
+		return this.examPaperName;
+	}
+
+	public void setExamPaperName(String examPaperName) {
+		this.examPaperName = examPaperName;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getOrgId() {
+		return this.orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public short getTotalScore() {
+		return this.totalScore;
+	}
+
+	public void setTotalScore(short totalScore) {
+		this.totalScore = totalScore;
+	}
+
+	public short getPaperStatus() {
+		return paperStatus;
+	}
+
+	public void setPaperStatus(short paperStatus) {
+		this.paperStatus = paperStatus;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public List<ExamReExamPaper> getReExamPapers() {
+		return reExamPapers;
+	}
+
+	public void setReExamPapers(List<ExamReExamPaper> reExamPapers) {
+		this.reExamPapers = reExamPapers;
+	}
+
+	public int getSingleSelectCount() {
+		return singleSelectCount;
+	}
+
+	public void setSingleSelectCount(int singleSelectCount) {
+		this.singleSelectCount = singleSelectCount;
+	}
+
+	public int getMultiSelectCount() {
+		return multiSelectCount;
+	}
+
+	public void setMultiSelectCount(int multiSelectCount) {
+		this.multiSelectCount = multiSelectCount;
+	}
+
+	public int getJudgeCount() {
+		return judgeCount;
+	}
+
+	public void setJudgeCount(int judgeCount) {
+		this.judgeCount = judgeCount;
+	}
+
+	public int getQuestionCount() {
+		return questionCount;
+	}
+
+	public void setQuestionCount(int questionCount) {
+		this.questionCount = questionCount;
+	}
+
+	public int getFillBlanksCount() {
+		return fillBlanksCount;
+	}
+
+	public void setFillBlanksCount(int fillBlanksCount) {
+		this.fillBlanksCount = fillBlanksCount;
+	}
+
+//	public List<ExamInfo> getExams() {
+//		return exams;
+//	}
+//
+//	public void setExams(List<ExamInfo> exams) {
+//		this.exams = exams;
+//	}
+
+//	public ExerciseGroup getGroup() {
+//		return group;
+//	}
+//
+//	public void setGroup(ExerciseGroup group) {
+//		this.group = group;
+//	}
+
+//	public List<ExamPaperSectionInfo> getSectionInfos() {
+//		return sectionInfos;
+//	}
+//
+//	public void setSectionInfos(List<ExamPaperSectionInfo> sectionInfos) {
+//		this.sectionInfos = sectionInfos;
+//	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamPaperSectionInfo.java b/src/main/java/com/qxueyou/scc/exam/model/ExamPaperSectionInfo.java
new file mode 100644
index 0000000..0d43cc1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamPaperSectionInfo.java
@@ -0,0 +1,241 @@
+package com.qxueyou.scc.exam.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+
+
+/**
+ * The persistent class for the exam_paper_section_info database table.
+ * 
+ */
+@Entity
+@Table(name="exam_paper_section_info")
+@NamedQuery(name="ExamPaperSectionInfo.findAll", query="SELECT e FROM ExamPaperSectionInfo e")
+public class ExamPaperSectionInfo implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name="SECTION_ID", unique=true,nullable=false, length=32)
+	private String sectionId;
+
+	@Column(name="GROUP_ID")
+	private String groupId;
+	
+	@Column(name="EXAM_PAPER_ID")
+	private String examPaperId;
+
+	@Column(name="ITEM_END_ORDER")
+	private short itemEndOrder;
+
+	@Column(name="ITEM_START_ORDER")
+	private short itemStartOrder;
+
+	@Column(name="SECTION_DESC")
+	private String sectionDesc;
+
+	@Column(name="SECTION_NAME")
+	private String sectionName;
+
+	@Column(name="SECTION_ORDER")
+	private int sectionOrder;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "EXAM_PAPER_ID",referencedColumnName="EXAM_PAPER_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExamPaperInfo examPaperInfo;
+	
+	@Transient
+	List<ExerciseItem> lstExerciseItem;
+
+	public ExamPaperSectionInfo() {
+	}
+
+	public String getExamPaperId() {
+		return examPaperId;
+	}
+
+	public void setExamPaperId(String examPaperId) {
+		this.examPaperId = examPaperId;
+	}
+
+
+	public List<ExerciseItem> getLstExerciseItem() {
+		return lstExerciseItem;
+	}
+
+	public void setLstExerciseItem(List<ExerciseItem> lstExerciseItem) {
+		this.lstExerciseItem = lstExerciseItem;
+	}
+
+	public ExamPaperInfo getExamPaperInfo() {
+		return examPaperInfo;
+	}
+
+	public void setExamPaperInfo(ExamPaperInfo examPaperInfo) {
+		this.examPaperInfo = examPaperInfo;
+	}
+
+	public String getSectionId() {
+		return this.sectionId;
+	}
+
+	public void setSectionId(String sectionId) {
+		this.sectionId = sectionId;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public short getItemEndOrder() {
+		return this.itemEndOrder;
+	}
+
+	public void setItemEndOrder(short itemEndOrder) {
+		this.itemEndOrder = itemEndOrder;
+	}
+
+	public short getItemStartOrder() {
+		return this.itemStartOrder;
+	}
+
+	public void setItemStartOrder(short itemStartOrder) {
+		this.itemStartOrder = itemStartOrder;
+	}
+
+	public String getSectionDesc() {
+		return this.sectionDesc;
+	}
+
+	public void setSectionDesc(String sectionDesc) {
+		this.sectionDesc = sectionDesc;
+	}
+
+	public String getSectionName() {
+		return this.sectionName;
+	}
+
+	public void setSectionName(String sectionName) {
+		this.sectionName = sectionName;
+	}
+
+	public int getSectionOrder() {
+		return this.sectionOrder;
+	}
+
+	public void setSectionOrder(int sectionOrder) {
+		this.sectionOrder = sectionOrder;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamReExamPaper.java b/src/main/java/com/qxueyou/scc/exam/model/ExamReExamPaper.java
new file mode 100644
index 0000000..377dc03
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamReExamPaper.java
@@ -0,0 +1,192 @@
+package com.qxueyou.scc.exam.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the exam_re_exam_paper database table. 考试试卷关联表
+ */
+@Entity
+@Table(name = "exam_re_exam_paper")
+@NamedQuery(name = "ExamReExamPaper.findAll", query = "SELECT e FROM ExamReExamPaper e")
+public class ExamReExamPaper implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "RELATION_ID", unique = true, nullable = false, length = 32)
+	private String relationId;
+
+	@Column(name = "EXAM_ID")
+	private String examId;
+
+	@Column(name = "EXAM_PAPER_ID")
+	private String examPaperId;
+
+	@Column(name = "RELATION_PAPER_CODE")
+	private String relationPaperCode;
+	
+	@Column(name = "EXAM_PAPER_NAME")
+	private String examPaperName;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "EXAM_ID",referencedColumnName="EXAM_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExamInfo examInfo;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "EXAM_PAPER_ID",referencedColumnName="EXAM_PAPER_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExamPaperInfo examPaperInfo;
+
+	public ExamReExamPaper() {
+	}
+	
+	public String getExamPaperName() {
+		return examPaperName;
+	}
+
+	public void setExamPaperName(String examPaperName) {
+		this.examPaperName = examPaperName;
+	}
+
+	public String getRelationId() {
+		return this.relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getExamId() {
+		return this.examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public String getExamPaperId() {
+		return this.examPaperId;
+	}
+
+	public void setExamPaperId(String examPaperId) {
+		this.examPaperId = examPaperId;
+	}
+
+	public String getRelationPaperCode() {
+		return this.relationPaperCode;
+	}
+
+	public void setRelationPaperCode(String relationPaperCode) {
+		this.relationPaperCode = relationPaperCode;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamResultV.java b/src/main/java/com/qxueyou/scc/exam/model/ExamResultV.java
new file mode 100644
index 0000000..039d5fd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamResultV.java
@@ -0,0 +1,339 @@
+package com.qxueyou.scc.exam.model;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+@Entity
+@Table(name = "exam_result_v")
+public class ExamResultV implements java.io.Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8897668335729792129L;
+	
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "examBatchId", column = @Column(name = "EXAM_BATCH_ID")),
+			@AttributeOverride(name = "studentNo", column = @Column(name = "STUDENT_NO")),
+			@AttributeOverride(name = "classId", column = @Column(name = "CLASS_ID")),
+			})
+	private ExamResultVId id;
+	
+	@Column(name="EXAM_ID")
+	private String examId;
+	
+	@Column(name="STUDENT_NAME")
+	private String studentName;
+	
+	@Column(name="RECORD_ID")
+	private String recordId;
+	
+	@Column(name="EXAM_NAME")
+	private String examName;
+	
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+	
+	@Column(name="SUBJECT_Name")
+	private String subjectName;
+	
+	@Column(name = "TOTAL_SCORE")
+	private float totalScore;
+	
+	@Column(name = "PASSING_SCORE")
+	private BigDecimal passingScore;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name = "END_TIME")
+	private Date endTime;
+	
+	@Column(name="CLASS_NAME")
+	private String className;
+	
+	@Column(name="PAPER_NAME")
+	private String paperName;
+	
+	@Column(name="RELATION_PAPER_CODE")
+	private String paperCode;
+	
+	@Column(name="USER_ID")
+	private String userId;
+	
+	@Column(name="ACCURACY")
+	private BigDecimal accuracy;
+
+	@Column(name="COMPLETION_RATE")
+	private BigDecimal completionRate;
+	
+	@Column(name="SCORE")
+	private BigDecimal score;
+
+	@Column(name="STATUS") 
+	private String status;
+	
+	@Column(name="EXERCISE_GROUP_ID")
+	private String exerciseGroupId;
+	
+	@Column(name = "EXAM_BATCH_NO")
+	private short examBatchNo;
+	
+	@Column(name = "EXAM_STATUS")
+	private short examStatus;
+	
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "SUBMIT_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+	
+	@Column(name = "REMAINING_SECONDS")
+	private Integer remainingSeconds;
+	
+	@Column(name = "SEX")
+	private short sex;
+	
+	@Column(name = "MOBILE_PHONE")
+	private String mobilePhone;
+	
+
+	public ExamResultV() {
+	}
+
+	public String getExamId() {
+		return examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+	
+	public String getStudentName() {
+		return studentName;
+	}
+
+	public void setStudentName(String studentName) {
+		this.studentName = studentName;
+	}	
+	
+	public String getRecordId() {
+		return recordId;
+	}
+
+	public void setRecordId(String recordId) {
+		this.recordId = recordId;
+	}
+
+	public String getExamName() {
+		return examName;
+	}
+
+	public void setExamName(String examName) {
+		this.examName = examName;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getPaperName() {
+		return paperName;
+	}
+
+	public void setPaperName(String paperName) {
+		this.paperName = paperName;
+	}
+
+	public String getPaperCode() {
+		return paperCode;
+	}
+
+	public void setPaperCode(String paperCode) {
+		this.paperCode = paperCode;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public BigDecimal getPassingScore() {
+		return passingScore;
+	}
+
+	public void setPassingScore(BigDecimal passingScore) {
+		this.passingScore = passingScore;
+	}
+	
+	public ExamResultVId getId() {
+		return id;
+	}
+
+	public void setId(ExamResultVId id) {
+		this.id = id;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public short getExamBatchNo() {
+		return examBatchNo;
+	}
+
+	public void setExamBatchNo(short examBatchNo) {
+		this.examBatchNo = examBatchNo;
+	}
+
+	public short getExamStatus() {
+		return examStatus;
+	}
+
+	public void setExamStatus(short examStatus) {
+		this.examStatus = examStatus;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public Integer getRemainingSeconds() {
+		return remainingSeconds;
+	}
+
+	public void setRemainingSeconds(Integer remainingSeconds) {
+		this.remainingSeconds = remainingSeconds;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public short getSex() {
+		return sex;
+	}
+
+	public void setSex(short sex) {
+		this.sex = sex;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public float getTotalScore() {
+		return totalScore;
+	}
+
+	public void setTotalScore(float totalScore) {
+		this.totalScore = totalScore;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/model/ExamResultVId.java b/src/main/java/com/qxueyou/scc/exam/model/ExamResultVId.java
new file mode 100644
index 0000000..78afc62
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/model/ExamResultVId.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.exam.model;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * ExamResultVId generated by hbm2java
+ */
+@Embeddable
+public class ExamResultVId implements java.io.Serializable {
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = 8692825818826083872L;
+	
+	@Column(name = "EXAM_BATCH_ID")
+	private String examBatchId;
+	
+	@Column(name = "CLASS_ID")
+	private String classId;
+	
+	@Column(name = "STUDENT_NO")
+	private String studentNo;
+
+	public ExamResultVId() {
+	}
+
+	public ExamResultVId(String examBatchId, String classId, String studentNo) {
+		this.examBatchId = examBatchId;
+		this.classId = classId;
+		this.studentNo = studentNo;
+	}
+	
+	
+	public String getExamBatchId() {
+		return examBatchId;
+	}
+
+	public void setExamBatchId(String examBatchId) {
+		this.examBatchId = examBatchId;
+	}
+
+	
+	public String getStudentNo() {
+		return studentNo;
+	}
+
+	public void setStudentNo(String studentNo) {
+		this.studentNo = studentNo;
+	}
+
+	
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof ExamResultVId))
+			return false;
+		ExamResultVId castOther = (ExamResultVId) other;
+
+		return (
+				((this.getExamBatchId() == castOther.getExamBatchId()) || (this.getExamBatchId() != null
+				&& castOther.getExamBatchId() != null && this.getExamBatchId().equals(castOther.getExamBatchId())))
+		
+				&& ((this.getStudentNo() == castOther.getStudentNo()) || (this.getStudentNo() != null
+				&& castOther.getStudentNo() != null && this.getStudentNo().equals(castOther.getStudentNo())))
+		
+				&& ((this.getClassId() == castOther.getClassId()) || (this.getClassId() != null
+				&& castOther.getClassId() != null && this.getClassId().equals(castOther.getClassId())))
+		);
+	}
+
+	public int hashCode() {
+		int result = 17;
+		result = 37 * result + (getExamBatchId() == null ? 0 : this.getExamBatchId().hashCode());
+		result = 37 * result + (getStudentNo() == null ? 0 : this.getStudentNo().hashCode());
+		result = 37 * result + (getClassId() == null ? 0 : this.getClassId().hashCode());
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/IExamBatchService.java b/src/main/java/com/qxueyou/scc/exam/service/IExamBatchService.java
new file mode 100644
index 0000000..42739d8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/IExamBatchService.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exam.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exam.model.ExamBatchClassRe;
+import com.qxueyou.scc.exam.model.ExamBatchInfo;
+
+/**
+ * 考试批次服务类
+ *
+ * @author kevin
+ * @createTime 2018-03-11
+ */
+public interface IExamBatchService {
+
+	/**
+	 * 查询考试批次数量
+	 * @param param 查询参数
+	 * @return
+	 */
+	int queryExamBatchCount(Map<String,Object> param);
+
+
+	/**
+	 * 查询考试批次列表
+	 * @param param  查询参数
+	 * @param page   分页对象
+	 * @return
+	 */
+	List<ExamBatchInfo> queryExamBatchList(Map<String,Object> param,Pager page);
+
+	List<Map<String,Object>> queryListForIdName();
+
+	List<String> queryComNameByBatchId(String id);
+	List<String> queryStudentNoByComNameAndBatch(String comName,String classId);
+
+
+	/**
+	 * 新增考试批次
+	 *
+	 * @param examBatchInfo
+	 *
+	 * @return
+	 */
+	String addExamBatch(ExamBatchInfo examBatchInfo);
+
+	/**
+	 * 删除考试批次
+	 *
+	 * @param elxamBatchIds
+	 *            考试批次id
+	 * @return
+	 */
+	Result deleteExamBatch(String[] elxamBatchIds);
+
+	/**
+	 * 更新考试批次信息
+	 *
+	 * @param noticeId
+	 *            考试批次id
+	 * @return
+	 */
+	Result updateExamBatch(ExamBatchInfo examBatchInfo);
+
+	/**
+	 * 考试批次id  查询考试批次
+	 * @param examBatchId
+	 * @return
+	 */
+	ExamBatchInfo queryExamBatchDetail(String examBatchId);
+
+	public ExamBatchClassRe queryExamBatchByClassId(String examBatchId);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/IExamPaperSectionService.java b/src/main/java/com/qxueyou/scc/exam/service/IExamPaperSectionService.java
new file mode 100644
index 0000000..92ddcf3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/IExamPaperSectionService.java
@@ -0,0 +1,109 @@
+package com.qxueyou.scc.exam.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exam.model.ExamPaperSectionInfo;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+
+/**
+ * 试卷部分服务类
+ * 
+ * @author kevin
+ * @createTime 2018-03-11
+ */
+public interface IExamPaperSectionService {
+	
+	/**
+	 * 查询试卷部分数量
+	 * @param param 查询参数
+	 * @return
+	 */
+	int queryExamPaperSectionCount(Map<String,Object> param);
+	
+	
+	/**
+	 * 查询试卷部分列表
+	 * @param param  查询参数
+	 * @param page   分页对象
+	 * @return
+	 */
+	List<ExamPaperSectionInfo> queryExamPaperSectionList(Map<String,Object> param,Pager page);
+	
+
+	/**
+	 * 新增试卷部分
+	 * 
+	 * @param examPaperSectionInfo
+	 *            
+	 * @return
+	 */
+	String addExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo);
+
+	/**
+	 * 删除试卷部分
+	 * 
+	 * @param elxamBatchIds
+	 *            试卷部分id
+	 * @return 1表示删除成功,0表示删除失败
+	 */
+	Result deleteExamPaperSection(String[] elxamBatchIds);
+
+	/**
+	 * 更新试卷部分信息
+	 * 
+	 * @param noticeId
+	 *            试卷部分id
+	 * @return 1表示更新成功,0表示更新失败
+	 */
+	Result updateExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo);
+
+	/**
+	 * 试卷部分id  查询试卷部分
+	 * @param examPaperSectionId
+	 * @return
+	 */
+	ExamPaperSectionInfo queryExamPaperSectionDetail(String examPaperSectionId);
+	
+	/**
+	 * 保存试卷所选题库
+	 * @param param
+	 * @return
+	 * @throws Exception 
+	 */
+	@Deprecated
+	public Result saveExamPaperSectionGroup(String sectionId,String [] selectedGroupIds,Short [] itemTypes) throws Exception;
+	
+	
+	/**
+	 * 保存试卷选题
+	 * @param param
+	 * @return
+	 * @throws Exception 
+	 */
+	public Result saveExamPaperSectionItems(String sectionId,String sourceGroupId,String [] selectedItemIds) throws Exception;
+
+
+	/**
+	 * 删除部分的题目
+	 * @param sectionId
+	 * @param groupId
+	 * @param exerciseItemIds
+	 * @return
+	 */
+	Result deleteSectionItem(String sectionId, String groupId, String[] exerciseItemIds);
+
+	/**
+	 * 部分保存题目分数信息
+	 * @param exerciseGroup
+	 * @return
+	 */
+	Result saveSectionItem(ExerciseGroup exerciseGroup);
+
+
+	BigDecimal updatePaperScore(String groupId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/IExamPaperService.java b/src/main/java/com/qxueyou/scc/exam/service/IExamPaperService.java
new file mode 100644
index 0000000..77249ac
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/IExamPaperService.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.exam.service;
+
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exam.model.ExamPaperInfo;
+
+/**
+ * 试卷服务类
+ * 
+ * @author kevin
+ * @createTime 2018-03-11
+ */
+public interface IExamPaperService {	
+	/**
+	 * 新增试卷
+	 * 
+	 * @param examPaperInfo
+	 *            
+	 * @return
+	 */
+	Result addExamPaper(ExamPaperInfo examPaperInfo);
+
+	/**
+	 * 删除试卷
+	 * 
+	 * @param elxamBatchIds  试卷id
+	 *            
+	 * @return 1表示删除成功,0表示删除失败
+	 */
+	Result deleteExamPaper(String[] elxamBatchIds);
+
+	/**
+	 * 更新试卷信息
+	 * 
+	 * @param noticeId   试卷id
+	 *           
+	 * @return 1表示更新成功,0表示更新失败
+	 */
+	Result updateExamPaper(ExamPaperInfo examPaperInfo);
+
+	/**
+	 * 发布试卷
+	 * 
+	 * @param examPaperIds  试卷的Ids
+	 *           
+	 * @return 1表示发布成功,0表示发布失败
+	 */
+	Result doPublishExamPaper(String[] examPaperIds);
+
+	/**
+	 * 撤回发布的试卷
+	 * 
+	 * @param examPaperIds 试卷的Ids 
+	 *             
+	 * @return 1表示撤回成功,0表示撤回失败失败
+	 */
+	Result doRevokeExamPaper(String[] examPaperIds);
+	
+	/**
+	 * 试卷id  查询试卷
+	 * @param examPaperId
+	 * @return
+	 */
+	ExamPaperInfo queryExamPaperDetail(String examPaperId);
+
+	/**
+	 * 查询考试题目统计信息
+	 * @param examPaperIds
+	 * @return
+	 */
+	Map<String, ExamPaperInfo> queryExamPaperItemsStatistic(String[] examPaperIds);
+	
+	/**
+	 * 根据考试信息和考卷编码获取试卷信息
+	 * @param examId
+	 * @param paperCode
+	 * @return
+	 */
+	ExamPaperInfo queryExamPaperByCode(String examId, String paperCode);
+	
+	/**
+	 * 根据groupId获取试卷信息
+	 * @param groupId
+	 * @return
+	 */
+	ExamPaperInfo queryExamPaperByGroupId(String groupId);
+
+
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/IExamService.java b/src/main/java/com/qxueyou/scc/exam/service/IExamService.java
new file mode 100644
index 0000000..0b0c8fc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/IExamService.java
@@ -0,0 +1,199 @@
+package com.qxueyou.scc.exam.service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exam.model.ExamInfo;
+import com.qxueyou.scc.exam.model.ExamResultV;
+
+/**
+ * 考试服务类
+ *
+ * @author kevin
+ * @createTime 2018-03-11
+ */
+public interface IExamService {
+	/**
+	 * 新增考试
+	 *
+	 * @param examInfo
+	 *
+	 * @return 新增考试ID
+	 */
+	String addExam(ExamInfo examInfo);
+	void addRemedy(String examId, Date startTime, Date endTime);
+
+	/**
+	 * 删除考试
+	 *
+	 * @param elxamIds
+	 *            考试id
+	 * @return
+	 */
+	Result deleteExam(String[] examIds);
+
+	/**
+	 * 更新考试信息
+	 *
+	 * @param noticeId
+	 *            考试id
+	 * @return
+	 */
+	Result updateExam(ExamInfo examInfo);
+
+	/**
+	 * 考试id 查询考试
+	 *
+	 * @param examId
+	 * @return
+	 */
+	ExamInfo queryExamDetail(String examId);
+	ExamInfo queryReExam();
+
+	/**
+	 * 设置考试试卷
+	 *
+	 * @param param
+	 * @return
+	 */
+	Result updateExamPaperInfo(ExamInfo param);
+
+	/**
+	 * 开始考试
+	 *
+	 * @param examBatchId
+	 * @param classId
+	 * @return
+	 */
+	Result doStartExam(String examBatchId, String classId,String studentUserId);
+	Result doStartReExam(String examId,String studentUserId);
+
+	/**
+	 * 发布考试
+	 *
+	 * @param examIds
+	 *            考试的Ids
+	 * @return 1表示发布成功,0表示发布失败
+	 */
+	Result doPublishExam(String[] examIds);
+
+	/**
+	 * 撤回发布的考试
+	 *
+	 * @param examIds
+	 *            考试的Ids
+	 * @return 1表示撤回成功,0表示撤回失败失败
+	 */
+	Result doRevokeExam(String[] examIds);
+
+	/**
+	 * 首页获取学生考试的总条数
+	 *
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getExamCount(String classId, String userId);
+
+	/**
+	 * 首页获取学生逾期未交的考试个数
+	 *
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getUnCommitExamCount(String classId, String userId);
+
+	/**
+	 * 首页获取学生待完成的考试个数
+	 *
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getToBeCommitExamCount(String classId, String userId);
+
+	/**
+	 * 首页获取学生已经提交的考试个数
+	 *
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getCommitExamCount(String classId, String userId);
+
+	/**
+	 * 后台查询考试列表
+	 * @param keyword
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<ExamInfo> list(String keyword,String classId,String subjectId,Short status,Integer pageSize,Integer pageNum);
+
+	/**
+	 * 后台查询考试数量
+	 * @param keyword
+	 * @param creatorId
+	 * @return
+	 */
+	int listCount(String keyword,String classId,String subjectId,Short status);
+
+	/**
+	 * 获取考试成绩列表
+	 * @param examId
+	 * @param examBatchIds
+	 * @param classId
+	 * @param keyword
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<ExamResultV> listResult(String examId,String[] examBatchIds, String classId, String keyword, Integer pageSize,
+			Integer pageNum);
+
+	/**
+	 * 获取考试成绩列表数量
+	 * @param examId
+	 * @param examBatchIds
+	 * @param classId
+	 * @param keyword
+	 * @return
+	 */
+	int listResultCount(String examId,String[] examBatchIds, String classId, String keyword);
+
+	/**
+	 * 查询学生考试列表数量
+	 * @param keyword 考试名称过滤
+	 * @param classIds 班级过滤
+	 * @param subjectId
+	 * @param status
+	 * @return
+	 */
+	int listStudentExamCount(String keyword, String[] classIds,String subjectId,Integer status);
+
+	/**
+	 * 查询学生考试列表
+	 * @param keyword
+	 * @param classIds
+	 * @param subjectId
+	 * @param status
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<ExamResultV> listStudentExam(String keyword, String[] classIds,String subjectId,Integer status, Integer pageSize,Integer pageNum,String userId);
+
+	List<ExamResultV> studentExam( String [] classIds);
+
+	/**
+	 * 查询考试结果状态数量
+	 * @param lstExamIds
+	 * @return
+	 */
+	Map<String, Integer> queryExamResultStatusCount(List<String> lstExamIds);
+
+	Result getReExamRecordList(String examId, String userId);
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/impl/ExamBatchService.java b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamBatchService.java
new file mode 100644
index 0000000..117385c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamBatchService.java
@@ -0,0 +1,150 @@
+package com.qxueyou.scc.exam.service.impl;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import com.qxueyou.scc.exam.model.ExamResultV;
+import org.springframework.stereotype.Service;
+
+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.base.util.TraceUtils;
+import com.qxueyou.scc.exam.model.ExamBatchClassRe;
+import com.qxueyou.scc.exam.model.ExamBatchInfo;
+import com.qxueyou.scc.exam.service.IExamBatchService;
+
+/**
+ * 试卷批次管理服务层
+ *
+ * @author kevin
+ * @createTime 2017-11-1
+ */
+@Service
+public class ExamBatchService extends CommonAppService implements IExamBatchService {
+
+	@Override
+	public int queryExamBatchCount(Map<String, Object> param) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	@Override
+	public List<ExamBatchInfo> queryExamBatchList(Map<String, Object> param,Pager page) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<Map<String,Object>> queryListForIdName() {
+//		String hql="select v from ExamResultV v where v.startTime >? ";
+		//根据考试获取所有批次信息
+		String hql="select r from ExamBatchInfo i , ExamBatchClassRe r where i.examId in (SELECT e.examId from ExamInfo e where e.deleteFlag is false )" +
+				" and i.deleteFlag is false and i.startTime>? and r.examBatchId=i.examBatchId ";
+		//获取列表,开始时间大于当前时间,也就是还未开始
+		List<ExamBatchClassRe> examResults = this.find(hql, CollectionUtils.newList(new Date()), ExamBatchClassRe.class);
+		List<Map<String,Object>> list=new ArrayList<>();
+		for (ExamBatchClassRe examResult : examResults) {
+			//封装成前端要用的数据
+			Map<String,Object> map=new HashMap<>();
+			//获取考试名称加批次信息
+			String ql="SELECT e.examName from ExamInfo e where e.deleteFlag is false and e.examId=?";
+			//获取考试名称
+			String s = this.findUnique(ql, CollectionUtils.newList(examResult.getExamId()), String.class);
+			String q="SELECT e from ExamBatchInfo e where e.deleteFlag is false and e.examBatchId=?";
+			//批次信息
+			ExamBatchInfo examBatchInfo = this.findUnique(q, CollectionUtils.newList(examResult.getExamBatchId()), ExamBatchInfo.class);
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			//测试考试(考场一_2020-06-16 9:00 ~ 06-16 12:00)
+			s+="("+examBatchInfo.getExamRoomName()+"_"+format.format(examBatchInfo.getStartTime())+" ~ "+new SimpleDateFormat("MM-dd HH:mm:ss").format(examBatchInfo.getEndTime())+")";
+			map.put("batchName",s);
+			map.put("batchId",examResult.getExamBatchId());
+			map.put("classId",examResult.getClassId());
+			list.add(map);
+		}
+		return list;
+	}
+	@Override
+	public List<String> queryComNameByBatchId(String classId) {
+		//根据所在组id
+		String hql="select f.subjectId from StuStudent f where f.subjectId is not null and f.classId =? and f.deleteFlag is false group by f.subjectId";
+		//获取公司名称列表
+		return this.find(hql, CollectionUtils.newList(classId), String.class);
+	}
+	@Override
+	public List<String> queryStudentNoByComNameAndBatch(String subjectId,String classId) {
+		//根据所在组id
+//		String hql="select f.studentNo from StuStudent f where f.subjectId=? and f.classId =? and f.deleteFlag is false ";
+		String hql="select f.studentNo from StuStudent f where  f.classId =? and f.deleteFlag is false ";
+		//获取列表
+//		return this.find(hql, CollectionUtils.newList(subjectId,classId), String.class);
+		return this.find(hql, CollectionUtils.newList(classId), String.class);
+	}
+
+	@Override
+	public String addExamBatch(ExamBatchInfo examBatchInfo) {
+		//查询最大批次号
+		Short  maxBatchNo = this.findUnique("select max(f.examBatchNo) from ExamBatchInfo f where f.examId =? and f.deleteFlag is false", CollectionUtils.newList(examBatchInfo.getExamId()), Short.class);
+		maxBatchNo = maxBatchNo==null?0:maxBatchNo;
+		examBatchInfo.setExamBatchNo(++maxBatchNo);
+		TraceUtils.setCreateTrace(examBatchInfo);
+		this.insert(examBatchInfo);
+		List<ExamBatchClassRe> lstExamBatchClassRe = examBatchInfo.getReClasses();
+		if(lstExamBatchClassRe!=null &&lstExamBatchClassRe.size()>0){
+			for(ExamBatchClassRe examBatchClassRe :lstExamBatchClassRe){
+				TraceUtils.setCreateTrace(examBatchClassRe);
+				examBatchClassRe.setExamBatchId(examBatchInfo.getExamBatchId());
+				examBatchClassRe.setExamId(examBatchInfo.getExamId());
+				this.insert(examBatchClassRe);
+			}
+		}
+		return examBatchInfo.getExamBatchId();
+	}
+
+	@Override
+	public Result deleteExamBatch(String[] elxamBatchIds) {
+		Result result = new Result(true) ;
+		if(elxamBatchIds!=null && elxamBatchIds.length>0 ){
+			String hql = "update ExamBatchInfo set deleteFlag = true where examBatchId=?";
+			result = bulkUpdateInLoop(hql, elxamBatchIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result updateExamBatch(ExamBatchInfo param) {
+		ExamBatchInfo examBatchInfo = read(ExamBatchInfo.class, param.getExamBatchId());
+		if(examBatchInfo!=null){
+			TraceUtils.setUpdateTrace(examBatchInfo);
+			examBatchInfo.setStartTime(param.getStartTime());
+			examBatchInfo.setEndTime(param.getEndTime());
+			List<ExamBatchClassRe> lstExamBatchClassRe = param.getReClasses();
+			//删除原来的关联关系
+			String hql="update ExamBatchClassRe set deleteFlag = true where examBatchId=? ";
+			this.bulkUpdate(hql, new Object[]{ param.getExamBatchId()});
+
+			if(lstExamBatchClassRe!=null &&lstExamBatchClassRe.size()>0){
+				for(ExamBatchClassRe examBatchClassRe :lstExamBatchClassRe){
+					TraceUtils.setCreateTrace(examBatchClassRe);
+					examBatchClassRe.setExamBatchId(examBatchInfo.getExamBatchId());
+					examBatchClassRe.setExamId(examBatchInfo.getExamId());
+					this.insert(examBatchClassRe);
+				}
+			}
+		}
+		return save(examBatchInfo);
+	}
+
+	@Override
+	public ExamBatchInfo queryExamBatchDetail(String examBatchId) {
+		return this.read(ExamBatchInfo.class, examBatchId);
+	}
+
+	@Override
+	public ExamBatchClassRe queryExamBatchByClassId(String examBatchId) {
+		String hql="select f from ExamBatchClassRe f where f.examBatchId =? and f.deleteFlag is false";
+		return this.findUnique(hql, CollectionUtils.newList(examBatchId), ExamBatchClassRe.class);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperSectionService.java b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperSectionService.java
new file mode 100644
index 0000000..db82279
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperSectionService.java
@@ -0,0 +1,336 @@
+package com.qxueyou.scc.exam.service.impl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+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.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.exam.model.ExamPaperSectionInfo;
+import com.qxueyou.scc.exam.service.IExamPaperSectionService;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+
+/**
+ * 试卷部分管理服务层
+ *
+ * @author kevin
+ * @createTime 2017-11-1
+ */
+@Service
+public class ExamPaperSectionService extends CommonAppService implements IExamPaperSectionService {
+
+    @Autowired
+    IExerciseGroupService exerciseGroupService;
+
+    @Autowired
+    IExerciseService exerciseService;
+
+    @SuppressWarnings("rawtypes")
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Override
+    public int queryExamPaperSectionCount(Map<String, Object> param) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public List<ExamPaperSectionInfo> queryExamPaperSectionList(Map<String, Object> param, Pager page) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String addExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo) {
+        TraceUtils.setCreateTrace(examPaperSectionInfo);
+        // 查询当前最大的sectionOrder
+        String hql = "select max(sectionOrder) from ExamPaperSectionInfo where examPaperId=? and deleteFlag is false";
+        Integer maxOrder = this.findUnique(hql, CollectionUtils.newList(examPaperSectionInfo.getExamPaperId()),
+                Integer.class);
+        int beginOrder = maxOrder == null ? 0 : maxOrder.intValue();
+        examPaperSectionInfo.setSectionOrder(++beginOrder);
+
+        // 获取当前section对应的开始index
+        int count = this.findCount("from ExerciseGroupItemRe r where r.deleteFlag is false and r.exerciseGroupId=?",
+                CollectionUtils.newList(examPaperSectionInfo.getGroupId()));
+
+        String sectionId = UUIDUtils.generateUUID().replace("-", "");
+        examPaperSectionInfo.setSectionId(sectionId);
+        examPaperSectionInfo.setItemStartOrder((short) (count));
+        examPaperSectionInfo.setItemEndOrder((short) -1);
+        this.insert(examPaperSectionInfo);
+        return examPaperSectionInfo.getSectionId();
+    }
+
+    @Override
+    public Result deleteExamPaperSection(String[] paperSectionIds) {
+        Result result = new Result(true);
+        if (paperSectionIds != null && paperSectionIds.length > 0) {
+            String hql = "update ExamPaperSectionInfo set deleteFlag = true where sectionId=?";
+            result = bulkUpdateInLoop(hql, paperSectionIds);
+
+            for (String sectionId : paperSectionIds) {
+                ExamPaperSectionInfo currentSectionInfo = this.read(ExamPaperSectionInfo.class, sectionId);
+                this.deleteAllSectionItem(currentSectionInfo.getSectionId());
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public Result updateExamPaperSection(ExamPaperSectionInfo param) {
+        ExamPaperSectionInfo examPaperSectionInfo = read(ExamPaperSectionInfo.class, param.getSectionId());
+        if (examPaperSectionInfo != null) {
+            TraceUtils.setUpdateTrace(examPaperSectionInfo);
+            examPaperSectionInfo.setSectionName(param.getSectionName());
+            examPaperSectionInfo.setSectionDesc(param.getSectionDesc());
+        }
+        return save(examPaperSectionInfo);
+    }
+
+    @Deprecated
+    @Override
+    public Result saveExamPaperSectionGroup(String sectionId, String[] selectedGroupIds, Short[] itemTypes) throws Exception {
+        ExamPaperSectionInfo examPaperSectionInfo = read(ExamPaperSectionInfo.class, sectionId);
+        ExerciseGroup exerciseGroup = read(ExerciseGroup.class, examPaperSectionInfo.getGroupId());
+
+        // 获取试卷部分原开始位置和结束位置
+        int origStartIndex = examPaperSectionInfo.getItemStartOrder();
+        int origEndIndex = examPaperSectionInfo.getItemEndOrder();
+
+        if (origEndIndex > 0) {
+            this.deleteAllSectionItem(examPaperSectionInfo.getSectionId());
+        }
+
+        // 将题库的题目复制到试卷题库
+        int itemIndex = origStartIndex;
+        ExerciseGroup targetExerciseGroup = new ExerciseGroup();
+        targetExerciseGroup.setGroupId(examPaperSectionInfo.getGroupId());
+        if (selectedGroupIds != null && selectedGroupIds.length > 0) {
+            for (int i = 0; i < selectedGroupIds.length; i++) {
+                ExerciseGroup sourceExerciseGroup = this.read(ExerciseGroup.class, selectedGroupIds[i]);
+                itemIndex += exerciseGroupService.doCopyExerciseGroupItem(sourceExerciseGroup, targetExerciseGroup, itemTypes,
+                        itemIndex);
+            }
+
+            long allCount = exerciseGroup.getAllCount() == null ? 0
+                    : exerciseGroup.getAllCount().longValue() + (itemIndex - origStartIndex);
+            exerciseGroup.setAllCount(BigInteger.valueOf(allCount));
+            if (itemIndex - origStartIndex > 0) {
+                examPaperSectionInfo.setItemEndOrder((short) (itemIndex));
+            }
+            this.updateSectionRangeIndex(sectionId, itemIndex - origStartIndex);
+            this.updatePaperScore(exerciseGroup.getGroupId());
+        }
+        return new Result(true);
+    }
+
+
+    @Override
+    public Result saveExamPaperSectionItems(String sectionId, String sourceGroupId, String[] selectedItemIds) throws Exception {
+        ExamPaperSectionInfo examPaperSectionInfo = read(ExamPaperSectionInfo.class, sectionId);
+        ExerciseGroup exerciseGroup = read(ExerciseGroup.class, examPaperSectionInfo.getGroupId());
+
+        // 获取试卷部分原开始位置和结束位置
+        int origStartIndex = examPaperSectionInfo.getItemStartOrder();
+        int origEndIndex = examPaperSectionInfo.getItemEndOrder();
+
+        //如果试卷其他部分中已经存在该题目,则返回错误,重复的题目
+        int count = this.findCountByComplexHql("from ExerciseGroupItemRe r where r.deleteFlag is false and r.exerciseGroupId=:paperGroupId and (r.itemOrder<:startIdx or r.itemOrder>:endIdx)  and r.exerciseItemId in (:exerciseItemIds)",
+                CollectionUtils.newObjectMap("startIdx", origStartIndex, "endIdx", origEndIndex, "paperGroupId", examPaperSectionInfo.getGroupId(), "exerciseItemIds", selectedItemIds));
+
+        if (count > 0) {
+            return new Result(false, "请检查选择的题目,同一份试卷中不允许存在相同的题目!");
+        }
+
+        // 将题库的题目复制到试卷题库
+        int copyStartIndex = origEndIndex > 0 ? origEndIndex : origStartIndex;
+        ExerciseGroup targetExerciseGroup = new ExerciseGroup();
+        targetExerciseGroup.setGroupId(examPaperSectionInfo.getGroupId());
+        ExerciseGroup sourceExerciseGroup = this.read(ExerciseGroup.class, sourceGroupId);
+        int copyEndIndex = copyStartIndex + exerciseGroupService.doCopyExerciseGroupItem(sourceExerciseGroup, targetExerciseGroup, selectedItemIds,
+                copyStartIndex);
+        long allCount = exerciseGroup.getAllCount() == null ? 0 : exerciseGroup.getAllCount().longValue() + (copyEndIndex - copyStartIndex);
+        exerciseGroup.setAllCount(BigInteger.valueOf(allCount));
+        //如果有保存题目则处理索引,否则不处理
+        if (copyEndIndex - copyStartIndex > 0) {
+            examPaperSectionInfo.setItemEndOrder((short) (copyEndIndex));
+        }
+        this.updateSectionRangeIndex(sectionId, copyEndIndex - copyStartIndex);
+        this.updatePaperScore(exerciseGroup.getGroupId());
+        return new Result(true);
+    }
+
+    @Override
+    public ExamPaperSectionInfo queryExamPaperSectionDetail(String examPaperSectionId) {
+        ExamPaperSectionInfo examPaperSectionInfo = this.read(ExamPaperSectionInfo.class, examPaperSectionId);
+        ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail(examPaperSectionInfo.getGroupId());
+        List<ExerciseItem> items = null;
+        // 查询出section 对应的题目信息
+        if (examPaperSectionInfo.getItemEndOrder() > 0) {
+            int itemCount = examPaperSectionInfo.getItemEndOrder() - examPaperSectionInfo.getItemStartOrder();
+            items = new ArrayList<ExerciseItem>(itemCount);
+            items.addAll(exerciseGroup.getItems().subList(examPaperSectionInfo.getItemStartOrder(),
+                    examPaperSectionInfo.getItemEndOrder()));
+        }
+        examPaperSectionInfo.setLstExerciseItem(items);
+        return examPaperSectionInfo;
+    }
+
+    @SuppressWarnings("unchecked")
+    private Result updateSectionRangeIndex(String currentSectionid, int adjustNum) {
+        ExamPaperSectionInfo currentSectionInfo = this.read(ExamPaperSectionInfo.class, currentSectionid);
+        // 如果部分对应的end为-1,则不需要更新endorder
+        String hql = "from ExamPaperSectionInfo where examPaperId=? and sectionOrder>? and deleteFlag is false";
+        List<ExamPaperSectionInfo> lstExamPaperSectionInfo = this.find(hql,
+                CollectionUtils.newList(currentSectionInfo.getExamPaperId(), currentSectionInfo.getSectionOrder()),
+                ExamPaperSectionInfo.class);
+        if (lstExamPaperSectionInfo != null && lstExamPaperSectionInfo.size() > 0) {
+            for (ExamPaperSectionInfo sectionInfo : lstExamPaperSectionInfo) {
+                if (sectionInfo.getItemEndOrder() > 0) {
+                    sectionInfo.setItemStartOrder((short) (sectionInfo.getItemStartOrder() + adjustNum));
+                    sectionInfo.setItemEndOrder((short) (sectionInfo.getItemEndOrder() + adjustNum));
+                } else {
+                    sectionInfo.setItemStartOrder((short) (sectionInfo.getItemStartOrder() + adjustNum));
+                }
+                this.saveOrUpdateAll(lstExamPaperSectionInfo);
+            }
+        }
+        //清理试卷缓存
+        this.redisTemplate.delete(currentSectionInfo.getGroupId());
+        return new Result(true);
+    }
+
+    private void deleteAllSectionItem(String sectionId) {
+        ExamPaperSectionInfo examPaperSectionInfo = this.read(ExamPaperSectionInfo.class, sectionId);
+        int origStartIndex = examPaperSectionInfo.getItemStartOrder();
+        int origEndIndex = examPaperSectionInfo.getItemEndOrder();
+
+        if (origEndIndex > 0) {
+            int itemCount = origEndIndex - origStartIndex;
+            List<ExerciseGroupItemRe> lstItemRe = new ArrayList<ExerciseGroupItemRe>(itemCount);
+            String hql = "from ExerciseGroupItemRe r where r.exerciseGroupId=? and r.deleteFlag is false order by r.itemOrder asc";
+            List<ExerciseGroupItemRe> lstExerciseGroupItemRe = this.find(hql,
+                    CollectionUtils.newList(examPaperSectionInfo.getGroupId()), ExerciseGroupItemRe.class);
+            lstItemRe.addAll(lstExerciseGroupItemRe.subList(examPaperSectionInfo.getItemStartOrder(),
+                    examPaperSectionInfo.getItemEndOrder()));
+            String[] exerciseItemIds = new String[itemCount];
+            for (int i = 0; i < lstItemRe.size(); i++) {
+                exerciseItemIds[i] = lstItemRe.get(i).getExerciseItemId();
+            }
+            this.deleteSectionItem(examPaperSectionInfo.getSectionId(), examPaperSectionInfo.getGroupId(),
+                    exerciseItemIds);
+            // section坐标置空
+            examPaperSectionInfo.setItemEndOrder((short) -1);
+            this.save(examPaperSectionInfo);
+
+        }
+    }
+
+    @Override
+    public Result deleteSectionItem(String sectionId, String groupId, String[] exerciseItemIds) {
+        if (exerciseItemIds != null && exerciseItemIds.length > 0) {
+            // 查询题库与题目的关系
+            List<String> lstRelationIds = new ArrayList<String>(exerciseItemIds.length);
+            ExamPaperSectionInfo currentSectionInfo = this.read(ExamPaperSectionInfo.class, sectionId);
+
+            String hql = "from ExerciseGroupItemRe r where r.exerciseGroupId=? and r.deleteFlag is false order by r.itemOrder asc";
+            List<ExerciseGroupItemRe> lstExerciseGroupItemRe = this.find(hql,
+                    CollectionUtils.newList(currentSectionInfo.getGroupId()), ExerciseGroupItemRe.class);
+            lstExerciseGroupItemRe = lstExerciseGroupItemRe.subList(currentSectionInfo.getItemStartOrder(),
+                    currentSectionInfo.getItemEndOrder());
+
+            Map<String, ExerciseGroupItemRe> itemReMap = new HashMap<String, ExerciseGroupItemRe>(
+                    exerciseItemIds.length);
+            for (ExerciseGroupItemRe itemRe : lstExerciseGroupItemRe) {
+                itemReMap.put(itemRe.getExerciseItemId(), itemRe);
+            }
+
+            for (String strExerciseItemId : exerciseItemIds) {
+                lstRelationIds.add(itemReMap.get(strExerciseItemId).getRelationId());
+            }
+
+            // 如果题目删除完了,则设置end为-1
+            if (currentSectionInfo.getItemEndOrder() - exerciseItemIds.length == currentSectionInfo
+                    .getItemStartOrder()) {
+                currentSectionInfo.setItemEndOrder((short) -1);
+            } else {
+                currentSectionInfo
+                        .setItemEndOrder((short) (currentSectionInfo.getItemEndOrder() - exerciseItemIds.length));
+            }
+            this.save(currentSectionInfo);
+
+            this.deleteExerciseItems(lstRelationIds.toArray(new String[]{}), groupId);
+
+            this.updateSectionRangeIndex(sectionId, -exerciseItemIds.length);
+
+            this.updatePaperScore(groupId);
+        }
+        return new Result(true);
+    }
+
+    /**
+     * 删除试卷习题
+     *
+     *
+     * @param reIds
+     * @param groupId
+     * @return
+     */
+    private Result deleteExerciseItems(String[] reIds, String groupId) {
+
+        ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+
+        // 更新组试卷习题数量
+        group.setAllCount(group.getAllCount().subtract(new BigInteger(String.valueOf(reIds.length))));
+        TraceUtils.setUpdateTrace(group);
+        this.save(group);
+
+        // 2.删除试卷题目组关联表数据
+        this.bulkUpdateInLoop("delete from ExerciseGroupItemRe  where relationId=?", reIds);
+
+        // 更新item的顺序号
+        String hql = "from ExerciseGroupItemRe re where re.exerciseGroupId=? and re.deleteFlag is false order by re.itemOrder asc ";
+        List<ExerciseGroupItemRe> lstRe = this.find(hql, CollectionUtils.newList(groupId), ExerciseGroupItemRe.class);
+        if (lstRe != null && lstRe.size() > 0) {
+            for (int i = 0; i < lstRe.size(); i++) {
+                lstRe.get(i).setItemOrder(i + 1);
+            }
+            this.saveOrUpdateAll(lstRe);
+        }
+        return new Result(true);
+    }
+
+    @Override
+    public Result saveSectionItem(ExerciseGroup exerciseGroup) {
+        //保存题目信息
+        return exerciseService.saveExerciseItemBatch(exerciseGroup.getGroupId(), exerciseGroup.getItems());
+    }
+
+    @Override
+    public BigDecimal updatePaperScore(String groupId) {
+        String totalScore = this.findUnique("select sum(s.score) as totalScore from ExerciseGroupItemRe r, ExerciseItemScore s where r.exerciseGroupId = s.groupId and r.exerciseItemId = s.exerciseItemId "
+                + " and s.groupId=? and r.deleteFlag is false and s.deleteFlag is false ", CollectionUtils.newList(groupId), String.class);
+        totalScore = StringUtils.isEmpty(totalScore) ? "0.00" : totalScore;
+        this.bulkUpdate("update ExamPaperInfo set totalScore=" + totalScore + " where deleteFlag is false and  groupId=?", new Object[]{groupId});
+        return new BigDecimal(totalScore);
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperService.java b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperService.java
new file mode 100644
index 0000000..334525c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperService.java
@@ -0,0 +1,202 @@
+package com.qxueyou.scc.exam.service.impl;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+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.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.exam.model.ExamPaperInfo;
+import com.qxueyou.scc.exam.service.IExamPaperSectionService;
+import com.qxueyou.scc.exam.service.IExamPaperService;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+
+/**
+ * 试卷管理服务层
+ * 
+ * @author kevin
+ * @createTime 2017-11-1
+ */
+@Service
+public class ExamPaperService extends CommonAppService implements IExamPaperService {
+	
+	@Autowired
+	IExerciseGroupService exerciseGroupService;
+	
+	@Autowired
+	IExamPaperSectionService examPaperSectionService;
+	
+	@Override
+	public Result addExamPaper(ExamPaperInfo examPaperInfo) {
+		Result result = new Result(true);
+		String examPaperId = null, groupId = null;
+		ExerciseGroup exerciseGroup = null;
+		
+		//创建试卷关联题库
+		exerciseGroup = new ExerciseGroup();
+		exerciseGroup.setName(examPaperInfo.getExamPaperName()+"-试卷题库");
+		exerciseGroup.setType(ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM);
+		groupId = exerciseGroupService.addExerciseGroup(exerciseGroup);
+		
+		//保存试卷
+		examPaperId = UUIDUtils.generateUUID().replace("-", "");
+		examPaperInfo.setExamPaperId(examPaperId);
+		examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT);
+		examPaperInfo.setGroupId(groupId);
+		TraceUtils.setCreateTrace(examPaperInfo);
+		this.insert(examPaperInfo);
+		
+		result.addData("examPaperId", examPaperId);
+		return result;
+	}
+	
+	
+	@Override
+	public Result deleteExamPaper(String[] examPaperIds) {
+		Result result = new Result(true) ; 
+		if(examPaperIds!=null && examPaperIds.length>0 ){
+			String hql = "update ExamPaperInfo set deleteFlag = true where examPaperId=?";
+			result = bulkUpdateInLoop(hql, examPaperIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result updateExamPaper(ExamPaperInfo param) {
+		ExamPaperInfo examPaperInfo = read(ExamPaperInfo.class, param.getExamPaperId());
+		if(examPaperInfo!=null){
+			TraceUtils.setUpdateTrace(examPaperInfo);
+			examPaperInfo.setDifficultLevel(param.getDifficultLevel());
+			examPaperInfo.setExamPaperName(param.getExamPaperName());
+		}
+		return save(examPaperInfo);
+	}
+
+	@Override
+	public Result doPublishExamPaper(String[] examPaperIds) {
+		Map<String, Object> pramMap = null;
+		if(examPaperIds!=null && examPaperIds.length>0){
+			pramMap = new HashMap<String, Object>(1);
+			pramMap.put("examPaperIds", examPaperIds);
+			String hql = "from ExamPaperInfo where examPaperId in (:examPaperIds)";
+			List<ExamPaperInfo> lstExamPaperInfo = this.findByComplexHql(hql,pramMap, ExamPaperInfo.class);
+
+			for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) {
+				if(ExamPaperInfo.STATUS_DRAFT!=examPaperInfo.getPaperStatus()){
+					return new Result(false, "只有草稿状态的试卷,才能发布。");
+				}
+				
+				if(examPaperInfo.getTotalScore()<=0){
+					return new Result(false, "试卷总分大于零,才能发布。");
+				}
+				
+				examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_PUBLISH);
+				TraceUtils.setUpdateTrace(examPaperInfo);
+				save(examPaperInfo);
+			}
+		}else{
+			return new Result(false, "没有选择要发布的试卷。");
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public Result doRevokeExamPaper(String[] examPaperIds) {
+		Map<String, Object> pramMap = null;
+		if(examPaperIds!=null && examPaperIds.length>0){
+			pramMap = new HashMap<String, Object>(1);
+			pramMap.put("examPaperIds", examPaperIds);
+			String hql = "from ExamPaperInfo where examPaperId in (:examPaperIds)";
+			List<ExamPaperInfo> lstExamPaperInfo = this.findByComplexHql(hql,pramMap, ExamPaperInfo.class);
+			for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) {
+				if(ExamPaperInfo.STATUS_PUBLISH!=examPaperInfo.getPaperStatus()){
+					return new Result(false, "只有发布状态的试卷,才能撤回。");
+				}
+				examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT);
+				TraceUtils.setUpdateTrace(examPaperInfo);
+				save(examPaperInfo);
+			}
+		}else{
+			return new Result(false, "没有选择要撤回的试卷。");
+		}
+		
+		return new Result(true);
+	}
+
+	@Override
+	public ExamPaperInfo queryExamPaperDetail(String examPaperId) {
+		ExamPaperInfo examPaperInfo=  this.read(ExamPaperInfo.class, examPaperId);
+		ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail(examPaperInfo.getGroupId());
+		examPaperInfo.setExerciseGroup(exerciseGroup);
+		return examPaperInfo;
+	}
+	
+	@Override
+	public Map<String,ExamPaperInfo> queryExamPaperItemsStatistic(String[] examPaperIds){
+		Map<String,ExamPaperInfo> resultMap =null;
+		if(examPaperIds!=null &&examPaperIds.length>0){
+			resultMap = new LinkedHashMap<String,ExamPaperInfo>(examPaperIds.length);
+			String hql = " select p.examPaperId, i.type,count(i.type) from ExamPaperInfo p, ExerciseGroupItemRe r,ExerciseItem i where  p.examPaperId in (:examPaperIds) "
+					+ "and p.groupId=r.exerciseGroupId  and r.exerciseItemId = i.exerciseId and r.deleteFlag is false group by p.examPaperId,i.type";
+			Map<String,Object> param =new HashMap<String,Object>();
+			param.put("examPaperIds", examPaperIds);
+			List<Object[]> lstItemStatics = this.findByComplexHql(hql, param, Object[].class);
+			
+			ExamPaperInfo tempPaperInfo = null;
+			String tempPaperId = null;
+			short tempType= 0;
+			int tempCount=0;
+			for(int i=0;i<lstItemStatics.size();i++){
+				tempPaperId= (String) lstItemStatics.get(i)[0];
+				tempType = (Short) lstItemStatics.get(i)[1];
+				tempCount = ((Long) lstItemStatics.get(i)[2]).intValue();
+				
+				if(resultMap.get(tempPaperId)==null){
+					tempPaperInfo = new ExamPaperInfo();
+					tempPaperInfo.setExamPaperId(tempPaperId);
+					resultMap.put(tempPaperId, tempPaperInfo);
+				}else{
+					tempPaperInfo = resultMap.get(tempPaperId);
+				}
+				
+				if(tempType==ExerciseItem.TYPE_SINGLE_SELECT){
+					tempPaperInfo.setSingleSelectCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_MULTI_SELECT){
+					tempPaperInfo.setMultiSelectCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_TRUE_OR_FALSE){
+					tempPaperInfo.setJudgeCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_ESSAY_QUESTION){
+					tempPaperInfo.setQuestionCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_FILL_BLANKS){
+					tempPaperInfo.setFillBlanksCount(tempCount);
+				}
+			}
+		}
+		return resultMap;
+	}
+	
+	@Override
+	public ExamPaperInfo queryExamPaperByCode(String examId,String paperCode){
+		return this.findUnique("select p from ExamReExamPaper r,ExamPaperInfo p "
+					+ "	where r.examPaperId=p.examPaperId and r.examId = ? and r.relationPaperCode=? and r.deleteFlag is false",
+					CollectionUtils.newList(examId, paperCode), ExamPaperInfo.class);
+	}
+	
+	@Override
+	public ExamPaperInfo queryExamPaperByGroupId(String groupId){
+		return this.findUnique("from ExamPaperInfo where groupId=? and deleteFlag is false ",CollectionUtils.newList(groupId), ExamPaperInfo.class);
+	}
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exam/service/impl/ExamService.java b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamService.java
new file mode 100644
index 0000000..f2f6045
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exam/service/impl/ExamService.java
@@ -0,0 +1,1064 @@
+package com.qxueyou.scc.exam.service.impl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.*;
+
+import com.qxueyou.scc.base.util.*;
+import com.qxueyou.scc.exam.model.*;
+import com.qxueyou.scc.exam.service.IExamBatchService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.exam.service.IExamPaperService;
+import com.qxueyou.scc.exam.service.IExamService;
+import com.qxueyou.scc.exercise.model.ExerciseExamReGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+
+/**
+ * 考试管理服务层
+ *
+ * @author kevin
+ * @createTime 2017-11-1
+ */
+@Service
+public class ExamService extends CommonAppService implements IExamService {
+	@Autowired
+	ICacheService cacheService;
+
+	@Autowired
+	IExerciseVerService exerciseVerService;
+
+	@Autowired
+	IExamPaperService examPaperService;
+
+	@Autowired
+	IExerciseGroupService exerciseGroupService;
+
+	@Autowired
+	private StringRedisTemplate stringRedisTemplate;
+
+	@Autowired
+	IMsgInfoService msgInfoService;
+
+	@Autowired
+	IExamBatchService examBatchService;
+
+	@Override
+	public List<ExamInfo> list(String keyword,String classId,String subjectId,Short status, Integer pageSize,Integer pageNum) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExamInfo e where e.examName like ? and e.createId=? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+
+		if(status!=null){
+			hql.append(" and e.examStatus = ? ");
+			params.add(status);
+		}
+
+		if(StringUtils.isNotEmpty(classId)){
+			hql.append(" and exists( select 1 from ExamBatchClassRe r where e.examId = r.examId and r.deleteFlag is false and r.classId=?)  ");
+			params.add(classId);
+		}
+
+		if(StringUtils.isNotEmpty(subjectId)){
+			hql.append(" and e.subjectId = ? ");
+			params.add(subjectId);
+		}
+
+		hql.append(" and e.deleteFlag is false order by e.createTime desc");
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, ExamInfo.class);
+	}
+
+	@Override
+	public int listCount(String keyword,String classId,String subjectId,Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExamInfo e where e.examName like ? and e.createId=? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+
+		if(status!=null){
+			hql.append(" and e.examStatus = ? ");
+			params.add(status);
+		}
+
+		if(StringUtils.isNotEmpty(classId)){
+			hql.append(" and exists( select 1 from ExamBatchClassRe r where e.examId = r.examId and r.deleteFlag is false and r.classId=?)  ");
+			params.add(classId);
+		}
+
+
+		if(StringUtils.isNotEmpty(subjectId)){
+			hql.append(" and e.subjectId = ? ");
+			params.add(subjectId);
+		}
+
+		hql.append(" and e.deleteFlag is false");
+		return findCount(hql.toString(),params);
+	}
+
+	@Override
+	public List<ExamResultV> listResult(String examId,String[] examBatchIds, String classId,String keyword, Integer pageSize, Integer pageNum) {
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from ExamResultV v where v.studentName like :studentName");
+
+		Map<String,Object> params = CollectionUtils.newObjectMap("studentName", '%' + keyword.trim() + '%');
+
+		if(!StringUtils.isEmpty(examId)){
+			hql.append(" and v.examId=:examId");
+			params.put("examId", examId);
+		}
+
+		if(examBatchIds!=null && examBatchIds.length>0){
+			hql.append(" and v.id.examBatchId in (:examBatchIds)");
+			params.put("examBatchIds", examBatchIds);
+		}
+
+		if(!StringUtils.isEmpty(classId)){
+			hql.append(" and v.id.classId=:classId");
+			params.put("classId", classId);
+		}
+
+		hql.append(" order by v.id.examBatchId,v.score desc");
+
+		return this.findByComplexHql(hql.toString(), new Pager(pageSize,pageNum), params, ExamResultV.class);
+	}
+
+	@Override
+	public int listResultCount(String examId,String[] examBatchIds,String classId,String keyword) {
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from ExamResultV v where v.studentName like :studentName");
+
+		Map<String,Object> params = CollectionUtils.newObjectMap("studentName", '%' + keyword.trim() + '%');
+
+		if(!StringUtils.isEmpty(examId)){
+			hql.append(" and v.examId=:examId");
+			params.put("examId", examId);
+		}
+
+		if(examBatchIds!=null && examBatchIds.length>0){
+			hql.append(" and v.id.examBatchId in (:examBatchIds)");
+			params.put("examBatchIds", examBatchIds);
+		}
+
+		if(!StringUtils.isEmpty(classId)){
+			hql.append(" and v.id.classId=:classId");
+			params.put("classId", classId);
+		}
+
+		return this.findCountByComplexHql(hql.toString(),params);
+	}
+
+	@Override
+	public List<ExamResultV> listStudentExam(String keyword, String [] classIds, String subjectId, Integer status, Integer pageSize, Integer pageNum,String userId) {
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from ExamResultV v where v.examName like :examName and v.examStatus=:examStatus and v.userId=:userId and v.id.classId in (:classIds) ");
+
+		Map<String,Object> params = CollectionUtils.newObjectMap("examName", keyword.trim()+'%',"examStatus",ExamInfo.STATUS_PUBLISH,"userId",userId,"classIds",classIds);
+		if(!StringUtils.isEmpty(subjectId)){
+			hql.append(" and v.subjectId=:subjectId ");
+
+			params.put("subjectId", subjectId);
+		}
+
+		//根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅
+		if(status != null) {
+			switch(status){
+				case 1:hql.append(" and v.status is null") ;break;
+				case 2:hql.append(" and v.status = :status");params.put("status", ExerciseRecord.STATUS_SUBMIT);break;
+				case 3:hql.append(" and v.status = :status");params.put("status", ExerciseRecord.STATUS_NOT_SUBMIT);break;
+				case 4:hql.append(" and (v.status is null or v.status=0) and v.end_Time < sysdate() ");break;
+				case 5:hql.append(" and v.status = :status");params.put("status", ExerciseRecord.STATUS_CHECK);break;
+				default:break;
+			}
+		}
+
+		hql.append(" order by v.startTime desc ");
+		return this.findByComplexHql(hql.toString(),new Pager(pageSize,pageNum),params,ExamResultV.class);
+	}
+
+	@Override
+	public List<ExamResultV> studentExam(String[] classIds) {
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from ExamResultV v where v.examStatus=:examStatus and v.userId=:userId and v.id.classId in (:classIds)");
+
+		Map<String,Object> params = CollectionUtils.newObjectMap
+						("examStatus",ExamInfo.STATUS_PUBLISH,"userId",ClientUtils.getUserId(),"classIds",classIds);
+
+		hql.append(" order by v.endTime desc ");
+		return this.findByComplexHql(hql.toString(),params,ExamResultV.class);
+	}
+
+	@Override
+	public int listStudentExamCount(String keyword,String [] classIds,String subjectId,Integer status) {
+		StringBuffer hql = new StringBuffer(1000);
+		hql.append("from ExamResultV v where v.examName like :examName and v.examStatus=:examStatus and v.userId=:userId and v.id.classId in (:classIds)");
+		Map<String,Object> params = CollectionUtils.newObjectMap("examName", keyword.trim() + '%',"examStatus",ExamInfo.STATUS_PUBLISH,
+				"userId",ClientUtils.getUserId(),"classIds",classIds);
+
+		if(!StringUtils.isEmpty(subjectId)){
+			hql.append(" and v.subjectId=:subjectId ");
+			params.put("subjectId", subjectId);
+		}
+
+		//根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅
+		if(status != null) {
+			switch(status){
+				case 1:hql.append(" and v.status is null") ;break;
+				case 2:hql.append(" and v.status = :status");params.put("status", ExerciseRecord.STATUS_SUBMIT);break;
+				case 3:hql.append(" and v.status = :status");params.put("status", ExerciseRecord.STATUS_NOT_SUBMIT);break;
+				case 4:hql.append(" and (v.status is null or v.status=0) and v.end_Time < sysdate() ");break;
+				case 5:hql.append(" and v.status = :status");params.put("status", ExerciseRecord.STATUS_CHECK);break;
+				default:break;
+			}
+		}
+		return this.findCountByComplexHql(hql.toString(),params);
+	}
+
+	@Override
+	public void addRemedy(String examId,Date startTime,Date endTime) {
+		//根据考试ID获取考试信息
+		ExamInfo examInfo = queryExamDetail(examId);
+		//根据考试ID获取对应的批次信息
+		String hql = "from ExamBatchInfo where examId=? and deleteFlag is false";
+		List<ExamBatchInfo> list = this.find(hql, CollectionUtils.newList(examId), ExamBatchInfo.class);
+		List<ExamBatchInfo> remedylist = new ArrayList<>(list.size());
+		//根据考试ID获取对应的题目设置
+		List<ExerciseItemSet> exerciseItemSets = queryExerciseItemSet(examId);
+		List<ExerciseItemSet> exerciseItemSetses = new ArrayList<>(exerciseItemSets.size());
+		//...
+		List<ExamReExamPaper> reExamPapers = examInfo.getReExamPapers();
+		List<ExamReExamPaper> reExamPaperses = new ArrayList<>(reExamPapers.size());
+		//复制信息
+		ExamInfo examInfo1=new ExamInfo();
+		//重新指向一个对象并复制属性
+		BeanUtils.copyProperties(examInfo,examInfo1);
+		//设置考试名称
+		examInfo1.setExamName(examInfo1.getExamName()+"(补考"+new Date().getTime()+")");
+		//设置新指向批次集合
+		examInfo1.setExamBatchInfos(remedylist);
+		examInfo1.setExerciseItemSets(exerciseItemSetses);
+		//设置新指向试卷集合
+		reExamPapers.forEach(reExamPaper -> reExamPaperses.add(reExamPaper));
+		examInfo1.setReExamPapers(reExamPaperses);
+		String examremedyId = addExam(examInfo1);
+		//设置新指向题目设置集合并复制添加
+		exerciseItemSets.forEach(exerciseItemSet -> {
+			ExerciseItemSet exerciseItemSet1 = new ExerciseItemSet();
+			BeanUtils.copyProperties(exerciseItemSet,exerciseItemSet1);
+			exerciseItemSet1.setExerciseInfoId(examremedyId);
+			TraceUtils.setCreateTrace(exerciseItemSet1);
+			this.insert(exerciseItemSet1);
+			exerciseItemSetses.add(exerciseItemSet1);
+		});
+		//根据考试ID获取题库关联信息
+		String ql = "from ExerciseExamReGroup where examId=? and deleteFlag is false";
+		List<ExerciseExamReGroup> exerciseExamReGroups = this.find(ql, CollectionUtils.newList(examId), ExerciseExamReGroup.class);
+		exerciseExamReGroups.forEach(exerciseExamReGroup -> {
+			ExerciseExamReGroup exerciseExamReGroup1 = new ExerciseExamReGroup();
+			BeanUtils.copyProperties(exerciseExamReGroup,exerciseExamReGroup1);
+			//设置考试ID保存信息
+			exerciseExamReGroup1.setExamId(examremedyId);
+			TraceUtils.setCreateTrace(exerciseExamReGroup1);
+			this.insert(exerciseExamReGroup1);
+		});
+		//循环复制批次
+		for (ExamBatchInfo examBatchInfo : list) {
+			String remedyExamBatchId = UUIDUtils.generateSpecialUuid(32);
+			List<ExamBatchClassRe> reClasses = examBatchInfo.getReClasses();
+			List<ExamBatchClassRe> examBatchClassRes = new ArrayList<>();
+			reClasses.forEach(reClass -> {
+				//新建bean
+				ExamBatchClassRe examBatchClassRe = new ExamBatchClassRe();
+				//复制属性
+				BeanUtils.copyProperties(reClass,examBatchClassRe);
+				//修改考试ID以及批次ID
+				examBatchClassRe.setExamId(examremedyId);
+				examBatchClassRe.setExamBatchId(remedyExamBatchId);
+				examBatchClassRe.setExamClassReId(UUIDUtils.generateSpecialUuid(32));
+				examBatchClassRes.add(examBatchClassRe);
+			});
+			ExamBatchInfo examBatchInfo1 = new ExamBatchInfo();
+			BeanUtils.copyProperties(examBatchInfo,examBatchInfo1);
+			//设置批次考试ID为补考的ID
+			examBatchInfo1.setExamId(examremedyId);
+			//设置开始结束时间
+			examBatchInfo1.setStartTime(startTime);
+			examBatchInfo1.setEndTime(endTime);
+			examBatchInfo1.setExamBatchId(remedyExamBatchId);
+			examBatchInfo1.setReClasses(examBatchClassRes);
+			//添加批次
+			examBatchService.addExamBatch(examBatchInfo1);
+			remedylist.add(examBatchInfo1);
+		}
+	}
+
+	@Override
+	public String addExam(ExamInfo examInfo) {
+		TraceUtils.setCreateTrace(examInfo);
+		examInfo.setExamStatus(ExamInfo.STATUS_DRAFT);
+		this.insert(examInfo);
+		return examInfo.getExamId();
+	}
+
+	@Override
+	public Result deleteExam(String[] examIds) {
+		Result result = new Result(true);
+		if (examIds != null && examIds.length > 0) {
+			String hql = "update ExamInfo set deleteFlag = true where examId=?";
+			//判断ID里是否包含补考考试
+			ExamInfo examInfo = queryReExam();
+			if (examInfo!=null) {
+				for (String examId : examIds) {
+					if (examId.equals(examInfo.getExamId())){
+						result.setSuccess(false);
+						result.setMsg("含有补考考试,不可删除");
+						return result;
+					}
+				}
+			}
+			result = bulkUpdateInLoop(hql, examIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result updateExam(ExamInfo param) {
+		ExamInfo examInfo = read(ExamInfo.class, param.getExamId());
+
+		if (examInfo == null) {
+			return new Result(false, "考试不存在");
+		}
+
+		TraceUtils.setUpdateTrace(examInfo);
+		examInfo.setExamName(param.getExamName());
+		examInfo.setSubjectId(param.getSubjectId());
+		examInfo.setDurationMin(param.getDurationMin());
+//		examInfo.setMaxLateMin(param.getMaxLateMin());
+		examInfo.setShowCorrectAnswer(param.getShowCorrectAnswer());
+		examInfo.setShowScore(param.getShowScore());
+		examInfo.setShowAnalyse(param.getShowAnalyse());
+		examInfo.setShowType(param.getShowType());
+		examInfo.setShowScoreTime(param.getShowScoreTime());
+		return save(examInfo);
+	}
+
+	@Override
+	public Result updateExamPaperInfo(ExamInfo param) {
+		ExamInfo examInfo = read(ExamInfo.class, param.getExamId());
+		if (examInfo != null) {
+			TraceUtils.setUpdateTrace(examInfo);
+			examInfo.setExamType(param.getExamType());
+			examInfo.setTotalScore(param.getTotalScore());
+			examInfo.setPassingScore(param.getPassingScore());
+
+			//如果是随机组卷
+			if(ExamInfo.EXAM_TYPE_RANDOM==examInfo.getExamType()||ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP==examInfo.getExamType()){
+				// 删除之前的Exercise关联的group
+				this.bulkUpdate("update ExerciseExamReGroup set deleteFlag = 1 where examId = ?",new Object[] { param.getExamId()});
+
+				List<ExerciseItemSet> lstExerciseItemSet = param.getExerciseItemSets();
+
+				// 保存题目类型
+				if (lstExerciseItemSet != null && lstExerciseItemSet.size() > 0) {
+					// 删除历史数据
+					this.bulkUpdate("update ExerciseItemSet set deleteFlag = 1 where deleteFlag is false and exerciseInfoId = ?",
+							new Object[] { param.getExamId()});
+					for (ExerciseItemSet itemSet : lstExerciseItemSet) {
+						TraceUtils.setCreateTrace(itemSet);
+						itemSet.setExerciseInfoId(param.getExamId());
+						this.save(itemSet);
+					}
+				}
+
+				//保存考试,源题目组信息
+				String [] sourceGroupIds = param.getSourceGroupIds().split(",");
+
+				// 保存关联练习组
+				if (sourceGroupIds != null && sourceGroupIds.length > 0) {
+					ExerciseExamReGroup reGroup = null;
+					for (String groupId : sourceGroupIds) {
+						reGroup = new ExerciseExamReGroup();
+						reGroup.setGroupId(groupId);
+						reGroup.setDeleteFlag(false);
+						reGroup.setType(ExerciseExamReGroup.GROUP_TYPE_SOURCE);
+						reGroup.setExamId(param.getExamId());
+						TraceUtils.setCreateTrace(reGroup);
+						this.save(reGroup);
+					}
+				}
+
+			}else{
+				// 删除原来的关联关系
+				String hql = "update ExamReExamPaper set deleteFlag = true where examId=? ";
+				this.bulkUpdate(hql, new Object[] { param.getExamId() });
+				List<ExamReExamPaper> lstExamReExamPaper = param.getReExamPapers();
+				String[] arrPaperCode = new String[] { "A", "B", "C", "D" };
+				if (lstExamReExamPaper != null && lstExamReExamPaper.size() > 0) {
+					for (int i = 0; i < lstExamReExamPaper.size(); i++) {
+						TraceUtils.setCreateTrace(lstExamReExamPaper.get(i));
+						lstExamReExamPaper.get(i).setExamPaperId(lstExamReExamPaper.get(i).getExamPaperId());
+						lstExamReExamPaper.get(i).setExamId(param.getExamId());
+						lstExamReExamPaper.get(i).setRelationPaperCode(arrPaperCode[i]);
+						this.insert(lstExamReExamPaper.get(i));
+					}
+				}
+			}
+		}
+		return save(examInfo);
+	}
+
+	@Override
+	public Result doPublishExam(String[] examIds) {
+		Map<String, Object> pramMap = null;
+		if (examIds != null && examIds.length > 0) {
+			pramMap = new HashMap<String, Object>(1);
+			pramMap.put("examIds", examIds);
+			String hql = "from ExamInfo where examId in (:examIds)";
+			List<ExamInfo> lstExamInfo = this.findByComplexHql(hql, pramMap, ExamInfo.class);
+
+			for (ExamInfo examInfo : lstExamInfo) {
+				if (ExamInfo.STATUS_DRAFT != examInfo.getExamStatus()) {
+					return new Result(false, "只有草稿状态的考试,才能发布。");
+				}
+				examInfo.setExamStatus(ExamInfo.STATUS_PUBLISH);
+				TraceUtils.setUpdateTrace(examInfo);
+
+				save(examInfo);
+
+				this.doExamPublishMsg(examInfo.getExamId());
+			}
+		} else {
+			return new Result(false, "没有选择要发布的考试。");
+		}
+		return new Result(true);
+	}
+
+
+	private void doExamPublishMsg(String examId){
+		ExamInfo  examInfo = this.read(ExamInfo.class, examId);
+
+		String hql = "select id.examBatchId as examBatchId,id.classId as classId,recordId as recordId ,userId as userId from ExamResultV where examId=:examId";
+		List<Map<String,Object>> lstInfo = this.findListWithMapByHql(hql,CollectionUtils.newObjectMap("examId",examId));
+
+		if(lstInfo!=null && lstInfo.size()>0){
+			for(Map<String,Object> temp:lstInfo){
+				Map<String,String> attrs = CollectionUtils.newStringMap("examId",examId,"examName",examInfo.getExamName(),
+					"subjectId",examInfo.getSubjectId(),"subjectName",examInfo.getSubject().getName(),
+					"examBatchId",(String)temp.get("examBatchId"),"classId",(String)temp.get("classId"),"recordId",(String)temp.get("recordId"));
+				msgInfoService.doSendTextMsgToUsers(new String[]{(String)temp.get("userId")},MsgInfo.TYPE_EXAM, "发布了考试", attrs);
+			}
+		}
+	}
+
+	@Scheduled(cron = " 0 0/5 * * * ?")
+	protected void doTimer() {
+//		System.out.println("执行考试提醒定时器");
+		Calendar cal =Calendar.getInstance();
+		cal.add(Calendar.HOUR, 1);
+		Date beginDate = cal.getTime();
+
+		cal.add(Calendar.MINUTE, 5);
+		Date endDate = cal.getTime();
+
+		String hql = "select b.examBatchId from ExamBatchInfo b ,ExamInfo f where b.examId = f.examId "
+				+ " and b.startTime>=? and b.startTime<? and f.examStatus=? and f.deleteFlag is false and b.deleteFlag is false order by b.startTime desc";
+
+		//查询1小时内将开始的直播
+ 		List<String> lstBatchIds = this.find(hql,CollectionUtils.newList(beginDate,endDate,ExamInfo.STATUS_PUBLISH), String.class);
+
+		if(lstBatchIds!=null && lstBatchIds.size()>0){
+			for(String batchId:lstBatchIds){
+				this.doExamRemindMsg(batchId,MsgInfo.TYPE_REMIND, "考试马上开始了,请做好考试准备");
+			}
+		}
+	}
+
+	private void doExamRemindMsg(String batchId,short type,String msg){
+		ExamBatchInfo batchInfo = this.read(ExamBatchInfo.class, batchId);
+		ExamInfo  examInfo = batchInfo.getExamInfo();
+		Map<String,String> attrs = CollectionUtils.newStringMap("examId",examInfo.getExamId(),"examName",examInfo.getExamName(),"remindType","exam",
+						"subjectId",examInfo.getSubjectId(),"subjectName",examInfo.getSubject().getName(),
+						"examBatchId",batchInfo.getExamBatchId(),"creator",batchInfo.getCreator(),
+						"startTime",String.valueOf(batchInfo.getStartTime().getTime()),
+						"endTime",String.valueOf(batchInfo.getEndTime().getTime()),
+						"examBatchNo",String.valueOf(batchInfo.getExamBatchNo()));
+
+		msgInfoService.doSendTextMsgToUsers(new String[]{batchInfo.getCreateId()},type, msg, attrs);
+	}
+
+	@Override
+	public Result doRevokeExam(String[] examIds) {
+		Map<String, Object> pramMap = null;
+		if (examIds != null && examIds.length > 0) {
+			pramMap = new HashMap<String, Object>(1);
+			pramMap.put("examIds", examIds);
+			String hql = "from ExamInfo where examId in (:examIds)";
+			List<ExamInfo> lstExamInfo = this.findByComplexHql(hql, pramMap, ExamInfo.class);
+			for (ExamInfo examInfo : lstExamInfo) {
+				if (ExamInfo.STATUS_PUBLISH != examInfo.getExamStatus()) {
+					return new Result(false, "只有发布状态的考试,才能撤回");
+				}
+				examInfo.setExamStatus(ExamInfo.STATUS_DRAFT);
+				TraceUtils.setUpdateTrace(examInfo);
+				save(examInfo);
+			}
+		} else {
+			return new Result(false, "没有选择要撤回的考试");
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public ExamInfo queryExamDetail(String examId) {
+		ExamInfo examInfo = this.read(ExamInfo.class, examId);
+		examInfo.setSubjectName(examInfo.getSubject().getName());
+
+		if(examInfo.getExamType() == ExamInfo.EXAM_TYPE_RANDOM || examInfo.getExamType() == ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP){
+			List<ExerciseGroup> lstGroup  = queryExamGroups(examId, ExerciseExamReGroup.GROUP_TYPE_SOURCE);
+			examInfo.setSourceGroupIds(StringUtils.join(QBeanUtils.listPropertyVal(lstGroup, "groupId"),","));
+			examInfo.setSourceGroupNames(StringUtils.join(QBeanUtils.listPropertyVal(lstGroup, "name"),","));
+		}
+
+		return examInfo;
+	}
+	@Override
+	public ExamInfo queryReExam() {
+		// 查询是否有进行中的考试
+		ExamInfo examInfo = this.findUnique(
+				"from ExamInfo where maxLateMin=?  and deleteFlag is false ",
+				CollectionUtils.newList((short)1),
+				ExamInfo.class);
+
+		return examInfo;
+	}
+
+	/**
+	 * 开始考试
+	 *
+	 * @param
+	 * @return
+	 */
+	@Override
+	public Result doStartExam(String examBatchId, String classId, String studentUserId) {
+		ExamBatchInfo examBatchInfo = this.read(ExamBatchInfo.class, examBatchId);
+		ExamInfo examInfo = examBatchInfo.getExamInfo();
+
+		List<ExerciseItemSet> lstItemSets = queryExerciseItemSet(examBatchInfo.getExamId());
+
+		ExerciseRecord record = this.doInitExerciseRecord(examBatchInfo, lstItemSets, classId, studentUserId);
+
+		Map<String,Object> resultData = CollectionUtils.newObjectMap("exerciseRecordId", record.getRecordId(),"submitTime",record.getSubmitTime(),
+				//TODO
+				"remainingSeconds",record.getRemainingSeconds(),"itemSet", lstItemSets,"subjectName", examInfo.getSubject().getName());
+
+		// 如果已提交就查询用户答案信息
+		//TODO 暂时不可以查看考试答案,已提交就不可以进入
+		if (Integer.valueOf(record.getStatus())> 0) {
+			resultData.put("studentScore", record.getScore());
+			resultData.put("objStudentScore", record.getObjScore()==null?BigDecimal.ZERO:record.getObjScore());
+			return new Result(false,"考试已提交");
+		}
+		//获取考试
+		String ql="select i from ExamInfo i , ExamBatchClassRe r where i.deleteFlag is false and r.examBatchId=? and r.examId=i.examId";
+		ExamInfo exam = this.findUnique(ql, CollectionUtils.newList(examBatchId), ExamInfo.class);
+		//添加考试总时长
+		resultData.put("durationMin",exam.getDurationMin());
+		resultData.put("groupId", record.getExerciseGroupId());
+		resultData.put("totalScore", examInfo.getTotalScore());
+		resultData.put("accuracy", record.getAccuracy());
+		resultData.put("userAnswers", this.queryUserAnswers(record.getRecordId()));
+		resultData.put("paperInfo", this.getUserExamPaperInfo(record.getExerciseGroupId(),examInfo.getExamType(),(float)examInfo.getTotalScore(),lstItemSets));
+		return new Result(true,"",resultData);
+	}
+	/**
+	 * 开始补考考试
+	 *
+	 * @param examId
+	 * @return
+	 */
+	@Override
+	public Result doStartReExam(String examId,String studentUserId) {
+		ExamInfo examInfo = this.read(ExamInfo.class, examId);
+
+		List<ExerciseItemSet> lstItemSets = queryExerciseItemSet(examId);
+
+		ExerciseRecord record = this.doInitReExerciseRecord(examInfo, lstItemSets,  studentUserId);
+
+		Map<String,Object> resultData = CollectionUtils.newObjectMap("exerciseRecordId", record.getRecordId(),"submitTime",record.getSubmitTime(),
+				//TODO
+				"remainingSeconds",record.getRemainingSeconds(),"itemSet", lstItemSets,"subjectName", examInfo.getSubject().getName());
+		//添加考试总时长
+		resultData.put("durationMin",examInfo.getDurationMin());
+		resultData.put("groupId", record.getExerciseGroupId());
+		resultData.put("totalScore", examInfo.getTotalScore());
+		resultData.put("accuracy", record.getAccuracy());
+		resultData.put("userAnswers", this.queryUserAnswers(record.getRecordId()));
+		resultData.put("paperInfo", this.getUserExamPaperInfo(record.getExerciseGroupId(),examInfo.getExamType(),(float)examInfo.getTotalScore(),lstItemSets));
+		return new Result(true,"",resultData);
+	}
+
+	/**
+	 * 判断是否是随机考试
+	 * @param examType
+	 * @return
+	 */
+	private boolean checkIsRandomExam(short examType){
+		return ExamInfo.EXAM_TYPE_RANDOM==examType || ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP==examType;
+	}
+
+	/**
+	 * 获取考试试卷信息
+	 * @param examId
+	 * @param groupId
+	 * @param examType
+	 * @param totalSocre
+	 * @return
+	 */
+	private ExamPaperInfo getUserExamPaperInfo(String groupId,short examType,float totalSocre){
+		ExamPaperInfo examPaperInfo = null;
+		if(checkIsRandomExam(examType)){
+			examPaperInfo= new ExamPaperInfo();
+			examPaperInfo.setGroupId(groupId);
+			examPaperInfo.setTotalScore(new Float(totalSocre).shortValue());
+			examPaperInfo.setExerciseGroup(exerciseGroupService.queryExerciseGroupDetail(groupId));
+			List<ExamPaperSectionInfo> examPaperSectionInfos = new ArrayList<>();
+			examPaperInfo.setSectionInfos(examPaperSectionInfos);
+		}else{
+			examPaperInfo = examPaperService.queryExamPaperByGroupId(groupId);
+			examPaperInfo = examPaperService.queryExamPaperDetail(examPaperInfo.getExamPaperId());
+		}
+		return examPaperInfo;
+	}
+
+	/**
+	 * 手动添加题目位置信息
+	 * @param groupId
+	 * @param examType
+	 * @param totalSocre
+	 * @param lstItemSets
+	 * @return
+	 */
+	private ExamPaperInfo getUserExamPaperInfo(String groupId,short examType,float totalSocre,List<ExerciseItemSet> lstItemSets){
+		ExamPaperInfo examPaperInfo = null;
+		if(checkIsRandomExam(examType)){
+			examPaperInfo= new ExamPaperInfo();
+			examPaperInfo.setGroupId(groupId);
+			//TODO
+			examPaperInfo.setPaperStatus(new Integer(1).shortValue());
+			examPaperInfo.setOrgId("1");
+			examPaperInfo.setTotalScore(new Float(totalSocre).shortValue());
+			examPaperInfo.setExerciseGroup(exerciseGroupService.queryExerciseGroupDetail(groupId));
+			List<ExamPaperSectionInfo> examPaperSectionInfos = new ArrayList<>();
+			int count=0;
+			for (int i=0;i<lstItemSets.size();i++) {
+				ExamPaperSectionInfo examPaperSectionInfo=new ExamPaperSectionInfo();
+				int itemCount = lstItemSets.get(i).getItemCount();
+				if (itemCount>0) {
+					examPaperSectionInfo.setGroupId(groupId);
+					//设置开始结束
+					examPaperSectionInfo.setItemStartOrder((short)count);
+					//获取题目设置的count,下次循环用
+					count+=itemCount;
+					examPaperSectionInfo.setItemEndOrder((short)count);
+					//名称
+					examPaperSectionInfo.setSectionName(String.valueOf(lstItemSets.get(i).getItemType()));
+					examPaperSectionInfos.add(examPaperSectionInfo);
+				}
+			}
+			examPaperInfo.setSectionInfos(examPaperSectionInfos);
+		}else{
+			examPaperInfo = examPaperService.queryExamPaperByGroupId(groupId);
+			examPaperInfo = examPaperService.queryExamPaperDetail(examPaperInfo.getExamPaperId());
+			List<ExamPaperSectionInfo> examPaperSectionInfos = new ArrayList<>();
+			int count=0;
+			//获取试卷里的各种题数量设置
+			Map<String, ExamPaperInfo> statisticsMap = examPaperService.queryExamPaperItemsStatistic(new String[]{examPaperInfo.getExamPaperId()});
+			//把设置封装成itemSets
+			lstItemSets=new ArrayList<ExerciseItemSet>();
+			//单选
+			ExerciseItemSet exerciseItemSet1 = new ExerciseItemSet();
+			exerciseItemSet1.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getSingleSelectCount());
+			exerciseItemSet1.setItemType((short) 1);
+			lstItemSets.add(exerciseItemSet1);
+			//多选
+			ExerciseItemSet exerciseItemSet2 = new ExerciseItemSet();
+			exerciseItemSet2.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getMultiSelectCount());
+			exerciseItemSet2.setItemType((short) 2);
+			lstItemSets.add(exerciseItemSet2);
+			//判断
+			ExerciseItemSet exerciseItemSet3 = new ExerciseItemSet();
+			exerciseItemSet3.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getJudgeCount());
+			exerciseItemSet3.setItemType((short) 3);
+			lstItemSets.add(exerciseItemSet3);
+			//
+			ExerciseItemSet exerciseItemSet8 = new ExerciseItemSet();
+			exerciseItemSet8.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getQuestionCount());
+			exerciseItemSet8.setItemType((short) 8);
+			lstItemSets.add(exerciseItemSet8);
+			//
+			ExerciseItemSet exerciseItemSet4 = new ExerciseItemSet();
+			exerciseItemSet4.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getFillBlanksCount());
+			exerciseItemSet4.setItemType((short) 4);
+			lstItemSets.add(exerciseItemSet4);
+			//将itemSets设置成页面要用到的ExamPaperSectionInfo设置
+			for (int i=0;i<lstItemSets.size();i++) {
+				ExamPaperSectionInfo examPaperSectionInfo=new ExamPaperSectionInfo();
+				int itemCount = lstItemSets.get(i).getItemCount();
+				if (itemCount>0) {
+					examPaperSectionInfo.setGroupId(groupId);
+					//设置开始结束
+					examPaperSectionInfo.setItemStartOrder((short)count);
+					//获取题目设置的count,下次循环用
+					count+=itemCount;
+					examPaperSectionInfo.setItemEndOrder((short)count);
+					//名称
+					examPaperSectionInfo.setSectionName(String.valueOf(lstItemSets.get(i).getItemType()));
+					examPaperSectionInfos.add(examPaperSectionInfo);
+				}
+			}
+			examPaperInfo.setSectionInfos(examPaperSectionInfos);
+		}
+		return examPaperInfo;
+	}
+
+	/**
+	 * 获取用户答题信息
+	 * @param recordId
+	 * @return
+	 */
+	private List<Map<String,Object>> queryUserAnswers(String recordId){
+		return this.findListWithMapByHql(
+				"select u.answerUId as answerUId, u.exerciseItemId as exerciseId,u.answer as answer,u.correct as correct,u.teacherScore as teacherScore,i.type as type"
+						+ "	from ExerciseItemAnswerU u,ExerciseItem i where u.exerciseItemId = i.exerciseId and u.exerciseRecordId=:recordId  and u.deleteFlag is false order by u.createTime asc ",
+				CollectionUtils.newObjectMap("recordId", recordId));
+	}
+
+	/**
+	 * 获取用户的考试记录,如果不存在则创建并返回
+	 * @param examBatchInfo
+	 * @param itemSets
+	 * @param classId
+	 * @param studentUserId
+	 * @return
+	 */
+	private ExerciseRecord doInitExerciseRecord(ExamBatchInfo examBatchInfo,List<ExerciseItemSet> itemSets,String classId,String studentUserId){
+		String[] examTypes = new String[] { "A", "B", "C", "D" };
+		String examBatchId = examBatchInfo.getExamBatchId();
+		String examId = examBatchInfo.getExamId();
+		short examBatchNo = examBatchInfo.getExamBatchNo();
+		short examType = examBatchInfo.getExamInfo().getExamType();
+		int remainingSeconds = examBatchInfo.getExamInfo().getDurationMin()*60;
+
+		// 查询是否有进行中的考试
+		ExerciseRecord record = this.findUnique(
+				"from ExerciseRecord where examBatchId=? and classId=? and userId = ? and deleteFlag is false ",
+				CollectionUtils.newList(examBatchId,classId,StringUtils.isNotEmpty(studentUserId) ? studentUserId : ClientUtils.getUserId()),
+				ExerciseRecord.class);
+
+		if (record==null) {
+			String groupId = null;
+			String cacheKey = "EXAM_DO_COUNT_".concat(examBatchId);
+			int doCount = this.getCachedRecordCount(cacheKey,examBatchId);
+
+			//随机创建题目组
+			if(checkIsRandomExam(examType)){
+				String newGroupName = examId+"-"+examBatchNo+"-随机试卷题库-"+(++doCount);
+				//查题库
+				List<ExerciseGroup> lstSourceGroup = queryExamGroups(examId, ExerciseExamReGroup.GROUP_TYPE_SOURCE);
+				String[] sourceGroupIds = QBeanUtils.listPropertyVal(lstSourceGroup, "groupId").toArray(new String[lstSourceGroup.size()]);
+				groupId = this.exerciseGroupService.doCreateRandomExerciseGroup(newGroupName,ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,itemSets);
+			}else{
+				groupId = examPaperService.queryExamPaperByCode(examId,examTypes[doCount % examType]).getGroupId();
+			}
+
+			record = this.insertExerRecord(examBatchInfo,itemSets,groupId,classId,remainingSeconds);
+			stringRedisTemplate.opsForValue().increment(cacheKey, 1); //+1
+		}
+		return record;
+	}
+	/**
+	 * 创建补考考试记录
+	 * @param examBatchInfo
+	 * @param itemSets
+	 * @param studentUserId
+	 * @return
+	 */
+	private ExerciseRecord doInitReExerciseRecord(ExamInfo examInfo,List<ExerciseItemSet> itemSets,String studentUserId){
+		String[] examTypes = new String[] { "A", "B", "C", "D" };
+//		String examBatchId = examBatchInfo.getExamBatchId();
+		String examId = examInfo.getExamId();
+//		short examBatchNo = examBatchInfo.getExamBatchNo();
+		short examType = examInfo.getExamType();
+		int remainingSeconds = examInfo.getDurationMin()*60;
+
+		//创建考试记录
+		String groupId = null;
+		String cacheKey = "EXAM_DO_COUNT_".concat(examId);
+		int doCount = this.getCachedRecordCount(cacheKey,examId);
+
+		//随机创建题目组
+		if(checkIsRandomExam(examType)){
+			String newGroupName = examId+"-"+UUIDUtils.generateSpecialUuid(4)+"-随机试卷题库-"+(++doCount);
+			//查题库
+			List<ExerciseGroup> lstSourceGroup = queryExamGroups(examId, ExerciseExamReGroup.GROUP_TYPE_SOURCE);
+			String[] sourceGroupIds = QBeanUtils.listPropertyVal(lstSourceGroup, "groupId").toArray(new String[lstSourceGroup.size()]);
+			groupId = this.exerciseGroupService.doCreateRandomExerciseGroup(newGroupName,ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,itemSets);
+		}else{
+			groupId = examPaperService.queryExamPaperByCode(examId,examTypes[doCount % examType]).getGroupId();
+		}
+		ExerciseRecord record = this.insertReExerRecord(examInfo,itemSets,groupId,remainingSeconds);
+		stringRedisTemplate.opsForValue().increment(cacheKey, 1); //+1
+
+		return record;
+	}
+
+	// 获取正在做试卷的学生数
+	private int getCachedRecordCount(String cacheKey,String examBatchId){
+		String cacheCount = stringRedisTemplate.opsForValue().get(cacheKey);
+		int doCount = StringUtils.isEmpty(cacheCount) ? 0 : Integer.valueOf(cacheCount);
+		if (doCount == 0) {
+			doCount = this.findCount("from ExerciseRecord where examBatchId=? and deleteFlag is false",
+						CollectionUtils.newList(examBatchId));
+		}
+		return doCount;
+	}
+
+	private ExerciseRecord insertExerRecord(ExamBatchInfo examBatchInfo,List<ExerciseItemSet> itemSets,String groupId,String classId,int remainingSeconds) {
+		ExamInfo examInfo = examBatchInfo.getExamInfo();
+
+		ExerciseRecord record = new ExerciseRecord();
+		record.setDeleteFlag(false);
+		record.setExerciseGroupId(groupId);
+		record.setExamBatchId(examBatchInfo.getExamBatchId());
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		record.setClassId(classId);
+		record.setRemainingSeconds(remainingSeconds);
+		record.setScore(BigDecimal.ZERO);
+		record.setUserId(ClientUtils.getUserId());
+		record.setOrgId(ClientUtils.getOrgId());
+
+		//获取考试题目统计信息,并保存
+		Map<String,Object> result = this.queryItemStatics(itemSets, groupId);
+		record.setTotalScore(new BigDecimal(examInfo.getTotalScore()));
+		record.setPassingScore(new BigDecimal(examInfo.getPassingScore()));
+		record.setSubTotalScore((BigDecimal)result.get("subTotalScore"));
+		record.setObjTotalScore((BigDecimal)result.get("objTotalScore"));
+		record.setSubItemCount((int)result.get("subItemCount"));
+		record.setObjItemCount((int)result.get("objItemCount"));
+
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+		return record;
+	}
+
+	//设置补考考试记录
+	private ExerciseRecord insertReExerRecord(ExamInfo examInfo,List<ExerciseItemSet> itemSets,String groupId,int remainingSeconds) {
+//		ExamInfo examInfo = examBatchInfo.getExamInfo();
+
+		ExerciseRecord record = new ExerciseRecord();
+		record.setDeleteFlag(false);
+		record.setExerciseGroupId(groupId);
+		//因为没有批次,所有时间所有人都可以考,所以这里将批次ID设置成考试ID
+		record.setExamBatchId(examInfo.getExamId());
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		//不设置classID
+//		record.setClassId(classId);
+		record.setRemainingSeconds(remainingSeconds);
+		record.setScore(BigDecimal.ZERO);
+		record.setUserId(ClientUtils.getUserId());
+		record.setOrgId(ClientUtils.getOrgId());
+
+		//获取考试题目统计信息,并保存
+		Map<String,Object> result = this.queryItemStatics(itemSets, groupId);
+		record.setTotalScore(new BigDecimal(examInfo.getTotalScore()));
+		record.setPassingScore(new BigDecimal(examInfo.getPassingScore()));
+		record.setSubTotalScore((BigDecimal)result.get("subTotalScore"));
+		record.setObjTotalScore((BigDecimal)result.get("objTotalScore"));
+		record.setSubItemCount((int)result.get("subItemCount"));
+		record.setObjItemCount((int)result.get("objItemCount"));
+
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+		return record;
+	}
+
+	/**
+	 * 获取补考记录集合
+	 * @param examId
+	 * @param userId
+	 * @return
+	 */
+	@Override
+	public Result getReExamRecordList(String examId, String userId) {
+		// 查询是否有进行中的考试
+		List<ExerciseRecord> exerciseRecords = this.find(
+				"from ExerciseRecord where examBatchId=?  and userId = ? and deleteFlag is false ",
+				CollectionUtils.newList(examId, StringUtils.isNotEmpty(userId) ? userId : ClientUtils.getUserId()),
+				ExerciseRecord.class);
+		return new Result(true,"",exerciseRecords);
+	}
+
+	private Map<String,Object> queryItemStatics(List<ExerciseItemSet> itemSets,String groupId){
+		float subTotalScore = 0,objTotalScore=0;
+		int subItemCount=0,objItemCount=0;
+
+		//如果是随机组卷
+		if(itemSets!=null && itemSets.size()>0){
+			for(ExerciseItemSet s:itemSets){
+				if(s.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION){
+					subTotalScore+= s.getItemCount()*s.getRightScore();
+					subItemCount+=s.getItemCount();
+				}else{
+					objTotalScore += s.getItemCount()*s.getRightScore();
+					objItemCount  += s.getItemCount();
+				}
+			}
+		}else{
+			List<ExamItemV> lstItems = this.find("from ExamItemV where id.groupId=?",CollectionUtils.newList(groupId),ExamItemV.class);
+			if(lstItems!=null && lstItems.size()>0){
+				for(ExamItemV v: lstItems){
+					if(v.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION){
+						subTotalScore+= v.getItemScore();
+						++subItemCount;
+					}else{
+						objTotalScore += v.getItemScore();
+						++objItemCount;
+					}
+				}
+			}
+		}
+
+		Map<String,Object> result = new HashMap<String,Object>();
+		result.put("subTotalScore", new BigDecimal(subTotalScore));
+		result.put("objTotalScore", new BigDecimal(objTotalScore));
+		result.put("subItemCount", subItemCount);
+		result.put("objItemCount", objItemCount);
+
+		return result;
+	}
+
+
+
+
+
+	@Override
+	public int getExamCount(String classId, String userId) {
+		// 查询记录数
+		String hqlCount = "from ExamInfo i, ExamBatchInfo b,ExamBatchClassRe r WHERE "
+				+ " i.examId=b.examId and b.examBatchId = r.examBatchId AND r.classId =:classId AND i.examStatus=:examStatus  AND b.deleteFlag is false AND r.deleteFlag is false ";
+		int examCount = findCountByComplexHql(hqlCount,
+				CollectionUtils.newObjectMap("classId", classId, "examStatus", ExamInfo.STATUS_PUBLISH));
+		return examCount;
+	}
+
+	/**
+	 * 查询考试关联的题目组
+	 * @param examId
+	 * @param
+	 * @return  题目组Map<id,>
+	 */
+	private List<ExerciseGroup> queryExamGroups(String examId,Short reType){
+		return this.find( "select p  from ExerciseExamReGroup g,ExerciseGroup p where g.groupId = p.groupId and g.examId=? and g.type=? and g.deleteFlag is false",
+				CollectionUtils.newList(examId,reType) , ExerciseGroup.class);
+	}
+
+
+	/**
+	 * 查询考试关联的题目配置信息
+	 * @param examId
+	 * @param
+	 * @return
+	 */
+	private List<ExerciseItemSet> queryExerciseItemSet(String examId){
+		return  this.find( "from ExerciseItemSet s where s.deleteFlag is false and  s.exerciseInfoId=?",
+				CollectionUtils.newList(examId) , ExerciseItemSet.class);
+	}
+
+	@Override
+	public int getUnCommitExamCount(String classId, String userId) {
+		String sql = "SELECT c.exam_id, c.exam_name, c.exam_batch_Id, c.start_Time, c.end_Time, "
+				+ "c.class_id, d.exercise_Group_Id, d.score, d. STATUS FROM ( SELECT i.exam_Id, "
+				+ "i.exam_Name, b.exam_Batch_Id, b.start_Time,b.end_Time, r.class_Id FROM Exam_Info i, "
+				+ "Exam_Batch_Info b, Exam_Class_Re r WHERE i.exam_Id = b.exam_Id AND b.exam_Batch_Id "
+				+ "= r.exam_Batch_Id AND r.class_Id =:classId AND i.exam_status = 1 AND b.delete_Flag"
+				+ "= 0 AND r.delete_Flag = 0 ) c LEFT OUTER JOIN ( SELECT * FROM Exercise_Record "
+				+ "d WHERE d.delete_Flag = 0 AND d.user_id =:userId ) d ON c.exam_Batch_Id = d.exam_Batch_Id "
+				+ "AND c.class_id = d.class_id where ifnull(d.status,0)= 0 and (c.end_Time - CURRENT_TIMESTAMP ()) < 0 ";
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("classId", classId, "userId", userId),
+				Object[].class);
+		return list.size();
+
+	}
+
+	@Override
+	public int getToBeCommitExamCount(String classId, String userId) {
+		String sql = "SELECT c.exam_id, c.exam_name, c.exam_batch_Id, c.start_Time, c.end_Time, "
+				+ "c.class_id, d.exercise_Group_Id, d.score, d. STATUS FROM ( SELECT i.exam_Id, "
+				+ "i.exam_Name, b.exam_Batch_Id, b.start_Time,b.end_Time, r.class_Id FROM Exam_Info i, "
+				+ "Exam_Batch_Info b, Exam_Class_Re r WHERE i.exam_Id = b.exam_Id AND b.exam_Batch_Id "
+				+ "= r.exam_Batch_Id AND r.class_Id =:classId AND i.exam_status = 1 AND b.delete_Flag"
+				+ "= 0 AND r.delete_Flag = 0 ) c LEFT OUTER JOIN ( SELECT * FROM Exercise_Record "
+				+ "d WHERE d.delete_Flag = 0 AND d.user_id =:userId ) d ON c.exam_Batch_Id = d.exam_Batch_Id "
+				+ "AND c.class_id = d.class_id where ifnull(d.status,0)= 0 and (c.end_Time - CURRENT_TIMESTAMP ()) > 0 ";
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("classId", classId, "userId", userId),
+				Object[].class);
+		return list.size();
+	}
+
+	@Override
+	public int getCommitExamCount(String classId, String userId) {
+		String sql = "SELECT c.exam_id, c.exam_name, c.exam_batch_Id, c.start_Time, c.end_Time, "
+				+ "c.class_id, d.exercise_Group_Id, d.score, d. STATUS FROM ( SELECT i.exam_Id, "
+				+ "i.exam_Name, b.exam_Batch_Id, b.start_Time,b.end_Time, r.class_Id FROM Exam_Info i, "
+				+ "Exam_Batch_Info b, Exam_Class_Re r WHERE i.exam_Id = b.exam_Id AND b.exam_Batch_Id "
+				+ "= r.exam_Batch_Id AND r.class_Id =:classId AND i.exam_status = 1 AND b.delete_Flag"
+				+ "= 0 AND r.delete_Flag = 0 ) c LEFT OUTER JOIN ( SELECT * FROM Exercise_Record "
+				+ "d WHERE d.delete_Flag = 0 AND d.user_id =:userId ) d ON c.exam_Batch_Id = d.exam_Batch_Id "
+				+ "AND c.class_id = d.class_id where d.status > 0";
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("classId", classId, "userId", userId),
+				Object[].class);
+		return list.size();
+	}
+
+	@Override
+	public Map<String,Integer> queryExamResultStatusCount(List<String> lstExamIds) {
+		if(lstExamIds == null || lstExamIds.size()==0){
+			return null;
+		}
+
+		String hql = "select examId||'-'||status ,count(1)  from ExamResultV "
+						+ "where examId in(:examIds) group by examId,status";
+
+		List<Object[]> lstResult = this.findByComplexHql(hql,
+				CollectionUtils.newObjectMap("examIds",lstExamIds.toArray(new String[lstExamIds.size()])), Object[].class);
+
+		Map<String,Integer> resultMap = new HashMap<String,Integer>(lstResult.size());
+
+		for(Object[] o:lstResult){
+			resultMap.put((String)o[0],((Long)o[1]).intValue());
+		}
+
+		return resultMap;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseCompleteController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseCompleteController.java
new file mode 100644
index 0000000..8c6466a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseCompleteController.java
@@ -0,0 +1,143 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+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 com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.service.IExerciseCompleteService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ *作业完成情况
+ * 
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ * 
+ */
+@Api(tags="作业完成情况管理接口")
+@Controller
+@RequestMapping(value = "/exercise/complete")
+public class ExerciseCompleteController {
+	//分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE=10;
+	private static final int DEFAULT_PAGE_NUM=1;
+	
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	@Qualifier("commonAppService")
+	ICommonService commonService;
+	
+	@Autowired
+	IExerciseCompleteService exerciseCompleteService;
+	
+	
+	/**
+	 * 作业完成情况列表
+	 * */
+	@ApiOperation(value = "作业完成情况列表", notes = "")
+    @ApiImplicitParams({
+    	@ApiImplicitParam(name = "keyword", value = "学生名称", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "status", value = "状态(0未提交,1待批阅,2已批阅,3需重写)", required = false, paramType="query", dataType = "Short"),
+    })
+	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	public @ResponseBody Result list(String keyword,String exerciseInfoId,Short status,Integer pageSize,Integer pageNum){
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		//读取作业信息
+		ExerciseInfo exerciseInfo =  commonService.read(ExerciseInfo.class, exerciseInfoId);
+		
+		//总考试数量
+		int totalCount = exerciseCompleteService.listCount(keyword == null ? "" : keyword.trim(),exerciseInfoId,status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+		
+		List<ExerciseCompleteInfo> list = exerciseCompleteService.list(keyword == null ? "" : keyword.trim(),exerciseInfoId,status,pageSize,pageNum);
+		
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("exerciseCompleteId", "exerciseCompleteId", "exerciseInfoId", "exerciseInfoId", "className", "className",
+	            							 "studentNo","studentNo","studentUserName", "studentUserName", "submitTime", "submitTime",
+	            							 "completeStatus","completeStatus","studentScore","studentScore"));
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("exerciseInfoId",exerciseInfoId,"exerciseName",exerciseInfo.getName(),"list",listResult,"pager", pager));
+	}
+	
+	/**
+	 * 根据不同的作业类型,返回作业完成情况及审批详情
+	 * @param exerciseCompleteId
+	 * @return
+	 */
+	@ApiOperation(value = "详情页面数据", notes = "")
+    @ApiImplicitParams({@ApiImplicitParam(name = "exerciseCompleteId", value = "作业完成情况id", required = true, paramType="query", dataType = "String")})
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String exerciseCompleteId) {
+		return new Result(true,"",CollectionUtils.newObjectMap("detail",exerciseCompleteService.queryExerciseCompleteDetail(exerciseCompleteId)));
+	}
+	
+	/**
+	 * 批阅
+	 * @param exerciseCompleteInfo
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExerciseCompleteInfo exerciseCompleteInfo) {
+		if(StringUtils.isEmpty(exerciseCompleteInfo.getExerciseCompleteId())){
+			return new Result(true,"",CollectionUtils.newObjectMap("exerciseCompleteId",exerciseCompleteService.addExerciseComplete(exerciseCompleteInfo)));
+		}else{
+			return exerciseCompleteService.updateExerciseComplete(exerciseCompleteInfo);
+		}
+	}	
+	
+	/**
+	 * 批阅
+	 * @param examInfo
+	 * @return
+	 */
+	@ApiOperation(value = "批阅", notes = "")
+	@RequestMapping(value = "/check", method = RequestMethod.POST)
+	public @ResponseBody Result checkExerciseComplateInfo(@RequestBody ExerciseCompleteInfo exerciseCompleteInfo) {
+		return  exerciseCompleteService.updateExerciseComplete(exerciseCompleteInfo);
+	}
+	
+	/**
+	 * 批阅下一个
+	 * @param examInfo
+	 * @return
+	 */
+	@ApiOperation(value = "批阅下一个", notes = "")
+	@ApiImplicitParams({@ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String")})
+	@RequestMapping(value = "/checknext", method = RequestMethod.GET)
+	public @ResponseBody Result checkExerciseComplateInfo(String exerciseInfoId) {
+		String hql = "from ExerciseCompleteInfo where exerciseInfoId=? and completeStatus=? and deleteFlag is false order by studentNo asc";
+		ExerciseCompleteInfo  lastCompleteInfo = this.commonDAO.findUnique(hql, CollectionUtils.newList(exerciseInfoId,ExerciseCompleteInfo.STATUS_COMMIT), ExerciseCompleteInfo.class);
+		if(lastCompleteInfo!=null){
+			return new Result(true,"",CollectionUtils.newObjectMap("detail",exerciseCompleteService.queryExerciseCompleteDetail(lastCompleteInfo.getExerciseCompleteId())));
+		}else{
+			return new Result(false,"已经没有待批阅的作业!");
+		}
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseController.java
new file mode 100644
index 0000000..3170c63
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseController.java
@@ -0,0 +1,2345 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+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.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.ExcelExportParam;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.ResultJson;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.ExcelExportUtils;
+import com.qxueyou.scc.exercise.model.ExerGroupResponseData;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseAddItemParams;
+import com.qxueyou.scc.exercise.model.ExerciseChapter;
+import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupExtend;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseItemData;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseObjectImg;
+import com.qxueyou.scc.exercise.model.ExerciseParseResult;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerDataList;
+import com.qxueyou.scc.exercise.service.IExercisePyService;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.user.model.ExportUserScore;
+
+/**
+ * 练习题目控制
+ * @author zhiyong
+ *
+ */
+@Controller
+@RequestMapping(value = "/exercise/Exercise")
+public class ExerciseController {
+	/** 日志  */
+	private static final Logger log = LogManager.getLogger("ExerciseController");
+	
+	/** commonDAO  */
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	/** 练习 service */
+	@Autowired
+	private IExerciseService exerciseService;
+	
+	/** 练习导入 service */
+	@Autowired
+	private IExercisePyService exercisePyService;
+	
+	/** 练习V2.0版本接口service */
+	@Autowired
+	private IExerciseVerService exerciseVerService;
+
+	/** 练习V2.0版本接口service */
+//	@Autowired
+//	IConfigService cfg;
+	
+	/** oss service */
+	@Autowired
+	IOssService ossService;
+	
+	/** 消息发送 service */
+//	@Autowired
+//	IMsgVenderService  easemobService;
+	
+	/** 组id */
+	private static final String GROUP_ID = "groupId";
+	
+	/** 做题记录id */
+	private static final String EXERCISE_RECORD_ID = "exerciseRecordId";
+	
+	/** ---------------------------APP V2.0接口 start----------------------*/
+	/**
+	 * APP2.0: 获取家庭作业list
+	 * URL:    /exercise/Exercise/homeWorkListNew
+	 * 
+	 * 
+	 *请求参数={
+			subjectId:课程id,//可选,用于高校版
+			page:当前页,//必传,大于0
+			limit:每页限制条数,//必传,大于0
+		}
+		 返回参数=[
+		    {
+		        GROUP_ID:"组id",
+		        "classId":班级id,
+		        "courseId":科目id,
+		        "orgId":机构id,
+		        "subjectId":课程id,
+		        "name":"组名",
+		        "type":组类型 ,
+		        "updateTime":更新时间,
+		        "answerUpdateTime":本套题答题更新时间,
+		        "allCount":题目总数,
+		        "exerciseTime":"考试时间",
+		        EXERCISE_RECORD_ID:"记录id",
+		        "doCount": 做题个数,
+		        "correctCount": 正确个数,
+		        "submitNumber":已提交人数(家庭作业),
+		        "currTitleNumber":当前做题序号,
+		        "status":做题状态(0:未提交 1:已提交),
+		        "completionRate": 完成率, 
+		        "accuracy": 正确率, 
+		        "score": 分数,
+		        "extendAllCount":错题本、收藏本总数
+		    },
+		    ...循环多个
+		]
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "homeWorkListNew", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> getHomeWorkExerList(
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page") int page,
+			@RequestParam(value="limit") int limit,
+			@RequestParam(value="selected", required = false) Integer selected)  {// 0:全部  1:未开始 2:做题中 3:已提交
+
+		// 获取group data
+		List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_HOMEWORK, 
+				null, page, limit, selected, null);
+		
+	    return lstResult;  
+	}
+	
+	
+	/**
+	 * APP2.0: 获取章节练习list
+	 * URL:    /exercise/Exercise/chapterListNew
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "chapterListNew", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> getChapterItemList(
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page") int page,
+			@RequestParam(value="limit") int limit,
+			@RequestParam(value="selected", required = false) Integer selected, String chapterId)  {
+		
+		// 获取group data
+		List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_CHAPTER_ITEM, 
+				subjectId, page, limit, selected, chapterId);
+		
+	    return lstResult;  
+	}
+	
+	/**
+	 * APP2.0: 获取模拟考试list
+	 * URL:    /exercise/Exercise/examsListNew
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "examsListNew", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> getExamsExerList(
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page") int page,
+			@RequestParam(value="limit") int limit,
+			@RequestParam(value="selected", required = false) Integer selected)  {
+		
+		// 获取group data
+		List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_MOCK_EXAM, 
+				null, page, limit, selected, null);
+		
+	    return lstResult;  
+	}
+	
+	/**
+	 * APP2.0: 获取专题练习list
+	 * URL:    /exercise/Exercise/topicListNew
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "topicListNew", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> getTopicExerList(
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page") int page,
+			@RequestParam(value="limit") int limit,
+			@RequestParam(value="selected", required = false) Integer selected)  {
+		
+		// 获取group data
+		List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_TOPIC, 
+				null, page, limit, selected, null);
+		
+	    return lstResult;  
+	}
+	
+	/**
+	 * APP2.0: 获取专题练习list
+	 * URL:    /exercise/Exercise/freeListNew
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "freeListNew", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> getFreeExerList(
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page") int page,
+			@RequestParam(value="limit") int limit,
+			@RequestParam(value="selected", required = false) Integer selected)  {
+		
+		// 获取group data
+		List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_FREE, 
+				null, page, limit, selected, null);
+		
+	    return lstResult;
+	}
+	
+	/**
+	 * 获取练习列表数据
+	 * @param exerType
+	 * @param subjectId
+	 * @param page
+	 * @param limit
+	 * @param selected // 0:全部  1:未开始 2:做题中 3:已提交
+	 * @return
+	 */
+	private List<ExerGroupResponseData> getExericseListData(short exerType, 
+			String subjectId, int page, int limit, Integer selected, String chapterId){
+		int pageNum = page;
+		int pageSize = limit;
+		Integer iSelected = selected;
+		
+		// 1.分页信息
+		if(pageNum < 1){
+			pageNum = 1;
+		}
+		if(pageSize < 1){
+			pageSize = 1;
+		}
+		if(iSelected == null){//为空设置为 全部
+			iSelected = 0;
+		}
+		Pager pager = new Pager();
+		pager.setPageNum(pageNum);
+		pager.setPageSize(limit);
+		
+		// 2.得到列表数据
+		List<ExerGroupResponseData> lstResult = exerciseVerService.queryExericseListData(exerType,subjectId,pager,iSelected, chapterId);
+		
+		if(null == lstResult){// 结果转换成 []
+			lstResult = new ArrayList<ExerGroupResponseData>();
+		}
+		
+		return lstResult;
+	}
+
+	/**
+	 * APP2.0: 查询做题记录
+	 * URL:    /exercise/Exercise/exerRecord
+	 *  请求参数={
+			exerType:练习类型,//必传
+			subjectId:课程id,//可选,用于高校版
+			page:当前页,//必传,大于0
+			limit:每页限制条数,//必传,大于0
+		}
+		
+		返回参数=[
+			    {
+			        GROUP_ID:"组id",
+			        "classId":班级id,
+			        "courseId":科目id,
+			        "orgId":机构id,
+			        "subjectId":课程id,
+			        "name":"组名",
+			        "type":组类型 ,
+			        "updateTime":更新时间,
+			        "answerUpdateTime":本套题答题更新时间,
+			        "allCount":题目总数,
+			        "exerciseTime":"考试时间",
+			        EXERCISE_RECORD_ID:"记录id",
+			        "doCount": 做题个数,
+			        "correctCount": 正确个数,
+			        "submitNumber":已提交人数(家庭作业),
+			        "currTitleNumber":当前做题序号,
+			        "status":做题状态(0:未提交 1:已提交),
+			        "completionRate": 完成率, 
+			        "accuracy": 正确率, 
+			        "score": 分数,
+			        "extendAllCount":错题本、收藏本总数
+			    },
+			    ...循环多个
+			]
+	 * @param page
+	 * @param start
+	 * @param limit
+	 * @return
+	 */
+	@RequestMapping(value = "exerRecord", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> queryExerRecordListNew(
+			@RequestParam(value="exerType") int exerType,
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page") int page,
+			@RequestParam(value="limit") int limit)  {
+		
+		int pageNum = page;
+		int pageSize = limit;
+		
+		// 1.分页信息
+		if(pageNum < 1){
+			pageNum = 1;
+		}
+		if(pageSize < 1){
+			pageSize = 1;
+		}
+		
+		Pager pager = new Pager();
+		pager.setPageNum(pageNum);
+		pager.setPageSize(pageSize);
+		
+		
+		StringBuffer hql = new StringBuffer(512);
+		// 2.查询结果
+		hql.append("select g,"
+					+ "  r.recordId,r.updateTime,r.doCount,r.titleMaxNumber,r.status,"
+					+ "	 r.correctCount,r.completionRate,r.score,r.accuracy,e.repeatFlag,e.classAccuracy, "
+					+ "  e.exerciseTime,e.exerciseStrategy,e.exerciseSource,e.exerciseMode"
+					+ " from ExerciseRecord r, ExerciseGroup g,ExerciseGroupExtend e "
+					+ " where r.exerciseGroupId=g.groupId"
+					+ " and g.groupId=e.groupId"
+					+ " and g.deleteFlag is false "
+					+ " and r.userId=?"
+					+ " and g.type=?"
+					+ " and g.classId=? ");
+		
+		List<Object> args = CollectionUtils.newList(ClientUtils.getUserId(), (short)exerType, ClientUtils.getClassId());
+		
+		/*if(StringUtils.isNotBlank(subjectId)){
+			hql.append("  and g.subjectId=? ");
+			args.add(subjectId);
+		}*/
+		
+		hql.append("  order by r.updateTime desc ");
+		
+		List<Object[]> lstRecord = commonDAO.findList(hql.toString(), pager, args, Object[].class);
+		
+		List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size());
+		
+		// 3.重组字段
+		for(Object[] obj:lstRecord){
+			
+			// 组装练习做题记录列表数据
+			lstResult.add(packagingExerciseRecordListData(exerType, obj));
+			
+		}
+			
+		return lstResult;
+	}
+
+	/**
+	 * 组装练习做题记录列表数据
+	 * @param exerType
+	 * @param obj
+	 * @param group
+	 * @param result
+	 * @return
+	 */
+	private ExerGroupResponseData packagingExerciseRecordListData(int exerType,
+			Object[] obj) {
+		ExerciseGroup group = (ExerciseGroup)obj[0];
+		ExerGroupResponseData result =  new ExerGroupResponseData();
+		
+		// 赋值字段值
+		BeanUtils.copyProperties(group, result);
+		
+		result.setExerciseRecordId(String.valueOf(obj[1]));
+		result.setAnswerUpdateTime((Timestamp)obj[2]);
+		if(obj[3] == null){
+			result.setDoCount(BigInteger.ZERO);
+		}else{
+			result.setDoCount((BigInteger)obj[3]);
+		}
+		result.setCurrTitleNumber(String.valueOf(obj[4]));
+		result.setStatus(String.valueOf(obj[5]));
+		
+		// 组装练习做题记录部分参数
+		packagingExerciseRecordListParam(obj, result);
+		
+		result.setExtendAllCount(group.getAllCount());
+		
+		if(obj[10] == null){
+			if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业
+				result.setRepeatFlag(false);
+			}else{
+				result.setRepeatFlag(true);
+			}
+		}else{
+			result.setRepeatFlag(!(boolean)obj[10]);// true 可以重做 false不能重做
+		}
+		
+		// 班级正确率
+		result.setClassAccuracy(obj[11] == null ? "--" :obj[11]+"%");
+		
+		if(exerType == ExerciseGroup.TYPE_EXERCISE_FREE 
+				|| exerType == ExerciseGroup.TYPE_MOCK_EXAM ){// 自由练习 模拟考试
+			result.setExerciseTime(String.valueOf(obj[12]));
+			result.setExerciseStrategy(String.valueOf(obj[13]));
+			result.setExerciseSource(String.valueOf(obj[14]));
+			result.setExerciseMode(String.valueOf(obj[15]));
+		}
+		return result;
+	}
+
+	/**
+	 * 组装练习做题记录部分参数 拆分方法
+	 * @param obj
+	 * @param result
+	 */
+	private void packagingExerciseRecordListParam(Object[] obj,
+			ExerGroupResponseData result) {
+		if(obj[6] == null){
+			result.setCorrectCount(BigInteger.ZERO);
+		}else{
+			result.setCorrectCount(new BigInteger(String.valueOf(obj[6])));
+		}
+		if(obj[7] == null){
+			result.setCompletionRate(BigDecimal.ZERO);
+		}else{
+			result.setCompletionRate(new BigDecimal(String.valueOf(obj[7])));
+		}
+		if(obj[8] == null){
+			result.setScore(BigDecimal.ZERO);
+		}else{
+			result.setScore(new BigDecimal(String.valueOf(obj[8])));
+		}
+		if(obj[9] == null){
+			result.setAccuracy(BigDecimal.ZERO);
+		}else{
+			result.setAccuracy(new BigDecimal(String.valueOf(obj[9])));
+		}
+	}
+	
+	/**
+	 * APP2.0: 获取家庭作业练习题目数据
+	 * URL:    /exercise/Exercise/homeworkExercise
+	 * 
+	 * 请求参数={
+			groupId:组id,//必传
+			exerciseRecordId:当前页,//必传,没有传""
+			getExercise:是否更新题目,//必传,
+			boolean值,没有传false
+			getAnswer:是否更新答案,//必传,
+			boolean值,没有传false
+		}
+	      
+		返回参数={
+	    "items":[// 题目集合
+	        {
+	            "exerciseId":练习id,
+	            "chapterId":null,
+	            "lessonId":null,
+	            "title":标题,
+	            "type":题目类型,
+	            "answer":正确答案,
+	            "options":[
+	                {
+	                    "optionId":选项id,
+	                    "checked":true,
+	                    "content":内容,
+	                    "optionOrder":题目序号,
+	                    "exerciseItemId":"练习id",
+	                    "imgs":[
+	                        {
+	                            "imgId":"图片id",
+	                            "exerciseObjectId":null,
+	                            "imgPath":图片路径,
+	                            "imgOrder":排序,
+	                            "objectType":图片类型 1:题目 2:选项
+	                        },
+	                        ... 循环多个
+	                    ]
+	                },
+	                ... 循环多个
+	            ],
+	            "scores":null,
+	            "itemNo":null,
+	            "analisisResult":{
+	                "allAccuracy":全站统计 正确率,
+	                "analysis":"解析",
+	                "submitAllNumber":全站 提交总数,
+	                "usualFaultAnswers":易错题,
+	                "exerciseAnalisisUId":null,
+	                "accuracy":个人统计 正确率,
+	                "submitNumber":个人统计  提交总数,
+	                "submitErrorNumber":个人统计  提交错误总数,
+	            },
+	            "imgs":[
+	                {
+	                   "imgId":"图片id",
+	                    "exerciseObjectId":null,
+	                    "imgPath":图片路径,
+	                    "imgOrder":排序,
+	                    "objectType":图片类型 1:题目 2:选项
+	                },
+	                ... 循环多个
+	            ],
+	            "commentFlag": null,
+	        }
+	    ],
+	    "answers":[// 个人答案集合
+	        {
+	            "answerUId":"主键id",
+	            "answer":选择答案  如:多选为(A,B,C),
+	            "correct":0,
+	            "exerciseItemId":练习id,
+	            EXERCISE_RECORD_ID:记录id,
+	            "userId":用户id
+	        },
+	        ... 循环多个
+	    ]
+	}
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @param getExercise 是否获取练习题
+	 * @param getAnswer 是否获取答案
+	 * @return
+	 */
+	@RequestMapping(value = "homeworkExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getHomeworkExerciseData(
+			@RequestParam(value = GROUP_ID) String groupId,
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId,
+			@RequestParam(value = "getExercise") boolean getExercise,
+			@RequestParam(value = "getAnswer") boolean getAnswer)  {
+		
+		// 获取结果
+		ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
+				exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_HOMEWORK);
+		
+		return result;
+	}
+	
+	/**
+	 * APP2.0: 获取模拟考试练习题目数据
+	 * URL:    /exercise/Exercise/examExercise
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @param getExercise 是否获取练习题
+	 * @param getAnswer 是否获取答案
+	 * @return
+	 */
+	@RequestMapping(value = "examExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getExamExerciseData(
+			@RequestParam(value = GROUP_ID) String groupId,
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId,
+			@RequestParam(value = "getExercise") boolean getExercise,
+			@RequestParam(value = "getAnswer") boolean getAnswer)  {
+		
+		// 获取结果
+		ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
+				exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_MOCK_EXAM);
+		
+		return result;
+	}
+	
+	
+	/**
+	 * APP2.0: 获取章节练习题目数据
+	 * URL:    /exercise/Exercise/chapterExercise
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @param getExercise 是否获取练习题
+	 * @param getAnswer 是否获取答案
+	 * @return
+	 */
+	@RequestMapping(value = "chapterExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getChapterExerciseData(
+			@RequestParam(value = GROUP_ID) String groupId,
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId,
+			@RequestParam(value = "getExercise") boolean getExercise,
+			@RequestParam(value = "getAnswer") boolean getAnswer)  {
+		
+		// 获取结果
+		ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
+				exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_CHAPTER_ITEM);
+		
+		return result;
+	}
+	
+	/**
+	 * APP2.0: 获取专题练习题目数据
+	 * URL:    /exercise/Exercise/topicExercise
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @param getExercise 是否获取练习题
+	 * @param getAnswer 是否获取答案
+	 * @return
+	 */
+	@RequestMapping(value = "topicExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getTopicExerciseData(
+			@RequestParam(value = GROUP_ID) String groupId,
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId,
+			@RequestParam(value = "getExercise") boolean getExercise,
+			@RequestParam(value = "getAnswer") boolean getAnswer)  {
+		
+		// 获取结果
+		ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
+				exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_TOPIC);
+		
+		return result;
+	}
+	
+	
+	/**
+	 * APP2.0: 获取专题练习题目数据
+	 * URL:    /exercise/Exercise/freeExercise
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @param getExercise 是否获取练习题
+	 * @param getAnswer 是否获取答案
+	 * @return
+	 */
+	@RequestMapping(value = "freeExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getFreeExerciseData(
+			@RequestParam(value = GROUP_ID) String groupId,
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId,
+			@RequestParam(value = "getExercise") boolean getExercise,
+			@RequestParam(value = "getAnswer") boolean getAnswer)  {
+		
+		// 获取结果
+		ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
+				exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_FREE);
+		
+		
+		return result;
+	}
+	
+	/**
+	 * APP2.0: 获取专题练习题目数据
+	 * URL:    /exercise/Exercise/newFreeExercise
+	 * 
+	 * {
+	 * 	source: 练习来源(1:练习题库 2:考试题库  3:家庭作业)   多个以逗号分开
+		strategy:做题方式(1:未做题优先  2:错题优先)
+		mode:做题模式(1:练习模式 2:考试模式)
+		count:数量(30 50 100 200)
+		exerciseTime:练习时间
+	 * }
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "newFreeExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getFreeExerciseData(
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value = "source") String source,
+			@RequestParam(value = "strategy") String strategy,
+			@RequestParam(value = "mode") String mode,
+			@RequestParam(value = "count") int count,
+			@RequestParam(value = "exerciseTime") String exerciseTime)  {
+		
+		if(StringUtils.isBlank(source)
+				|| StringUtils.isBlank(strategy)
+				|| StringUtils.isBlank(exerciseTime)
+				|| count < 1){
+			return null;
+		}
+		
+		// 根据条件获取自由练习
+		ExerItemResponseData result = exerciseVerService.doGetFreeExercise(
+				null, source, strategy, mode, count, exerciseTime);
+		
+		return result;
+	}
+	
+	
+	/**
+	 * APP2.0: 提交练习答案
+	 * URL:    /exercise/Exercise/exerAnswers
+	 * 
+	 * 请求参数={
+	    "exerciseGroupId": 组id, 
+	    EXERCISE_RECORD_ID: 记录id, 
+	    "exerciseExtendId": null, 
+	    "currTitleNum": "当前题号", 
+	    "status": 状态,
+	    "type": 练习类型,// 整型
+	    "doCount": 练习类型,
+	    "correctCount": 正确个数, 
+	    "allCount":题目总数,
+	    "items": [
+	        {
+	            "exerciseId": "练习id", 
+	            "type": 练习类型,// 整数型
+	            "answer": "选择答案", 
+	            "correct": 是否正确(0:错误 1:正确 2:未知)
+	        }, 
+	        {
+	            "exerciseId": "练习id", 
+	            "type": 练习类型, 
+	            "answer": "选择答案", 
+	            "correct": 是否正确(0:错误 1:正确 2:未知)
+	        }
+	    ]
+		}
+		
+		返回参数={
+			"success":true,//true:成功 false:失败
+			"attrs":{EXERCISE_RECORD_ID:练习记录id,
+					"updateTime":修改时间
+			 },
+			"msg":"提交成功",//结果信息
+			}
+
+	 * 
+	 * @param answers
+	 * @return
+	 */
+	@RequestMapping(value = "exerAnswers", method = RequestMethod.POST)
+	public @ResponseBody Object doSubmitExerAnswer(
+			@RequestParam(value = "answers")  String answers)  {
+		
+		// 用户本次做题提交的数据
+		List<ExerciseItemAnswerData> lstAnswers = null;
+		
+		Result result = new Result(false);
+		String exerciseRecordId = null;
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			
+			// 装换json到对象
+			ExerciseSubmitAnswerData answerData = mapper.readValue(answers, ExerciseSubmitAnswerData.class);
+			
+			lstAnswers = answerData.getItems();
+			
+			// 记录id
+			String initExerciseRecordId = answerData.getExerciseRecordId();
+						
+			if(lstAnswers.isEmpty() 
+					&&  !ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus())
+					&& answerData.getSubmitType() != 1){
+				
+				exerciseVerService.doSaveExerciseDataSubmitLog(answers,
+						initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
+						ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Exercise/exerAnswers");
+				
+				return new Result(false,"提交数据异常");
+			}
+				
+			// 1.---------记录提交的数据日志
+			// 记录提交的数据日志
+			String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(answers,
+					initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, 
+					ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers");
+			
+			// 2.-------- 提交答案
+			// 操作练习数据
+			Map<String,Object> resultMap = exerciseVerService.doOperExerciseAnswerData(answerData);
+			
+			result = new Result(true, "答案提交成功");
+			result.setData(resultMap);
+			
+			// 3.-------- 班级统计数据
+			if(resultMap.get("exerciseGroupId") != null){
+				
+				String exerciseGroupId = String.valueOf(resultMap.get("exerciseGroupId"));
+				
+				// 2.发送班级排名请求
+				exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId);
+				
+				// 3.发送 题目的全站统计 、个人统计、班级正确率请求消息
+				exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData);
+				//exerciseVerService.doStatisUserExerciseItemData(ClientUtils.getUserId(), ClientUtils.getUserName(), answerData);
+			}
+			
+			// 4.---------更新本次提交的数据日志exerciseRecordId
+			if(StringUtils.isBlank(initExerciseRecordId) 
+					&& resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
+				
+				exerciseRecordId = String.valueOf(resultMap.get(EXERCISE_RECORD_ID));
+				
+				exerciseVerService.doUpdateExerciseDataSubmitLog(exerciseDataLogId, exerciseRecordId);
+			}
+			
+		} catch (Exception e) {
+			
+			result = new Result(false, "提交练习答案请求异常");
+			log.error("提交练习答案请求异常===",e);
+			
+			exerciseVerService.doSaveExerciseDataSubmitLog(answers,
+					exerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, 
+					ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Exercise/exerAnswers");
+		}
+		
+		return result;
+	}
+	
+	
+	/**
+	 * APP2.0: 提交练习答案
+	 * URL:    /exercise/Exercise/exerAnswers
+	 * 
+	 * 请求参数=[{
+	    "exerciseGroupId": 组id, 
+	    EXERCISE_RECORD_ID: 记录id, 
+	    "exerciseExtendId": null, 
+	    "currTitleNum": "当前题号", 
+	    "status": 状态,
+	    "type": 练习类型,// 整型
+	    "doCount": 练习类型,
+	    "correctCount": 正确个数, 
+	    "allCount":题目总数,
+	    "items": [
+	        {
+	            "exerciseId": "练习id", 
+	            "type": 练习类型,// 整数型
+	            "answer": "选择答案", 
+	            "correct": 是否正确(0:错误 1:正确 2:未知)
+	        }, 
+	        {
+	            "exerciseId": "练习id", 
+	            "type": 练习类型, 
+	            "answer": "选择答案", 
+	            "correct": 是否正确(0:错误 1:正确 2:未知)
+	        }
+	    ]
+		},
+		   ...
+		]
+		
+		返回参数={"success":true,//true:成功 false:失败
+			"attrs":[{EXERCISE_RECORD_ID:练习记录id,
+			exerciseGroupId:练习组id,
+			isNewRecord:是否为新增的record(true:是 false:否)
+			"updateTime":修改时间
+			},...],
+			"msg":"提交成功",//结果信息
+			}
+
+	 * 
+	 * @param answers
+	 * @return
+	 */
+	@RequestMapping(value = "exerMutiAnswers", method = RequestMethod.POST)
+	public @ResponseBody Object doSubmitMutiExerAnswer(
+			@RequestParam(value = "answers")  String answers)  {
+		
+		// 用户本次做题提交的数据
+		List<ExerciseSubmitAnswerData> lstRecord = null;
+		List<ExerciseItemAnswerData> lstAnswers= null;
+		String exerciseRecordId = null;
+		ExerciseSubmitAnswerData answerData = null;
+		
+		Map<String,Object> resultMap = new HashMap<String,Object>(2);
+		Map<String,Object> returnMap = null;
+		resultMap.put("success", false);
+		resultMap.put("attrs", null);
+		List<Map<String,Object>> resultList = null;
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			
+			// 装换json到对象
+			ExerciseSubmitAnswerDataList answerDataList = mapper.readValue(answers, ExerciseSubmitAnswerDataList.class);
+			
+			lstRecord = answerDataList.getDatas();
+			
+			resultList = new ArrayList<Map<String,Object>>(lstRecord.size());
+			for(int i=0; i<lstRecord.size(); i++){
+				
+				answerData = lstRecord.get(i);
+				if(null == answerData){
+					continue;
+				}
+				
+				// 记录id
+				String initExerciseRecordId = answerData.getExerciseRecordId();
+							
+				// 记录提交的数据日志
+				String recordData = JSONObject.toJSONString(answerData);
+				
+				lstAnswers = answerData.getItems();
+						
+				if(lstAnswers.isEmpty() 
+						&& !ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus())
+						&& answerData.getSubmitType() != 1){// 仅提交 或仅仅本地无网重做
+					
+					exerciseVerService.doSaveExerciseDataSubmitLog(recordData,
+							initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
+							ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Exercise/exerMutiAnswers");
+					
+					continue;
+				}
+				
+				// 1.---------记录提交的数据日志
+				String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(recordData,
+						initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
+						ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerMutiAnswers");
+				
+				// 2.-------- 提交答案
+				// 操作练习数据
+				returnMap = exerciseVerService.doOperExerciseAnswerData(answerData);
+				if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增
+					returnMap.put("isNewRecord", true);
+				}else{
+					returnMap.put("isNewRecord", false);
+				}
+				
+				resultList.add(returnMap);
+				// 3.-------- 班级统计数据;
+				if(returnMap.get("exerciseGroupId") != null){
+					
+					String exerciseGroupId = String.valueOf(returnMap.get("exerciseGroupId"));
+					
+					// 2.发送班级排名请求
+					exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId);
+					
+					// 3.发送 题目的全站统计  个人统计请求消息
+					exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData);
+				}
+				
+				// 4.---------更新本次提交的数据日志exerciseRecordId
+				if(StringUtils.isBlank(initExerciseRecordId) 
+						&& returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
+					
+					exerciseRecordId = String.valueOf(returnMap.get(EXERCISE_RECORD_ID));
+					
+					exerciseVerService.doUpdateExerciseDataSubmitLog(exerciseDataLogId, exerciseRecordId);
+				}
+				
+			}
+			
+			resultMap.put("success", true);
+			resultMap.put("attrs", resultList);
+			resultMap.put("msg", "提交成功");
+			
+		} catch (Exception e) {
+			
+			log.error("提交练习答案请求异常===",e);
+			resultMap.put("msg", "提交练习答案请求异常");
+			
+			exerciseVerService.doSaveExerciseDataSubmitLog(answers,
+					"exerMutiAnswers", ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
+					ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Exercise/exerMutiAnswers");
+		}
+		
+		return resultMap;
+	}
+	
+	/**
+	 * APP2.0: 更新练习家庭作业、模拟考试是否提交
+	 * URL:    /exercise/Exercise/updateHomeExerSubmitNew
+	 * 
+	 * @param exerciseRecordId     练习记录ID
+	 * @return
+	 */
+	@RequestMapping(value = "updateHomeExerSubmitNew", method = RequestMethod.GET)
+	public @ResponseBody Result doUpdateHomeExerSubmit(
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId)  {
+		Result result = new Result(false);
+		
+		ExerciseRecord record = commonDAO.read(ExerciseRecord.class, exerciseRecordId);
+		if(record == null 
+				|| !ClientUtils.getUserId().equals(record.getUserId())){
+			return new Result(false, "非法操作,不是当前用户操作");
+		}
+		
+		record.setStatus(ExerciseRecord.STATUS_SUBMIT);
+		result = exerciseVerService.updateExerciseRecordObj(record);
+		
+		return result;
+	} 
+	
+	/**
+	 * APP2.0: 更新练习家庭作业、模拟考试是否提交
+	 * URL:    /exercise/Exercise/updateExerciseRecord
+	 * 
+	 * @param exerciseRecordId     练习记录ID
+	 * @return
+	 */
+	@RequestMapping(value = "updateExerciseRecord", method = RequestMethod.GET)
+	public @ResponseBody Result doUpdateExerciseRecord(
+			@RequestParam(value = EXERCISE_RECORD_ID) String exerciseRecordId,
+			@RequestParam(value = GROUP_ID)  String groupId,
+			@RequestParam(value = "currTitleNum", required = false) String currTitleNum)  {
+		
+		Result result = exerciseVerService.doUpdateExerciseRecord(exerciseRecordId, groupId, currTitleNum);
+		
+		return result;
+	} 
+	
+	/**
+	 * APP2.0: 更新练习作业题号 app端重新开始做题
+	 * URL:    /exercise/Exercise/updateNewExerRecordNew
+	 * 
+	 * @param groupId         习题组ID
+	 * @return
+	 */
+	@RequestMapping(value = "updateNewExerRecordNew", method = RequestMethod.GET)
+	public @ResponseBody Result doUpdateExerItemNumber(
+			@RequestParam(value = GROUP_ID)  String groupId)  {
+		
+		Map<String,Object> map = exerciseVerService.doInsertExerRecord(groupId);
+
+		Result result = new Result(true, "状态更新成功");
+		result.setData(map);
+		
+		return result;
+	} 
+	
+	/**
+	 * APP2.0: 题目答案分析
+	 * URL:    /exercise/Exercise/itemstatisics
+	 * 
+	 * 
+	 * 
+	 * @param groupId         习题组ID
+	 * @return
+	 */
+	@RequestMapping(value = "itemStatisics", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> doQueryExerciseItemStatisics(
+			@RequestParam(value = GROUP_ID)  String groupId)  {
+		
+		// 查询结果
+		List<Map<String, Object>> resultLst = exerciseVerService.queryExerciseItemStatisics(groupId);
+		
+		return resultLst;
+	} 
+	
+	
+	
+	/** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/
+	
+	
+	/**------------------------------  web 后端------------------------------------------------------------------------*/
+	
+	/**
+	 * 练习管理主页
+	 * 
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	public String listPage() {
+		return "/exercise/Exercise";
+	}
+	
+	/**
+	 * 机构练习管理主页
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/org",method = RequestMethod.GET)
+	public String listOrgPage() {
+		return "/exercise/OrgExercise";
+	}
+	
+	/**
+	 * (后台管理系统)
+	 * 
+	 * 练习管理列表,获取列表数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "list", method = RequestMethod.GET)
+	public @ResponseBody List<ExerciseGroup> data(String tid, String classId) {
+		classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId;
+		
+		String sql = " select g.ORIGIN_EXERCISE_ID as originExerciseId,g.NAME AS name ,g.GROUP_ID AS groupId,g.TYPE AS type,g.ORDER_NUM as orderNum,g.all_count as allCount,e.exercise_time as attribute1 "
+				+ " from  exercise_group g left join exercise_group_extend e "
+				+ " on g.group_id = e.group_id and e.delete_flag = 0  "
+				+ " where g.delete_flag = 0 "
+				+ " and g.type != ? "
+				+ " and g.type != ? "
+				+ " and g.type != ? "
+				+ " and g.type != ? "
+				+ " and g.type != ? "
+				+ " and g.type != ? "
+				+ " and g.class_id = ? ";
+		if(StringUtils.isNotBlank(tid)){
+			sql = sql.concat(" and g.subject_id = ? ");
+		}
+		sql = sql.concat(" order by g.order_num asc");
+		
+		//剔除互动及教学评估
+		List<ExerciseGroup> result = new ArrayList<ExerciseGroup>();
+		if(StringUtils.isNotBlank(tid)){
+			result = exerciseService.queryExerciceGroupList(sql, CollectionUtils.newList(ExerciseGroup.TYPE_EXERCISE_FREE,
+					ExerciseGroup.TYPE_INTERACT,ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE,ExerciseGroup.TYPE_EXERCISE_SEQUENCE,
+					ExerciseGroup.TYPE_EXERCISE_RANDOM, ExerciseGroup.TYPE_CHAPTER_ITEM,classId,tid));
+		}else{
+			result = exerciseService.queryExerciceGroupList(sql, CollectionUtils.newList(ExerciseGroup.TYPE_EXERCISE_FREE,
+					ExerciseGroup.TYPE_INTERACT,ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE,ExerciseGroup.TYPE_EXERCISE_SEQUENCE,
+					ExerciseGroup.TYPE_EXERCISE_RANDOM, ExerciseGroup.TYPE_CHAPTER_ITEM ,classId));
+		}
+		  
+		for (ExerciseGroup exerciseGroup : result) {
+			if(StringUtils.isNotBlank(exerciseGroup.getOriginExerciseId())){
+				exerciseGroup.setEditFlag(false);
+			}else{
+				exerciseGroup.setEditFlag(true);
+			}
+			
+		}
+		return result;
+	}
+	
+	/**
+	 * (后台管理系统)
+	 * 
+	 * 机构练习管理列表,获取列表数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "orgList", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> orgData(String collegeCourseId) {
+		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
+		List<Object[]> result = new ArrayList<Object[]>();
+		String hql = "select e,o.name,c.exerciseCourseId,c.orderNum from ExerciseGroup e ,OrgCollegeCourse o ,ExerciseReCourse c "
+				+ " where e.groupId = c.groupId"
+				+ " and o.collegeCourseId = c.collegeCourseId "
+				+ " and c.orgId=? "
+				+ " and o.deleteFlag is false "
+				+ " and c.deleteFlag is false "
+				+ " and e.deleteFlag is false ";
+		
+		if(StringUtils.isNotBlank(collegeCourseId)){
+			hql = hql.concat( " and c.collegeCourseId = ? order by c.orderNum asc ");
+			result = commonDAO.findwithRawResult(hql, CollectionUtils.newList(ClientUtils.getOrgId(),collegeCourseId));
+		}else{
+			hql = hql.concat( " order by c.orderNum asc ");
+			result = commonDAO.findwithRawResult(hql, CollectionUtils.newList(ClientUtils.getOrgId()));
+		}
+		
+		for (Object[] objects : result) {
+			ExerciseGroup group = (ExerciseGroup) objects[0];
+			Map<String,Object> map = new HashMap<String, Object>();
+			map.put("name", group.getName());
+			map.put("typeName", group.getTypeName());
+			map.put("allCount", group.getAllCount());
+			map.put("attribute1", group.getAttribute1());
+			map.put("type", group.getType());
+			map.put(GROUP_ID, group.getGroupId());
+			map.put("courseName", objects[1]);
+			map.put("exerciseCourseId", objects[2]);
+			map.put("orderNum", objects[3]);
+			//findAlreadyOrg(group,map);
+			map.put("meFlag", ClientUtils.getOrgId().equals(group.getOrgId()));
+			list.add(map);
+			
+		}
+		
+		return list;
+	}
+	
+	/**
+	 * 查看练习已经指定的机构和班级
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "/exerOrgIds", method = RequestMethod.GET)
+	public @ResponseBody Result findAlreadyOrg(String groupId){
+		Map<String,Object> map = new HashMap<String, Object>();
+		String hql = " select r from ExerciseReCourse c,Organization r"
+				+ " where c.orgId = r.organizationId"
+				+ " and c.deleteFlag is false"
+				+ " and r.deleteFlag is false"
+				+ " and c.groupId = ?";
+		List<Organization> lstOrg = commonDAO.find(hql, CollectionUtils.newList(groupId), Organization.class);
+		//StringBuffer sbName = new StringBuffer();
+		StringBuffer sbId = new StringBuffer();
+		List<String> classIds = new ArrayList<String>();
+		//String orgNames = "";
+		String orgIds = "";
+		for (Organization org : lstOrg) {
+			//sbName.append(org.getName()+",");
+			sbId.append(org.getOrganizationId()).append(',');
+		}
+		
+		if(classIds.isEmpty()){
+			map.put("classIds", "");
+		}else{
+			hql = "select distinct classId from ExerciseGroup where classId in (:classIds) and deleteFlag is false and originExerciseId = :groupId";
+			Map<String,Object> args = new HashMap<String,Object>();
+			
+			args.put("classIds", classIds.toArray());
+			
+			
+			args.put(GROUP_ID, groupId);
+			List<String> objs = commonDAO.findByComplexHql(hql, args, String.class);
+			map.put("classIds", StringUtils.join(objs.toArray(), ","));
+		}
+		
+		/*if(sbName.length()>0){
+			orgNames = sbName.deleteCharAt(sbName.length()-1).toString();
+		}*/
+		if(sbId.length()>0){
+			orgIds = sbId.deleteCharAt(sbId.length()-1).toString();
+		}
+		//map.put("orgNames", orgNames);
+		map.put("orgIds", orgIds);
+		Result result = new Result(true);
+		result.setData(map);
+		return result;
+	}
+	/**
+	 * 获取练习组数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "group/{groupId}", method = RequestMethod.GET)
+	public @ResponseBody ExerciseGroup readGroup(@PathVariable String groupId) {
+		
+		String hql = "from ExerciseGroup where groupId=? and deleteFlag is false";
+		
+		ExerciseGroup group = commonDAO.findUnique(hql, CollectionUtils.newList(groupId), ExerciseGroup.class);
+		
+		group.setItems(null);
+		
+		return group;
+	}
+	
+	/**
+	 * 获取练习数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "item/{exerciseId}", method = RequestMethod.GET)
+	public @ResponseBody ExerciseItem readExerciseItem(@PathVariable String exerciseId) {
+		
+		String hql = "from ExerciseItem where exerciseId=? and deleteFlag is false";
+		
+		ExerciseItem item = commonDAO.findUnique(hql, CollectionUtils.newList(exerciseId), ExerciseItem.class);
+		
+		return item;
+	}
+	
+	/**
+	 * 获取练习数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "itemNew/{exerciseId}", method = RequestMethod.GET)
+	public @ResponseBody ExerciseItem readExerciseItem(@PathVariable String exerciseId,String groupId) {
+		
+		String hql = "from ExerciseItem where exerciseId=? and deleteFlag is false";
+		
+		ExerciseItem item = commonDAO.findUnique(hql, CollectionUtils.newList(exerciseId), ExerciseItem.class);
+		
+		String hqlForNo = "select itemOrder from ExerciseGroupItemRe where exerciseItemId=? and exerciseGroupId=?";
+		
+		Integer itemOrder = commonDAO.findUnique(hqlForNo, CollectionUtils.newList(exerciseId,groupId), Integer.class);
+		
+		if(null != itemOrder){
+			item.setItemNo(itemOrder);
+		}
+		
+		return item;
+	}
+	
+	@RequestMapping(value = "checkDeleteNew", method = RequestMethod.POST)
+	@ResponseBody
+	public boolean checkDeleteNew(String groupId){
+		
+		String[] arrId = groupId.split(",");
+		StringBuffer replaceCode = new StringBuffer(1024);
+		replaceCode.append(" ( ");
+		List<Object> lstArgs = new ArrayList<Object>(arrId.length);
+		for(int i = 0; i < arrId.length ; i++ ){
+			lstArgs.add(arrId[i]);
+			if( i == arrId.length - 1 ){
+				replaceCode.append( " ? ) ") ;
+			}else{
+				replaceCode.append(" ? ,  ") ;
+			}
+		}
+		
+		String hql = "select count(1) from ExerciseItemAnswerU u where deleteFlag is false and  exerciseItemId in " +
+				"( select i.exerciseId from ExerciseGroup g,ExerciseItem i,ExerciseGroupItemRe r where g.groupId=r.exerciseGroupId " +
+				" and i.exerciseId = r.exerciseItemId and g.groupId in " + replaceCode.toString() + " and  g.deleteFlag is false and  i.deleteFlag is false ) ";
+		
+		int iCount = commonDAO.findCount(hql, lstArgs);
+		
+		return iCount > 0 ? true : false;
+		
+	}
+	
+	
+	/**
+	 * (后台管理系统)
+	 * 删除练习组(优化)
+	 * 
+	 * 更新20150907:更新习题组最后修改时间
+	 * @return
+	 */
+	@RequestMapping(value = "deleteNew", method = RequestMethod.POST)
+	@ResponseBody
+	public Result deleteNew(String groupId,String type) {
+		
+		return exerciseService.deleteExerciseGroup(groupId,type,"class",null,null,null);
+	}
+	
+	/**
+	 * (后台管理系统)
+	 * 删除练习组(优化)
+	 * 
+	 * 更新20150907:更新习题组最后修改时间
+	 * @return
+	 */
+	@RequestMapping(value = "deleteOrg", method = RequestMethod.POST)
+	@ResponseBody
+	public Result deleteOrg(String groupId,String type,Integer delAll, String orgIds[], String classIds[]) {
+		
+		return exerciseService.deleteExerciseGroup(groupId,type,"org",delAll,orgIds,classIds);
+	}
+	
+	
+	
+	/**
+	 * 获取习题列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "item/data/{groupId}", method = RequestMethod.GET)
+	@ResponseBody
+	public List<ExerciseItem> listItems(@PathVariable String groupId) {
+
+
+		List<ExerciseItem> items =  exerciseService.readExerciseItemsWithNo(groupId);
+		
+		return items;
+	}
+	
+	/**
+	 * (后台管理系统)
+	 *  管理员同步习题到班级
+	 * 
+	 * @param exerciseItemId
+	 * @return
+	 * @throws InvocationTargetException 
+	 * @throws IllegalAccessException 
+	 */
+	@RequestMapping(value = "/item/synExercise", method = RequestMethod.POST)
+	@ResponseBody
+	public Result synExercise(String[] exerciseIds) throws IllegalAccessException, InvocationTargetException {
+		return exerciseService.doSynExercise(exerciseIds);
+	}
+	
+	/**
+	 * (后台管理系统)
+	 * 增加习题
+	 * 
+	 * 更新20150617:更新习题组最后修改时间
+	 * @return
+	 */
+	@RequestMapping(value = "item/addOrUpdate", method = RequestMethod.POST)
+	@ResponseBody
+	public Result addOrUpdateItem(ExerciseAddItemParams params) {
+		
+			String groupId = params.getGroupId();
+			
+			short type = params.getType();
+			boolean checkA = params.getCheckA();
+			boolean checkB = params.getCheckB();
+			boolean checkC = params.getCheckC();
+			boolean checkD = params.getCheckD();
+			boolean checkE = params.getCheckE();
+			boolean checkF = params.getCheckF();
+			boolean checkG = params.getCheckG();
+			boolean checkH = params.getCheckH();
+			boolean checkI = params.getCheckI();
+			boolean checkJ = params.getCheckJ();
+			boolean checkK = params.getCheckK();
+			boolean checkL = params.getCheckL();
+			boolean checkM = params.getCheckM();
+			boolean checkN = params.getCheckN();
+			boolean checkO = params.getCheckO();
+			
+			List<ExerciseItemOption> lstOptions = new ArrayList<ExerciseItemOption>(8);
+			createItemOption(getOptionOrder(type,'A'),params.getOptionA(), checkA, params.getOptionA_Id(), params.getOptionA_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'B'),params.getOptionB(), checkB, params.getOptionB_Id(), params.getOptionB_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'C'),params.getOptionC(), checkC, params.getOptionC_Id(), params.getOptionC_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'D'),params.getOptionD(), checkD, params.getOptionD_Id(), params.getOptionD_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'E'),params.getOptionE(), checkE, params.getOptionE_Id(), params.getOptionE_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'F'),params.getOptionF(), checkF, params.getOptionF_Id(), params.getOptionF_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'G'),params.getOptionG(), checkG, params.getOptionG_Id(), params.getOptionG_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'H'),params.getOptionH(), checkH, params.getOptionH_Id(), params.getOptionH_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'I'),params.getOptionI(), checkI, params.getOptionI_Id(), params.getOptionI_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'J'),params.getOptionJ(), checkJ, params.getOptionJ_Id(), params.getOptionJ_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'K'),params.getOptionK(), checkK, params.getOptionK_Id(), params.getOptionK_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'L'),params.getOptionL(), checkL, params.getOptionL_Id(), params.getOptionL_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'M'),params.getOptionM(), checkM, params.getOptionM_Id(), params.getOptionM_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'N'),params.getOptionN(), checkN, params.getOptionN_Id(), params.getOptionN_imgIds(), lstOptions);
+			createItemOption(getOptionOrder(type,'O'),params.getOptionO(), checkO, params.getOptionO_Id(), params.getOptionO_imgIds(), lstOptions);
+			
+			// 得到正确答案
+			if(StringUtils.isBlank(params.getOptionE())){
+				checkE=false;
+			}
+			if(StringUtils.isBlank(params.getOptionF())){
+				checkF=false;
+			}
+			
+			String answer = getCorrectAnswer(params, type);
+			
+			if(StringUtils.isEmpty(params.getExerciseId())){
+				ExerciseItem item = new ExerciseItem();
+				item.setAnswer(answer);
+				item.setTitle(params.getTitle());
+				item.setType(type);
+				item.setImgs(getExerciseTitleImgs(params.getTitle_imgsIds()));
+				if(groupId.contains("#")){// groupid结尾多#
+					groupId = groupId.substring(0, groupId.indexOf('#'));
+				}
+				// 练习不发系统通知
+				//sendSysNotice(0, groupId);
+				return exerciseService.insertExerciseItem(groupId, item, lstOptions,params.getAnalysis());	
+			}else{
+				ExerciseItem item = this.commonDAO.read(ExerciseItem.class, params.getExerciseId());
+				item.setAnswer(answer);
+				item.setTitle(params.getTitle());
+				item.setType(type);
+				// 练习不发系统通知
+				//sendSysNotice(1, groupId);
+				return exerciseService.updateExerciseItem(item, lstOptions,params.getAnalysis());	
+			}
+			
+	}
+	
+	
+	/**
+	 * 得到正确答案
+	 * @param checkA
+	 * @param checkB
+	 * @param checkC
+	 * @param checkD
+	 * @param checkE
+	 * @param checkF
+	 * @return
+	 */
+	private String getCorrectAnswer(ExerciseAddItemParams params,short type){
+		StringBuffer answer = new StringBuffer(64);
+		
+		if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断
+			return params.getCheckA()?"True":params.getCheckB()?"False":null;
+		}
+		
+		if(params.getCheckA()){
+			answer.append('A');
+		}
+		if(params.getCheckB()){
+			answer.append(',').append('B');
+		}
+		
+		// 组装余下正确答案
+		packagingCorrectAnswer(params, answer);
+		
+		String answers = answer.toString();
+		
+		if(answers.indexOf(',') == 0){
+			answers = answers.substring(1, answers.length());
+		}
+		
+		return answers;
+	}
+
+	/**
+	 * 组装正确答案
+	 * @param checkC
+	 * @param checkD
+	 * @param checkE
+	 * @param checkF
+	 * @param answer
+	 */
+	private void packagingCorrectAnswer(ExerciseAddItemParams params, StringBuffer answer) {
+		if(params.getCheckC()){
+			answer.append(',').append('C');
+		}
+		if(params.getCheckD()){
+			answer.append(',').append('D');
+		}
+		if(params.getCheckE()){
+			answer.append(',').append('E');
+		}
+		if(params.getCheckF()){
+			answer.append(',').append('F');
+		}
+		if(params.getCheckG()){
+			answer.append(',').append('G');
+		}
+		if(params.getCheckH()){
+			answer.append(',').append('H');
+		}
+		packagingCorrectAnswerFirst(params, answer);
+	}
+	
+	/**
+	 * 组装正确答案
+	 * @param checkC
+	 * @param checkD
+	 * @param checkE
+	 * @param checkF
+	 * @param answer
+	 */
+	private void packagingCorrectAnswerFirst(ExerciseAddItemParams params, StringBuffer answer) {
+		if(params.getCheckI()){
+			answer.append(',').append('I');
+		}
+		if(params.getCheckJ()){
+			answer.append(',').append('J');
+		}
+		if(params.getCheckK()){
+			answer.append(',').append('K');
+		}
+		if(params.getCheckL()){
+			answer.append(',').append('L');
+		}
+		if(params.getCheckM()){
+			answer.append(',').append('M');
+		}
+		if(params.getCheckN()){
+			answer.append(',').append('N');
+		}
+		if(params.getCheckO()){
+			answer.append(',').append('O');
+		}
+	}
+	
+	/**
+	 * 得到练习题目图片list
+	 * @param title_imgsIds
+	 * @return
+	 */
+	private List<ExerciseObjectImg> getExerciseTitleImgs(String title_imgsIds){
+		if(StringUtils.isBlank(title_imgsIds)){//新增图片
+			return null;
+		}
+		String[] strImgsId = title_imgsIds.split(",");
+		List<ExerciseObjectImg> imgs = new ArrayList<ExerciseObjectImg>(strImgsId.length);
+		ExerciseObjectImg objImg = null;
+		for(String imgId:strImgsId){
+			objImg = new ExerciseObjectImg();
+			objImg.setImgId(imgId);
+			imgs.add(objImg);
+		}
+		return imgs;
+	}
+	
+	/**
+	 * 创建习题选项
+	 * @param option
+	 * @param check
+	 * @param lstOptions
+	 */
+	private void createItemOption(String optionOrder,String option_t, boolean check, String optionId,
+			String imgsId, List<ExerciseItemOption> lstOptions) {
+		String option = option_t;
+		
+		if("True".equals(optionOrder) || "False".equals(optionOrder)){
+			option = optionOrder;
+		}
+		
+		ExerciseItemOption a = new ExerciseItemOption();
+		if(StringUtils.isNotBlank(optionId)){// 更新
+			a.setOptionId(optionId);
+		}else{
+			if(StringUtils.isEmpty(option)){
+				return;
+			}
+		}
+		
+		if(StringUtils.isNotBlank(imgsId)){//新增图片
+			String[] strImgsId = imgsId.split(",");
+			List<ExerciseObjectImg> imgs = new ArrayList<ExerciseObjectImg>(strImgsId.length);
+			ExerciseObjectImg objImg = null;
+			for(String imgId:strImgsId){
+				objImg = new ExerciseObjectImg();
+				objImg.setImgId(imgId);
+				imgs.add(objImg);
+			}
+			a.setImgs(imgs);
+		}
+		a.setChecked(check);
+		a.setContent(option);
+		a.setOptionOrder(optionOrder);
+		lstOptions.add(a);
+	}
+	
+	
+	private String getOptionOrder(short type,char order){
+		
+		if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){
+			return order=='A'?"True":order=='B'?"False":null;
+		}else{
+			return String.valueOf(order);
+		}
+		
+	}
+	
+	/**
+	 * 更新习题
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "item/update", method = RequestMethod.POST)
+	@ResponseBody
+	public Result updateItem(ExerciseItem item) {
+		return null;
+	}
+	
+	/**
+	 * (后台管理)
+	 * 删除习题
+	 * 更新20150617:更新习题组最后修改时间
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "item/delete", method = RequestMethod.POST)
+	@ResponseBody
+	public Result delItem(String exerciseIds,String reIds,String groupId) {
+		return exerciseService.deleteExerciseItems(exerciseIds.split(","),reIds.split(","),groupId);
+	}
+	
+	/**
+	 * 根据classID获取所有课程
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "listLesson", method = RequestMethod.POST)
+	public @ResponseBody List<SchClassSubject> getLessionList() {
+		
+		String hql = "from SchClassSubject where classId = ? and deleteFlag is false ";
+		
+		List<SchClassSubject> result = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId()), SchClassSubject.class);
+		
+		return result;
+	}
+	
+	/**
+	 * 获取组名称
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "getGroupName", method = RequestMethod.POST)
+	public @ResponseBody List<Map<String,Object>> getGroupName(String groupId) {
+
+		ExerciseGroup group = commonDAO.read(ExerciseGroup.class, groupId);
+		List<Map<String,Object>> lstMap = new ArrayList<Map<String,Object>>(1);
+		Map<String,Object> map = null;
+		
+		if(group.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM || group.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC || group.getType() == ExerciseGroup.TYPE_EXERCISE_EXAM){ // 章节练习 、 专项练习
+			map = new HashMap<String, Object>(7);
+			map.put("groupId", group.getGroupId());
+			map.put("name", group.getName());
+			map.put("type", group.getType());
+			map.put("subjectId", group.getSubjectId());
+			map.put("chapterId", group.getAttribute2());
+			lstMap.add(map);
+			return lstMap;
+		}
+		String hql = "select e,eg from ExerciseGroup e,ExerciseGroupExtend eg "
+				+ "where e.deleteFlag is false and eg.deleteFlag is false "
+				+ "and e.groupId = eg.groupId and e.groupId = ? ";
+		List<Object[]> result = this.commonDAO.findwithRawResult(hql, CollectionUtils.newList(groupId));
+		
+		for (Object[] obj : result) {
+			group = (ExerciseGroup) obj[0];
+			ExerciseGroupExtend groupExtend = (ExerciseGroupExtend) obj[1];
+			map = new HashMap<String, Object>(7);
+			map.put("groupId", group.getGroupId());
+			map.put("name", group.getName());
+			map.put("type", group.getType());
+			map.put("subjectId", group.getSubjectId());
+			
+			map.put("exerciseTime", groupExtend.getExerciseTime());
+			map.put("repeatFlag", groupExtend.getRepeatFlag());
+			lstMap.add(map);
+			
+		}
+		return lstMap;
+	}
+	
+	/**
+	 * 编辑练习保存
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "editGroup", method = RequestMethod.POST)
+	public @ResponseBody Result saveEditGroup(String groupId,String groupName) {
+		
+		return exerciseService.doSaveEditGroup(groupId, groupName);
+	}
+	
+	/**
+	 * 根据lessionId获取所有章节,排除掉当前班级
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "listChapter", method = RequestMethod.POST)
+	public @ResponseBody List<ExerciseChapter> getChapterList(
+			@RequestParam(value = "classSubjectId") String classSubjectId, short type) {
+		
+		String hql = "from ExerciseChapter where classSubjectId = ? and deleteFlag is false ";
+		List<Object> lstArgs = CollectionUtils.newList(classSubjectId);
+		if(ExerciseGroup.TYPE_EXERCISE_SEQUENCE == type){
+			hql = " from ExerciseChapter where classSubjectId = ? and deleteFlag is false and chapterId not in  " 
+				+ " ( select attribute2  from ExerciseGroup where deleteFlag is false and classId = ? and attribute1 = ? ) ";
+			lstArgs = CollectionUtils.newList(classSubjectId,ClientUtils.getClassId(),classSubjectId);
+		}
+		
+		List<ExerciseChapter> result = commonDAO.find(hql, lstArgs , ExerciseChapter.class);
+		
+		return result;
+	}
+	
+	/**
+	 * 根据classID获取顺序练习
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "listOrderExercise", method = RequestMethod.POST)
+	public @ResponseBody List<ClsClass> getOrderExerciseCount() {
+		
+		String hql = "from ExerciseGroup where classId = ? and type = ? and deleteFlag is false";
+		
+		int result = commonDAO.findCount(hql, CollectionUtils.newList(ClientUtils.getClassId(),ExerciseGroup.TYPE_EXERCISE_SEQUENCE));
+		List<ClsClass> lstResult = new ArrayList<ClsClass>();
+		//存在顺序练习,将班级信息传回
+		if( result > 0){
+			hql = "from ClsClass where classId = ? ";
+			lstResult = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId()), ClsClass.class);
+		}
+		
+		return lstResult;
+	}
+	
+	/**
+	 * 根据classID获取顺序练习
+	 * 
+	 * @return
+	 */ 
+	@RequestMapping(value = "checkChapterRepetition", method = RequestMethod.POST)
+	public @ResponseBody String checkChapterRepetition(
+		    @RequestParam(value = "classSubjectId") String classSubjectId,
+		    @RequestParam(value = "chapterId") String chapterId) {
+		
+		String hql = "from ExerciseGroup where classId = ? and type = ? and attribute1 = ? and attribute2 = ? and deleteFlag is false ";
+		int result = commonDAO.findCount(hql, CollectionUtils.newList(ClientUtils.getClassId(),ExerciseGroup.TYPE_CHAPTER_ITEM,classSubjectId,chapterId));
+		
+		return result > 0 ?  "1" : "0";
+	}
+	
+	/**
+	 * 新增练习
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "addExercise", method = RequestMethod.POST)
+	public @ResponseBody
+	Result addExercise(String groupId,String name,short type,String subjectId,String chapterId,String attribute1,boolean repeatFlag) {
+		return exerciseService.insertExerciseGroup(groupId,name,type,subjectId,chapterId,attribute1,repeatFlag);
+	}
+	
+	/**
+	 * 机构新增练习
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "addOrgExercise", method = RequestMethod.POST)
+	public @ResponseBody
+	Result addOrgExercise(ExerciseGroup group, boolean repeatFlag) {
+		return exerciseService.insertOrgExercise(group,repeatFlag);
+	}
+	
+	/**
+	 * 机构指定练习
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "OrgExercise", method = RequestMethod.POST)
+	public @ResponseBody
+	Result addOrgExercise(String groupId [],String orgId[],String classIds[]) {
+		return exerciseService.insertAppointExercise(groupId,orgId,classIds);
+	}
+	
+	/**
+	 * ORG 获取机构科目列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/orgCourse", method = RequestMethod.GET)
+	public @ResponseBody
+	List<OrgCollegeCourse> orgCollegeCourse() {
+
+		String hql = " from OrgCollegeCourse where topOrgId = ? and deleteFlag is false";
+		
+		Organization org = commonDAO.read(Organization.class, ClientUtils.getOrgId());
+		
+		List<OrgCollegeCourse> result = this.commonDAO.find(hql, CollectionUtils.newList(org.getTopOrganizationId()), OrgCollegeCourse.class);
+		
+		return result;
+
+	}
+	
+	/**
+	 * 新增图片路径到数据库
+	 * @param fullPaths
+	 * @param imgObjId
+	 * @param imgObjType
+	 * @return
+	 */
+	@RequestMapping(value = "addExerObjImg",method = RequestMethod.POST)
+	public @ResponseBody List<Map<String,Object>> doAddExerciseObjImg(
+			@RequestParam("fullPaths") String fullPaths,
+			@RequestParam("imgObjId") String imgObjId,
+			@RequestParam("imgObjType") int imgObjType){
+		
+		if(StringUtils.isBlank(fullPaths)){
+			return null;
+		}
+		String[] imgPaths = fullPaths.split(";");
+		
+		// 更新路径到数据库
+		List<Map<String,Object>> lstResult = exerciseService.doAddExerciseObjImg(imgPaths, imgObjId, imgObjType);
+		
+		return lstResult;
+	}
+	
+	/** 新增图片路径到数据库 */
+	@RequestMapping(value = "delExerObjImg",method = RequestMethod.POST)
+	public @ResponseBody Result dodelExerciseObjImg(
+			@RequestParam("imgId") String imgId){
+		
+		Result result = exerciseService.dodelExerciseObjImg(imgId);
+		
+		return result;
+	}
+	
+	/** 查询图片路径 */
+	@RequestMapping(value = "queryExerObjImg",method = RequestMethod.POST)
+	public @ResponseBody List<Map<String,Object>> doQueryExerciseObjImg(
+			@RequestParam("imgObjId") String imgObjId,
+			@RequestParam("imgObjType") int imgObjType){
+		if(StringUtils.isBlank(imgObjId)){
+			return null;
+		}
+		String hql = "from ExerciseObjectImg where deleteFlag is false and exerciseObjectId=? and objectType=? order by imgOrder";
+		// 查询此练习是否已经存在记录
+		List<ExerciseObjectImg> lstObjImg = commonDAO.find(hql,
+				CollectionUtils.newList(imgObjId,imgObjType), ExerciseObjectImg.class);
+		
+		if(lstObjImg.isEmpty()){
+			return null;
+		}
+		List<Map<String,Object>> lstResult = new ArrayList<Map<String,Object>>(lstObjImg.size());
+		Map<String,Object> resultMap = null;
+		for(ExerciseObjectImg obj:lstObjImg){
+			resultMap = new HashMap<String,Object>(2);
+			resultMap.put("imgId", obj.getImgId());
+			resultMap.put("imgPath", obj.getImgPath());
+			lstResult.add(resultMap);
+		}
+		
+		return lstResult;
+	}
+	
+	/**
+	 * (后台管理系统:导入习题模块)
+	 *  导入习题-习题导入深度解析
+	 * 
+	 * @param groupId 习题组ID
+	 * @param uuid uuid
+	 * @param fileName 文件名称
+	 * @return
+	 */
+	@RequestMapping(value = "/item/deepAnalysisDoc", method = RequestMethod.POST)
+	@ResponseBody
+	public Result deepAnalysisDoc(String groupId,String fullPath) {
+		
+		return exerciseService.doDeepAnalysisDoc(groupId,fullPath);
+		
+	}
+	
+	
+	/**
+	 * (后台管理系统:导入习题模块)
+	 *  导入习题-第一次将word解析结果返回给前台,并不保存到数据库
+	 *  
+	 * @param groupId 习题组ID
+	 * @param uuid uuid
+	 * @param fileName 文件名称
+	 * @return
+	 */
+	@RequestMapping(value = "/item/import/parser/{groupId}", method = RequestMethod.POST)
+	@ResponseBody
+	public ExerciseParseResult importItemsNew(@PathVariable String groupId,String fullPath,String module) {
+		
+		return exerciseService.doParseItems(groupId, fullPath , module);
+		
+	}
+	
+	/**
+	 * (后台管理系统:导入习题模块)
+	 *  校验内容,返回解析结果
+	 * 
+	 * @param content 文本内容
+	 * @return
+	 */
+	@RequestMapping(value = "/item/import/validateExercise", method = RequestMethod.POST)
+	@ResponseBody
+	public ExerciseParseResult validateExercise(String content) {
+		
+		return exerciseService.validateExercise(content);
+	}
+	
+	/**
+	 * 获取所有班级,当前班级除外,增加过滤没有习题的班级
+	 * @return
+	 */
+	@RequestMapping(value = "loadClasses", method = RequestMethod.GET)
+	public @ResponseBody List<ClsClass> loadClasses() {
+		
+		String hql = "select distinct cls from ClsClass cls,OrgCharger charge, ExerciseGroup g " +
+				" where cls.classChargerId = charge.orgChargerId " +
+				" and cls.classId = g.classId " +
+				" and g.deleteFlag is false " +
+				" and g.type != ? " +
+				" and g.type != ? " +
+				" and g.type != ? " +
+				" and g.type != ? " +
+				" and charge.userId = ? " +
+				" and cls.classId <> ? " +
+				" and charge.orgId = ? " +
+				" and cls.deleteFlag is false";
+		
+		return commonDAO.find(hql, CollectionUtils.newList(
+				ExerciseGroup.TYPE_EXERCISE_RANDOM,ExerciseGroup.TYPE_EXERCISE_SEQUENCE,
+				ExerciseGroup.TYPE_INTERACT,ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE,
+				ClientUtils.getUserId(),ClientUtils.getClassId(),ClientUtils.getOrgId()), ClsClass.class);
+	}
+	
+	/**
+	 * 复制习题
+	 * @param fromClassId
+	 * @return
+	 */
+	@RequestMapping(value = "copyExercise", method = RequestMethod.POST)
+	public @ResponseBody Result copyExercise(String groupId, String subjectId, String subjectName, String chapterId) {
+		
+		return exerciseService.executeCopyExercise(groupId, subjectId, subjectName, chapterId);
+
+	}
+	
+	/**
+	 * 学员得分详情列表
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "resultList/{groupId}", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> resultList(@PathVariable String groupId) {
+		
+		List<Map<String, Object>> lstMap = exerciseService.resultList(groupId);
+		
+		return lstMap;
+
+	}
+	
+	/**
+	 * 初始化平均成绩和最高成绩
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "initScore/{groupId}", method = RequestMethod.GET)
+	public @ResponseBody Map<String, Object> initScore(@PathVariable String groupId) {
+		
+		Map<String, Object> map = exerciseService.initScore(groupId);
+		
+		return map;
+	}
+	
+	/**
+	 * 每道题得分详情
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "itemDetailList/{groupId}", method = RequestMethod.GET)
+	public @ResponseBody List<ExerciseItemStatistics> scoreDetail(@PathVariable String groupId) {
+		
+		List<ExerciseItemStatistics> itemStatisLst = exerciseService.itemDetailList(groupId);
+		
+		return itemStatisLst;
+	}
+	
+	/**
+	 * 加载题目选项详情 - 班级、机构
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "loadOptionsList", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> loadOptionsList( String exerciseItemId) {
+		
+		List<Map<String,Object>> map = exerciseService.loadOptionsList(exerciseItemId);
+		
+		return map;
+	}
+	
+	/**
+	 * 刷新更新统计
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "refreshStatistical/{groupId}", method = RequestMethod.GET)
+	public @ResponseBody Result refreshStatistical(@PathVariable String groupId) {
+		
+		Result result = exerciseVerService.updateRefreshStatistical(groupId,ClientUtils.getOrgId() ,ClientUtils.getClassId(),Constants.BOOLEAN_FLAG_FALSE);
+		
+		return result;
+	}
+	
+	/**
+	 * 导出练习每道题得分详情
+	 * 
+	 * @return
+	 * @throws IOException 
+	 */
+	@RequestMapping(value = "itemStatis/data/{groupId}", method = RequestMethod.GET)
+	public String exportItemStatis(@PathVariable String groupId,HttpServletResponse response) throws IOException {
+		ExerciseGroup exeGroup= this.commonDAO.read(ExerciseGroup.class, groupId);
+		
+		//获取每道题得分详情列表
+		List<ExerciseItemStatistics> itemStatisLst = exerciseService.itemDetailList(groupId);
+		
+		ExcelExportUtils<ExerciseItemStatistics> ex = new ExcelExportUtils<ExerciseItemStatistics>();
+		ExcelExportParam<ExerciseItemStatistics> obj = new ExcelExportParam<ExerciseItemStatistics>();
+		obj.setColData(itemStatisLst);
+		String[] headers = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"};
+		
+		obj.setHeaders(headers);
+		obj.setLstColumn(new ArrayList<String>(Arrays.asList("itemNo","exerciseItemTitel","itemTypeName","correctAnswer","classAccuracyShow","orgAccuracyShow")));
+		obj.setPattern("yyyy-MM-dd HH:mm");
+		
+		response.reset();
+		response.setContentType("application/vnd.ms-excel;charset=utf-8");
+		response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName()+ "_" + exeGroup.getName() + "_详情.xls").getBytes(), "iso-8859-1"));
+		response.setCharacterEncoding("utf-8");
+		OutputStream ouputStream = response.getOutputStream();
+		obj.setOut(ouputStream);
+		ex.exportExcelByColomn(obj);
+		ouputStream.flush();
+		ouputStream.close();
+		
+	    return null;
+	}
+	
+	/**
+	 * 导出练习学员得分详情
+	 * 
+	 * @return
+	 * @throws IOException 
+	 */
+	@RequestMapping(value = "userScoreStatis/data/{groupId}", method = RequestMethod.GET)
+	public String exportUserScore(@PathVariable String groupId,HttpServletResponse response) throws IOException {
+		// 获取组名称
+		ExerciseGroup exeGroup= this.commonDAO.read(ExerciseGroup.class, groupId);
+		
+		// 获取之前组装的排名List<Map<String, Object>>列表
+		List<Map<String, Object>> userScoreMap = exerciseService.resultList(groupId);
+		List<ExportUserScore> userLst = new ArrayList<ExportUserScore>(userScoreMap.size());
+		ExportUserScore user = null;
+		
+		if(userScoreMap != null){
+			// 将获取的Map列表转换为List列表
+			for(Map<String, Object> userScore:userScoreMap){
+				user = new ExportUserScore();
+				user.setName(String.valueOf(userScore.get("name")));
+				user.setMobilePhone(String.valueOf(userScore.get("mobilePhone")));
+				user.setScore(new BigDecimal(String.valueOf( userScore.get("accuracy"))));
+				user.setSubmitTime((Date)userScore.get("time"));
+				user.setSalesCode(String.valueOf(userScore.get("salesCode")));
+				user.setCreateTime((Date)userScore.get("createTime"));
+				userLst.add(user);
+			}
+			
+			ExcelExportUtils<ExportUserScore> ex = new ExcelExportUtils<ExportUserScore>();
+			ExcelExportParam<ExportUserScore> obj = new ExcelExportParam<ExportUserScore>();
+			obj.setColData(userLst);
+			String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"};
+			
+			obj.setHeaders(headers);
+			obj.setLstColumn(new ArrayList<String>(Arrays.asList("name","salesCode","createTime","mobilePhone","submitTime","score")));
+			obj.setPattern("yyyy-MM-dd HH:mm");
+			
+			response.reset();
+			response.setContentType("application/vnd.ms-excel;charset=utf-8");
+			response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName() + "_" + exeGroup.getName() + "_成绩.xls").getBytes(), "iso-8859-1"));
+			response.setCharacterEncoding("utf-8");
+			OutputStream ouputStream = response.getOutputStream();
+			obj.setOut(ouputStream);
+			ex.exportExcelByColomn(obj);
+			ouputStream.flush();
+			ouputStream.close();
+		}
+		
+	    return null;
+	}
+	
+	
+	
+	/**
+	 * 习题组排序
+	 * 
+	 * @param key
+	 * @return
+	 */
+	@RequestMapping(value = "/order", method=RequestMethod.POST)
+    public @ResponseBody Result order(@RequestParam("ids[]") List<String> ids,  @RequestParam("index[]") List<Integer> index){
+		exerciseService.doOrder(ids, index);
+		return new Result(true) ;
+	}
+	
+	/**
+	 * 习题排序
+	 * 
+	 * @param key
+	 * @return
+	 */
+	@RequestMapping(value = "/item/order", method=RequestMethod.POST)
+    public @ResponseBody Result itemOrder(@RequestParam("ids[]") List<String> ids,  @RequestParam("index[]") List<Integer> index,  @RequestParam("groupId") String groupId){
+		exerciseService.doitemOrder(ids, index,groupId);
+		return new Result(true) ;
+	}
+	
+	
+	
+	/******************************************py导入******************************************************************/
+	/**
+	 * (后台管理系统:导入习题模块)
+	 *  导入习题-第一次将word解析结果返回给前台,并不保存到数据库
+	 *  
+	 * @param groupId 习题组ID
+	 * @param uuid uuid
+	 * @param fileName 文件名称
+	 * @return
+	 */
+	@RequestMapping(value = "/item/importpy/parse/{groupId}", method = RequestMethod.POST)
+	public @ResponseBody Map<String,Object> importItemsPy(@PathVariable String groupId,String fullPath,String module) {
+		
+		return exercisePyService.parserPyExercise(groupId, fullPath, module);
+		
+	}
+	
+	/**
+	 * (后台管理系统:导入习题模块)
+	 *  校验内容,返回解析结果
+	 * 
+	 * @param content 文本内容
+	 * @return
+	 */
+	@RequestMapping(value = "/item/importpy/validate", method = RequestMethod.POST)
+	public @ResponseBody Map<String, Object> validatePyExercise(String content) {
+		
+		return exercisePyService.validatePyExercise(content);
+	}
+	
+	/**
+	 * (后台管理系统:导入习题模块)
+	 *  导入内容,返回解析结果
+	 * 
+	 * @param content 文本内容
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping(value = "/item/importpy/import", method = RequestMethod.POST)
+	public @ResponseBody Result importPyExercise(@RequestParam(value = "data")  String data,@RequestParam(value = "groupId")  String groupId) {
+		
+		ObjectMapper mapper = new ObjectMapper();
+		JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, ExerciseItemData.class); 
+		
+		try {
+			
+			List<ExerciseItemData> lst =  (List<ExerciseItemData>)mapper.readValue(data, javaType);
+			return exercisePyService.doImportPyExercise(lst,groupId);
+			
+		} catch (Exception e) {
+			log.error("提交数据有误" + e );
+		}
+		
+		return new Result(false,"解析json失败");
+	}
+	
+	
+	
+	
+	/**-----------------  问卷调查----start-----------------------------------*/
+	/**
+	 * 评估模块添加问答
+	 * 
+	 * @param jsonExerciseItemDTO
+	 * @return
+	 */
+	@RequestMapping(value = "item/addOrUpdate4Evaluate", method = RequestMethod.POST, produces="application/json;charset=UTF-8")
+	@ResponseBody
+	public ResultJson addOrUpdate4Evaluate(@RequestBody String jsonExerciseItemDTO) {
+		JSONObject jsonObject = (JSONObject) JSON.parse(jsonExerciseItemDTO);
+		String groupId = jsonObject.getString(GROUP_ID);
+		String exerciseId = jsonObject.getString("exerciseId");
+		String title = jsonObject.getString("title");
+		boolean mustAnswer = jsonObject.getBooleanValue("mustAnswer");
+		short type = jsonObject.getShort("type");
+		String analysis = jsonObject.getString("analysis");
+		JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径
+		
+		//获取选项
+		List<ExerciseItemOption> lstOptions = JSONArray.parseArray(jsonObject.getString("lstOptions"), ExerciseItemOption.class);
+		ExerciseItem item = null;
+		
+		if(StringUtils.isEmpty(exerciseId)){// 新增
+			item = new ExerciseItem();
+			item.setTitle(title);
+			item.setType(type);
+			item.setMustAnswer(mustAnswer);
+			exerciseService.insertExerciseItem4Evaluate(groupId, item, lstOptions,analysis,titleImgs);
+		}else{// 编辑
+			item = this.commonDAO.read(ExerciseItem.class, exerciseId);
+			item.setTitle(title);
+			item.setType(type);
+			item.setMustAnswer(mustAnswer);
+			return exerciseService.updateExerciseItem4Evaluate(item, lstOptions,analysis);	
+		}
+		
+		return 	new ResultJson(true,"success",
+				CollectionUtils.newObjectMap("exerciseId",item.getExerciseId(),
+						"lstOptions",lstOptions));
+	}
+	
+	
+	/**
+	 * 获取问卷习题列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "item/data4Evaluate/{groupId}", method = RequestMethod.GET)
+	@ResponseBody
+	public ResultJson listItems4Evaluate(@PathVariable String groupId) {
+
+		return 	new ResultJson(true,"success",
+				exerciseService.readExerciseItems4Evaluate(groupId));
+	}
+	
+	/**
+	 * 查看学员答卷情况
+	 * 
+	 * @param recordId 答题记录id
+	 * @param schEvaluateId
+	 * @return
+	 */
+	@RequestMapping(value = "evaluate/userExerciseDetail", method = RequestMethod.GET)
+	public @ResponseBody ResultJson queryUserEvaExerciseDetail(String recordId,String evaluateId) {
+		
+		return exerciseService.queryUserEvaExerciseDetail(recordId, evaluateId);
+	}
+	
+	/** 查询图片路径 */
+	@RequestMapping(value = "evaluate/queryExerObjImg",method = RequestMethod.GET)
+	public @ResponseBody ResultJson queryEvaExerciseObjImg(
+			@RequestParam("imgObjId") String imgObjId,
+			@RequestParam("imgObjType") int imgObjType){
+		
+		if(StringUtils.isBlank(imgObjId)){
+			return new ResultJson(false,"参数为空");
+		}
+		
+		List<Map<String,Object>> lstResult =  exerciseService.queryEvaExerciseObjImg(imgObjId, imgObjType);
+		
+		return new ResultJson(true,"success",lstResult);
+	}
+	
+	/**
+	 * 新增图片路径到数据库
+	 * @param fullPaths
+	 * @param imgObjId
+	 * @param imgObjType
+	 * @return
+	 */
+	@RequestMapping(value = "evaluate/addExerObjImg",method = RequestMethod.POST)
+	public @ResponseBody ResultJson doAddEvaExerciseObjImg(
+			@RequestParam("fullPaths") String fullPaths,
+			@RequestParam("imgObjId") String imgObjId,
+			@RequestParam("imgObjType") int imgObjType){
+		
+		if(StringUtils.isBlank(fullPaths)){
+			return null;
+		}
+		String[] imgPaths = fullPaths.split(";");
+		
+		// 更新路径到数据库
+		List<Map<String,Object>> lstResult = exerciseService.doAddEvaExerciseObjImg(imgPaths, imgObjId, imgObjType);
+		
+		return new ResultJson(true,"success",lstResult);
+	}
+	
+	/** 删除图片路径到数据库 */
+	@RequestMapping(value = "evaluate/delExerObjImg",method = RequestMethod.POST)
+	public @ResponseBody ResultJson dodelEvaExerciseObjImg(
+			@RequestParam("imgId") String imgId){
+		
+		ResultJson result = exerciseService.dodelEvaExerciseObjImg(imgId);
+		
+		return result;
+	}
+	/**------------------  问卷调查----end------------------------------------*/
+	
+	
+	/**------------------------------  web 后端----end--------------------------------------------------------------------*/
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java
new file mode 100644
index 0000000..5494085
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java
@@ -0,0 +1,270 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.exercise.model.ExerciseCorrection;
+import com.qxueyou.scc.exercise.model.ExerciseCorrectionResult;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseObjectImg;
+import com.qxueyou.scc.exercise.service.IExerciseCorrectionService;
+import com.qxueyou.scc.sys.model.SysDictionary;
+
+/**
+ * 练习纠错控制
+ * @author alger
+ */
+@Controller
+@RequestMapping(value="/exercise/correction")
+public class ExerciseCorrectionController {
+	
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	@Autowired
+	private IExerciseCorrectionService exerciseCorrectionService;
+	
+	/**
+	 * APP2.0: 从客户端接收纠错信息
+	 * URL:    /exercise/correction/addCorrInfoNew
+	 * 
+	 * @param groupId	     组Id
+	 * @param groupName   组名
+	 * @param exerciseNum 练习
+	 * @param exerciseId  练习id
+	 * @param correctids  错误选项信息
+	 * @param content	      错误内容
+	 * @return
+	 */
+	@RequestMapping(value="addCorrInfoNew",method=RequestMethod.GET)
+    public @ResponseBody Result doAdd(
+    		@RequestParam(value = "groupId") String groupId,
+    		@RequestParam(value = "groupName") String groupName,
+			@RequestParam(value = "exerciseNum") String exerciseNum,
+			@RequestParam(value = "exerciseId") String exerciseId,
+			@RequestParam(value = "correctids") String correctids,
+			String content) 
+	{
+		
+		Result objResult = exerciseCorrectionService.insertExerciseCorrection(groupId,groupName,exerciseNum,exerciseId,correctids,content);
+		// 返回给客户端结果信息
+		return objResult; 
+	}
+	
+	/**
+	 * APP2.0: 客户端通过此从字典中查找信息
+	 * URL:    /exercise/correction/corrOptionsNew
+	 * 
+	 * @return lst的键值对
+	 */
+	@RequestMapping(value="corrOptionsNew",method=RequestMethod.POST)
+    public @ResponseBody List<Map<String, String>> queryExerCorrectionOptions() {
+		//从字典中查出数据
+		List<SysDictionary> lstDict = commonDAO.queryDictConfigMap("EXERCISE_CORRECTION_INFO");
+		
+		if(lstDict.isEmpty()){
+			 return new ArrayList<Map<String, String>>(); 
+		}
+		//赋值给map集合
+		List<Map<String, String>> lstMap = new ArrayList<Map<String, String>>(lstDict.size());
+		Map<String, String> map = null;
+		for(SysDictionary dict:lstDict){
+			map = new HashMap<String, String>(2);
+			map.put("correctionId", dict.getDictionaryId());
+			map.put("correctionName", dict.getValue());
+			lstMap.add(map);
+		}
+        return lstMap; 	
+	}
+	
+	/******************************************************************* 上面为App接口,下面为后台接口 **************************/
+	
+	/**
+	 * list页
+	 * 
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	public ModelAndView listPage() {
+
+		ModelAndView modelAndView = new ModelAndView("/exercise/Correction");
+		return modelAndView;
+	}
+	
+	/**
+	 * 获取列表数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "data", method = RequestMethod.GET)
+	public @ResponseBody List<ExerciseCorrection> data() {
+		//查找
+		String hql = "from ExerciseCorrection where deleteFlag is false and classId= ? order by createTime Desc";
+		//获取列表数据,显示在屏幕的后台纠错页面表的基本信息
+		List<ExerciseCorrection> list = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId()), ExerciseCorrection.class);
+		return list;
+	}
+	
+	/**
+	 * 点击查看,读取题目
+	 * @param exerciseCorrectionId
+	 * @return
+	 */
+	@RequestMapping(value = "readData", method = RequestMethod.POST)
+	public @ResponseBody ExerciseCorrectionResult read(String exerciseCorrectionId,String exerciseItemId) {
+		ExerciseCorrectionResult obj = new ExerciseCorrectionResult();
+		String hql = "from ExerciseCorrection where deleteFlag is false and  exerciseItemId = ? ";
+		//通过集合查询所有相同题目,不同人,以及不同类型的错误
+		List<ExerciseCorrection> list = commonDAO.find(hql, CollectionUtils.newList(exerciseItemId), ExerciseCorrection.class);
+		if(null != list && !list.isEmpty()){
+			String itemId1 = list.get(0).getExerciseItemId();
+			ExerciseItem objEI = commonDAO.read(ExerciseItem.class, itemId1);
+			obj.setExerciseItem(objEI);
+			obj.setLstExerciseCorrection(list);
+		}
+		return obj;
+	}
+
+
+	/**
+	 * 用来保存前台修改的数据
+	 * @param correctionType  保存和纠错保存区分的状态码
+	 * @param exerciseId  练习Id
+	 * @param analysis	题目分析
+	 * @param title	 题目
+	 * @param type	类型
+	 * @param optionA	选项A
+	 * @param optionB	选项B
+	 * @param optionC	选项C
+	 * @param optionD	选项D
+	 * @param optionE	选项E
+	 * @param optionF	选项F
+	 * @param checkA	判断A
+	 * @param checkB	判断B
+	 * @param checkC	判断C
+	 * @param checkD	判断D
+	 * @param checkE	判断E
+	 * @param checkF	判断F
+	 * @return
+	 */
+	@RequestMapping(value = "item/addOrUpdate", method = RequestMethod.POST)
+	@ResponseBody
+	public Result addOrUpdateItem(
+			@RequestParam(value="correctionType",required=true) short correctionType,
+			@RequestParam(value="exerciseId",required=true) String exerciseId,
+			@RequestParam(value="analysis",required=false) String analysis,
+			@RequestParam(value="title",required=true) String title,
+			@RequestParam(value="type",required=true) short type,
+			@RequestParam(value="title_imgsIds",required=false) String title_imgsIds,
+			@RequestParam(value="optionA",required=false) String optionA,
+			@RequestParam(value="optionA_Id",required=false) String optionA_Id,
+			@RequestParam(value="optionA_imgIds",required=false) String optionA_imgIds,
+			@RequestParam(value="optionB",required=false) String optionB,
+			@RequestParam(value="optionB_Id",required=false) String optionB_Id,
+			@RequestParam(value="optionB_imgIds",required=false) String optionB_imgIds,
+			@RequestParam(value="optionC",required=false) String optionC,
+			@RequestParam(value="optionC_Id",required=false) String optionC_Id,
+			@RequestParam(value="optionC_imgIds",required=false) String optionC_imgIds,
+			@RequestParam(value="optionD",required=false) String optionD,
+			@RequestParam(value="optionD_Id",required=false) String optionD_Id,
+			@RequestParam(value="optionD_imgIds",required=false) String optionD_imgIds,
+			@RequestParam(value="optionE",required=false) String optionE,
+			@RequestParam(value="optionE_Id",required=false) String optionE_Id,
+			@RequestParam(value="optionE_imgIds",required=false) String optionE_imgIds,
+			@RequestParam(value="optionF",required=false) String optionF,
+			@RequestParam(value="optionF_Id",required=false) String optionF_Id,
+			@RequestParam(value="optionF_imgIds",required=false) String optionF_imgIds,
+			@RequestParam(value="checkA",required=false) boolean checkA,
+			@RequestParam(value="checkB",required=false) boolean checkB,
+			@RequestParam(value="checkC",required=false) boolean checkC,
+			@RequestParam(value="checkD",required=false) boolean checkD,
+			@RequestParam(value="checkE",required=false) boolean checkE,
+			@RequestParam(value="checkF",required=false) boolean checkF) 
+	{
+			List<ExerciseItemOption> lstOptions = new ArrayList<ExerciseItemOption>(8);
+			createItemOption(getOptionOrder(type,'A'),optionA, checkA, optionA_Id, optionA_imgIds, lstOptions);
+			createItemOption(getOptionOrder(type,'B'),optionB, checkB, optionB_Id, optionB_imgIds, lstOptions);
+			createItemOption(getOptionOrder(type,'C'),optionC, checkC, optionC_Id, optionC_imgIds, lstOptions);
+			createItemOption(getOptionOrder(type,'D'),optionD, checkD, optionD_Id, optionD_imgIds, lstOptions);
+			createItemOption(getOptionOrder(type,'E'),optionE, checkE, optionE_Id, optionE_imgIds, lstOptions);
+			createItemOption(getOptionOrder(type,'F'),optionF, checkF, optionF_Id, optionF_imgIds, lstOptions);
+			
+			//读取练习,查找题目名和题目类型
+			ExerciseItem item = this.commonDAO.read(ExerciseItem.class, exerciseId);
+			item.setTitle(title);
+			item.setType(type);
+			
+			return exerciseCorrectionService.updateExerciseItemCorrection(item, lstOptions, analysis, correctionType);
+	}
+	
+	/**
+	 * 创建习题选项
+	 * @param option
+	 * @param check
+	 * @param lstOptions
+	 */
+	private void createItemOption(String optionOrder,String option, boolean check, String optionId,
+			String imgsId, List<ExerciseItemOption> lstOptions) {
+		
+		if("True".equals(optionOrder) || "False".equals(optionOrder)){
+			option = optionOrder;
+		}
+		
+		if(StringUtils.isEmpty(option)){
+			return;
+		}
+		
+		ExerciseItemOption a = new ExerciseItemOption();
+		if(StringUtils.isNotBlank(optionId)){// 更新
+			a.setOptionId(optionId);
+		}
+		if(StringUtils.isNotBlank(imgsId)){//新增图片
+			String[] strImgsId = imgsId.split(",");
+			List<ExerciseObjectImg> imgs = new ArrayList<ExerciseObjectImg>(strImgsId.length);
+			ExerciseObjectImg objImg = null;
+			for(String imgId:strImgsId){
+				objImg = new ExerciseObjectImg();
+				objImg.setImgId(imgId);
+				imgs.add(objImg);
+			}
+			a.setImgs(imgs);
+		}
+		a.setChecked(check);
+		a.setContent(option);
+		a.setOptionOrder(optionOrder);
+		lstOptions.add(a);
+	}
+	
+	/**
+	 * 获得题目选项的顺序编号
+	 * @param type2
+	 * @param order
+	 * @return
+	 */
+	private String getOptionOrder(short type,char order){
+		
+		if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){
+			return order=='A'?"True":order=='B'?"False":null;
+		}else{
+			return String.valueOf(order);
+		}
+		
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java
new file mode 100644
index 0000000..3f6e1ee
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java
@@ -0,0 +1,117 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseDeepAnalysis;
+import com.qxueyou.scc.exercise.service.IExerciseDeepAnaService;
+import com.qxueyou.scc.sys.service.IOssService;
+
+/**
+ * 练习深度解析控制
+ * @author ody
+ *
+ */
+@Controller
+@RequestMapping(value = "/exercise/ExerciseDeepAna")
+public class ExerciseDeepAnaController {
+	
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	@Autowired
+	IOssService ossService;
+	
+	@Autowired
+	IExerciseDeepAnaService exerciseDeepAnaService;
+	
+	/**
+	 * 练习深度解析主页
+	 * 
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	public String listPage() {
+		return "/exercise/ExerciseDeepAna";
+	}
+	
+	/**
+	 * 列表加载解析数据
+	 * @param signId
+	 * @return
+	 */
+	@RequestMapping(value = "data",method = RequestMethod.GET)
+	public @ResponseBody List<ExerciseDeepAnalysis> queryList() {
+		
+		String hql = "from ExerciseDeepAnalysis e where e.deleteFlag is false order by createTime desc ";
+		
+		return commonDAO.find(hql, ExerciseDeepAnalysis.class);
+	}
+	
+	/**
+	 * 下载文档
+	 * 
+	 * @return
+	 * @throws IOException 
+	 */
+	@RequestMapping(value = "downloadDoc/{deepAnaId}", method = RequestMethod.GET)
+	public String downloadDoc(@PathVariable String deepAnaId,HttpServletResponse response) throws IOException {
+
+		ExerciseDeepAnalysis obj = commonDAO.read(ExerciseDeepAnalysis.class, deepAnaId);
+		
+		String docPath = obj.getDocPath();
+		
+		InputStream is = ossService.getObject(docPath);
+	    String fileName = docPath.substring(docPath.lastIndexOf("/") + 1, docPath.length());
+	    
+	    response.reset();
+		response.setContentType("application/msword;charset=utf-8");
+		response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes(), "iso-8859-1"));
+		
+		OutputStream os = new BufferedOutputStream(response.getOutputStream());
+		
+	    byte[] tempBytes = new byte[1024];
+	    int readTemp = 0;
+	    while((readTemp = is.read(tempBytes)) != -1){
+	    	os.write(tempBytes, 0, readTemp);
+	    }
+	    
+	    is.close();
+		os.flush();
+	    os.close();
+	    
+        return null;
+	}
+	
+	/**
+	 * 文档处理完毕 修改状态
+	 * @param deepAnalysisIds
+	 * @return
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "handleSuccess", method = RequestMethod.GET)
+	public @ResponseBody Result handleSuccess(String deepAnalysisIds) throws IOException {
+		
+		return exerciseDeepAnaService.updateExerciseDocStatus(deepAnalysisIds.split(","));
+
+		
+	}
+	
+	
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java
new file mode 100644
index 0000000..5774e78
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java
@@ -0,0 +1,1141 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExciseExtendReqData;
+import com.qxueyou.scc.exercise.model.ExciseExtendReqListData;
+import com.qxueyou.scc.exercise.model.ExerGroupResponseData;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog;
+import com.qxueyou.scc.exercise.model.ExerciseExtendRecordData;
+import com.qxueyou.scc.exercise.model.ExerciseFaultRecord;
+import com.qxueyou.scc.exercise.model.ExerciseFavoriteRecord;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerDataList;
+import com.qxueyou.scc.exercise.service.IExerciseExtendService;
+
+/**
+ * 练习扩展控制  
+ * 如收藏 错题 笔记
+ * @author zhiyong
+ *
+ */
+@Controller
+@RequestMapping(value = "/exercise/Extend")
+public class ExerciseExtendController {
+	/** 日志 */
+	private static final Logger log = LogManager.getLogger("ExerciseExtendController");
+	
+	/** commonDAO */
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	/** 练习扩展service */
+	@Autowired
+	private IExerciseExtendService exerciseExtendService;
+	
+	/**-----------------------------------------APP  V2.0 接口 start----------------------------------------------------------- */
+	
+	/**
+	 * APP2.0: 查询错题本ListItem
+	 * URL:    /exercise/Extend/faultList
+	 * 
+	 * 请求参数={
+			subjectId:课程id,//可选,用于高校版
+			exerType:练习类型,//必传
+			page:当前页,//必传,大于0
+			limit:每页限制条数,//必传,大于0
+			}
+	  返回参数=[
+		    {
+		        "groupId":"组id",
+		        "classId":班级id,
+		        "courseId":科目id,
+		        "orgId":机构id,
+		        "subjectId":课程id,
+		        "name":"组名",
+		        "type":组类型 ,
+		        "updateTime":更新时间,
+		        "answerUpdateTime":本套题答题更新时间,
+		        "allCount":题目总数,
+		        "exerciseTime":"考试时间",
+		        "exerciseRecordId":"记录id",
+		        "doCount": 做题个数,
+		        "correctCount": 正确个数,
+		        "submitNumber":已提交人数(家庭作业),
+		        "currTitleNumber":当前做题序号,
+		        "status":做题状态(0:未提交 1:已提交),
+		        "completionRate": 完成率, 
+		        "accuracy": 正确率, 
+		        "score": 分数,
+		        "extendAllCount":错题本、收藏本总数
+		    },
+		    ...循环多个
+		]
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "faultList", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> queryFaultList(
+			@RequestParam(value="exerType") int exerType,// 0 表示全部错题
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page", required = false) Integer page,
+			@RequestParam(value="limit", required = false) Integer limit)  {
+
+		// 得到分页数据
+		Pager pager = getPager(page, limit);
+		
+		// 查询结果
+		List<ExerGroupResponseData> lstResult = exerciseExtendService.
+				queryExerciseFaultListData(exerType, null, pager);
+		
+		if(null == lstResult){// 结果转换成 []
+			lstResult = new ArrayList<ExerGroupResponseData>();
+		}
+		
+		return lstResult;
+	}
+	
+	/**
+	 * APP2.0: 查询收藏本ListItem
+	 * URL:    /exercise/Extend/favorList
+	 * 
+	 * @return 
+	 */
+	@RequestMapping(value = "favorList", method = RequestMethod.GET)
+	public @ResponseBody List<ExerGroupResponseData> queryFavorList(
+			@RequestParam(value="exerType") int exerType,// 0全部收藏
+			@RequestParam(value="subjectId", required = false) String subjectId,
+			@RequestParam(value="page", required = false) Integer page,
+			@RequestParam(value="limit", required = false) Integer limit)  {
+		
+		// 得到分页数据
+		Pager pager = getPager(page, limit);
+		
+		// 查询结果
+		List<ExerGroupResponseData> lstResult = exerciseExtendService.
+				queryExerciseFavorListData(exerType, null, pager);
+		
+		if(null == lstResult){// 结果转换成 []
+			lstResult = new ArrayList<ExerGroupResponseData>();
+		}
+		
+		return lstResult;
+	}
+	
+	
+	/**
+	 * APP2.0: 获取错题练习题目数据
+	 * URL:    /exercise/Exercise/faultExercise
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @return
+	 */
+	@RequestMapping(value = "faultExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getFaultExerciseData(
+			@RequestParam(value = "groupId") String groupId)  {
+		
+			// 查询结果
+			ExerItemResponseData resultData = exerciseExtendService.queryExerciseFaultData(groupId);
+			
+			return resultData;
+	}
+	
+	/**
+	 * 查询多套题收藏题目
+	 * @param groupId 格式"111,222,333...."
+	 * @return
+	 */
+	@RequestMapping(value = "faultMutiExercise", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> getFaultrMutiExerciseData(
+			@RequestParam(value = "groupId") String groupId)  {
+			
+			String[] groupIds = groupId.split(",");
+			
+			if(groupIds.length<1){
+				return null;
+			}
+			
+			List<Map<String,Object>> resultDataLst = new ArrayList<Map<String,Object>>(groupIds.length);
+			
+			
+			for(String exerGroupId:groupIds){
+				try{
+					// 查询结果
+					resultDataLst.add(exerciseExtendService.queryExerciseMutiFaultData(exerGroupId));
+					
+				}catch(Exception e){
+					
+					log.error("查询多套题faultMutiExercise结果失败,groupId="+exerGroupId,e);
+				}
+			}
+			
+			return resultDataLst;
+	}
+	
+	/**
+	 * 
+	 * @param page
+	 * @param limit
+	 * @return
+	 */
+	private Pager getPager(Integer page,  Integer limit){
+		
+		Integer pageNum = page;
+		Integer pageSize = limit;
+		
+		Pager pager = new Pager();
+		
+		if(pageNum == null){
+			pageNum = 1;
+			pageSize=Integer.MAX_VALUE;
+		}
+		
+		pager.setPageNum(pageNum);
+		pager.setPageSize(pageSize);
+		
+		return pager;
+	}
+	
+	/**
+	 * APP2.0: 获取全部错题练习题目数据
+	 * URL:    /exercise/Extend/allFaultExercise
+	 * @return
+	 */
+	@RequestMapping(value = "allFaultExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getAllFaultExerciseData(
+			@RequestParam(value="limit", required = false) Integer limit,
+			@RequestParam(value="page", required = false) Integer page)  {
+			
+			// 得到分页数据
+			Pager pager = getPager(page, limit);
+		
+			// 查询结果
+			ExerItemResponseData resultData = exerciseExtendService.queryAllExerciseFaultData(pager);
+			
+			return resultData;
+	}
+	
+	/**
+	 * APP2.0: 获取收藏练习题目数据
+	 * URL:    /exercise/Exercise/favorExercise
+	 * 
+		返回数据={
+		    "items":[// 题目集合
+		        {
+		            "exerciseId":练习id,
+		            "chapterId":null,
+		            "lessonId":null,
+		            "title":标题,
+		            "type":题目类型,
+		            "answer":正确答案,
+		            "options":[
+		                {
+		                    "optionId":选项id,
+		                    "checked":true,
+		                    "content":内容,
+		                    "optionOrder":题目序号,
+		                    "exerciseItemId":"练习id",
+		                    "imgs":[
+		                        {
+		                            "imgId":"图片id",
+		                            "exerciseObjectId":null,
+		                            "imgPath":图片路径,
+		                            "imgOrder":排序,
+		                            "objectType":图片类型 1:题目 2:选项
+		                        },
+		                        ... 循环多个
+		                    ]
+		                },
+		                ... 循环多个
+		            ],
+		            "scores":null,
+		            "itemNo":null,
+		            "analisisResult":{
+		                "allAccuracy":全站统计 正确率,
+		                "analysis":"解析",
+		                "submitAllNumber":全站 提交总数,
+		                "usualFaultAnswers":易错题,
+		                "exerciseAnalisisUId":null,
+		                "accuracy":个人统计 正确率,
+		                "submitNumber":个人统计  提交总数,
+		                "submitErrorNumber":个人统计  提交错误总数,
+		            },
+		            "imgs":[
+		                {
+		                   "imgId":"图片id",
+		                    "exerciseObjectId":null,
+		                    "imgPath":图片路径,
+		                    "imgOrder":排序,
+		                    "objectType":图片类型 1:题目 2:选项
+		                },
+		                ... 循环多个
+		            ],
+		            "commentFlag": null,
+		        }
+		    ],
+		    "answers":[// 个人答案集合
+		        {
+		            "answerUId":"主键id",
+		            "answer":选择答案  如:多选为(A,B,C),
+		            "correct":0,
+		            "exerciseItemId":练习id,
+		            "exerciseRecordId":记录id,
+		            "userId":用户id
+		        },
+		        ... 循环多个
+		    ]
+		}
+	 * 
+	 * @param groupId 组id
+	 * @param exerciseRecordId 练习记录id
+	 * @return
+	 */
+	@RequestMapping(value = "favorExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getFavorExerciseData(
+			@RequestParam(value = "groupId") String groupId)  {
+		
+			// 查询结果
+			ExerItemResponseData resultData = exerciseExtendService.queryExerciseFavorData(groupId);
+			
+			return resultData;
+	}
+	
+	/**
+	 * 查询多套题收藏题目
+	 * @param groupId 格式"111,222,333...."
+	 * @return
+	 */
+	@RequestMapping(value = "favorMutiExercise", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> getFavorMutiExerciseData(
+			@RequestParam(value = "groupId") String groupId)  {
+			
+			String[] groupIds = groupId.split(",");
+			
+			if(groupIds.length<1){
+				return null;
+			}
+			
+			List<Map<String,Object>> resultDataLst = new ArrayList<Map<String,Object>>(groupIds.length);
+			
+			
+			for(String exerGroupId:groupIds){
+				try{
+					// 查询结果
+					resultDataLst.add(exerciseExtendService.queryExerciseMutiFavorData(exerGroupId));
+					
+				}catch(Exception e){
+					
+					log.error("查询多套题favorMutiExercise结果失败,groupId="+exerGroupId,e);
+				}
+			}
+			
+			return resultDataLst;
+	}
+	
+	
+	
+	/**
+	 * APP2.0: 获取全部收藏练习题目数据
+	 * URL:    /exercise/Exercise/allFavorExercise
+	 * @return
+	 */
+	@RequestMapping(value = "allFavorExercise", method = RequestMethod.GET)
+	public @ResponseBody ExerItemResponseData getAllFavorExerciseData(
+			@RequestParam(value="limit", required = false) Integer limit,
+			@RequestParam(value="page", required = false) Integer page)  {
+		
+			// 得到分页数据
+			Pager pager = getPager(page, limit);
+		
+			// 查询结果
+			ExerItemResponseData resultData = exerciseExtendService.queryAllExerciseFavorData(pager);
+			
+			return resultData;
+	}
+	
+	/**
+	 * APP2.0: 提交错题本的记录到DB
+	 * URL:    /exercise/Extend/submitFaultData
+	 * 
+	 * 	  返回数据={
+	   		"exerciseGroupType": 练习类型, 
+		    "exerciseGroupId": 练习组id, 
+		    "items":[
+			   	{
+				    "exerciseId": 练习id, 
+				    "flag": 状态, // (true:添加  false:移除)
+	
+			   	},
+			   	.....
+	   		] 	
+		  }
+		  
+	 * @param records
+	 * @return
+	 */
+	@RequestMapping(value = "submitFaultData", method = RequestMethod.POST)
+	public @ResponseBody Result doSubmitExerFaultRecord(
+			@RequestParam(value = "records") String records,
+			@RequestParam(value="subjectId", required = false) String subjectId)  {
+		
+		Result result = new Result(false);
+		
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			// 装换json到对象
+			ExciseExtendReqData recordResult = mapper.readValue(records, ExciseExtendReqData.class);
+			List<ExerciseExtendRecordData> lstRecords = recordResult.getItems();
+			
+			if(lstRecords.isEmpty()){
+				return result; 
+			}
+			
+			// 提交结果
+			Map<String,Object> resultMap = exerciseExtendService.doOperExerciseFaultRecordData(null, recordResult);
+			result.setResult(true);
+			result.setData(resultMap);
+			
+		} catch (Exception e) {
+			result = new Result(false);
+			log.error(e);
+		}
+		
+		return result; 
+	}
+	
+	
+	/**
+	 * APP2.0: 提交错题本的记录到DB
+	 * URL:    /exercise/Extend/submitFaultData
+	 * 
+	 * 	  返回数据={
+	   		"exerciseGroupType": 练习类型, 
+		    "exerciseGroupId": 练习组id, 
+		    "items":[
+			   	{
+				    "exerciseId": 练习id, 
+				    "flag": 状态, // (true:添加  false:移除)
+	
+			   	},
+			   	.....
+	   		] 	
+		  }
+		  
+	 * @param records
+	 * @return
+	 */
+	@RequestMapping(value = "submitFaultMutiData", method = RequestMethod.POST)
+	public @ResponseBody Object doSubmitExerFaultMutiRecord(
+			@RequestParam(value = "records") String records)  {
+		
+		Map<String,Object> resultMap = new HashMap<String,Object>(2);
+		Map<String,Object> returnMap = null;
+		resultMap.put("success", false);
+		resultMap.put("attrs", null);
+		List<Map<String,Object>> resultList = null;
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			
+			// 装换json到对象
+			ExciseExtendReqListData recordData = mapper.readValue(records, ExciseExtendReqListData.class);
+			
+			//String subjectId = recordData.getSubjectId();
+			List<ExciseExtendReqData> recordResults = recordData.getDatas();
+			
+			resultList = new ArrayList<Map<String,Object>>(recordResults.size());
+			// 循环记录
+			List<ExerciseExtendRecordData> lstRecords = null;
+			for(ExciseExtendReqData recordResult:recordResults){
+				
+				lstRecords = recordResult.getItems();
+				
+				if(lstRecords.isEmpty()){
+					continue;
+				}
+				
+				// 提交结果
+				returnMap = exerciseExtendService.doOperExerciseFaultRecordData(null, recordResult);
+				
+				resultList.add(returnMap);
+			}
+			
+			resultMap.put("success", true);
+			resultMap.put("attrs", resultList);
+			resultMap.put("msg", "提交成功");
+		} catch (Exception e) {
+			resultMap.put("msg", "提交失败");
+			log.error(e);
+		}
+		
+		return resultMap; 
+	}
+	
+	/**
+	 * APP2.0: 提交收藏本的记录到DB
+	 * URL:    /exercise/Extend/submitFavorData
+	 * 
+	 * @param records  json字符串
+	 * @return
+	 */
+	@RequestMapping(value = "submitFavorData", method = RequestMethod.POST)
+	public @ResponseBody Result doSubmitExerFavorRecord(
+			@RequestParam(value = "records") String records,
+			@RequestParam(value="subjectId", required = false) String subjectId)  {
+		
+		Result result = new Result(false);
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			// 装换json到对象
+			ExciseExtendReqData recordResult = mapper.readValue(records, ExciseExtendReqData.class);
+			List<ExerciseExtendRecordData> lstRecords = recordResult.getItems();
+			
+			if(lstRecords.isEmpty()){
+				return result; 
+			}
+			
+			// 提交结果
+			Map<String,Object> resultMap = exerciseExtendService.doOperExerciseFavorRecordData(null, recordResult);
+			result.setResult(true);
+			result.setData(resultMap);
+			
+		} catch (Exception e) {
+			result = new Result(false);
+			log.error(e);
+		}
+		
+		return result; 
+	}
+	
+	
+	/**
+	 * APP2.0: 提交收藏本的记录到DB
+	 * URL:    /exercise/Extend/submitFavorData
+	 * 
+	 * @param records  json字符串
+	 * @return
+	 */
+	@RequestMapping(value = "submitFavorMutiData", method = RequestMethod.POST)
+	public @ResponseBody Object doSubmitExerFavorMutiRecord(
+			@RequestParam(value = "records") String records)  {
+		
+		Map<String,Object> resultMap = new HashMap<String,Object>(2);
+		Map<String,Object> returnMap = null;
+		resultMap.put("success", false);
+		resultMap.put("attrs", null);
+		List<Map<String,Object>> resultList = null;
+		try {
+			
+			ObjectMapper mapper = new ObjectMapper();
+			
+			// 装换json到对象
+			ExciseExtendReqListData recordData = mapper.readValue(records, ExciseExtendReqListData.class);
+			
+			//String subjectId = recordData.getSubjectId();
+			List<ExciseExtendReqData> recordResults = recordData.getDatas();
+			resultList = new ArrayList<Map<String,Object>>(recordResults.size());
+			
+			// 循环记录
+			List<ExerciseExtendRecordData> lstRecords = null;
+			for(ExciseExtendReqData recordResult:recordResults){
+				
+				lstRecords = recordResult.getItems();
+				
+				if(lstRecords.isEmpty()){
+					continue;
+				}
+				
+				// 提交结果
+				returnMap = exerciseExtendService.doOperExerciseFavorRecordData(null, recordResult);
+				
+				resultList.add(returnMap);
+			}
+			resultMap.put("success", true);
+			resultMap.put("attrs", resultList);
+			resultMap.put("msg", "提交成功");
+			
+		} catch (Exception e) {
+			log.error(e);
+		}
+		
+		return resultMap; 
+	}
+	
+	/**
+	 * 获得多套题答案
+	 * @param groupId 格式"111,222,333...."
+	 * @return
+	 */
+	@RequestMapping(value = "getExtendAnswers", method = RequestMethod.GET)
+	public @ResponseBody List<ExerItemResponseData> getExtendAnswersData(
+			@RequestParam(value = "groupId") String groupId,
+			@RequestParam(value = "exerciseType") String exerciseType)  {
+			
+			String[] groupIds = groupId.split(",");
+			
+			if(groupIds.length<1){
+				return null;
+			}
+			
+			List<ExerItemResponseData> resultDataLst = new ArrayList<ExerItemResponseData>(groupIds.length);
+			
+			
+			for(String exerGroupId:groupIds){
+				try{
+					
+					if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+						
+						// 查询结果
+						resultDataLst.add(exerciseExtendService.queryExerciseFaultAnswerData(exerGroupId));
+						
+					}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+						// 查询结果
+						resultDataLst.add(exerciseExtendService.queryExerciseFavorAnswerData(exerGroupId));
+					}else{
+						return null;
+					}
+					
+				}catch(Exception e){
+					
+					log.error("获得多套题答案getExtendAnswers结果失败,groupId="+exerGroupId,e);
+				}
+			}
+			
+			return resultDataLst;
+	}
+	
+	
+	/**
+	 * APP2.0: 提交练习答案
+	 * URL:    /exercise/Extend/exerExtendAnswers
+	 * 
+	 * 请求数据= answers={
+			    "exerciseGroupId": 组id, 
+			    "exerciseRecordId": 记录id, 
+			    "exerciseExtendId": null, 
+			    "currTitleNum": "当前题号", 
+			    "status": 状态,
+			    "type": 练习类型,// 整型
+			    "doCount": 练习类型,
+			    "correctCount": 正确个数, 
+			    "allCount":题目总数,
+			    "items": [
+			        {
+			            "exerciseId": "练习id", 
+			            "type": 练习类型,// 整数型
+			            "answer": "选择答案", 
+			            "correct": 是否正确(0:错误 1:正确 2:未知)
+			        }, 
+			        {
+			            "exerciseId": "练习id", 
+			            "type": 练习类型, 
+			            "answer": "选择答案", 
+			            "correct": 是否正确(0:错误 1:正确 2:未知)
+			        }
+			    ]
+			}
+			
+		返回数据=	{"success":true,//true:成功 false:失败
+				"attrs":{"exerciseRecordId":练习记录id,
+						"updateTime":修改时间
+			     },
+				"msg":"提交成功",//结果信息
+		}
+	 * 
+	 * @param answers 
+	 * @return
+	 */
+	@RequestMapping(value = "exerExtendAnswers", method = RequestMethod.POST)
+	public @ResponseBody Result doSubmitExerExtendAnswer(
+			@RequestParam(value = "answers")  String answers)  {
+		// 用户本次做题提交的数据
+		Result result = new Result(false);
+		String initExerciseRecordId = "";
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			// 装换json到对象
+			ExerciseSubmitAnswerData answerResult = mapper.readValue(answers, ExerciseSubmitAnswerData.class);
+			
+			// 1.---------记录提交的数据日志
+			// 记录id
+			initExerciseRecordId = answerResult.getExerciseRecordId();
+			
+			if(answerResult.getItems().isEmpty() 
+					&& !ExerciseRecord.STATUS_SUBMIT.equals(answerResult.getStatus()) 
+					&& answerResult.getSubmitType() != 1){// 提交状态
+				
+				exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
+						initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER,
+						ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Extend/exerExtendAnswers");
+				
+				return result;
+			}
+			
+			// 2.提交答案
+			result = exerciseExtendService.doSubmitExerciseAnswerData(answerResult);
+			
+			int status = 0;
+			if(result.isSuccess()){
+				status = ExerciseDataSubmitLog.STATUS_SUCCESS;
+			}else{
+				status = ExerciseDataSubmitLog.STATUS_FAILED;
+			}
+			
+			// 记录提交的数据日志
+			String exerciseDataLogId = exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
+					initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER, 
+					status,"/exercise/Extend/exerExtendAnswers");
+			
+			if(StringUtils.isBlank(initExerciseRecordId) 
+					&& result.getData("exerciseRecordId") != null){// 为空 说明第一次提交  更新日志记录id
+				exerciseExtendService.doUpdateExerciseDataSubmitLog(exerciseDataLogId, 
+						String.valueOf(result.getData("exerciseRecordId")));
+				
+			}
+			
+		} catch (Exception e) {
+			result = new Result(false);
+			log.error(e);
+			
+			// 记录提交的数据日志
+			exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
+					initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER,
+					ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Extend/exerExtendAnswers");
+		}
+		
+		return result;
+	}
+	
+	
+	/**
+	 * APP2.0: 提交练习答案
+	 * URL:    /exercise/Extend/exerExtendMutiAnswers
+	 * 
+	 * 请求数据= answers=[{
+			    "exerciseGroupId": 组id, 
+			    "exerciseRecordId": 记录id, 
+			    "exerciseExtendId": null, 
+			    "currTitleNum": "当前题号", 
+			    "status": 状态,
+			    "type": 练习类型,// 整型
+			    "doCount": 练习类型,
+			    "correctCount": 正确个数, 
+			    "allCount":题目总数,
+			    "items": [
+			        {
+			            "exerciseId": "练习id", 
+			            "type": 练习类型,// 整数型
+			            "answer": "选择答案", 
+			            "correct": 是否正确(0:错误 1:正确 2:未知)
+			        }, 
+			        {
+			            "exerciseId": "练习id", 
+			            "type": 练习类型, 
+			            "answer": "选择答案", 
+			            "correct": 是否正确(0:错误 1:正确 2:未知)
+			        }
+			    ]
+			}]
+			
+		返回数据=	{"success":true,//true:成功 false:失败
+				"attrs":{"exerciseRecordId":练习记录id,
+						"updateTime":修改时间
+			     },
+				"msg":"提交成功",//结果信息
+		}
+	 * 
+	 * @param answers 
+	 * @return
+	 */
+	@RequestMapping(value = "exerExtendMutiAnswers", method = RequestMethod.POST)
+	public @ResponseBody Object doSubmitExerExtendMutiAnswer(
+			@RequestParam(value = "answers")  String answers)  {
+		// 用户本次做题提交的数据
+		Map<String,Object> resultMap = new HashMap<String,Object>(2);
+		resultMap.put("success", false);
+		resultMap.put("attrs", null);
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+			// 装换json到对象
+			ExerciseSubmitAnswerDataList answerDataList = mapper.readValue(answers, ExerciseSubmitAnswerDataList.class);
+			
+			// 提交答案
+			resultMap = exerciseExtendService.doSubmitMutiExerciseAnswerData(answerDataList);
+			
+		} catch (Exception e) {
+			log.error(e);
+			resultMap.put("msg", "提交练习答案请求异常");
+			
+			exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
+					"exerExtendMutiAnswers", ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER, 
+					ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Extend/exerExtendMutiAnswers");
+		}
+		
+		return resultMap;
+	}
+	
+	/**
+	 * APP2.0:  app端重新开始做题 更新状态
+	 * URL:    /exercise/Extend/updateNewExerRecordNew
+	 * 
+	 * @param groupId 习题组ID  如果为All时,表示全部错题
+	 * @return
+	 */
+	@RequestMapping(value = "updateNewExerRecordNew", method = RequestMethod.GET)
+	public @ResponseBody Result doUpdateExerItemNumber(
+			@RequestParam(value = "groupId")  String groupId,// 习题组ID  如果为All时,表示全部错题、全部收藏
+			@RequestParam(value = "exerciseType")  String exerciseType)  {
+		
+		Map<String,Object> map = null;
+		Result result = new Result(true, "状态更新成功");
+		if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+			
+			 map = exerciseExtendService.doUpdateFaultExerRecordNew(groupId);
+			
+		}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+			
+			map = exerciseExtendService.doUpdateFavortExerRecordNew(groupId);
+		}else{
+			
+			result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
+		}
+		
+		result.setData(map);
+		
+		return result;
+	} 
+	
+	/**
+	 * APP2.0: 更新练习作业题号 app端重新开始做题
+	 * URL:    /exercise/Extend/updateExerciseRecord
+	 * 
+	 * @param groupId         习题组ID
+	 * @return
+	 */
+	@RequestMapping(value = "updateExerciseRecord", method = RequestMethod.GET)
+	public @ResponseBody Result doUpdateExerciseRecord(
+			@RequestParam(value = "groupId")  String groupId,// all 表示全部错误或收藏
+			@RequestParam(value = "exerciseType")  String exerciseType,
+			@RequestParam(value = "exerciseRecordId") String exerciseRecordId,
+			@RequestParam(value = "currTitleNum", required = false) String currTitleNum)  {
+		
+		
+		Result result = new Result(true, "状态更新成功");
+		
+		if(StringUtils.isBlank(exerciseRecordId) && !"All".equals(groupId)){
+			return new Result(false, "更新失败,exerciseRecordId为空");
+		}
+
+		if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+			
+			if("All".equals(groupId)){// 全部错题
+				return exerciseExtendService.doUpdateExerciseFaultBook(currTitleNum);
+			}
+			
+			ExerciseFaultRecord record = commonDAO.read(ExerciseFaultRecord.class, exerciseRecordId);
+			record.setTitleMaxNumber(currTitleNum);
+			
+			result = exerciseExtendService.doUpdateExerciseFaultRecord(record);
+			
+		}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+			
+			if("All".equals(groupId)){// 全部收藏
+				return exerciseExtendService.doUpdateExerciseFavorBook(currTitleNum);
+			}
+			
+			ExerciseFavoriteRecord record = commonDAO.read(ExerciseFavoriteRecord.class, exerciseRecordId);
+			record.setTitleMaxNumber(currTitleNum);
+			
+			result = exerciseExtendService.doUpdateExerciseFavorRecord(record);
+		}else{
+			
+			result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
+		}
+		
+		return result;
+	}
+
+	/**
+	 * APP2.0: 查询错题 收藏笔记个数
+	 * URL:    /exercise/Extend/queryExerCount
+	 * @return 键值对:iFavor 收藏个数   iFault 错误个数
+	 */
+	@RequestMapping(value = "exerBookInfo", method = RequestMethod.GET)
+	public @ResponseBody Result queryExtendListCount(
+			@RequestParam(value = "exerciseType")  String exerciseType)  {
+		
+		Map<String, Object> map = null;
+		Result result = new Result(false);
+		if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+			
+			map = exerciseExtendService.queryExerFaultInfo();
+			
+		}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+			
+			map = exerciseExtendService.queryExerFavorInfo();
+		}else{
+			
+			result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
+		}
+		
+		result = new Result(true, "查询成功");
+		result.setData(map);
+		
+		return result; 
+	}
+
+	/**
+	 * APP2.0: 题目答案分析
+	 * URL:    /exercise/Extend/itemstatisics
+	 * 
+	 * 
+	 * 
+	 * @param groupId         习题组ID
+	 * @return
+	 */
+	@RequestMapping(value = "itemStatisics", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> doQueryExerciseItemStatisics(
+			@RequestParam(value = "exerciseType")  String exerciseType)  {
+		
+		// 查询结果
+		List<Map<String, Object>> resultLst = exerciseExtendService.queryExerciseItemStatisics(exerciseType);
+		
+		return resultLst;
+	} 
+	
+	/**
+	 * 错题统计接口
+	 * URL:    /exercise/Extend/faultStatis
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "faultStatis", method = RequestMethod.GET)
+	public @ResponseBody Result doCalcFaultStatisInfo()  {
+		
+		return exerciseExtendService.doCalcExerFaultStatisticsByDay();
+	} 
+	
+	/**
+	 *得到 错题统计信息
+	 * URL:    /exercise/Extend/faultStatis
+	 * 
+	 * type :week 最近一周   month:最近一月  year:最近一年
+	 * @return
+	 */
+	@RequestMapping(value = "getfaultStatis", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> doGetFaultStatisInfo(
+			@RequestParam(value = "type")  String type )  {
+		
+		return exerciseExtendService.doGetFaultStatisInfo(type);
+	} 
+	
+	/**-----------------------------------------APP  V2.0 接口 end----------------------------------------------------------- */
+	
+	@RequestMapping(value = "initFaultStatisData", method = RequestMethod.GET)
+	public @ResponseBody Result doInitExerRecentRecord()  {
+		
+		return exerciseExtendService.doInitFaultStatisData();
+	}
+	
+	
+	/*@RequestMapping(value = "initExerRecentRecord", method = RequestMethod.GET)
+	public @ResponseBody Result doInitExerRecentRecord()  {
+		
+		return exerciseExtendService.doInitExerRecentRecord();
+	}
+	
+	@RequestMapping(value = "initFaultRecord", method = RequestMethod.GET)
+	public @ResponseBody Result doInitExerOldGroup()  {
+		
+		return exerciseExtendService.doInitFaultRecord();
+	}
+	
+	@RequestMapping(value = "initFaultItem", method = RequestMethod.GET)
+	public @ResponseBody Result doInitFaultItem()  {
+		
+		// 2.
+		String sql2="select f,re.exerciseGroupId"
+				+" from ExerciseFault f,ExerciseGroupItemRe re"
+				+" where f.exerciseItemId=re.exerciseItemId"
+				+" and (f.faultRecordId is null or f.faultRecordId='') order by f.exerciseFaultId";
+		
+		List<Object[]> lstData2 =commonDAO.findwithRawResult(sql2, new ArrayList<Object>());
+		
+		if(lstData2.isEmpty()){//抛异常回滚
+			return new Result(false,"错题数据为空2222");
+		}
+		
+		String hql_existRecord = "from ExerciseFaultRecord where  resumeBookId=? and exerciseGroupId=? ";
+		ExerciseFault fault=null;
+		ExerciseFault newFault=null;
+		String exerciseFaultId="";
+		List<ExerciseFaultRecord> lstRecord = null;
+		int i=0;
+		for(Object[] objs:lstData2){
+			fault = (ExerciseFault)objs[0];
+			if(fault.getExerciseFaultId().equals(exerciseFaultId)){
+				newFault = new ExerciseFault();
+				BeanUtils.copyProperties(fault, newFault);
+				newFault.setExerciseFaultId(null);
+				
+				lstRecord = commonDAO.find(hql_existRecord, CollectionUtils.newList(newFault.getResumeBookId(),String.valueOf(objs[1])), ExerciseFaultRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				newFault.setFaultRecordId(lstRecord.get(0).getFaultRecordId());
+				TraceUtils.setUpdateTrace(newFault);
+				exerciseExtendService.doSavetoDB(newFault);
+			}else{
+				lstRecord = commonDAO.find(hql_existRecord, CollectionUtils.newList(fault.getResumeBookId(),String.valueOf(objs[1])), ExerciseFaultRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				fault.setFaultRecordId(lstRecord.get(0).getFaultRecordId());
+				TraceUtils.setUpdateTrace(fault);
+				exerciseExtendService.doSavetoDB(fault);
+			}
+			
+			exerciseFaultId=fault.getExerciseFaultId();
+			i++;
+		}
+		
+		return new Result(true, "更新ExerciseFault条数:"+i);
+	}
+	
+	
+	
+	@RequestMapping(value = "initFavorRecord", method = RequestMethod.GET)
+	public @ResponseBody Result doInitFavorRecord()  {
+		
+		return exerciseExtendService.doInitFavorRecord();
+	}
+	
+
+	@RequestMapping(value = "initFavorItem", method = RequestMethod.GET)
+	public @ResponseBody Result doInitFavorItem()  {
+		
+		String sql2="select f,re.exerciseGroupId"
+				+" from ExerciseFavorite f,ExerciseGroupItemRe re"
+				+" where f.exerciseItemId=re.exerciseItemId"
+				+" and (f.favoriteRecordId is null or f.favoriteRecordId = '') order by f.exerciseFavoriteId";
+		
+		List<Object[]> lstData2 =commonDAO.findwithRawResult(sql2, new ArrayList<Object>());
+		
+		if(lstData2.isEmpty()){//抛异常回滚
+			return new Result(false,"收藏数据为空2222");
+		}
+		
+		String hql_existRecord = "from ExerciseFavoriteRecord where  favoriteBookId=? and exerciseGroupId=? ";
+		List<ExerciseFavoriteRecord> lstRecord = null;
+		ExerciseFavorite favor=null;
+		ExerciseFavorite newFavor=null;
+		String exerciseFavoriteId="";
+		int i=0;
+		for(Object[] objs:lstData2){
+			favor = (ExerciseFavorite)objs[0];
+			if(favor.getExerciseFavoriteId().equals(exerciseFavoriteId)){
+				
+				newFavor = new ExerciseFavorite();
+				BeanUtils.copyProperties(favor, newFavor);
+				newFavor.setExerciseFavoriteId(null);
+				
+				lstRecord = commonDAO.find(hql_existRecord, CollectionUtils.newList(newFavor.getFavoriteBookId(),String.valueOf(objs[1])), ExerciseFavoriteRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				newFavor.setFavoriteRecordId(lstRecord.get(0).getFavoriteRecordId());
+				TraceUtils.setUpdateTrace(newFavor);
+				exerciseExtendService.doSavetoDB(newFavor);
+			}else{
+				lstRecord = commonDAO.find(hql_existRecord, CollectionUtils.newList(favor.getFavoriteBookId(),String.valueOf(objs[1])), ExerciseFavoriteRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				favor.setFavoriteRecordId(lstRecord.get(0).getFavoriteRecordId());
+				TraceUtils.setUpdateTrace(favor);
+				
+				exerciseExtendService.doSavetoDB(favor);
+			}
+			
+			i++;
+		}
+		
+		return new Result(true,"|更新ExerciseFavorite条数:"+i);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@RequestMapping(value = "updateAnswerU", method = RequestMethod.GET)
+	public @ResponseBody Result doUpdateAnswerU()  {
+		
+
+		int count = commonDAO.findCount("select count(1) from ExerciseItemAnswerU where correct>1", Collections.EMPTY_LIST);
+		
+		Pager page = new Pager();
+		
+		int pageSize = 50;
+		
+		int maxPage = count/pageSize + (count%pageSize>0?1:0);
+		
+		page.setPageSize(pageSize);
+		page.setTotalCount(count);
+		int j=0;
+		String hql2;
+		for(int i=1;i<=maxPage;i++){
+			page.setPageNum(i);
+			List<ExerciseItemAnswerU> lstAnswerU = commonDAO.findList("from ExerciseItemAnswerU where correct>1", page, Collections.EMPTY_LIST, ExerciseItemAnswerU.class);
+			for(ExerciseItemAnswerU answer:lstAnswerU){
+				hql2 = "select answer from ExerciseItem where (answer is not null and answer != '') and exerciseId=? and deleteFlag is false ";
+				
+				List<Object[]> lstData2 =commonDAO.findwithRawResult(hql2, CollectionUtils.newList(answer.getExerciseItemId()));
+				
+				if(lstData2.isEmpty()){
+					continue;
+				}
+				
+				if(!answer.getAnswer().equals(String.valueOf(lstData2.get(0)))
+						&& answer.getCorrect() != 0){
+					answer.setCorrect((byte)0);
+					TraceUtils.setUpdateTrace(answer);
+					exerciseExtendService.doSavetoDB(answer);
+					
+					j++;
+				}
+				
+				if(answer.getAnswer().equals(String.valueOf(lstData2.get(0)))
+						&& answer.getCorrect() != 1){
+					answer.setCorrect((byte)1);
+					TraceUtils.setUpdateTrace(answer);
+					exerciseExtendService.doSavetoDB(answer);
+					
+					j++;
+				}
+				
+			}
+		}
+		
+		return new Result(true,"|更新ExerciseItemAnswerU条数:"+j);
+	}*/
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java
new file mode 100644
index 0000000..13cf07f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java
@@ -0,0 +1,238 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+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 com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+
+import io.swagger.annotations.Api;
+
+/**
+ * 练习题目控制
+ * 
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ */
+
+@Api(tags = "题库管理接口")
+@Controller
+@RequestMapping(value = "/exercise/group")
+public class ExerciseGroupController {
+
+	// 分页查询中,默认记录条数和页数
+	private static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
+	private static final int DEFAULT_PAGE_NUM = 1;
+
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	private IExerciseGroupService exerciseGroupService;
+	
+	@Autowired
+	private ITeacherService teacherService;
+	
+    @Autowired
+    IClassService classService;
+
+    @Autowired
+    ISubjectService subjectService;
+
+	/**
+	 * 题库列表
+	 */
+	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	public @ResponseBody Result pageList(String keyword,Short status, Integer pageSize, Integer pageNum) {
+		Result result = new Result(Boolean.TRUE);
+		Pager page = new Pager();
+		List<ExerciseGroup> listResult = null;
+		List<Object> queryParam = null;
+		// 查询记录数
+		String hqlCount = "from ExerciseGroup where createId=? and type=? and name like ? and  deleteFlag is false ";
+		if(status!=null){
+			hqlCount = hqlCount.concat(" and status = ?");
+			queryParam = CollectionUtils.newList(ClientUtils.getUserId(), ExerciseGroup.TYPE_EXERCISE_GROUP_LIB,'%'+(keyword==null?"":keyword.trim())+'%',status);
+		}else{
+			queryParam = CollectionUtils.newList(ClientUtils.getUserId(), ExerciseGroup.TYPE_EXERCISE_GROUP_LIB,'%'+(keyword==null?"":keyword.trim())+'%');
+		}
+		
+		int totalCount = commonDAO.findCount(hqlCount,queryParam);
+		// page赋值
+		page.setTotalCount(totalCount);
+		page.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE);
+		page.setPageNum(pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM);
+
+		StringBuffer hqlBuffer =  new StringBuffer(500);
+		hqlBuffer.append("select g,s.name from ExerciseGroup g,Subject s where g.subjectId=s.subjectId and g.createId=? and g.type=? and g.name like ? and g.deleteFlag is false ");
+		if(status!=null){
+			hqlBuffer.append(" and g.status = ? ");
+		}
+		hqlBuffer.append(" order by g.createTime DESC");
+		List<Object[]> list = commonDAO.findList(hqlBuffer.toString(), page,queryParam,Object[].class);
+		if(list!=null&& list.size()>0){
+			listResult = new ArrayList<ExerciseGroup>();
+			for(Object[] temp:list){
+				((ExerciseGroup)temp[0]).setSubjectName((String) temp[1]);
+				((ExerciseGroup)temp[0]).setItems(null);
+				listResult.add((ExerciseGroup)temp[0]);
+			}
+		}
+		
+		result.addData("list", listResult);
+		result.addData("page", page);
+		return result;
+	}
+
+	/**
+	 * 详情页面数据
+	 * 
+	 * @param exerciseGroupId
+	 * @return
+	 */
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result detail(String groupId) {
+		Result result = new Result(true);
+		result.addData("detail", exerciseGroupService.queryExerciseGroupDetail(groupId));
+		return result;
+	}
+
+	/**
+	 * 保存题库基本信息
+	 * 
+	 * @param exerciseGroup
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExerciseGroup exerciseGroup) {
+		Result result = null;
+		String exerciseGroupId = exerciseGroup.getGroupId();
+		// 暂时题库类型配置为题库类型
+		if(StringUtils.isEmpty(exerciseGroupId)){
+			result = new Result(true);
+			exerciseGroup.setType(ExerciseGroup.TYPE_EXERCISE_GROUP_LIB);
+			exerciseGroupId = exerciseGroupService.addExerciseGroup(exerciseGroup);
+			result.addData("groupId", exerciseGroupId);
+		}else{
+			return exerciseGroupService.updateExerciseGroup(exerciseGroup);
+		}
+		return result;
+	}
+
+	/**
+	 * 删除
+	 * 
+	 * @param exerciseGroupIds
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.GET)
+	public @ResponseBody Result delete(String exerciseGroupIds) {
+		Result result = new Result(true);
+		if (StringUtils.isNotEmpty(exerciseGroupIds)) {
+			result = exerciseGroupService.deleteExerciseGroup(exerciseGroupIds.split(","));
+		}
+		return result;
+	}
+	
+	
+	/**
+	 * 作业布置班级列表
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@RequestMapping(value = "/subject/list", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> subjectList(Integer subjectType) {
+		//判断是否是教师
+    	String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+    	
+    	if(subjectType==null){
+    		subjectType= Subject.TYPE_ORG_SUBJECT;
+    	}
+    	
+		return this.subjectService.queryAvailableSubjectIdAndName(teacherId,subjectType);
+	}
+	
+	/**
+	 * 作业布置班级列表
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@RequestMapping(value = "/class/list", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String,Object>> classList(String subjectId) {
+		//判断是否是教师
+    	String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+    	
+		return classService.queryAvailableClassIdAndName(teacherId,subjectId);
+	}
+	
+	/**
+	 * 发布题库
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/exerciselib/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publishExerciseLib(String groupIds) {
+		if (StringUtils.isEmpty(groupIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.exerciseGroupService.doPublishExerciseLib(groupIds.split(","));
+	}
+
+	/**
+	 * 撤回题库
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/exerciselib/revoke", method = RequestMethod.GET)
+	public @ResponseBody Result revokeExerciseLib(String groupIds) {
+		if (StringUtils.isEmpty(groupIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.exerciseGroupService.doRevokeExerciseLib(groupIds.split(","));
+	}
+	
+	/**
+	 * 题目统计
+	 * @param examPaperIds
+	 * @return
+	 */
+	@RequestMapping(value = "/item/statistics", method = RequestMethod.GET)
+	public @ResponseBody Result statisticsItem (String groupIds) {
+		if (StringUtils.isEmpty(groupIds)) {
+			return new Result(false, "参数错误");
+		}
+		
+		List<ExerciseGroup> lstGroupStatistics = this.exerciseGroupService.queryExerciseGroupItemsStatistic(groupIds.split(","));
+		
+		return new Result(true, "success",
+			CollectionUtils.newObjectMap("itemStatistics", 
+				QBeanUtils.listBean2ListMap(lstGroupStatistics,CollectionUtils.newStringMap(
+								"groupId", "groupId", "name", "groupName","singleSelectCount", "singleSelectCount","multiSelectCount", "multiSelectCount", "judgeCount", "judgeCount", "questionCount", "questionCount", "fillBlanksCount", "fillBlanksCount"
+						))
+		));
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java
new file mode 100644
index 0000000..5d3a686
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java
@@ -0,0 +1,553 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+import com.qxueyou.scc.exercise.model.ExerciseExamReClass;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseResultV;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.service.IExerciseCompleteService;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.exercise.service.IExerciseInfoService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 作业管理
+ * 
+ * @author kevin
+ *
+ */
+@Api(tags = "作业管理接口")
+@Controller
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "/exercise/info")
+public class ExerciseInfoController {
+	
+	private static final int DEFAULT_PAGE_SIZE = 10;
+	private static final int DEFAULT_PAGE_NUM = 1;
+	
+	/** commonDAO */
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	private IExerciseInfoService exerciseInfoService;
+	
+	@Autowired
+	private IExerciseGroupService exerciseGroupService;
+	
+    @Autowired
+    IClassService classService;
+
+	@Autowired
+	private IExerciseCompleteService exerciseCompleteService;
+	
+	/** 练习V2.0版本接口service */
+	@Autowired
+	private IExerciseVerService exerciseVerService;
+	
+	//------------------------------------------------app接口-------------------------------------------
+	/**
+	 * 获取作业详情
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "获取作业详情", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value = "/app/detail", method = RequestMethod.GET)
+	public @ResponseBody Result queryDetail(String exerciseInfoId) {
+		if (StringUtils.isEmpty(exerciseInfoId)) {
+			return new Result(false, "参数错误");
+		}
+		
+		ExerciseInfo exerciseInfo = this.commonDAO.read(ExerciseInfo.class, exerciseInfoId);
+		
+		Map<String,Object> data = QBeanUtils.copyPropertiesToMap(exerciseInfo, CollectionUtils.newStringMap(
+				"exerciseInfoId","exerciseInfoId","name","name","type","type","remind","remind","score","score",
+				"startTime","startTime","endTime","endTime","passingScore","passingScore"));
+	
+		data.put("subjectName", exerciseInfo.getSubject().getName());
+		
+		if(exerciseInfo.getReClasses()!=null && exerciseInfo.getReClasses().size()>0){
+			List<String>  lstClassIds = QBeanUtils.listPropertyVal(exerciseInfo.getReClasses(), "classId");
+			String [] classIds = lstClassIds.toArray(new String[lstClassIds.size()]);
+			String [] classNames = classService.queryClassNamesByIds(classIds);
+			data.put("classIds",  classIds);
+			data.put("classNames",classNames);
+		}
+		
+		if(exerciseInfo.getReGroups()!=null && exerciseInfo.getReGroups().size()>0){
+			List<String>  lstGroupIds = QBeanUtils.listPropertyVal(exerciseInfo.getReGroups(), "groupId");
+			String [] groupIds = lstGroupIds.toArray(new String[lstGroupIds.size()]);
+			String [] groupNames = exerciseGroupService.queryGroupNamesByIds(groupIds);
+			data.put("groupIds",   groupIds);
+			data.put("groupNames", groupNames);
+		}
+		
+		return new Result(true,"",data);
+	}
+	
+	
+   //-------------------------------------------------后台端接口-----------------------------------------
+	
+	/**
+	 * 考试列表
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	public @ResponseBody Result list(String keyword, String classId, Short status, Integer pageSize,Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		//作业数量
+		int totalCount = exerciseInfoService.listCount(keyword == null ? "" : keyword.trim(),classId,status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+		
+		List<ExerciseInfo> list = exerciseInfoService.list(keyword == null ? "" : keyword.trim(),classId,status,pageSize, pageNum);
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("exerciseInfoId","exerciseInfoId","name","name","passingScore","passingScore","type","type",
+	            		"status","status","updateTime","updateTime","startTime","startTime","endTime","endTime","creator","creator","subject.name","subjectName"));
+		
+		if(listResult!=null && listResult.size()>0){
+			Map<String,Integer> countMap = exerciseInfoService.queryResultStatusCount(QBeanUtils.listPropertyVal(list, "exerciseInfoId"));
+			countMap = countMap==null?new HashMap<String,Integer>(1):countMap;
+			Integer tempCount = null;
+			
+			for (Map<String, Object> item : listResult) {
+				tempCount = countMap.get(item.get("exerciseInfoId") + "-" + ExerciseCompleteInfo.STATUS_CHECKED);
+				item.put("checkedCount", tempCount==null?0:tempCount);
+				
+				tempCount = countMap.get(item.get("exerciseInfoId") + "-" + ExerciseCompleteInfo.STATUS_COMMIT);
+				item.put("toCheckCount",tempCount==null?0:tempCount);
+				
+				tempCount = countMap.get(item.get("exerciseInfoId") + "-" + ExerciseCompleteInfo.STATUS_DRAFT);
+				item.put("unCommitCount",tempCount==null?0:tempCount);
+				
+				tempCount = countMap.get(item.get("exerciseInfoId") + "-" + ExerciseCompleteInfo.STATUS_REDO);
+				item.put("reDoCount",tempCount==null?0:tempCount);
+			}
+		}
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("list",listResult,"pager",pager));
+	}
+	
+	/**
+	 * 保存作业基础信息
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	public @ResponseBody Result save(@RequestBody ExerciseInfo exerciseInfo) {
+		return StringUtils.isEmpty(exerciseInfo.getExerciseInfoId())?
+				this.exerciseInfoService.insertExerciseInfo(exerciseInfo):this.exerciseInfoService.updateExerciseInfo(exerciseInfo);
+	}
+
+	/**
+	 * 删除作业
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.GET)
+	public @ResponseBody Result deleteExercise(String exerciseInfoId) {
+		if (StringUtils.isEmpty(exerciseInfoId)) {
+			return new Result(false, "参数错误");
+		}
+		return this.exerciseInfoService.deleteExerciseInfo(exerciseInfoId);
+	}
+
+	/**
+	 * 发布作业
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/publish", method = RequestMethod.GET)
+	public @ResponseBody Result publishExerciseInfo(String exerciseIds) {
+		if (StringUtils.isEmpty(exerciseIds)) {
+			return new Result(false, "参数错误");
+		}
+		return this.exerciseInfoService.doPublishExercise(exerciseIds.split(","));
+	}
+
+	/**
+	 * 撤回作业
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/revoke", method = RequestMethod.GET)
+	public @ResponseBody Result revokeExerciseInfo(String exerciseIds) {
+		if (StringUtils.isEmpty(exerciseIds)) {
+			return new Result(false, "参数错误");
+		}
+		
+		return this.exerciseInfoService.doRevokeExercise(exerciseIds.split(","));
+	}
+
+	/**
+	 * 撤回作业校验
+	 * 
+	 * @param exerciseIds
+	 * @return
+	 */
+	@RequestMapping(value = "/checkRevoke", method = RequestMethod.GET)
+	public @ResponseBody Result checkRevokeExerciseInfo(String exerciseIds) {
+		int count= this.commonDAO.findCountByComplexHql("from ExerciseInfo f where f.startTime<=:startTime and f.exerciseInfoId in (:exerciseIds)", 
+				CollectionUtils.newObjectMap("startTime",new Date(),"exerciseIds",exerciseIds));
+
+		return count>0?new Result(false,"已开始的作业不能撤回"):new Result(true);
+	}
+	
+	/**
+	 * 获取作业详情
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "获取作业详情", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = true, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value = "/detail", method = RequestMethod.GET)
+	public @ResponseBody Result initExerciseInfo(String exerciseInfoId) {
+		Result result = new Result(true);
+		if (StringUtils.isEmpty(exerciseInfoId)) {
+			new Result(false, "参数错误");
+		}
+		ExerciseInfo exerciseInfo = this.commonDAO.read(ExerciseInfo.class, exerciseInfoId);
+		exerciseInfo.setSubjectName(exerciseInfo.getSubject().getName());
+		
+		// 获取关联班机信息
+		if (exerciseInfo.getReClasses() != null) {
+			List<ExerciseExamReClass> reClasses = new ArrayList<ExerciseExamReClass>(
+					exerciseInfo.getReClasses().size());
+			List<Object[]> lstObj = this.commonDAO.find(
+					"select r,c.name from ExerciseExamReClass r,ClsClass c where r.examId=? and r.classId=c.classId and r.deleteFlag is false",
+					CollectionUtils.newList(exerciseInfoId), Object[].class);
+
+			for (int i = 0; i < exerciseInfo.getReClasses().size(); i++) {
+				((ExerciseExamReClass) lstObj.get(i)[0]).setClassName((String) lstObj.get(i)[1]);
+				reClasses.add((ExerciseExamReClass) lstObj.get(i)[0]);
+			}
+
+			exerciseInfo.setReClasses(reClasses);
+		}
+		
+		//答题作业取题目信息
+		if(exerciseInfo.getType()== ExerciseInfo.EXERCISE_TYPE_ANSWER){
+			String groupId = exerciseInfoService.queryExerciseInfoRelatedGroupId(exerciseInfoId);
+			@SuppressWarnings("deprecation")
+			List<ExerciseItem> lstItem = exerciseVerService.queryExerciseItemList(groupId);
+			
+			// 3.组装返回参数
+			ExerItemResponseData responseData = new ExerItemResponseData();
+			responseData.setExerciseGroupId(groupId);
+			responseData.setItems(lstItem);
+			result.addData("exerItem", responseData);
+		}
+		
+		result.addData("exerciseInfo", exerciseInfo);
+		return result;
+	}
+
+	
+	/**
+	 * 作业题型配置
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "作业题型配置查询")
+	@RequestMapping(value = "/itemset/list", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> examItemTypeList(String exerciseInfoId) {
+		return this.commonDAO.findListWithMapByHql("select blankScore as blankScore,halfRightScore as halfRightScore,"
+				+ " itemType as itemType,rightScore as rightScore,wrongScore as wrongScore, itemCount as itemCount, itemCount*rightScore as totalScore"
+				+ " from ExerciseItemSet where exerciseInfoId = :exerciseInfoId and deleteFlag is false",
+				CollectionUtils.newObjectMap("exerciseInfoId", exerciseInfoId));
+	}
+
+	/**
+	 * 作业布置班级列表
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@RequestMapping(value = "/relatedclass/list", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> classList(String exerciseInfoId) {
+		// TODO 作业布置查询班级需要修改
+		return this.commonDAO.findListWithMapByHql(
+				"select  s.classId as classId,s.name as className from ExerciseExamReClass c,ClsClass s where c.deleteFlag is false and s.deleteFlag is false"
+						+ " and s.classId = c.classId  and c.examId = :exerciseInfoId",
+				CollectionUtils.newObjectMap("exerciseInfoId", exerciseInfoId));
+	}
+
+	/**
+	 * 作业题库来源列表
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@RequestMapping(value = "/relatedgroup/list", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> itemSourceList(String exerciseInfoId) {
+		return this.commonDAO.findListWithMapByHql(
+				"select s.name as groupName from ExerciseExamReGroup c,ExerciseGroup s where c.deleteFlag is false and s.deleteFlag is false"
+						+ " and s.groupId = c.groupId and c.examId = :exerciseInfoId",
+				CollectionUtils.newObjectMap("exerciseInfoId", exerciseInfoId));
+	}
+	
+	
+	/**
+	 * 学员得分详情列表
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@ApiOperation(value = "学员得分详情列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value = "/teacher/answerresultlist", method = RequestMethod.GET)
+	public @ResponseBody Result resultList(String keyword,String exerciseInfoId,String subjectId, Short status,Integer pageSize,
+			Integer pageNum) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		
+		//作业数量
+		int totalCount = exerciseInfoService.queryStuExerciseListCount(keyword,exerciseInfoId,null,subjectId,status);
+		Pager pager = new Pager(pageSize,pageNum);
+		pager.setTotalCount(totalCount);
+		
+		List<ExerciseResultV> list = exerciseInfoService.queryStuExerciselist(keyword,exerciseInfoId,null,subjectId,status,pageSize, pageNum);
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("id.exerciseInfoId","exerciseInfoId","exerciseName","exerciseName","startTime","startTime","score","score",
+	            		"endTime","endTime","id.studentId","studentId","id.classId","classId","submitTime","submitTime","userId","studentUserId",
+	            		"studentName","studentUserName","exerciseCompleteId","exerciseCompleteId","studentScore","studentScore","subjectName","subjectName",
+	            		"studentNo","studentNo","completeStatus","completeStatus","className","className","sex","sex","mobilePhone","mobilePhone"));
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("list", listResult,"pager", pager));
+	}
+	
+	//查询个人需要做的作业
+	@ApiOperation(value = "查询个人需要做的作业列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "status", value = "作业状态查询(默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交)", required = true, paramType="query", dataType = "Short"),
+    })
+	@RequestMapping(value = "/student/list", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentExerciseList(String keyword, String subjectId, Short status, Integer pageSize, Integer pageNum, HttpServletRequest request) {
+		pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
+		pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
+		//作业数量
+		int totalCount = exerciseInfoService.queryStuExerciseListCount(keyword,null,ClientUtils.getUserId(),subjectId,status);
+		List<ExerciseResultV> list = exerciseInfoService.queryStuExerciselist(keyword,null,ClientUtils.getUserId(),subjectId,status,pageSize, pageNum);
+		List<Map<String, Object>> listResult =QBeanUtils.listBean2ListMap(list,
+	            CollectionUtils.newStringMap("id.exerciseInfoId","exerciseInfoId","exerciseName","name","startTime","startTime",
+	            		"endTime","endTime","type","type","subjectName","subjectName","score","score","studentScore","studentScore",
+	            		"completeStatus","completeStatus","id.classId","classId","className","className"));
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("stuExercises", listResult,"exerciseCount", totalCount));
+	}
+	
+	/**
+	 * 开始做作业
+	 *
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "开始做作业", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "studentUserId", value = "userId", required = true, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value = "/student/startexercise", method = RequestMethod.GET)
+	public @ResponseBody Result doStartExercise(String exerciseInfoId, String classId,String studentUserId) {
+		System.out.println(ClientUtils.getUserId()+"做作业"+ClientUtils.getClassName()+"aaa"+ClientUtils.getClassId());
+		if (StringUtils.isEmpty(exerciseInfoId)) {
+			return new Result(false, "参数错误");
+		}
+		
+		if(StringUtils.isEmpty(studentUserId)){
+			studentUserId = ClientUtils.getUserId();
+		}
+		
+		return this.exerciseInfoService.doStartExerciseInfo(exerciseInfoId, StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId,studentUserId);
+	}
+
+	/**
+	 * 提交文件和写作作业
+	 *
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "提交文件和写作作业", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseCompleteInfoId", value = "提交记录id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "content", value = "内容", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "fileId", value = "文件id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "filePath", value = "文件路径", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "submitType", value = "提交方式(1:已提交作业,待批阅  2:已批阅  3:需重写 重写完后重新提交状态变为 1)", required = true, paramType="query", dataType = "short"),
+    })
+	@RequestMapping(value = "/student/submitexercise", method = RequestMethod.POST)
+	public @ResponseBody Result doSubmitFileExercise(
+			@RequestParam(value = "exerciseCompleteInfoId") String completeInfoId,
+			@RequestParam(value = "content") String content, @RequestParam(value = "fileId") String fileId,
+			@RequestParam(value = "filePath") String filePath, @RequestParam(value = "submitType") short submitType) {
+
+		if (StringUtils.isEmpty(completeInfoId)) {
+			return new Result(false, "参数错误");
+		}
+
+		return this.exerciseInfoService.doSubmitOtherExerciseInfo(completeInfoId, content, fileId, filePath,submitType);
+	}
+
+	/**
+	 * 提交答题作业
+	 *
+	 * @param examId
+	 * @return
+	 * @throws IOException 
+	 * @throws JsonMappingException 
+	 * @throws JsonParseException 
+	 */
+	@ApiOperation(value = "提交答题作业", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseCompleteInfoId", value = "提交记录id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "exerciseInfoId", value = "作业id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "answers", value = "答题内容", required = true, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value = "/student/submitanswer", method = RequestMethod.POST)
+	public @ResponseBody Result doSubmitAnswerExercise(@RequestParam(value = "answers") String answers,
+			@RequestParam(value = "exerciseInfoId") String exerciseInfoId,
+			@RequestParam(value = "exerciseCompleteId") String exerciseCompleteId) throws Exception {
+		
+		if (StringUtils.isEmpty(answers)) {
+			return new Result(false, "参数错误");
+		}
+		
+		ExerciseSubmitAnswerData answerData = new ObjectMapper().readValue(answers, ExerciseSubmitAnswerData.class);
+		
+		return this.exerciseInfoService.doSubmitAnswerExerciseInfo(answerData, exerciseInfoId, exerciseCompleteId);
+	}
+	
+	@ApiOperation(value = "老师阅卷")
+	@ApiImplicitParams({@ApiImplicitParam(name="answerData", dataType="String", paramType="query", value="提交答案", required=true)})
+	@RequestMapping(value = "/teacher/check", method = RequestMethod.POST)
+	public @ResponseBody Object doCheck(@RequestBody ExerciseSubmitAnswerData answerData) {
+		return this.exerciseInfoService.doSubmitAnswerExerciseInfo(answerData, answerData.getExerciseInfoId(), answerData.getExerciseCompleteId());
+	}
+
+	/**
+	 * 前端查看作业详情
+	 *
+	 * @param examId
+	 * @return
+	 */
+	@ApiOperation(value = "查看学生作业详情", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "exerciseCompleteInfoId", value = "提交记录id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "studentUserId", value = "userId", required = true, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value = "/student/detail", method = RequestMethod.GET)
+	public @ResponseBody Result queryStudentExerciseDetail(String exerciseInfoId, String classId,String studentUserId) {
+		if (StringUtils.isEmpty(exerciseInfoId)) {
+			return new Result(false, "参数错误");
+		}
+		Map<String, Object> detailMap = new HashMap<String,Object>(30);
+		ExerciseInfo exerciseInfo = this.commonDAO.read(ExerciseInfo.class, exerciseInfoId);
+		detailMap.putAll(QBeanUtils.bean2Map(exerciseInfo, CollectionUtils.newStringMap(
+			"exerciseInfoId","exerciseInfoId",
+			"score","totalScore","passingScore","passingScore","remind","remind","type","exerciseType",
+			"creator","teacherName","name","exerciseName","startTime","startTime","endTime","endTime","subject.name","subjectName"
+		)));
+		
+		ExerciseCompleteInfo completeInfo = exerciseCompleteService.doCheckAndCreateExerciseCompleteInfo(exerciseInfoId, classId, studentUserId);
+		if(completeInfo!=null){
+			detailMap.putAll(QBeanUtils.bean2Map(completeInfo,CollectionUtils.newStringMap(
+					"exerciseCompleteId","exerciseCompleteId","studentScore","studentScore","submitTime",
+					"submitTime","completeStatus","completeStatus","completeStatus","teacherComment","teacherComment"
+			)));
+		}
+		
+		List<Map<String, Object>> lstItemSet = null;
+		if (((short) detailMap.get("exerciseType")) == ExerciseInfo.EXERCISE_TYPE_ANSWER) {
+			lstItemSet = QBeanUtils.listBean2ListMap(exerciseInfoService.queryExerciseItemSet(exerciseInfoId), 
+					CollectionUtils.newStringMap("itemType","itemType","itemCount","itemCount"));
+			
+			int itemCount = 0;
+			for (Map<String, Object> map : lstItemSet) {
+				itemCount += (int) map.get("itemCount");
+			}
+			
+			detailMap.put("itemCount", itemCount);
+		}
+		return new Result(true,"",CollectionUtils.newObjectMap("detail", detailMap,"itemType", lstItemSet));
+	}
+
+	/**
+	 * 初始化平均成绩和最高成绩
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "initScore/{examId}", method = RequestMethod.GET)
+	public @ResponseBody Map<String, Object> initScore(@PathVariable String exerciseInfoId) {
+		Map<String, Object> map = this.exerciseInfoService.initScore(exerciseInfoId);
+		return map;
+	}
+
+	/**
+	 * 每道题得分详情
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@RequestMapping(value = "itemDetailList/{exerciseInfoId}", method = RequestMethod.GET)
+	public @ResponseBody List<ExerciseItemStatistics> scoreDetail(@PathVariable String exerciseInfoId) {
+		List<ExerciseItemStatistics> itemStatisLst = this.exerciseInfoService.itemDetailList(exerciseInfoId);
+		return itemStatisLst;
+	}
+	
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java
new file mode 100644
index 0000000..41ea66a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.exercise.action;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+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 com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+
+import io.swagger.annotations.Api;
+
+/**
+ * 练习题目控制
+ * 
+ * @author kevin
+ * @history 2018-03-11 create kevin
+ */
+
+@Api(tags = "题目基础处理接口")
+@Controller
+@RequestMapping(value = "/exercise/item")
+public class ExerciseItemController {
+	
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	private IExerciseService exerciseService;
+
+	/**
+	 * 删除题目
+	 * 
+	 * @param exerciseGroupIds
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.GET)
+	public @ResponseBody Result delete(String groupId,String exerciseItemIds) {
+		if(StringUtils.isEmpty(exerciseItemIds)){
+			return new Result(false,"没有选择需要删除的题目");
+		}
+		
+		//查询题库与题目的关系
+		Map<String,Object> params = new HashMap<String, Object>(1);
+		String queryHql = "select r.relationId from ExerciseGroupItemRe r where r.deleteFlag is false  and exerciseGroupId=:groupId and r.exerciseItemId in (:exerciseItemIds)";
+		params.put("groupId",groupId);
+		params.put("exerciseItemIds",exerciseItemIds.split(","));
+		List<String> lstExerciseGroupItemRe = commonDAO.findByComplexHql(queryHql, params, String.class);
+		String [] arrItemRe=null;
+		if(lstExerciseGroupItemRe!=null && lstExerciseGroupItemRe.size()>0){
+			arrItemRe= new String[lstExerciseGroupItemRe.size()];
+			for(int i=0;i<lstExerciseGroupItemRe.size();i++){
+				arrItemRe[i]=lstExerciseGroupItemRe.get(i);
+			}
+		}
+		
+		return  exerciseService.deleteExerciseItems(exerciseItemIds.split(","),arrItemRe, groupId);
+	}
+
+	/**
+	 * (后台管理系统)保存题目
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	@ResponseBody
+	public Result addOrUpdateItem(@RequestBody ExerciseGroup exerciseGroup){
+		return exerciseService.saveExerciseItemBatch(exerciseGroup.getGroupId(), exerciseGroup.getItems());
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java b/src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java
new file mode 100644
index 0000000..4d96cfa
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java
@@ -0,0 +1,207 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.exercise.dao;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.transform.Transformers;
+import org.springframework.orm.hibernate4.HibernateCallback;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.DateUtils;
+import com.qxueyou.scc.exercise.model.ExerciseAnalisisResult;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+
+@Repository(value="exerciseDAO")
+/**
+ * 自动注入sessionFactory
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2010-07-28 夏德虎 新建
+ */
+
+public class ExerciseDAO extends BaseDAO {
+	
+
+    /**
+	 * 组装查询练习题目  顺序、随机练习
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<ExerciseItem> queryExtendExerciseItem(String hql,
+			List<Object> args) {
+        List<ExerciseItem> lstitems = new ArrayList<ExerciseItem>();
+        ExerciseItem item;
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+		ExerciseAnalisisResult analisisResult=null;
+        for (Object[] obj : lst) {
+        	item = (ExerciseItem) obj[0];
+        	item.setExerciseExtendId(String.valueOf(obj[1]));
+        	item.setExerciseRecordId(String.valueOf(obj[2]));
+        	analisisResult= new ExerciseAnalisisResult();
+        	analisisResult.setCurrTitleNumber(String.valueOf(obj[3] == null ? 0 :obj[3]));
+        	analisisResult.setExerAccuracy(String.valueOf(obj[4] == null ? 0 :obj[4]));
+        	analisisResult.setExerCorrectCount(String.valueOf(obj[5] == null ? 0 :obj[5])); 
+        	item.setAnalisisResult(analisisResult);
+        	lstitems.add(item);
+        }
+        
+        return lstitems;
+	}
+	
+	/**
+	 *查询错题 收藏对应的练习记录
+	 * @return
+	 * @throws ParseException 
+	 */
+	@SuppressWarnings({ "unchecked"})
+	public List<ExerciseItem> queryExerciceItemList(String hql,
+			List<Object> args){
+        List<ExerciseItem> lstitems = new ArrayList<ExerciseItem>();
+        ExerciseItem item;
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+		try {
+	        for (Object[] obj : lst) {
+	        	item = (ExerciseItem) obj[0];
+	        	item.setExerciseGroupId(String.valueOf(obj[1]));
+				item.setUpdateTime(DateUtils.convertStringToDate(String.valueOf(obj[2]), "yyyy-MM-dd HH:mm:ss"));
+	        	lstitems.add(item);
+	        }
+		} catch (Exception e) {
+			
+		}
+        
+        return lstitems;
+	}
+	
+	/**
+     * 根据hql查询,返回列表分页数据
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	@SuppressWarnings("unchecked")
+	public List<Map<String,String>> queryRecentRecords(final String sql, final Pager page, final List<Object> args) {
+       // 查询得到结果
+        
+		List<Object[]> resultLst = this.getHibernateTemplate().execute(
+				new HibernateCallback<List<Object[]>>() {
+					public List<Object[]> doInHibernate(Session session) {
+						SQLQuery query = session.createSQLQuery(sql);
+
+						int i = 0;
+						for (Object arg : args) {
+							query.setParameter(i++, arg);
+						}
+						query.setFirstResult(page.getPageSize()
+								* (page.getPageNum() - 1));
+						query.setMaxResults(page.getPageSize());
+						return query.list();
+					}
+				});
+
+       List<Map<String,String>> lst = new ArrayList<Map<String,String>>();
+       Map<String, String> map = null;
+       
+       for (Object[] obj : resultLst) {
+    	   map = new HashMap<String, String>();
+    	   map.put("groupId", String.valueOf(obj[0]));
+    	   map.put("type", String.valueOf(obj[1]));
+    	   map.put("name", String.valueOf(obj[2]));
+    	   map.put("recordId", String.valueOf(obj[3]));
+    	   map.put("attribute2", String.valueOf(obj[4]));
+    	   map.put("attribute1", String.valueOf(obj[5]));
+    	   map.put("schedule", String.valueOf(obj[6]));
+    	   map.put("allCount", String.valueOf(obj[7]));
+    	   
+    	   lst.add(map);
+       }
+       
+       return lst;
+    }
+    
+    /**
+     * 根据hql查询,返回列表分页数据
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+    @SuppressWarnings({"unchecked" })
+	public List<Map<String,String>> queryExerciseRecentRecords(final String sql, final List<Object> args) {
+       // 查询得到结果
+       List<Object[]> resultLst = this.getHibernateTemplate().execute(new HibernateCallback<List<Object[]>>() {
+
+            public List<Object[]> doInHibernate(Session session) {
+            	SQLQuery query = session.createSQLQuery(sql);
+            	
+                int i = 0;
+                for (Object arg : args) {
+                    query.setParameter(i++, arg);
+                }
+                return query.list();
+            }
+        });
+       
+       List<Map<String,String>> lst = new ArrayList<Map<String,String>>();
+       Map<String, String> map = null;
+       
+       for (Object[] obj : resultLst) {
+    	   map = new HashMap<String, String>();
+    	   map.put("groupId", String.valueOf(obj[0]));
+    	   map.put("titleMaxNumber", String.valueOf(obj[1]));
+    	   map.put("status", String.valueOf(obj[2]));
+    	   map.put("doCount", String.valueOf(obj[3]));
+    	   
+    	   lst.add(map);
+       }
+       
+       return lst;
+    }
+    
+    /**
+	 *查询练习列表,还需查询联系下面习题个数
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<ExerciseGroup> queryExerciceGroupList(String sql,List<Object> args) {
+        
+        Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(ExerciseGroup.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	
+    	return query.list();
+	}
+	
+	public Result deleteExerciseItemRe(ExerciseGroupItemRe objExerciseItemRe){
+		
+		this.getHibernateTemplate().delete(objExerciseItemRe);
+		
+		return new Result(true);
+		
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java b/src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java
new file mode 100644
index 0000000..e92bff7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java
@@ -0,0 +1,22 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.util.List;
+
+/**
+ * 练习答案提交结果
+ * @author zhiyong
+ *
+ */
+public class ExciseAnswerResult {
+	
+	private List<ExerciseAnswerData> answerResults;
+
+	public List<ExerciseAnswerData> getAnswerResults() {
+		return answerResults;
+	}
+
+	public void setAnswerResults(List<ExerciseAnswerData> answerResults) {
+		this.answerResults = answerResults;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java
new file mode 100644
index 0000000..82241c3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java
@@ -0,0 +1,50 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 练习 收藏 错题提交结果 V2.0
+ * @author zhiyong
+ *
+ */
+public class ExciseExtendReqData implements Serializable  {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2199951806284069255L;
+	
+
+	private String exerciseGroupId;
+	
+	private String exerciseGroupType;
+	
+	private List<ExerciseExtendRecordData> items;
+
+	public List<ExerciseExtendRecordData> getItems() {
+		return items;
+	}
+
+	public void setItems(List<ExerciseExtendRecordData> items) {
+		this.items = items;
+	}
+
+	public String getExerciseGroupType() {
+		return exerciseGroupType;
+	}
+
+	public void setExerciseGroupType(String exerciseGroupType) {
+		this.exerciseGroupType = exerciseGroupType;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java
new file mode 100644
index 0000000..4c36099
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java
@@ -0,0 +1,38 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 练习 收藏 错题提交结果 V2.0
+ * @author zhiyong
+ *
+ */
+public class ExciseExtendReqListData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6347329559819354186L;
+	
+	private String subjectId;
+	
+	private List<ExciseExtendReqData> datas;
+
+	public List<ExciseExtendReqData> getDatas() {
+		return datas;
+	}
+
+	public void setDatas(List<ExciseExtendReqData> datas) {
+		this.datas = datas;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java b/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java
new file mode 100644
index 0000000..841ad9e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java
@@ -0,0 +1,24 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.util.List;
+
+/**
+ * 练习 收藏 错题提交结果
+ * @author zhiyong
+ *
+ */
+public class ExciseExtendResult {
+	
+	private List<ExerciseExtendData> records;
+
+	public List<ExerciseExtendData> getRecords() {
+		return records;
+	}
+
+	public void setRecords(List<ExerciseExtendData> records) {
+		this.records = records;
+	}
+
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java
new file mode 100644
index 0000000..e143cf2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java
@@ -0,0 +1,370 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+/**
+ * 练习组题目返回数据  V2.0
+ * @author zhiyong
+ *
+ */
+public class ExerGroupResponseData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5268126429792723826L;
+	
+	
+	/**-----------------------练习组基本信息      */
+	/** 本套题目总数  */
+	private String groupId;
+	
+	/** 班级id  */
+	private String classId;
+	
+	/** 科目id  */
+	private String collegeCourseId;
+	
+	/** 机构id  */
+	private String orgId;
+	
+	/** 课程id  */
+	private String subjectId;
+	
+	/** 练习组名称  */
+	private String name;
+	
+	/** 练习组类型  */
+	private short type;
+	
+	/**练习时间  */
+	private String exerciseTime;
+	
+	/** 做题方式(1:未做题优先  2:错题优先) */
+	private String exerciseStrategy;
+	
+	/** 做题来源(1:练习题库  2:考试题库  3:家庭作业) */
+	private String exerciseSource;
+	
+	/** 做题模式(1:练习  2:考试) */
+	private String exerciseMode;
+	
+	/** 本套题目总数  */
+	private BigInteger allCount;
+	
+	/** 用于列表排序  */
+	private BigInteger orderNum;
+	
+	/** 题目更新时间  */
+	private Date updateTime;
+	
+	/** 最近一次提交答案的时间  */
+	private Date answerUpdateTime;
+	
+	/** 本套题错题本更新时间  */
+	private Date faultUpdateTime;
+	
+	/** 本套题收藏本更新时间  */
+	private Date favorUpdateTime;
+	
+	/** 本套题错题本个数 */
+	private BigInteger faultCount;
+	
+	/** 本套题收藏本个数  */
+	private BigInteger favorCount;
+	
+	/**-----------------------做题记录基本信息      */
+	
+	private String exerciseRecordId;
+	
+	/** 是否交卷  */
+	private String status;
+	
+	/** 当前做题序号  */
+	private String currTitleNumber;
+	
+	/** 本次习题已做的个数  */
+	private BigInteger doCount;
+	
+	/** 本次习题正确的个数  */
+	private BigInteger correctCount;
+	
+	/** 已提交人数  */
+	private BigInteger submitNumber;
+	
+	private BigDecimal completionRate;
+	
+	private BigDecimal accuracy;
+	
+	private BigDecimal score;
+
+	/** 错题本 收藏本总数  */
+	private BigInteger extendAllCount;
+	
+	/** 班级正确率 排名  */
+	private String classAccuracy;
+	
+	private String classRank;
+	
+	/** 是否可重做true 可以重做  false 不能 */
+	private boolean repeatFlag;
+	
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public Date getAnswerUpdateTime() {
+		return answerUpdateTime;
+	}
+
+	public void setAnswerUpdateTime(Date answerUpdateTime) {
+		this.answerUpdateTime = answerUpdateTime;
+	}
+
+	public BigInteger getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(BigInteger allCount) {
+		this.allCount = allCount;
+	}
+
+	public String getExerciseTime() {
+		return exerciseTime;
+	}
+
+	public void setExerciseTime(String exerciseTime) {
+		this.exerciseTime = exerciseTime;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getCurrTitleNumber() {
+		return currTitleNumber;
+	}
+
+	public void setCurrTitleNumber(String currTitleNumber) {
+		this.currTitleNumber = currTitleNumber;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public BigInteger getSubmitNumber() {
+		return submitNumber;
+	}
+
+	public void setSubmitNumber(BigInteger submitNumber) {
+		this.submitNumber = submitNumber;
+	}
+
+	public BigInteger getExtendAllCount() {
+		return extendAllCount;
+	}
+
+	public void setExtendAllCount(BigInteger extendAllCount) {
+		this.extendAllCount = extendAllCount;
+	}
+
+	public String getExerciseStrategy() {
+		return exerciseStrategy;
+	}
+
+	public void setExerciseStrategy(String exerciseStrategy) {
+		this.exerciseStrategy = exerciseStrategy;
+	}
+
+	public String getExerciseSource() {
+		return exerciseSource;
+	}
+
+	public void setExerciseSource(String exerciseSource) {
+		this.exerciseSource = exerciseSource;
+	}
+
+	public String getExerciseMode() {
+		return exerciseMode;
+	}
+
+	public void setExerciseMode(String exerciseMode) {
+		this.exerciseMode = exerciseMode;
+	}
+	
+	public String getClassAccuracy() {
+		return classAccuracy;
+	}
+
+	public void setClassAccuracy(String classAccuracy) {
+		this.classAccuracy = classAccuracy;
+	}
+
+	public String getClassRank() {
+		return classRank;
+	}
+
+	public void setClassRank(String classRank) {
+		this.classRank = classRank;
+	}
+
+	public boolean isRepeatFlag() {
+		return repeatFlag;
+	}
+
+	public void setRepeatFlag(boolean repeatFlag) {
+		this.repeatFlag = repeatFlag;
+	}
+
+	public Date getFaultUpdateTime() {
+		return faultUpdateTime;
+	}
+
+	public void setFaultUpdateTime(Date faultUpdateTime) {
+		this.faultUpdateTime = faultUpdateTime;
+	}
+
+	public Date getFavorUpdateTime() {
+		return favorUpdateTime;
+	}
+
+	public void setFavorUpdateTime(Date favorUpdateTime) {
+		this.favorUpdateTime = favorUpdateTime;
+	}
+
+	public BigInteger getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(BigInteger orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public BigInteger getFaultCount() {
+		return faultCount;
+	}
+
+	public void setFaultCount(BigInteger faultCount) {
+		this.faultCount = faultCount;
+	}
+
+	public BigInteger getFavorCount() {
+		return favorCount;
+	}
+
+	public void setFavorCount(BigInteger favorCount) {
+		this.favorCount = favorCount;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java
new file mode 100644
index 0000000..56c2c6c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 练习组题目返回数据 
+ * @author zhiyong
+ *
+ */
+public class ExerItemResponseData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5268126429792723826L;
+	
+	/** 练习题 */
+	private List<ExerciseItem> items;
+	
+	/** 个人答案*/
+	private List<ExerciseItemAnswerU> answers;
+	
+	/** 组id */
+	private String exerciseGroupId;
+	
+	/** 记录id */
+	private String exerciseRecordId;
+	
+	/** 答题状态 */
+	private String status;
+	
+	/** 返回结果  */
+	private Result result;
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public List<ExerciseItem> getItems() {
+		return items;
+	}
+
+	public void setItems(List<ExerciseItem> items) {
+		this.items = items;
+	}
+
+	public List<ExerciseItemAnswerU> getAnswers() {
+		return answers;
+	}
+
+	public void setAnswers(List<ExerciseItemAnswerU> answers) {
+		this.answers = answers;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public Result getResult() {
+		return result;
+	}
+
+	public void setResult(Result result) {
+		this.result = result;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java
new file mode 100644
index 0000000..163dfe7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java
@@ -0,0 +1,742 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+/**
+ * 后台添加练习参数
+ * @author zhiyong
+ *
+ */
+public class ExerciseAddItemParams implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+
+	/**  组id */
+	private String groupId;
+	
+	/**  练习id */
+	private String exerciseId;
+
+	/** 标题图片ids  */
+	private String title_imgsIds;
+
+	/** 标题  */
+	private String title;
+	
+	/** 分析   */
+	private String analysis;
+
+	/** 类型  */
+	private short type;
+	
+	/**  选项  */
+	private String optionA;
+	
+	/**  选项id   */
+	private String optionA_Id;
+	
+	/**  图片id集合  */
+	private String optionA_imgIds;
+	
+	/**  选项  */
+	private String optionB;
+	
+	/**  选项id   */
+	private String optionB_Id;
+	
+	/**  图片id集合  */
+	private String optionB_imgIds;
+	
+	/**  选项  */
+	private String optionC;
+	
+	/**  选项id   */
+	private String optionC_Id;
+	
+	/**  图片id集合  */
+	private String optionC_imgIds;
+	
+	/**  选项  */
+	private String optionD;
+	
+	/**  选项id   */
+	private String optionD_Id;
+	
+	/**  图片id集合  */
+	private String optionD_imgIds;
+	
+	/**  选项  */
+	private String optionE;
+	
+	/**  选项id   */
+	private String optionE_Id;
+	
+	/**  图片id集合  */
+	private String optionE_imgIds;
+	
+	/**  选项  */
+	private String optionF;
+	
+	/**  选项id   */
+	private String optionF_Id;
+	
+	/**  图片id集合  */
+	private String optionF_imgIds;
+	
+	/**  选项  */
+	private String optionG;
+	
+	/**  选项id   */
+	private String optionG_Id;
+	
+	/**  图片id集合  */
+	private String optionG_imgIds;
+	
+	/**  选项  */
+	private String optionH;
+	
+	/**  选项id   */
+	private String optionH_Id;
+	
+	/**  图片id集合  */
+	private String optionH_imgIds;
+	
+	/**  选项  */
+	private String optionI;
+	
+	/**  选项id   */
+	private String optionI_Id;
+	
+	/**  图片id集合  */
+	private String optionI_imgIds;
+	
+	/**  选项  */
+	private String optionJ;
+	
+	/**  选项id   */
+	private String optionJ_Id;
+	
+	/**  图片id集合  */
+	private String optionJ_imgIds;
+	
+	/**  选项  */
+	private String optionK;
+	
+	/**  选项id   */
+	private String optionK_Id;
+	
+	/**  图片id集合  */
+	private String optionK_imgIds;
+	
+	/**  选项  */
+	private String optionL;
+	
+	/**  选项id   */
+	private String optionL_Id;
+	
+	/**  图片id集合  */
+	private String optionL_imgIds;
+	
+	/**  选项  */
+	private String optionM;
+	
+	/**  选项id   */
+	private String optionM_Id;
+	
+	/**  图片id集合  */
+	private String optionM_imgIds;
+	
+	/**  选项  */
+	private String optionN;
+	
+	/**  选项id   */
+	private String optionN_Id;
+	
+	/**  图片id集合  */
+	private String optionN_imgIds;
+	
+	/**  选项  */
+	private String optionO;
+	
+	/**  选项id   */
+	private String optionO_Id;
+	
+	/**  图片id集合  */
+	private String optionO_imgIds;
+	
+	/**  选择A  */
+	private boolean checkA;
+	
+	/**  选择B  */
+	private boolean checkB;
+	
+	/**  选择C  */
+	private boolean checkC;
+	
+	/**  选择D  */
+	private boolean checkD;
+	
+	/**  选择E  */
+	private boolean checkE;
+	
+	/**  选择F */
+	private boolean checkF;
+	
+	/**  选择G  */
+	private boolean checkG;
+	
+	/**  选择H  */
+	private boolean checkH;
+	
+	/**  选择I  */
+	private boolean checkI;
+	
+	/**  选择J  */
+	private boolean checkJ;
+	
+	/**  选择K  */
+	private boolean checkK;
+	
+	/**  选择L */
+	private boolean checkL;
+	
+	/**  选择M  */
+	private boolean checkM;
+	
+	/**  选择N  */
+	private boolean checkN;
+	
+	/**  选择O  */
+	private boolean checkO;
+	
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public String getTitle_imgsIds() {
+		return title_imgsIds;
+	}
+
+	public void setTitle_imgsIds(String title_imgsIds) {
+		this.title_imgsIds = title_imgsIds;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getAnalysis() {
+		return analysis;
+	}
+
+	public void setAnalysis(String analysis) {
+		this.analysis = analysis;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getOptionA() {
+		return optionA;
+	}
+
+	public void setOptionA(String optionA) {
+		this.optionA = optionA;
+	}
+
+	public String getOptionA_Id() {
+		return optionA_Id;
+	}
+
+	public void setOptionA_Id(String optionA_Id) {
+		this.optionA_Id = optionA_Id;
+	}
+
+	public String getOptionA_imgIds() {
+		return optionA_imgIds;
+	}
+
+	public void setOptionA_imgIds(String optionA_imgIds) {
+		this.optionA_imgIds = optionA_imgIds;
+	}
+
+	public String getOptionB() {
+		return optionB;
+	}
+
+	public void setOptionB(String optionB) {
+		this.optionB = optionB;
+	}
+
+	public String getOptionB_Id() {
+		return optionB_Id;
+	}
+
+	public void setOptionB_Id(String optionB_Id) {
+		this.optionB_Id = optionB_Id;
+	}
+
+	public String getOptionB_imgIds() {
+		return optionB_imgIds;
+	}
+
+	public void setOptionB_imgIds(String optionB_imgIds) {
+		this.optionB_imgIds = optionB_imgIds;
+	}
+
+	public String getOptionC() {
+		return optionC;
+	}
+
+	public void setOptionC(String optionC) {
+		this.optionC = optionC;
+	}
+
+	public String getOptionC_Id() {
+		return optionC_Id;
+	}
+
+	public void setOptionC_Id(String optionC_Id) {
+		this.optionC_Id = optionC_Id;
+	}
+
+	public String getOptionC_imgIds() {
+		return optionC_imgIds;
+	}
+
+	public void setOptionC_imgIds(String optionC_imgIds) {
+		this.optionC_imgIds = optionC_imgIds;
+	}
+
+	public String getOptionD() {
+		return optionD;
+	}
+
+	public void setOptionD(String optionD) {
+		this.optionD = optionD;
+	}
+
+	public String getOptionD_Id() {
+		return optionD_Id;
+	}
+
+	public void setOptionD_Id(String optionD_Id) {
+		this.optionD_Id = optionD_Id;
+	}
+
+	public String getOptionD_imgIds() {
+		return optionD_imgIds;
+	}
+
+	public void setOptionD_imgIds(String optionD_imgIds) {
+		this.optionD_imgIds = optionD_imgIds;
+	}
+
+	public String getOptionE() {
+		return optionE;
+	}
+
+	public void setOptionE(String optionE) {
+		this.optionE = optionE;
+	}
+
+	public String getOptionE_Id() {
+		return optionE_Id;
+	}
+
+	public void setOptionE_Id(String optionE_Id) {
+		this.optionE_Id = optionE_Id;
+	}
+
+	public String getOptionE_imgIds() {
+		return optionE_imgIds;
+	}
+
+	public void setOptionE_imgIds(String optionE_imgIds) {
+		this.optionE_imgIds = optionE_imgIds;
+	}
+
+	public String getOptionF() {
+		return optionF;
+	}
+
+	public void setOptionF(String optionF) {
+		this.optionF = optionF;
+	}
+
+	public String getOptionF_Id() {
+		return optionF_Id;
+	}
+
+	public void setOptionF_Id(String optionF_Id) {
+		this.optionF_Id = optionF_Id;
+	}
+
+	public String getOptionF_imgIds() {
+		return optionF_imgIds;
+	}
+
+	public void setOptionF_imgIds(String optionF_imgIds) {
+		this.optionF_imgIds = optionF_imgIds;
+	}
+
+	public String getOptionG() {
+		return optionG;
+	}
+
+	public void setOptionG(String optionG) {
+		this.optionG = optionG;
+	}
+
+	public String getOptionG_Id() {
+		return optionG_Id;
+	}
+
+	public void setOptionG_Id(String optionG_Id) {
+		this.optionG_Id = optionG_Id;
+	}
+
+	public String getOptionG_imgIds() {
+		return optionG_imgIds;
+	}
+
+	public void setOptionG_imgIds(String optionG_imgIds) {
+		this.optionG_imgIds = optionG_imgIds;
+	}
+
+	public String getOptionH() {
+		return optionH;
+	}
+
+	public void setOptionH(String optionH) {
+		this.optionH = optionH;
+	}
+
+	public String getOptionH_Id() {
+		return optionH_Id;
+	}
+
+	public void setOptionH_Id(String optionH_Id) {
+		this.optionH_Id = optionH_Id;
+	}
+
+	public String getOptionH_imgIds() {
+		return optionH_imgIds;
+	}
+
+	public void setOptionH_imgIds(String optionH_imgIds) {
+		this.optionH_imgIds = optionH_imgIds;
+	}
+
+	public String getOptionI() {
+		return optionI;
+	}
+
+	public void setOptionI(String optionI) {
+		this.optionI = optionI;
+	}
+
+	public String getOptionI_Id() {
+		return optionI_Id;
+	}
+
+	public void setOptionI_Id(String optionI_Id) {
+		this.optionI_Id = optionI_Id;
+	}
+
+	public String getOptionI_imgIds() {
+		return optionI_imgIds;
+	}
+
+	public void setOptionI_imgIds(String optionI_imgIds) {
+		this.optionI_imgIds = optionI_imgIds;
+	}
+
+	public String getOptionJ() {
+		return optionJ;
+	}
+
+	public void setOptionJ(String optionJ) {
+		this.optionJ = optionJ;
+	}
+
+	public String getOptionJ_Id() {
+		return optionJ_Id;
+	}
+
+	public void setOptionJ_Id(String optionJ_Id) {
+		this.optionJ_Id = optionJ_Id;
+	}
+
+	public String getOptionJ_imgIds() {
+		return optionJ_imgIds;
+	}
+
+	public void setOptionJ_imgIds(String optionJ_imgIds) {
+		this.optionJ_imgIds = optionJ_imgIds;
+	}
+
+	public String getOptionK() {
+		return optionK;
+	}
+
+	public void setOptionK(String optionK) {
+		this.optionK = optionK;
+	}
+
+	public String getOptionK_Id() {
+		return optionK_Id;
+	}
+
+	public void setOptionK_Id(String optionK_Id) {
+		this.optionK_Id = optionK_Id;
+	}
+
+	public String getOptionK_imgIds() {
+		return optionK_imgIds;
+	}
+
+	public void setOptionK_imgIds(String optionK_imgIds) {
+		this.optionK_imgIds = optionK_imgIds;
+	}
+
+	public String getOptionL() {
+		return optionL;
+	}
+
+	public void setOptionL(String optionL) {
+		this.optionL = optionL;
+	}
+
+	public String getOptionL_Id() {
+		return optionL_Id;
+	}
+
+	public void setOptionL_Id(String optionL_Id) {
+		this.optionL_Id = optionL_Id;
+	}
+
+	public String getOptionL_imgIds() {
+		return optionL_imgIds;
+	}
+
+	public void setOptionL_imgIds(String optionL_imgIds) {
+		this.optionL_imgIds = optionL_imgIds;
+	}
+
+	public String getOptionM() {
+		return optionM;
+	}
+
+	public void setOptionM(String optionM) {
+		this.optionM = optionM;
+	}
+
+	public String getOptionM_Id() {
+		return optionM_Id;
+	}
+
+	public void setOptionM_Id(String optionM_Id) {
+		this.optionM_Id = optionM_Id;
+	}
+
+	public String getOptionM_imgIds() {
+		return optionM_imgIds;
+	}
+
+	public void setOptionM_imgIds(String optionM_imgIds) {
+		this.optionM_imgIds = optionM_imgIds;
+	}
+
+	public String getOptionN() {
+		return optionN;
+	}
+
+	public void setOptionN(String optionN) {
+		this.optionN = optionN;
+	}
+
+	public String getOptionN_Id() {
+		return optionN_Id;
+	}
+
+	public void setOptionN_Id(String optionN_Id) {
+		this.optionN_Id = optionN_Id;
+	}
+
+	public String getOptionN_imgIds() {
+		return optionN_imgIds;
+	}
+
+	public void setOptionN_imgIds(String optionN_imgIds) {
+		this.optionN_imgIds = optionN_imgIds;
+	}
+
+	public String getOptionO() {
+		return optionO;
+	}
+
+	public void setOptionO(String optionO) {
+		this.optionO = optionO;
+	}
+
+	public String getOptionO_Id() {
+		return optionO_Id;
+	}
+
+	public void setOptionO_Id(String optionO_Id) {
+		this.optionO_Id = optionO_Id;
+	}
+
+	public String getOptionO_imgIds() {
+		return optionO_imgIds;
+	}
+
+	public void setOptionO_imgIds(String optionO_imgIds) {
+		this.optionO_imgIds = optionO_imgIds;
+	}
+
+	public boolean getCheckA() {
+		return checkA;
+	}
+
+	public void setCheckA(boolean checkA) {
+		this.checkA = checkA;
+	}
+
+	public boolean getCheckB() {
+		return checkB;
+	}
+
+	public void setCheckB(boolean checkB) {
+		this.checkB = checkB;
+	}
+
+	public boolean getCheckC() {
+		return checkC;
+	}
+
+	public void setCheckC(boolean checkC) {
+		this.checkC = checkC;
+	}
+
+	public boolean getCheckD() {
+		return checkD;
+	}
+
+	public void setCheckD(boolean checkD) {
+		this.checkD = checkD;
+	}
+
+	public boolean getCheckE() {
+		return checkE;
+	}
+
+	public void setCheckE(boolean checkE) {
+		this.checkE = checkE;
+	}
+
+	public boolean getCheckF() {
+		return checkF;
+	}
+
+	public void setCheckF(boolean checkF) {
+		this.checkF = checkF;
+	}
+
+	public boolean getCheckG() {
+		return checkG;
+	}
+
+	public void setCheckG(boolean checkG) {
+		this.checkG = checkG;
+	}
+
+	public boolean getCheckH() {
+		return checkH;
+	}
+
+	public void setCheckH(boolean checkH) {
+		this.checkH = checkH;
+	}
+
+	public boolean getCheckI() {
+		return checkI;
+	}
+
+	public void setCheckI(boolean checkI) {
+		this.checkI = checkI;
+	}
+
+	public boolean getCheckJ() {
+		return checkJ;
+	}
+
+	public void setCheckJ(boolean checkJ) {
+		this.checkJ = checkJ;
+	}
+
+	public boolean getCheckK() {
+		return checkK;
+	}
+
+	public void setCheckK(boolean checkK) {
+		this.checkK = checkK;
+	}
+
+	public boolean getCheckL() {
+		return checkL;
+	}
+
+	public void setCheckL(boolean checkL) {
+		this.checkL = checkL;
+	}
+
+	public boolean getCheckM() {
+		return checkM;
+	}
+
+	public void setCheckM(boolean checkM) {
+		this.checkM = checkM;
+	}
+
+	public boolean getCheckN() {
+		return checkN;
+	}
+
+	public void setCheckN(boolean checkN) {
+		this.checkN = checkN;
+	}
+
+	public boolean getCheckO() {
+		return checkO;
+	}
+
+	public void setCheckO(boolean checkO) {
+		this.checkO = checkO;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java
new file mode 100644
index 0000000..edff45e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java
@@ -0,0 +1,169 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.List;
+
+/**
+ * 习题分析结果
+ * @author zhiyong
+ *
+ */
+public class ExerciseAnalisisResult implements Serializable  {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6958613163152616538L;
+	
+	/** 题目统计结果分析 ------------------------------------ */
+	/** 正确率 */
+	private BigDecimal allAccuracy;
+	/** 习题解析 */
+	private String analysis;
+	/** 习题提交总人数 */
+	private BigInteger submitAllNumber;
+	/** 易错答案 */
+	private String usualFaultAnswers;
+
+	/** 个人统计结果分析----------------------------------- */
+	/** 个人统计分析表id */
+	private String exerciseAnalisisUId;
+	/** 正确率 */
+	private BigDecimal accuracy;
+	/** 个人习题提交次数 */
+	private BigInteger submitNumber;
+	/** 个人习题错误次数 */
+	private BigInteger submitErrorNumber;
+	/** 此题的正确答案 */
+	private String correctAnswers;
+	
+	/** 做题当前题号  */
+	private String currTitleNumber;
+	
+	/** 是否交卷  */
+	private String isSubmitAnswer;
+	
+	/** 本次习题的正确率  */
+	private String exerAccuracy;
+	
+	/** 本次习题的正确个数  */
+	private String exerCorrectCount;
+	
+	/** 个人做题答案  */
+	private List<ExerciseItemAnswerU> answerU;
+	
+	public BigDecimal getAllAccuracy() {
+		return allAccuracy;
+	}
+
+	public void setAllAccuracy(BigDecimal allAccuracy) {
+		this.allAccuracy = allAccuracy;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public String getAnalysis() {
+		return analysis;
+	}
+
+	public void setAnalysis(String analysis) {
+		this.analysis = analysis;
+	}
+
+	public BigInteger getSubmitAllNumber() {
+		return submitAllNumber;
+	}
+
+	public void setSubmitAllNumber(BigInteger submitAllNumber) {
+		this.submitAllNumber = submitAllNumber;
+	}
+
+	public String getUsualFaultAnswers() {
+		return usualFaultAnswers;
+	}
+
+	public void setUsualFaultAnswers(String usualFaultAnswers) {
+		this.usualFaultAnswers = usualFaultAnswers;
+	}
+
+	public BigInteger getSubmitNumber() {
+		return submitNumber;
+	}
+
+	public void setSubmitNumber(BigInteger submitNumber) {
+		this.submitNumber = submitNumber;
+	}
+
+	public BigInteger getSubmitErrorNumber() {
+		return submitErrorNumber;
+	}
+
+	public void setSubmitErrorNumber(BigInteger submitErrorNumber) {
+		this.submitErrorNumber = submitErrorNumber;
+	}
+
+	public String getCorrectAnswers() {
+		return correctAnswers;
+	}
+
+	public void setCorrectAnswers(String correctAnswers) {
+		this.correctAnswers = correctAnswers;
+	}
+
+	public String getExerciseAnalisisUId() {
+		return exerciseAnalisisUId;
+	}
+
+	public void setExerciseAnalisisUId(String exerciseAnalisisUId) {
+		this.exerciseAnalisisUId = exerciseAnalisisUId;
+	}
+
+	public String getCurrTitleNumber() {
+		return currTitleNumber;
+	}
+
+	public void setCurrTitleNumber(String currTitleNumber) {
+		this.currTitleNumber = currTitleNumber;
+	}
+
+	public List<ExerciseItemAnswerU> getAnswerU() {
+		return answerU;
+	}
+
+	public void setAnswerU(List<ExerciseItemAnswerU> answerU) {
+		this.answerU = answerU;
+	}
+
+	public String getIsSubmitAnswer() {
+		return isSubmitAnswer;
+	}
+
+	public void setIsSubmitAnswer(String isSubmitAnswer) {
+		this.isSubmitAnswer = isSubmitAnswer;
+	}
+
+	public String getExerAccuracy() {
+		return exerAccuracy;
+	}
+
+	public void setExerAccuracy(String exerAccuracy) {
+		this.exerAccuracy = exerAccuracy;
+	}
+
+	public String getExerCorrectCount() {
+		return exerCorrectCount;
+	}
+
+	public void setExerCorrectCount(String exerCorrectCount) {
+		this.exerCorrectCount = exerCorrectCount;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java
new file mode 100644
index 0000000..a311272
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java
@@ -0,0 +1,214 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+/**
+ * 练习答案提交结果数据
+ * @author zhiyong
+ *
+ */
+public class ExerciseAnswerData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+	
+	/**   */
+	private String id;
+
+	/**   */
+	private String exerciseId;
+
+	/**   */
+	private String exerciseGroupId;
+
+	/**   */
+	private String exerciseRecordId;
+
+	/**   */
+	private String exerciseExtendId;
+
+	/**   */
+	private int type;
+
+	/**   */
+	private String exerciseType;
+
+	/**   */
+	private String answer;
+
+	/**   */
+	private String correct;
+
+	/**   */
+	private String titleMaxNum;
+
+	/**   */
+	private String userId;
+
+	/**   */
+	private String classId;
+
+	/**   */
+	private String currTitleNum;
+
+	/**   */
+	private String doTitleOrder;
+
+	/**   */
+	private String sumbitAnswer;
+
+	/**   */
+	private String accuracy;
+
+	/**   */
+	private String correctCount;
+
+	/**   */
+	private String doCount;
+	
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(String correct) {
+		this.correct = correct;
+	}
+
+	public String getTitleMaxNum() {
+		return titleMaxNum;
+	}
+
+	public void setTitleMaxNum(String titleMaxNum) {
+		this.titleMaxNum = titleMaxNum;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getCurrTitleNum() {
+		return currTitleNum;
+	}
+
+	public void setCurrTitleNum(String currTitleNum) {
+		this.currTitleNum = currTitleNum;
+	}
+
+	public String getDoTitleOrder() {
+		return doTitleOrder;
+	}
+
+	public void setDoTitleOrder(String doTitleOrder) {
+		this.doTitleOrder = doTitleOrder;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getExerciseExtendId() {
+		return exerciseExtendId;
+	}
+
+	public void setExerciseExtendId(String exerciseExtendId) {
+		this.exerciseExtendId = exerciseExtendId;
+	}
+
+	public String getSumbitAnswer() {
+		return sumbitAnswer;
+	}
+
+	public void setSumbitAnswer(String sumbitAnswer) {
+		this.sumbitAnswer = sumbitAnswer;
+	}
+
+	public String getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(String accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public String getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(String correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public String getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(String doCount) {
+		this.doCount = doCount;
+	}
+
+	public String getExerciseType() {
+		return exerciseType;
+	}
+
+	public void setExerciseType(String exerciseType) {
+		this.exerciseType = exerciseType;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java
new file mode 100644
index 0000000..7ff73f1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java
@@ -0,0 +1,233 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+
+
+/**
+ * 章节表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="exercise_chapter")
+@NamedQuery(name="ExerciseChapter.findAll", query="SELECT e FROM ExerciseChapter e")
+public class ExerciseChapter implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 主键:章节ID  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CHAPTER_ID", unique=true, nullable=false, length=32)
+	private String chapterId;
+
+	/** 编码  */
+	@Column(name="CODE", length=64)
+	private String code;
+
+	/** 创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建者  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	/**  班级课表ID */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+	
+	/**  班级课程ID */
+	@Column(name="CLASS_SUBJECT_ID", length=32)
+	private String classSubjectId;
+
+	/**  父章节ID */
+	@Column(name="PARENT_CHAPTER_ID", length=32)
+	private String parentChapterId;
+
+	/**  标题 */
+	@Column(name="TITLE", length=150)
+	private String title;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**   */
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "chapter")
+	@JsonIgnore
+	private List<ExerciseItem> exerciseItems;
+
+	/**   */
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "CLASS_SCHEDULE_ID",referencedColumnName="CLASS_SCHEDULE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private SchClassSchedule classSchedules;
+
+	public String getClassSubjectId() {
+		return classSubjectId;
+	}
+
+	public void setClassSubjectId(String classSubjectId) {
+		this.classSubjectId = classSubjectId;
+	}
+
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getParentChapterId() {
+		return this.parentChapterId;
+	}
+
+	public void setParentChapterId(String parentChapterId) {
+		this.parentChapterId = parentChapterId;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<ExerciseItem> getExerciseItems() {
+		return exerciseItems;
+	}
+
+	public void setExerciseItems(List<ExerciseItem> exerciseItems) {
+		this.exerciseItems = exerciseItems;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public SchClassSchedule getClassSchedules() {
+		return classSchedules;
+	}
+
+	public void setClassSchedules(SchClassSchedule classSchedules) {
+		this.classSchedules = classSchedules;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java
new file mode 100644
index 0000000..1b4b252
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java
@@ -0,0 +1,445 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the exercise_complete_info database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_complete_info")
+@NamedQuery(name="ExerciseCompleteInfo.findAll", query="SELECT e FROM ExerciseCompleteInfo e")
+public class ExerciseCompleteInfo implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	/*
+	 * 0:草稿,未交作业  1:已提交作业,待批阅  2:已批阅  3:需重写 重写完后重新提交状态变为 1
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	public static final short STATUS_COMMIT = 1;
+	
+	public static final short STATUS_CHECKED = 2;
+	
+	public static final short STATUS_REDO = 3;
+	
+	
+	/**
+	 * 作业是否可预览
+	 */
+	public static final short PREVIEW_STATUS_NO = 0;
+	
+	public static final short PREVIEW_STATUS_OK = 1;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_COMPLETE_ID", unique=true,nullable=false, length=32)
+	private String exerciseCompleteId;
+	
+	@Column(name="EXERCISE_INFO_ID")
+	private String exerciseInfoId;
+
+	@Column(name="TEACHER_ID")
+	private String teacherId;
+
+	@Column(name="TEACHER_NAME")
+	private String teacherName;
+
+	@Column(name="TEACHER_COMMENT")
+	private String teacherComment;
+	
+	@Column(name="CLASS_ID")
+	private String classId;
+	
+	//TODO:需要修改数据库数据类型
+	@Column(name="STUDENT_SCORE")
+	private BigDecimal studentScore;
+	
+	@Column(name="COMPLETE_STATUS")
+	private short completeStatus;
+
+	@Column(name="STUDENT_ID")
+	private String studentId;
+	
+	@Column(name="STUDENT_NO")
+	private String studentNo;
+	
+	@Column(name="STUDENT_USER_ID")
+	private String studentUserId;
+	
+	@Column(name="STUDENT_USER_NAME")
+	private String studentUserName;
+	
+	@Column(name="TARGET_OBJECT_ID")
+	private String targetObjectId;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	@Column(name="SUBMIT_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="FILE_ID")
+	private String fileId;
+	
+	@Column(name="FILE_PATH")
+	private String filePath;
+	
+	@Column(name="CLASS_NAME")
+	private String className;
+	
+	@Column(name="UPLOAD_DESC")
+	private String uploadDesc;
+	
+	@Transient
+	private String exerciseName;
+	
+	@Transient
+	private String remind;
+	
+	@Transient
+	private short exerciseType;
+	
+	@Transient
+	private short commitUploadType;
+	
+	
+	@Transient
+	private Double totalScore;
+
+	@Transient
+	private String content;
+	
+	@Transient
+	private short transStatus;
+	
+	@Transient
+	private String previewPath;
+	
+	@Transient
+	private String orgiFileName;
+	
+	public String getOrgiFileName() {
+		return orgiFileName;
+	}
+
+	public void setOrgiFileName(String orgiFileName) {
+		this.orgiFileName = orgiFileName;
+	}
+
+	public short getTransStatus() {
+		return transStatus;
+	}
+
+	public void setTransStatus(short transStatus) {
+		this.transStatus = transStatus;
+	}
+
+	public String getPreviewPath() {
+		return previewPath;
+	}
+
+	public void setPreviewPath(String previewPath) {
+		this.previewPath = previewPath;
+	}
+
+	public short getCommitUploadType() {
+		return commitUploadType;
+	}
+
+	public void setCommitUploadType(short commitUploadType) {
+		this.commitUploadType = commitUploadType;
+	}
+
+	public String getClassId(){
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public ExerciseCompleteInfo() {
+	}
+	
+	public String getStudentNo() {
+		return studentNo;
+	}
+
+	public void setStudentNo(String studentNo) {
+		this.studentNo = studentNo;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getExerciseCompleteId() {
+		return this.exerciseCompleteId;
+	}
+
+	public void setExerciseCompleteId(String exerciseCompleteId) {
+		this.exerciseCompleteId = exerciseCompleteId;
+	}
+
+	public String getTargetObjectId() {
+		return this.targetObjectId;
+	}
+
+	public void setTargetObjectId(String targetObjectId) {
+		this.targetObjectId = targetObjectId;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public String getTeacherComment() {
+		return teacherComment;
+	}
+
+	public void setTeacherComment(String teacherComment) {
+		this.teacherComment = teacherComment;
+	}
+
+	public short getCompleteStatus() {
+		return completeStatus;
+	}
+
+	public void setCompleteStatus(short completeStatus) {
+		this.completeStatus = completeStatus;
+	}
+
+	public String getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getStudentUserId() {
+		return studentUserId;
+	}
+
+	public void setStudentUserId(String studentUserId) {
+		this.studentUserId = studentUserId;
+	}
+
+	public String getStudentUserName() {
+		return studentUserName;
+	}
+
+	public void setStudentUserName(String studentUserName) {
+		this.studentUserName = studentUserName;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public String getFilePath() {
+		return filePath;
+	}
+
+	public void setFilePath(String filePath) {
+		this.filePath = filePath;
+	}
+
+	public String getExerciseInfoId() {
+		return exerciseInfoId;
+	}
+
+	public void setExerciseInfoId(String exerciseInfoId) {
+		this.exerciseInfoId = exerciseInfoId;
+	}
+
+	public String getFileId() {
+		return fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	public String getExerciseName() {
+		return exerciseName;
+	}
+
+	public void setExerciseName(String exerciseName) {
+		this.exerciseName = exerciseName;
+	}
+
+	public BigDecimal getStudentScore() {
+		return studentScore;
+	}
+
+	public void setStudentScore(BigDecimal studentScore) {
+		this.studentScore = studentScore;
+	}
+
+	public String getUploadDesc() {
+		return uploadDesc;
+	}
+
+	public void setUploadDesc(String uploadDesc) {
+		this.uploadDesc = uploadDesc;
+	}
+
+	public short getExerciseType() {
+		return exerciseType;
+	}
+
+	public void setExerciseType(short exerciseType) {
+		this.exerciseType = exerciseType;
+	}
+
+	public String getRemind() {
+		return remind;
+	}
+
+	public void setRemind(String remind) {
+		this.remind = remind;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public Double getTotalScore() {
+		return totalScore;
+	}
+
+	public void setTotalScore(Double totalScore) {
+		this.totalScore = totalScore;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java
new file mode 100644
index 0000000..f68750e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java
@@ -0,0 +1,287 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 纠错表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="exercise_correction")
+@NamedQuery(name="ExerciseCorrection.findAll", query="SELECT e FROM ExerciseCorrection e")
+public class ExerciseCorrection implements Serializable,ITrace{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/** 未处理状态码 */
+	public static final short DEAL_STATUS_TODO = 0;
+	
+	/** 处理状态码 */
+	public static final short DEAL_STATUS_DONE = 1;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_CORRECTION_ID", unique=true,nullable=false, length=32)
+	private String exerciseCorrectionId;
+
+	/**  习题组ID */
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String  exerciseGroupId;
+
+	/**  习题组名 */
+	@Column(name="EXERCISE_GROUP_NAME",nullable=false,length=128)
+	private String exerciseGroupName;
+
+	/**  习题ID */
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	/**  习题序号 */
+	@Column(name="EXERCISE_ITEM_ORDER", length=20)
+	private String exerciseItemOrder;
+
+	/**  错误类型ID */
+	@Column(name="ERROR_TYPE_ID", length=128)
+	private String errorTypeId;
+
+	/**  错误类型名称 */
+	@Column(name="ERROR_TYPE_NAME", length=128)
+	private String errorTypeName;
+
+	/**  备注 */
+	@Column(name="REMARK",length=500)
+	private String remark; 
+
+	/**  纠错提交人ID */
+	@Column(name="SUBMIT_USER_ID", length=32)
+	private String submitUserId;
+
+	/**  纠错提交人 */
+	@Column(name="SUBMIT_USER_NAME", length=32)
+	private String submitUserName;
+
+	/**  纠错提交时间 */
+	@Column(name="SUBMIT_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+
+	/**  处理状态 */
+	@Column(name="DEAL_STATUS",length=6)
+	private Short dealStatus;
+
+	/**  班级ID */
+	@Column(name="CLASS_ID", nullable=false, length=32)
+	private String classId;
+
+	/**  创建时间 */
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	private Date createTime;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false,length=6)
+	private boolean deleteFlag;
+
+	/** 修改时间  */
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	private Date updateTime;
+
+	/** 创建人  */
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	/** 创建人ID  */
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	private String createId;
+
+	/**  修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/**  修改者ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	public String getExerciseCorrectionId() {
+		return exerciseCorrectionId;
+	}
+
+	public void setExerciseCorrectionId(String exerciseCorrectionId) {
+		this.exerciseCorrectionId = exerciseCorrectionId;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getExerciseGroupName() {
+		return exerciseGroupName;
+	}
+
+	public void setExerciseGroupName(String exerciseGroupName) {
+		this.exerciseGroupName = exerciseGroupName;
+	}
+
+	public String getExerciseItemId() {
+		return exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getExerciseItemOrder() {
+		return exerciseItemOrder;
+	}
+
+	public void setExerciseItemOrder(String exerciseItemOrder) {
+		this.exerciseItemOrder = exerciseItemOrder;
+	}
+
+	public String getErrorTypeId() {
+		return errorTypeId;
+	}
+
+	public void setErrorTypeId(String errorTypeId) {
+		this.errorTypeId = errorTypeId;
+	}
+
+	public String getErrorTypeName() {
+		return errorTypeName;
+	}
+
+	public void setErrorTypeName(String errorTypeName) {
+		this.errorTypeName = errorTypeName;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getSubmitUserId() {
+		return submitUserId;
+	}
+
+	public void setSubmitUserId(String submitUserId) {
+		this.submitUserId = submitUserId;
+	}
+
+	public String getSubmitUserName() {
+		return submitUserName;
+	}
+
+	public void setSubmitUserName(String submitUserName) {
+		this.submitUserName = submitUserName;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public Short getDealStatus() {
+		return dealStatus;
+	}
+
+	public void setDealStatus(Short dealStatus) {
+		this.dealStatus = dealStatus;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java
new file mode 100644
index 0000000..19c12d2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java
@@ -0,0 +1,139 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 练习纠错 图片表  实体
+ * @author alger
+ *
+ */
+@Entity
+@Table(name="EXERCISE_CORRECTION_IMG")
+@NamedQuery(name="ExerciseCorrectionImg.findAll",query="SELECT e FROM ExerciseCorrectionImg e")
+public class ExerciseCorrectionImg implements Serializable,ITrace {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CORRECTION_IMG_ID", unique=true, nullable=false, length=32)
+	private String correctionImgId;
+
+	/** 纠错ID  */
+	@Column(name="EXERCISE_CORRECTION",nullable=false, length=32)
+	@JsonIgnore
+	private String exercisecorrectionId;
+
+	/** 图片路径  */
+	@Column(name="IMG_PATH",nullable=false, length=32)
+	@JsonIgnore
+	private String imgPath;
+
+	/** 图片顺序  */
+	@Column(name="IMG_ORDER",nullable=false, length=32)
+	@JsonIgnore
+	private String imgOrper;
+
+	
+	public String getCorrectionImgId() {
+		return correctionImgId;
+	}
+	public void setCorrectionImgId(String correctionImgId) {
+		this.correctionImgId = correctionImgId;
+	}
+	public String getExercisecorrectionId() {
+		return exercisecorrectionId;
+	}
+	public void setExercisecorrectionId(String exercisecorrectionId) {
+		this.exercisecorrectionId = exercisecorrectionId;
+	}
+	public String getImgPath() {
+		return imgPath;
+	}
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+	public String getImgOrper() {
+		return imgOrper;
+	}
+	public void setImgOrper(String imgOrper) {
+		this.imgOrper = imgOrper;
+	}
+	public static long getSerialversionuid() {
+		return serialVersionUID;
+	}
+	@Override
+	public String getCreateId() {
+		return null;
+	}
+	@Override
+	public void setCreateId(String createId) {
+		
+		
+	}
+	@Override
+	public Date getCreateTime() {
+		
+		return null;
+	}
+	@Override
+	public void setCreateTime(Date createTime) {	
+	}
+	@Override
+	public String getCreator() {
+		return null;
+	}
+	@Override
+	public void setCreator(String creator) {
+		
+	}
+	@Override
+	public boolean getDeleteFlag() {
+		return false;
+	}
+	@Override
+	public void setDeleteFlag(boolean deleteFlag) {
+	}
+	@Override
+	public String getUpdateId() {
+		return null;
+	}
+	@Override
+	public void setUpdateId(String updateId) {
+		
+	}
+	@Override
+	public Date getUpdateTime() {
+		return null;
+	}
+	@Override
+	public void setUpdateTime(Date updateTime) {
+		
+	}
+	@Override
+	public String getUpdator() {
+		return null;
+	}
+	@Override
+	public void setUpdator(String updator) {
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java
new file mode 100644
index 0000000..bd45415
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 纠错结果
+ * @author ody.yuan
+ *
+ */
+public class ExerciseCorrectionResult  implements Serializable {
+		
+	
+	/**
+	 *  ExerciseCorrection和ExerciseItem 数据集
+	 */
+	private static final long serialVersionUID = -7981226595598231398L;
+
+	private List<ExerciseCorrection> lstExerciseCorrection;
+	
+	private ExerciseItem exerciseItem;
+
+	public List<ExerciseCorrection> getLstExerciseCorrection() {
+		return lstExerciseCorrection;
+	}
+
+	public void setLstExerciseCorrection(
+			List<ExerciseCorrection> lstExerciseCorrection) {
+		this.lstExerciseCorrection = lstExerciseCorrection;
+	}
+
+	public ExerciseItem getExerciseItem() {
+		return exerciseItem;
+	}
+
+	public void setExerciseItem(ExerciseItem exerciseItem) {
+		this.exerciseItem = exerciseItem;
+	}
+	
+	
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java
new file mode 100644
index 0000000..631cea0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java
@@ -0,0 +1,142 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+
+/**
+ * app端做题答案提交数据格式
+ * The persistent class for the exercise_data_submit_log database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_data_submit_log")
+@NamedQuery(name="ExerciseDataSubmitLog.findAll", query="SELECT e FROM ExerciseDataSubmitLog e")
+public class ExerciseDataSubmitLog implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_DATA_LOG_ID", unique=true, nullable=false, length=32)
+	private String exerciseDataLogId;
+
+	@Column(name="EXERCISE_BUSSINESS_ID", length=32)
+	private String exerciseBussinessId;
+
+	@Column(name="data")
+	private String data;
+
+	@Column(name="TYPE")
+	private short type;
+	
+
+	/** 日志类型(1,提交做题答案(错题、收藏除外); 2,提交做题答案(错题、收藏); */
+	
+	public final static short TYPE_SUBMIT_ANSWER = 1;
+	
+	public final static short TYPE_SUBMIT_EXTEND_ANSWER = 2;
+	
+	@Column(name="STATUS")
+	private int status;
+	
+	public final static int STATUS_SUCCESS = 0;
+	
+	public final static int STATUS_FAILED = 1;
+	
+	@Column(name="URL")
+	private String url;
+	
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getExerciseDataLogId() {
+		return exerciseDataLogId;
+	}
+
+	public void setExerciseDataLogId(String exerciseDataLogId) {
+		this.exerciseDataLogId = exerciseDataLogId;
+	}
+	
+	public String getData() {
+		return data;
+	}
+
+	public void setData(String data) {
+		this.data = data;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getExerciseBussinessId() {
+		return exerciseBussinessId;
+	}
+
+	public void setExerciseBussinessId(String exerciseBussinessId) {
+		this.exerciseBussinessId = exerciseBussinessId;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java
new file mode 100644
index 0000000..3f11af6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java
@@ -0,0 +1,318 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 练习导入深度解析表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="exercise_deep_analysis")
+@NamedQuery(name="ExerciseDeepAnalysis.findAll", query="SELECT e FROM ExerciseDeepAnalysis e")
+public class ExerciseDeepAnalysis implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="DEEP_ANALYSIS_ID", unique=true, nullable=false, length=32)
+	private String deepAnalysisId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/** 创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  修改人ID */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  练习组ID */
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+
+	/**  联系组名称 */
+	@Column(name="EXERCISE_GROUP_NAME", length=128)
+	private String exerciseGroupName;
+
+	/** 机构ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	/**  机构名称 */
+	@Column(name="ORG_NAME", length=150)
+	private String orgName;
+
+	/**  班级 */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/** 班级名称  */
+	@Column(name="CLASS_NAME", length=255)
+	private String className;
+
+	/** 班主任ID  */
+	@Column(name="CHARGER_ID", length=32)
+	private String chargerId;
+
+	/** 班主任 */
+	@Column(name="CHARGER_NAME", length=150)
+	private String chargerName;
+
+	/** 提交用户ID  */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	/** 提交用户账号  */
+	@Column(name="USER_ACCOUNT", length=64)
+	private String userAccount;
+
+	/** 文档路径  */
+	@Column(name="DOC_PATH", length=255)
+	private String docPath;
+
+	/** 处理状态  */
+	@Column(name="STATUS")
+	private Short status;
+
+	/** 提交时间  */
+	@Column(name="SUBMIT_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+
+	/** 处理时间 */
+	@Column(name="HANDLE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date handleTime;
+	
+	// 未处理
+	public static final short STATUS_TODO = 0;
+	
+	// 已处理
+	public static final short STATUS_DONE = 1;
+
+	public String getDeepAnalysisId() {
+		return deepAnalysisId;
+	}
+
+	public void setDeepAnalysisId(String deepAnalysisId) {
+		this.deepAnalysisId = deepAnalysisId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getExerciseGroupName() {
+		return exerciseGroupName;
+	}
+
+	public void setExerciseGroupName(String exerciseGroupName) {
+		this.exerciseGroupName = exerciseGroupName;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getChargerId() {
+		return chargerId;
+	}
+
+	public void setChargerId(String chargerId) {
+		this.chargerId = chargerId;
+	}
+
+	public String getChargerName() {
+		return chargerName;
+	}
+
+	public void setChargerName(String chargerName) {
+		this.chargerName = chargerName;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getDocPath() {
+		return docPath;
+	}
+
+	public void setDocPath(String docPath) {
+		this.docPath = docPath;
+	}
+
+	public Short getStatus() {
+		return status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public Date getHandleTime() {
+		return handleTime;
+	}
+
+	public void setHandleTime(Date handleTime) {
+		this.handleTime = handleTime;
+	}
+
+	public String getUserAccount() {
+		return userAccount;
+	}
+
+	public void setUserAccount(String userAccount) {
+		this.userAccount = userAccount;
+	}
+	
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamItemType.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamItemType.java
new file mode 100644
index 0000000..b3f815f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamItemType.java
@@ -0,0 +1,206 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_exam_item_types database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_exam_item_types")
+@NamedQuery(name="ExerciseExamItemType.findAll", query="SELECT e FROM ExerciseExamItemType e")
+public class ExerciseExamItemType implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="type_id")
+	private String typeId;
+	
+	@Column(name="blank_score")
+	private Double blankScore = 0.0; 
+
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	@JsonIgnore
+	private String creator;
+
+	@JsonIgnore
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="half_right_score")
+	private Double halfRightScore = 0.0;
+
+	@Column(name="item_count")
+	private int itemCount = 0;
+
+	@Column(name="item_type")
+	private short itemType = 0;
+
+	@Column(name="right_score")
+	private Double rightScore = 0.0;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name="wrong_score")
+	private Double wrongScore = 0.0;
+	
+	@Column(name="exam_id")
+	private String examId;
+
+	public String getExamId() {
+		return examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public ExerciseExamItemType() {
+	}
+
+	public Double getBlankScore() {
+		return this.blankScore;
+	}
+
+	public void setBlankScore(Double blankScore) {
+		this.blankScore = blankScore;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Double getHalfRightScore() {
+		return halfRightScore;
+	}
+
+	public void setHalfRightScore(Double halfRightScore) {
+		this.halfRightScore = halfRightScore;
+	}
+
+	public int getItemCount() {
+		return this.itemCount;
+	}
+
+	public void setItemCount(int itemCount) {
+		this.itemCount = itemCount;
+	}
+
+	public short getItemType() {
+		return this.itemType;
+	}
+
+	public void setItemType(short itemType) {
+		this.itemType = itemType;
+	}
+
+	public Double getRightScore() {
+		return this.rightScore;
+	}
+
+	public void setRightScore(Double rightScore) {
+		this.rightScore = rightScore;
+	}
+
+	public String getTypeId() {
+		return this.typeId;
+	}
+
+	public void setTypeId(String typeId) {
+		this.typeId = typeId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Double getWrongScore() {
+		return this.wrongScore;
+	}
+
+	public void setWrongScore(Double wrongScore) {
+		this.wrongScore = wrongScore;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReClass.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReClass.java
new file mode 100644
index 0000000..b48d487
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReClass.java
@@ -0,0 +1,188 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_exam_re_class database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_exam_re_class")
+@NamedQuery(name="ExerciseExamReClass.findAll", query="SELECT e FROM ExerciseExamReClass e")
+public class ExerciseExamReClass implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="re_id")
+	private String reId;
+	
+	@Column(name="class_id")
+	private String classId;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="exam_id")
+	private String examId;
+
+	@Column(name="group_id")
+	private String groupId;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXAM_ID",referencedColumnName="EXERCISE_INFO_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseInfo exerciseInfo;
+	
+	@Transient
+	private String className;
+	
+	public ExerciseExamReClass() {
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public ExerciseInfo getExerciseInfo() {
+		return exerciseInfo;
+	}
+
+	public void setExerciseInfo(ExerciseInfo exerciseInfo) {
+		this.exerciseInfo = exerciseInfo;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExamId() {
+		return this.examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getReId() {
+		return this.reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java
new file mode 100644
index 0000000..18c46a3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java
@@ -0,0 +1,198 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_exam_re_class database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_exam_re_group")
+@NamedQuery(name="ExerciseExamReGroup.findAll", query="SELECT e FROM ExerciseExamReGroup e")
+public class ExerciseExamReGroup implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	//试卷类型
+	public static final String EXAM_TYPE_A = "A";
+	public static final String EXAM_TYPE_B = "B";
+	public static final String EXAM_TYPE_C = "C";
+	public static final String EXAM_TYPE_D = "D";
+	
+	//关联类型
+	public static final short GROUP_TYPE_SOURCE = 1;
+	public static final short GROUP_TYPE_EXAM = 2;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="re_id")
+	private String reId;
+	
+	private short type;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="exam_id")
+	private String examId;
+
+	@Column(name="group_id")
+	private String groupId;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+	
+	@Column(name="EXAM_TYPE")
+	private String examType;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXAM_ID",referencedColumnName="EXERCISE_INFO_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseInfo exerciseInfo;
+
+	public ExerciseExamReGroup() {
+	}
+
+	
+	
+	
+	public String getExamType() {
+		return examType;
+	}
+
+	public void setExamType(String examType) {
+		this.examType = examType;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExamId() {
+		return this.examId;
+	}
+
+	public void setExamId(String examId) {
+		this.examId = examId;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getReId() {
+		return this.reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public ExerciseInfo getExerciseInfo() {
+		return exerciseInfo;
+	}
+
+	public void setExerciseInfo(ExerciseInfo exerciseInfo) {
+		this.exerciseInfo = exerciseInfo;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java
new file mode 100644
index 0000000..08da04a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java
@@ -0,0 +1,96 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+/**
+ * 练习 收藏 错题结果数据
+ * @author zhiyong
+ *
+ */
+public class ExerciseExtendData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+	
+	private String id;
+	
+	private String exerciseId;
+	
+	private String userId;
+	
+	private String classId;
+	
+	private boolean favor;
+	
+	private boolean fault;
+	
+	private String answer;
+	
+	private String currTitleNum;
+
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public boolean isFavor() {
+		return favor;
+	}
+
+	public void setFavor(boolean favor) {
+		this.favor = favor;
+	}
+
+	public boolean isFault() {
+		return fault;
+	}
+
+	public void setFault(boolean fault) {
+		this.fault = fault;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getCurrTitleNum() {
+		return currTitleNum;
+	}
+
+	public void setCurrTitleNum(String currTitleNum) {
+		this.currTitleNum = currTitleNum;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java
new file mode 100644
index 0000000..dea83b9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java
@@ -0,0 +1,36 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+/**
+ * 练习 收藏 错题结果数据
+ * @author zhiyong
+ *
+ */
+public class ExerciseExtendRecordData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+	
+	private String exerciseId;
+	
+	private boolean flag;
+	
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public boolean getFlag() {
+		return flag;
+	}
+
+	public void setFlag(boolean flag) {
+		this.flag = flag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFault.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFault.java
new file mode 100644
index 0000000..5b081de
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFault.java
@@ -0,0 +1,229 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_fault database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_fault")
+@NamedQuery(name="ExerciseFault.findAll", query="SELECT e FROM ExerciseFault e")
+public class ExerciseFault implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_FAULT_ID", unique=true, nullable=false, length=32)
+	private String exerciseFaultId;
+	
+	@Column(name="ANSWER", length=128)
+	private String answer;
+
+	@Column(name="CORRECT", length=1)
+	private byte correct;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=50)
+	private String exerciseItemId;
+
+	@Column(name="REPEAT_FLAG")
+	private byte repeatFlag;
+
+	@Column(name="RESUME_BOOK_ID", length=32)
+	private String resumeBookId;
+	
+	@Column(name="FAULT_RECORD_ID", length=32)
+	private String faultRecordId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "RESUME_BOOK_ID", referencedColumnName="RESUME_BOOK_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFaultBook faultBook;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "FAULT_RECORD_ID", referencedColumnName="FAULT_RECORD_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFaultRecord faultRecord;
+	
+	public ExerciseFault() {
+	}
+
+	public String getExerciseFaultId() {
+		return this.exerciseFaultId;
+	}
+
+	public void setExerciseFaultId(String exerciseFaultId) {
+		this.exerciseFaultId = exerciseFaultId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public byte getRepeatFlag() {
+		return this.repeatFlag;
+	}
+
+	public void setRepeatFlag(byte repeatFlag) {
+		this.repeatFlag = repeatFlag;
+	}
+
+	public String getResumeBookId() {
+		return this.resumeBookId;
+	}
+
+	public void setResumeBookId(String resumeBookId) {
+		this.resumeBookId = resumeBookId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public ExerciseFaultBook getFaultBook() {
+		return faultBook;
+	}
+
+	public void setFaultBook(ExerciseFaultBook faultBook) {
+		this.faultBook = faultBook;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public byte getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(byte correct) {
+		this.correct = correct;
+	}
+
+	public String getFaultRecordId() {
+		return faultRecordId;
+	}
+
+	public void setFaultRecordId(String faultRecordId) {
+		this.faultRecordId = faultRecordId;
+	}
+
+	public ExerciseFaultRecord getFaultRecord() {
+		return faultRecord;
+	}
+
+	public void setFaultRecord(ExerciseFaultRecord faultRecord) {
+		this.faultRecord = faultRecord;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java
new file mode 100644
index 0000000..c87bd2c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java
@@ -0,0 +1,343 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_fault_book database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_fault_book")
+@NamedQuery(name="ExerciseFaultBook.findAll", query="SELECT e FROM ExerciseFaultBook e")
+public class ExerciseFaultBook implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RESUME_BOOK_ID", unique=true, nullable=false, length=32)
+	private String resumeBookId;
+
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** 当前做题最大题号  */
+	@Column(name="TITLE_MAX_NUMBER", length=32)
+	private String titleMaxNumber;
+	
+	@Column(name="ACCURACY", precision=10, scale=2)
+	private BigDecimal accuracy;
+	
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	/** 题目总数  */
+	@Column(name="ALL_COUNT")
+	private BigInteger allCount;
+
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="TYPE", length=32)
+	private short type;
+	
+	/**类型           机构:1    高校:2 */
+	public static final short TYPE_ORGANIZATION = 1;
+	
+	public static final short TYPE_COLLEGE = 2;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+	
+	@Column(name="STATUS", length=32)
+	private String status;
+	
+	@Column(name="COMPLETION_RATE", precision=10, scale=2)
+	private BigDecimal completionRate;
+
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+	
+	@Column(name="PARENT_ID", length=32)
+	private String parentId;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "faultBook")
+	@JsonIgnore 
+	private List<ExerciseFault> faults;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "faultBook")
+	@JsonIgnore 
+	private List<ExerciseFaultRecord> faultRecords;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "faultBook")
+	@JsonIgnore 
+	private List<ExerciseFaultHis> faultHis;
+	
+	public List<ExerciseFault> getFaults() {
+		return faults;
+	}
+
+	public void setFaults(List<ExerciseFault> faults) {
+		this.faults = faults;
+	}
+
+	public String getResumeBookId() {
+		return this.resumeBookId;
+	}
+
+	public void setResumeBookId(String resumeBookId) {
+		this.resumeBookId = resumeBookId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getTitleMaxNumber() {
+		return titleMaxNumber;
+	}
+
+	public void setTitleMaxNumber(String titleMaxNumber) {
+		this.titleMaxNumber = titleMaxNumber;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public BigInteger getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(BigInteger allCount) {
+		this.allCount = allCount;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+	
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public List<ExerciseFaultRecord> getFaultRecords() {
+		return faultRecords;
+	}
+
+	public void setFaultRecords(List<ExerciseFaultRecord> faultRecords) {
+		this.faultRecords = faultRecords;
+	}
+
+	public List<ExerciseFaultHis> getFaultHis() {
+		return faultHis;
+	}
+
+	public void setFaultHis(List<ExerciseFaultHis> faultHis) {
+		this.faultHis = faultHis;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultHis.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultHis.java
new file mode 100644
index 0000000..856435b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultHis.java
@@ -0,0 +1,213 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_fault_his database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_fault_his")
+@NamedQuery(name="ExerciseFaultHis.findAll", query="SELECT e FROM ExerciseFaultHis e")
+public class ExerciseFaultHis implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_FAULT_HIS_ID", unique=true, nullable=false, length=32)
+	private String exerciseFaultHisId;
+	
+	@Column(name="EXERCISE_FAULT_ID", length=32)
+	private String exerciseFaultId;
+	
+	@Column(name="ANSWER", length=128)
+	private String answer;
+
+	@Column(name="CORRECT", length=1)
+	private byte correct;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=50)
+	private String exerciseItemId;
+
+	@Column(name="RESUME_BOOK_ID", length=32)
+	private String resumeBookId;
+	
+	@Column(name="FAULT_RECORD_ID", length=32)
+	private String faultRecordId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "RESUME_BOOK_ID", referencedColumnName="RESUME_BOOK_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFaultBook faultBook;
+	
+	public String getExerciseFaultId() {
+		return this.exerciseFaultId;
+	}
+
+	public void setExerciseFaultId(String exerciseFaultId) {
+		this.exerciseFaultId = exerciseFaultId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getResumeBookId() {
+		return this.resumeBookId;
+	}
+
+	public void setResumeBookId(String resumeBookId) {
+		this.resumeBookId = resumeBookId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public ExerciseFaultBook getFaultBook() {
+		return faultBook;
+	}
+
+	public void setFaultBook(ExerciseFaultBook faultBook) {
+		this.faultBook = faultBook;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public byte getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(byte correct) {
+		this.correct = correct;
+	}
+
+	public String getFaultRecordId() {
+		return faultRecordId;
+	}
+
+	public void setFaultRecordId(String faultRecordId) {
+		this.faultRecordId = faultRecordId;
+	}
+
+	public String getExerciseFaultHisId() {
+		return exerciseFaultHisId;
+	}
+
+	public void setExerciseFaultHisId(String exerciseFaultHisId) {
+		this.exerciseFaultHisId = exerciseFaultHisId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java
new file mode 100644
index 0000000..4a0aba2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java
@@ -0,0 +1,298 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_fault_record database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_fault_record")
+@NamedQuery(name="ExerciseFaultRecord.findAll", query="SELECT e FROM ExerciseFaultRecord e")
+public class ExerciseFaultRecord implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="FAULT_RECORD_ID", unique=true, nullable=false, length=32)
+	private String faultRecordId;
+	
+	@Column(name="RESUME_BOOK_ID", length=32)
+	private String resumeBookId;
+	
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+	
+	@Column(name="EXERCISE_GROUP_TYPE")
+	private short exerciseGroupType;
+
+	@Column(name="ACCURACY", precision=10, scale=2)
+	private BigDecimal accuracy;
+
+	@Column(name="COMPLETION_RATE", precision=10, scale=2)
+	private BigDecimal completionRate;
+
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+	
+	@Column(name="TITLE_MAX_NUMBER", length=32)
+	private String titleMaxNumber;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+	
+	@Column(name="STATUS", length=32)
+	private String status;
+	
+	/** 题目总数  */
+	@Column(name="ALL_COUNT")
+	private BigInteger allCount;
+	
+	@Column(name="ANSWER_UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date answerUpdateTime;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "faultRecord")
+	@JsonIgnore 
+	private List<ExerciseFault> faults;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "RESUME_BOOK_ID", referencedColumnName="RESUME_BOOK_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFaultBook faultBook;
+	
+	public String getFaultRecordId() {
+		return faultRecordId;
+	}
+
+	public void setFaultRecordId(String faultRecordId) {
+		this.faultRecordId = faultRecordId;
+	}
+
+	public String getResumeBookId() {
+		return resumeBookId;
+	}
+
+	public void setResumeBookId(String resumeBookId) {
+		this.resumeBookId = resumeBookId;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public short getExerciseGroupType() {
+		return exerciseGroupType;
+	}
+
+	public void setExerciseGroupType(short exerciseGroupType) {
+		this.exerciseGroupType = exerciseGroupType;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public String getTitleMaxNumber() {
+		return titleMaxNumber;
+	}
+
+	public void setTitleMaxNumber(String titleMaxNumber) {
+		this.titleMaxNumber = titleMaxNumber;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public List<ExerciseFault> getFaults() {
+		return faults;
+	}
+
+	public void setFaults(List<ExerciseFault> faults) {
+		this.faults = faults;
+	}
+
+	public BigInteger getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(BigInteger allCount) {
+		this.allCount = allCount;
+	}
+
+	public ExerciseFaultBook getFaultBook() {
+		return faultBook;
+	}
+
+	public void setFaultBook(ExerciseFaultBook faultBook) {
+		this.faultBook = faultBook;
+	}
+
+	public Date getAnswerUpdateTime() {
+		return answerUpdateTime;
+	}
+
+	public void setAnswerUpdateTime(Date answerUpdateTime) {
+		this.answerUpdateTime = answerUpdateTime;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java
new file mode 100644
index 0000000..172aac2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java
@@ -0,0 +1,236 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the EXERCISE_FAULT_STATISTICS database table.
+ * 
+ */
+@Entity
+@Table(name="EXERCISE_FAULT_STATISTICS")
+@NamedQuery(name="ExerciseFaultStatistics.findAll", query="SELECT e FROM ExerciseFaultStatistics e")
+public class ExerciseFaultStatistics implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="FAULT_STATISTICS_ID", unique=true, nullable=false, length=32)
+	private String faultStatisticsId;
+
+	// 做题个数
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+
+	// 错误个数
+	@Column(name="FAULT_COUNT") 
+	private BigInteger faultCount;
+	
+	// 错误率
+	@Column(name="FAULT_RATE", precision=10, scale=2)
+	private BigDecimal faultRate;
+	
+	// 做题时间
+	@Column(name="EXERCISE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date exerciseTime;
+	
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public String getFaultStatisticsId() {
+		return faultStatisticsId;
+	}
+
+	public void setFaultStatisticsId(String faultStatisticsId) {
+		this.faultStatisticsId = faultStatisticsId;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public BigInteger getFaultCount() {
+		return faultCount;
+	}
+
+	public void setFaultCount(BigInteger faultCount) {
+		this.faultCount = faultCount;
+	}
+
+	public BigDecimal getFaultRate() {
+		return faultRate;
+	}
+
+	public void setFaultRate(BigDecimal faultRate) {
+		this.faultRate = faultRate;
+	}
+
+	public Date getExerciseTime() {
+		return exerciseTime;
+	}
+
+	public void setExerciseTime(Date exerciseTime) {
+		this.exerciseTime = exerciseTime;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavorite.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavorite.java
new file mode 100644
index 0000000..e9c91b4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavorite.java
@@ -0,0 +1,218 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_favorite database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_favorite")
+@NamedQuery(name="ExerciseFavorite.findAll", query="SELECT e FROM ExerciseFavorite e")
+public class ExerciseFavorite implements Serializable,ITrace{
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_FAVORITE_ID", unique=true, nullable=false, length=32)
+	private String exerciseFavoriteId;
+	
+	@Column(name="ANSWER", length=128)
+	private String answer;
+
+	@Column(name="CORRECT", length=128)
+	private byte correct;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	@Column(name="FAVORITE_BOOK_ID", length=32)
+	private String favoriteBookId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "FAVORITE_BOOK_ID", referencedColumnName="FAVORITE_BOOK_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFavoriteBook favorBook;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "FAVORITE_RECORD_ID", referencedColumnName="FAVORITE_RECORD_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFavoriteRecord favorRecord;
+	
+	@Column(name="FAVORITE_RECORD_ID", length=32)
+	private String favoriteRecordId;
+	
+	public ExerciseFavorite() {
+	}
+
+	public ExerciseFavoriteBook getFavorBook() {
+		return favorBook;
+	}
+
+	public void setFavorBook(ExerciseFavoriteBook favorBook) {
+		this.favorBook = favorBook;
+	}
+
+	public String getExerciseFavoriteId() {
+		return this.exerciseFavoriteId;
+	}
+
+	public void setExerciseFavoriteId(String exerciseFavoriteId) {
+		this.exerciseFavoriteId = exerciseFavoriteId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getFavoriteBookId() {
+		return this.favoriteBookId;
+	}
+
+	public void setFavoriteBookId(String favoriteBookId) {
+		this.favoriteBookId = favoriteBookId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public byte getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(byte correct) {
+		this.correct = correct;
+	}
+
+	public String getFavoriteRecordId() {
+		return favoriteRecordId;
+	}
+
+	public void setFavoriteRecordId(String favoriteRecordId) {
+		this.favoriteRecordId = favoriteRecordId;
+	}
+
+	public ExerciseFavoriteRecord getFavorRecord() {
+		return favorRecord;
+	}
+
+	public void setFavorRecord(ExerciseFavoriteRecord favorRecord) {
+		this.favorRecord = favorRecord;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java
new file mode 100644
index 0000000..490a6a3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java
@@ -0,0 +1,342 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_favorite_book database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_favorite_book")
+@NamedQuery(name="ExerciseFavoriteBook.findAll", query="SELECT e FROM ExerciseFavoriteBook e")
+public class ExerciseFavoriteBook implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="FAVORITE_BOOK_ID", unique=true, nullable=false, length=32)
+	private String favoriteBookId;
+
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "favorBook")
+	@JsonIgnore 
+	private List<ExerciseFavorite> favors;
+	
+	/** 当前做题最大题号  */
+	@Column(name="TITLE_MAX_NUMBER", length=32)
+	private String titleMaxNumber;
+	
+	@Column(name="ACCURACY", precision=10, scale=2)
+	private BigDecimal accuracy;
+	
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	/** 题目总数  */
+	@Column(name="ALL_COUNT")
+	private BigInteger allCount;
+	
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="TYPE")
+	private short type;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+	
+	@Column(name="STATUS", length=32)
+	private String status;
+	@Column(name="COMPLETION_RATE", precision=10, scale=2)
+	private BigDecimal completionRate;
+
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+	
+	/**类型           机构:1    高校:2 */
+	public static final short TYPE_ORGANIZATION = 1;
+	
+	public static final short TYPE_COLLEGE = 2;
+	
+	@Column(name="PARENT_ID", length=32)
+	private String parentId;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "favorBook")
+	@JsonIgnore 
+	private List<ExerciseFavoriteHis> favorHis;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "favorBook")
+	@JsonIgnore 
+	private List<ExerciseFavoriteRecord> favorRecords;
+	
+	public List<ExerciseFavorite> getFavors() {
+		return favors;
+	}
+
+	public void setFavors(List<ExerciseFavorite> favors) {
+		this.favors = favors;
+	}
+
+	public String getFavoriteBookId() {
+		return this.favoriteBookId;
+	}
+
+	public void setFavoriteBookId(String favoriteBookId) {
+		this.favoriteBookId = favoriteBookId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getTitleMaxNumber() {
+		return titleMaxNumber;
+	}
+
+	public void setTitleMaxNumber(String titleMaxNumber) {
+		this.titleMaxNumber = titleMaxNumber;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public BigInteger getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(BigInteger allCount) {
+		this.allCount = allCount;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+	
+	public List<ExerciseFavoriteHis> getFavorHis() {
+		return favorHis;
+	}
+
+	public void setFavorHis(List<ExerciseFavoriteHis> favorHis) {
+		this.favorHis = favorHis;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public List<ExerciseFavoriteRecord> getFavorRecords() {
+		return favorRecords;
+	}
+
+	public void setFavorRecords(List<ExerciseFavoriteRecord> favorRecords) {
+		this.favorRecords = favorRecords;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteHis.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteHis.java
new file mode 100644
index 0000000..936bb00
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteHis.java
@@ -0,0 +1,213 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_favorite_his database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_favorite_his")
+@NamedQuery(name="ExerciseFavoriteHis.findAll", query="SELECT e FROM ExerciseFavoriteHis e")
+public class ExerciseFavoriteHis implements Serializable,ITrace{
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_FAVORITE_HIS_ID", unique=true, nullable=false, length=32)
+	private String exerciseFavoriteHisId;
+	
+	@Column(name="EXERCISE_FAVORITE_ID", length=32)
+	private String exerciseFavoriteId;
+	
+	@Column(name="ANSWER", length=128)
+	private String answer;
+
+	@Column(name="CORRECT", length=128)
+	private byte correct;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	@Column(name="FAVORITE_BOOK_ID", length=32)
+	private String favoriteBookId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "FAVORITE_BOOK_ID", referencedColumnName="FAVORITE_BOOK_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFavoriteBook favorBook;
+	
+	@Column(name="FAVORITE_RECORD_ID", length=32)
+	private String favoriteRecordId;
+	
+	public ExerciseFavoriteBook getFavorBook() {
+		return favorBook;
+	}
+
+	public void setFavorBook(ExerciseFavoriteBook favorBook) {
+		this.favorBook = favorBook;
+	}
+
+	public String getExerciseFavoriteId() {
+		return this.exerciseFavoriteId;
+	}
+
+	public void setExerciseFavoriteId(String exerciseFavoriteId) {
+		this.exerciseFavoriteId = exerciseFavoriteId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getFavoriteBookId() {
+		return this.favoriteBookId;
+	}
+
+	public void setFavoriteBookId(String favoriteBookId) {
+		this.favoriteBookId = favoriteBookId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public byte getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(byte correct) {
+		this.correct = correct;
+	}
+
+	public String getFavoriteRecordId() {
+		return favoriteRecordId;
+	}
+
+	public void setFavoriteRecordId(String favoriteRecordId) {
+		this.favoriteRecordId = favoriteRecordId;
+	}
+
+	public String getExerciseFavoriteHisId() {
+		return exerciseFavoriteHisId;
+	}
+
+	public void setExerciseFavoriteHisId(String exerciseFavoriteHisId) {
+		this.exerciseFavoriteHisId = exerciseFavoriteHisId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java
new file mode 100644
index 0000000..443270e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java
@@ -0,0 +1,298 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_favorite_record database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_favorite_record")
+@NamedQuery(name="ExerciseFavoriteRecord.findAll", query="SELECT e FROM ExerciseFavoriteRecord e")
+public class ExerciseFavoriteRecord implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="FAVORITE_RECORD_ID", unique=true, nullable=false, length=32)
+	private String favoriteRecordId;
+	
+	@Column(name="FAVORITE_BOOK_ID", length=32)
+	private String favoriteBookId;
+	
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+	
+	@Column(name="EXERCISE_GROUP_TYPE", length=32)
+	private short exerciseGroupType;
+
+	@Column(name="ACCURACY", precision=10, scale=2)
+	private BigDecimal accuracy;
+
+	@Column(name="COMPLETION_RATE", precision=10, scale=2)
+	private BigDecimal completionRate;
+
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+	
+	@Column(name="TITLE_MAX_NUMBER", length=32)
+	private String titleMaxNumber;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+	
+	/** 答案更新时间  */
+	@Column(name="ANSWER_UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date answerUpdateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+	
+	@Column(name="STATUS", length=32)
+	private String status;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "favorBook")
+	@JsonIgnore 
+	private List<ExerciseFavorite> favors;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "FAVORITE_BOOK_ID", referencedColumnName="FAVORITE_BOOK_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseFavoriteBook favorBook;
+	
+	/** 题目总数  */
+	@Column(name="ALL_COUNT")
+	private BigInteger allCount;
+	
+	public String getFavoriteRecordId() {
+		return favoriteRecordId;
+	}
+
+	public void setFavoriteRecordId(String favoriteRecordId) {
+		this.favoriteRecordId = favoriteRecordId;
+	}
+
+	public String getFavoriteBookId() {
+		return favoriteBookId;
+	}
+
+	public void setFavoriteBookId(String favoriteBookId) {
+		this.favoriteBookId = favoriteBookId;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public short getExerciseGroupType() {
+		return exerciseGroupType;
+	}
+
+	public void setExerciseGroupType(short exerciseGroupType) {
+		this.exerciseGroupType = exerciseGroupType;
+	}
+
+	public BigDecimal getAccuracy() {
+		return accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public String getTitleMaxNumber() {
+		return titleMaxNumber;
+	}
+
+	public void setTitleMaxNumber(String titleMaxNumber) {
+		this.titleMaxNumber = titleMaxNumber;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public List<ExerciseFavorite> getFavors() {
+		return favors;
+	}
+
+	public void setFavors(List<ExerciseFavorite> favors) {
+		this.favors = favors;
+	}
+
+	public BigInteger getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(BigInteger allCount) {
+		this.allCount = allCount;
+	}
+
+	public Date getAnswerUpdateTime() {
+		return answerUpdateTime;
+	}
+
+	public void setAnswerUpdateTime(Date answerUpdateTime) {
+		this.answerUpdateTime = answerUpdateTime;
+	}
+	public ExerciseFavoriteBook getFavorBook() {
+		return favorBook;
+	}
+
+	public void setFavorBook(ExerciseFavoriteBook favorBook) {
+		this.favorBook = favorBook;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java
new file mode 100644
index 0000000..eee336d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java
@@ -0,0 +1,554 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_group database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_group")
+@NamedQuery(name="ExerciseGroup.findAll", query="SELECT e FROM ExerciseGroup e")
+@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})
+//@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
+public class ExerciseGroup implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	//题库状态   草稿0,已发布2  已下架3
+	public static final short STATUS_DRAFT = 0;
+	public static final short STATUS_PUBLISHED = 2;
+	public static final short STATUS_TAKEOFF = 3;
+	
+	//题库类型  1:个人题库,2:学校题库  3:共享题库
+	public static final short GROUP_RANGE_PRIV = 1;
+	public static final short GROUP_RANGE_SCHOOL = 2;
+	public static final short GROUP_RANGE_SHARE = 3;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="GROUP_ID", unique=true, nullable=false, length=32)
+	private String groupId;
+	
+	@Column(name="CLASS_ID",  length=32)
+	private String classId;
+	
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID", nullable=false, length=32)
+	private String orgId;
+	
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	@Transient
+	private String subjectName;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="NAME", length=128)
+	private String name;
+	
+	/** 用于模拟考试 存放 考试设置时间*/
+	@Column(name="ATTRIBUTE1", length=128)
+	private String attribute1;
+	
+	/** 用于 章节练习  存放章节ID */
+	@Column(name="ATTRIBUTE2", length=128)
+	private String attribute2;
+	
+	@Column(name="ORIGIN_EXERCISE_ID", length=32)
+	private String originExerciseId;
+	
+	@Column(name="TYPE")
+	private short type;
+	
+	/** 习题组类型(1,家庭作业;2,互动;3,顺序练习;4模拟考试;5真题;6:章节;7:随机练习;8:教学评估;9:专项练习;10:自由练习;11:考题题库;12:考试题目;13:智慧蓝项目题库) */
+	
+	public final static short TYPE_HOMEWORK = 1;
+	
+	public final static short TYPE_INTERACT = 2;
+	
+	public final static short TYPE_EXERCISE_SEQUENCE = 3;
+	
+	public final static short TYPE_MOCK_EXAM = 4;
+	
+	/*
+	 * 历史真题
+	 */
+	public final static short TYPE_HISTORY_ITEM = 5;
+	
+	public final static short TYPE_CHAPTER_ITEM = 6;
+	
+	public final static short TYPE_EXERCISE_RANDOM = 7;
+	
+	public final static short TYPE_EXERCISE_TEACH_EVALUATE = 8;
+	
+	public final static short TYPE_EXERCISE_TOPIC = 9;
+	
+	public final static short TYPE_EXERCISE_FREE = 10;
+	
+	public final static short TYPE_EXERCISE_EXAM = 11;
+	
+	public final static short TYPE_EXERCISE_EXAM_ITEM = 12;
+	
+	public final static short TYPE_EXERCISE_GROUP_LIB = 13;
+	
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+//	@ManyToMany(fetch = FetchType.LAZY)
+//	@JoinTable(name = "EXERCISE_GROUP_ITEM_RE", joinColumns = { 
+//			@JoinColumn(name = "EXERCISE_GROUP_ID") }, 
+//			inverseJoinColumns = { @JoinColumn(name = "EXERCISE_ITEM_ID") })
+//	@Where(clause="DELETE_FLAG=0")
+	@Transient
+	private List<ExerciseItem> items;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "group")
+	@JsonIgnore
+	private List<ExerciseRecord> records;
+	
+	/** 题目总数  */
+	@Column(name="ALL_COUNT")
+	private BigInteger allCount;
+	
+	/** 当前做题总数  */
+	@Transient
+	private String doCount;
+	
+	/** 班主任能不能编辑  */
+	@Transient
+	private boolean editFlag;
+	
+	/** 练习管理排序,班主任排序 */
+	@Column(name="ORDER_NUM")
+	private BigInteger orderNum;
+	
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+	
+	/**  状态 */
+	@Column(name="STATUS")
+	private short status;
+	
+	@Column(name="SUBJECT_ORDER")
+	private Integer subjectOrder;
+	
+	@Column(name="CHAPTER_ORDER")
+	private Integer chapterOrder;
+	
+	@Column(name="PART_ORDER")
+	private Integer partOrder;
+	
+	@Column(name="DIFFICULT_LEVEL")
+	private short  difficultLevel;
+	
+	
+	@Column(name="SOURCE_USER_ID")
+	private String  sourceUserId;
+	
+	@Column(name="SOURCE_USER_NAME")
+	private String  sourceUserName;
+	
+	@Column(name="GROUP_RANGE")
+	private short  groupRange;
+	
+	@Transient
+	private int singleSelectCount;
+	
+	@Transient
+	private int multiSelectCount;
+	
+	@Transient
+	private int judgeCount;
+	
+	@Transient
+	private int questionCount;
+	
+	@Transient
+	private int fillBlanksCount;
+	
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public Integer getSubjectOrder() {
+		return subjectOrder;
+	}
+
+	public void setSubjectOrder(Integer subjectOrder) {
+		this.subjectOrder = subjectOrder;
+	}
+
+	public Integer getChapterOrder() {
+		return chapterOrder;
+	}
+
+	public void setChapterOrder(Integer chapterOrder) {
+		this.chapterOrder = chapterOrder;
+	}
+
+	public Integer getPartOrder() {
+		return partOrder;
+	}
+
+	public void setPartOrder(Integer partOrder) {
+		this.partOrder = partOrder;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public BigInteger getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(BigInteger orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public List<ExerciseItem> getItems() {
+		return items;
+	}
+
+	public void setItems(List<ExerciseItem> items) {
+		this.items = items;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public short getType() {
+		return this.type;
+	}
+	
+	public String getTypeName() {
+		switch (this.type) {
+			case 1: {
+				return "家庭作业";
+			}
+			case 2: {
+				return "互动练习";
+			}
+			case 3: {
+				return "顺序练习";
+			}
+			case 4: {
+				return "模拟考试";
+			}
+			case 5: {
+				return "真题";
+			}
+			case 6: {
+				return "章节练习";
+			}
+			case 7: {
+				return "随机练习";
+			}
+			case 9: {
+				return "专项练习";
+			}
+			case 10: {
+				return "自由练习";
+			}
+			default:{
+				return "";
+			}
+		}
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public List<ExerciseRecord> getRecords() {
+		return records;
+	}
+
+	public void setRecords(List<ExerciseRecord> records) {
+		this.records = records;
+	}
+
+	public String getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(String doCount) {
+		this.doCount = doCount;
+	}
+
+	public BigInteger getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(BigInteger allCount) {
+		this.allCount = allCount;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getOriginExerciseId() {
+		return originExerciseId;
+	}
+
+	public void setOriginExerciseId(String originExerciseId) {
+		this.originExerciseId = originExerciseId;
+	}
+
+	public boolean getEditFlag() {
+		return editFlag;
+	}
+
+	public void setEditFlag(boolean editFlag) {
+		this.editFlag = editFlag;
+	}
+
+	public short getDifficultLevel() {
+		return difficultLevel;
+	}
+
+	public void setDifficultLevel(short difficultLevel) {
+		this.difficultLevel = difficultLevel;
+	}
+
+	public String getSourceUserId() {
+		return sourceUserId;
+	}
+
+	public void setSourceUserId(String sourceUserId) {
+		this.sourceUserId = sourceUserId;
+	}
+
+	public String getSourceUserName() {
+		return sourceUserName;
+	}
+
+	public void setSourceUserName(String sourceUserName) {
+		this.sourceUserName = sourceUserName;
+	}
+
+	public short getGroupRange() {
+		return groupRange;
+	}
+
+	public void setGroupRange(short groupRange) {
+		this.groupRange = groupRange;
+	}
+
+	public int getSingleSelectCount() {
+		return singleSelectCount;
+	}
+
+	public void setSingleSelectCount(int singleSelectCount) {
+		this.singleSelectCount = singleSelectCount;
+	}
+
+	public int getMultiSelectCount() {
+		return multiSelectCount;
+	}
+
+	public void setMultiSelectCount(int multiSelectCount) {
+		this.multiSelectCount = multiSelectCount;
+	}
+
+	public int getJudgeCount() {
+		return judgeCount;
+	}
+
+	public void setJudgeCount(int judgeCount) {
+		this.judgeCount = judgeCount;
+	}
+
+	public int getQuestionCount() {
+		return questionCount;
+	}
+
+	public void setQuestionCount(int questionCount) {
+		this.questionCount = questionCount;
+	}
+
+	public int getFillBlanksCount() {
+		return fillBlanksCount;
+	}
+
+	public void setFillBlanksCount(int fillBlanksCount) {
+		this.fillBlanksCount = fillBlanksCount;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java
new file mode 100644
index 0000000..7c81d61
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java
@@ -0,0 +1,272 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_group_extend database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_group_extend")
+@NamedQuery(name="ExerciseGroupExtend.findAll", query="SELECT e FROM ExerciseGroupExtend e")
+public class ExerciseGroupExtend implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="GROUP_EXTEND_ID", unique=true, nullable=false, length=32)
+	private String groupExtendId;
+	
+	@Column(name="GROUP_ID", nullable=false, length=32)
+	private String groupId;
+	
+	/** 做题时间  */
+	@Column(name="EXERCISE_TIME")
+	private String exerciseTime;
+	
+	/** 做题方式(1:未做题优先  2:错题优先) */
+	@Column(name="EXERCISE_STRATEGY")
+	private String exerciseStrategy;
+	
+	/** 做题来源(1:练习题库  2:考试题库  3:家庭作业) */
+	@Column(name="EXERCISE_SOURCE")
+	private String exerciseSource;
+	
+	/** 做题模式(1:练习  2:考试) */
+	@Column(name="EXERCISE_MODE")
+	private String exerciseMode;
+	
+	/** 是否重做(0:可重做 1:不可重做)  */
+	@Column(name="REPEAT_FLAG", nullable=false)
+	private boolean repeatFlag;
+	
+	/** 总做题个数 */
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+	
+	/** 总正确个数  */
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	/** 班级正确率=总正确个数/总做题个数  */
+	@Column(name="CLASS_ACCURACY",precision=10, scale=2)
+	private BigDecimal classAccuracy;
+	
+	/** 提交人数 完成 */
+	@Column(name="SUBMIT_NUMBER")
+	private BigInteger submitNumber;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="ATTRIBUTE1", length=128)
+	private String attribute1;
+	
+	@Column(name="ATTRIBUTE2", length=128)
+	private String attribute2;
+	
+	public String getGroupExtendId() {
+		return groupExtendId;
+	}
+
+	public void setGroupExtendId(String groupExtendId) {
+		this.groupExtendId = groupExtendId;
+	}
+
+	public String getExerciseTime() {
+		return exerciseTime;
+	}
+
+	public void setExerciseTime(String exerciseTime) {
+		this.exerciseTime = exerciseTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+	
+	public boolean getRepeatFlag() {
+		return repeatFlag;
+	}
+
+	public void setRepeatFlag(boolean repeatFlag) {
+		this.repeatFlag = repeatFlag;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getExerciseStrategy() {
+		return exerciseStrategy;
+	}
+
+	public void setExerciseStrategy(String exerciseStrategy) {
+		this.exerciseStrategy = exerciseStrategy;
+	}
+
+	public String getExerciseSource() {
+		return exerciseSource;
+	}
+
+	public void setExerciseSource(String exerciseSource) {
+		this.exerciseSource = exerciseSource;
+	}
+
+	public String getExerciseMode() {
+		return exerciseMode;
+	}
+
+	public void setExerciseMode(String exerciseMode) {
+		this.exerciseMode = exerciseMode;
+	}
+
+	public BigDecimal getClassAccuracy() {
+		return classAccuracy;
+	}
+
+	public void setClassAccuracy(BigDecimal classAccuracy) {
+		this.classAccuracy = classAccuracy;
+	}
+
+	public BigInteger getSubmitNumber() {
+		return submitNumber;
+	}
+
+	public void setSubmitNumber(BigInteger submitNumber) {
+		this.submitNumber = submitNumber;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupItemRe.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupItemRe.java
new file mode 100644
index 0000000..52eb099
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupItemRe.java
@@ -0,0 +1,100 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the exercise_group_item_re database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_group_item_re")
+@NamedQuery(name="ExerciseGroupItemRe.findAll", query="SELECT e FROM ExerciseGroupItemRe e")
+public class ExerciseGroupItemRe implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+	
+	@Column(name="ITEM_ORDER")
+	private Integer itemOrder;
+	
+	@Column(name="DOC_ORDER")
+	private Integer docOrder;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	public ExerciseGroupItemRe() {
+	}
+
+	public String getRelationId() {
+		return this.relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getExerciseGroupId() {
+		return this.exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public Integer getItemOrder() {
+		return itemOrder;
+	}
+
+	public void setItemOrder(Integer itemOrder) {
+		this.itemOrder = itemOrder;
+	}
+
+	public Integer getDocOrder() {
+		return docOrder;
+	}
+
+	public void setDocOrder(Integer docOrder) {
+		this.docOrder = docOrder;
+	}
+
+	public boolean isDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java
new file mode 100644
index 0000000..ee09f1e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java
@@ -0,0 +1,202 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exam_group_share_info database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_group_share_info")
+@NamedQuery(name="ExerciseGroupShareInfo.findAll", query="SELECT e FROM ExerciseGroupShareInfo e")
+public class ExerciseGroupShareInfo implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="GROUP_SHARE_ID", unique=true,nullable=false, length=32)
+	private String groupShareId;
+
+	@Column(name="GROUP_ID")
+	private String groupId;
+
+	@Column(name="SHARED_TEACHER_ID")
+	private String sharedTeacherId;
+
+	@Column(name="SHARED_TEACHER_NAME")
+	private String sharedTeacherName;
+	
+	@Column(name="SHARE_STATUS")
+	private short shareStatus;
+
+	@Column(name="TEACHER_ID")
+	private String teacherId;
+
+	@Column(name="TEACHER_NAME")
+	private String teacherName;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+
+	public ExerciseGroupShareInfo() {
+	}
+
+	public String getGroupShareId() {
+		return this.groupShareId;
+	}
+
+	public void setGroupShareId(String groupShareId) {
+		this.groupShareId = groupShareId;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getSharedTeacherId() {
+		return this.sharedTeacherId;
+	}
+
+	public void setSharedTeacherId(String sharedTeacherId) {
+		this.sharedTeacherId = sharedTeacherId;
+	}
+
+	public String getSharedTeacherName() {
+		return this.sharedTeacherName;
+	}
+
+	public void setSharedTeacherName(String sharedTeacherName) {
+		this.sharedTeacherName = sharedTeacherName;
+	}
+
+	public String getTeacherId() {
+		return this.teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getTeacherName() {
+		return this.teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public short getShareStatus() {
+		return shareStatus;
+	}
+
+	public void setShareStatus(short shareStatus) {
+		this.shareStatus = shareStatus;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java
new file mode 100644
index 0000000..1a2365e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java
@@ -0,0 +1,44 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+
+
+public class ExerciseImportResult implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 一行文本  */
+	private String lineText;
+	
+	/** 解析结果  */
+	private Integer type;
+	
+	/** 如果解析不出来,跟随上一解析类型时,存储上一次成功解析的类型 */
+	private String lastParse;
+
+	public String getLineText() {
+		return lineText;
+	}
+
+	public void setLineText(String lineText) {
+		this.lineText = lineText;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getLastParse() {
+		return lastParse;
+	}
+
+	public void setLastParse(String lastParse) {
+		this.lastParse = lastParse;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java
new file mode 100644
index 0000000..b89acac
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java
@@ -0,0 +1,372 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+
+/**
+ * The persistent class for the exercise_exam database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_info")
+@NamedQuery(name="ExerciseInfo.findAll", query="SELECT e FROM ExerciseInfo e")
+public class ExerciseInfo implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	//作业类型   1:答题作业,2:文件作业,3:写作作业
+	public static final short EXERCISE_TYPE_ANSWER = 1;
+	public static final short EXERCISE_TYPE_FILE = 2;
+	public static final short EXERCISE_TYPE_WRITING = 3;
+	
+	//文件作业提交作业类型  1 图片; 2 文档 ; 3 视频 ; 4 音频; 5 附件
+	public static final short EXERCISE_FILE_COMMIT_IMG = 1;
+	public static final short EXERCISE_FILE_COMMIT_DOC = 2;
+	public static final short EXERCISE_FILE_COMMIT_VIDEO = 3;
+	public static final short EXERCISE_FILE_COMMIT_AUDIO = 4;
+	public static final short EXERCISE_FILE_COMMIT_ATTACH = 5;
+	
+	
+	//文件作业状态
+	public static final short EXERCISE_STATUS_DRAFT = 0;
+	public static final short EXERCISE_STATUS_PUBLISHED = 1;
+	
+	@Id
+	@Column(name="EXERCISE_INFO_ID", unique=true, nullable=false, length=32)
+	private String exerciseInfoId;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date date;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@Column(name="end_time")
+	private Date endTime;
+
+	private String name;
+
+	@Column(name="org_id")
+	private String orgId;
+	
+	
+	@Column(name="subject_id")
+	private String subjectId;
+	
+	@Column(name="CLASS_COUNT")
+	private Integer classCount;
+	
+	@Column(name="PASSING_SCORE")
+	private BigDecimal passingScore;
+
+	@Column(name="REMIND")
+	private String  remind;
+	
+	private Double score = 0.0;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@Column(name="start_time")
+	private Date startTime;
+
+	private short type;
+	
+	@Column(name="status")
+	private short status;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+	
+	@Column(name="COMMIT_UPLOAD_TYPE")
+	private short commitUploadType;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "exerciseInfo")
+	@Where(clause="DELETE_FLAG=0")
+	private List<ExerciseItemSet> exerciseItemSets;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID",referencedColumnName="SUBJECT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Subject subject;
+	
+	//关联的题库信息
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "exerciseInfo")
+	@Where(clause="DELETE_FLAG=0 AND TYPE=1 ")
+	private List<ExerciseExamReGroup> reGroups;
+	
+	//关联的班级信息
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "exerciseInfo")
+	@Where(clause="DELETE_FLAG=0")
+	private List<ExerciseExamReClass> reClasses;
+	
+	private String updator;
+	
+	@Transient
+	private String uploadPath;
+	
+	@Transient
+	private String subjectName;
+	
+	public List<ExerciseItemSet> getExerciseItemSets() {
+		return exerciseItemSets;
+	}
+
+	public void setExerciseItemSets(List<ExerciseItemSet> exerciseItemSets) {
+		this.exerciseItemSets = exerciseItemSets;
+	}
+
+	public List<ExerciseExamReGroup> getReGroups() {
+		return reGroups;
+	}
+
+	public void setReGroups(List<ExerciseExamReGroup> reGroups) {
+		this.reGroups = reGroups;
+	}
+
+	public List<ExerciseExamReClass> getReClasses() {
+		return reClasses;
+	}
+
+	public void setReClasses(List<ExerciseExamReClass> reClasses) {
+		this.reClasses = reClasses;
+	}
+
+	public short getCommitUploadType() {
+		return commitUploadType;
+	}
+
+	public void setCommitUploadType(short commitUploadType) {
+		this.commitUploadType = commitUploadType;
+	}
+
+	public BigDecimal getPassingScore() {
+		return passingScore;
+	}
+
+	public void setPassingScore(BigDecimal passingScore) {
+		this.passingScore = passingScore;
+	}
+
+	public Integer getClassCount() {
+		return classCount;
+	}
+
+	public void setClassCount(Integer classCount) {
+		this.classCount = classCount;
+	}
+
+	public Double getScore() {
+		return score;
+	}
+
+	public void setScore(Double score) {
+		this.score = score;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getDate() {
+		return this.date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getEndTime() {
+		return this.endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getOrgId() {
+		return this.orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+//	public String getSourceGroupId() {
+//		return this.sourceGroupId;
+//	}
+//
+//	public void setSourceGroupId(String sourceGroupId) {
+//		this.sourceGroupId = sourceGroupId;
+//	}
+
+	public Date getStartTime() {
+		return this.startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public short getType() {
+		return this.type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getExerciseInfoId() {
+		return exerciseInfoId;
+	}
+
+	public void setExerciseInfoId(String exerciseInfoId) {
+		this.exerciseInfoId = exerciseInfoId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getRemind() {
+		return remind;
+	}
+
+	public void setRemind(String remind) {
+		this.remind = remind;
+	}
+
+	public String getUploadPath() {
+		return uploadPath;
+	}
+
+	public void setUploadPath(String uploadPath) {
+		this.uploadPath = uploadPath;
+	}
+	
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+	
+	
+	
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java
new file mode 100644
index 0000000..7a6c7de
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java
@@ -0,0 +1,533 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.OrderBy;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.util.CollectionUtils;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_item database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_item")
+@NamedQuery(name="ExerciseItem.findAll", query="SELECT e FROM ExerciseItem e")
+public class ExerciseItem implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_ID", unique=true, nullable=false, length=32)
+	private String exerciseId;
+
+	@Column(name="CHAPTER_ID", length=32)
+	private String chapterId;
+	
+	/** 来源练习id **/
+	@Column(name="ORGI_EXERCISE_ID", length=32)
+	private String orgiExerciseId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  班级课表ID */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+
+	@Column(name="TITLE", length=2000)
+	private String title;
+
+	@Column(name="TYPE")
+	private short type;
+	
+	/*
+	 * 单选 
+	 */
+	public static short TYPE_SINGLE_SELECT = 1;
+	
+	/*
+	 * 多选 
+	 */
+	public static short TYPE_MULTI_SELECT = 2;
+	
+	/*
+	 * 判断题 
+	 */
+	public static short TYPE_TRUE_OR_FALSE = 3;
+	
+	/*
+	 * 问答题
+	 */
+	public static short TYPE_ESSAY_QUESTION = 4;
+	
+	/*
+	 * 分值题
+	 */
+	public static short TYPE_SCORE = 5;
+	
+	/*
+	 * 量值题
+	 */
+	public static short TYPE_MEASUREMENT = 6;
+	
+	/*
+	 * 附件题
+	 */
+	public static short TYPE_ATTACHMENT = 7;
+	
+	/*
+	 * 填空题
+	 */
+	public static short TYPE_FILL_BLANKS = 8;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/** 正确答案  */
+	@Column(name="ANSWER")
+	private String answer;
+	
+//	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "items")
+//	@JsonIgnore
+//	private List<ExerciseGroup> groups;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "exerciseItem")
+	@Where(clause="DELETE_FLAG=0")
+	@OrderBy(clause="OPTION_ORDER ASC")
+	private List<ExerciseItemOption> options;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "exerciseItem")
+	@Where(clause="DELETE_FLAG=0")
+	@OrderBy(clause="EXERCISE_ITEM_ANSWER ASC")
+	private List<ExerciseItemScore> scores;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "CHAPTER_ID",referencedColumnName="CHAPTER_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseChapter chapter;
+	
+	/** 用户答题记录**/
+	@Transient
+	private List<ExerciseItemAnswerU> exerciseItemAnswerU;
+	
+	/** 是否必答 **/
+	@Column(name="MUST_ANSWER", nullable=true)
+	private boolean mustAnswer;
+	
+	/** 组Id  */
+	@Transient
+	private String exerciseGroupId;
+	
+	/** 记录Id  错题、收藏为bookId  */
+	@Transient
+	private String exerciseRecordId;
+	
+	/** 错题、收藏为主键Id  */
+	@Transient
+	private String exerciseExtendId;
+	
+	/** 习题编号 */
+	@Transient
+	private Integer itemNo;
+	
+	/** 习题状态  1:未提交 1:提交 */
+	@Transient
+	private String status;
+	
+	/** 习题分析结果 */
+	@Transient
+	private ExerciseAnalisisResult analisisResult;
+	
+	@Transient
+	private List<ExerciseItemAnalisi> analysises;
+	
+	@Transient
+	private List<ExerciseObjectImg> imgs;
+	
+	/** 文档中的序号,数据库中存储的序号(导入) **/
+	@Transient
+	private Integer docNo;
+	
+	/** 关联表ID **/
+	@Transient
+	private String reId;
+	
+	/** 每题最大分数 **/
+	@Transient
+	private double maxScore;
+	
+	/** 每题平均分数 **/
+	@Transient
+	private double averageScore;
+	
+	/** 题目选项统计情况 **/
+	@Transient
+	private Map<String, Integer> optionsDetail;
+	
+	/** 题目选项统计情况 **/
+	@Transient
+	private List<Map<String, Object>> optionsOrderDetail;
+
+	public List<Map<String, Object>> getOptionsOrderDetail() {
+		return optionsOrderDetail;
+	}
+
+	public void setOptionsOrderDetail(List<Map<String, Object>> optionsOrderDetail) {
+		this.optionsOrderDetail = optionsOrderDetail;
+	}
+
+	public String getOrgiExerciseId() {
+		return orgiExerciseId;
+	}
+
+	public void setOrgiExerciseId(String orgiExerciseId) {
+		this.orgiExerciseId = orgiExerciseId;
+	}
+
+	public Map<String, Integer> getOptionsDetail() {
+		return optionsDetail;
+	}
+
+	public void setOptionsDetail(Map<String, Integer> optionsDetail) {
+		this.optionsDetail = optionsDetail;
+	}
+
+	public double getAverageScore() {
+		return averageScore;
+	}
+
+	public void setAverageScore(double averageScore) {
+		this.averageScore = averageScore;
+	}
+
+	public double getMaxScore() {
+		return maxScore;
+	}
+
+	public void setMaxScore(double maxScore) {
+		this.maxScore = maxScore;
+	}
+
+	public List<ExerciseItemAnswerU> getExerciseItemAnswerU() {
+		return exerciseItemAnswerU;
+	}
+
+	public void setExerciseItemAnswerU(List<ExerciseItemAnswerU> exerciseItemAnswerU) {
+		this.exerciseItemAnswerU = exerciseItemAnswerU;
+	}
+
+	public boolean getMustAnswer() {
+		return mustAnswer;
+	}
+
+	public void setMustAnswer(boolean mustAnswer) {
+		this.mustAnswer = mustAnswer;
+	}
+
+	public List<ExerciseItemAnalisi> getAnalysises() {
+		return analysises;
+	}
+
+	public void setAnalysises(List<ExerciseItemAnalisi> analysises) {
+		this.analysises = analysises;
+	}
+
+//	public List<ExerciseGroup> getGroups() {
+//		return groups;
+//	}
+//
+//
+//	public void setGroups(List<ExerciseGroup> groups) {
+//		this.groups = groups;
+//	}
+
+
+	public List<ExerciseItemOption> getOptions() {
+		return options;
+	}
+
+
+	public void setOptions(List<ExerciseItemOption> options) {
+		this.options = options;
+	}
+
+	public ExerciseChapter getChapter() {
+		return chapter;
+	}
+
+	public void setChapter(ExerciseChapter chapter) {
+		this.chapter = chapter;
+	}
+
+	public String getExerciseId() {
+		return this.exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public short getType() {
+		return this.type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public ExerciseAnalisisResult getAnalisisResult() {
+		return analisisResult;
+	}
+
+	public void setAnalisisResult(ExerciseAnalisisResult analisisResult) {
+		this.analisisResult = analisisResult;
+	}
+
+	public ExerciseItemAnalisi getAnalisis() {
+		return CollectionUtils.isEmpty(getAnalysises())?null:getAnalysises().get(0);
+	}
+
+	public void setAnalisis(ExerciseItemAnalisi analisis) {
+		setAnalysises(new ArrayList<ExerciseItemAnalisi>(1));
+		getAnalysises().add(analisis);
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public String getExerciseExtendId() {
+		return exerciseExtendId;
+	}
+
+	public void setExerciseExtendId(String exerciseExtendId) {
+		this.exerciseExtendId = exerciseExtendId;
+	}
+
+	public List<ExerciseItemScore> getScores() {
+		return scores;
+	}
+
+	public void setScores(List<ExerciseItemScore> scores) {
+		this.scores = scores;
+	}
+
+	public Integer getItemNo() {
+		return itemNo;
+	}
+
+	public void setItemNo(Integer itemNo) {
+		this.itemNo = itemNo;
+	}
+
+	public Integer getDocNo() {
+		return docNo;
+	}
+
+	public void setDocNo(Integer docNo) {
+		this.docNo = docNo;
+	}
+
+	public List<ExerciseObjectImg> getImgs() {
+		return imgs;
+	}
+
+	public void setImgs(List<ExerciseObjectImg> imgs) {
+		this.imgs = imgs;
+	}
+
+	public String getReId() {
+		return reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((title == null) ? 0 : title.hashCode());
+		result = prime * result + type;
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		ExerciseItem other = (ExerciseItem) obj;
+		if (title == null) {
+			if (other.title != null)
+				return false;
+		} else if (!title.equals(other.title))
+			return false;
+		if (type != other.type)
+			return false;
+		return true;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisi.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisi.java
new file mode 100644
index 0000000..c35fa35
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisi.java
@@ -0,0 +1,222 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_item_analisis database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_item_analisis")
+@NamedQuery(name="ExerciseItemAnalisi.findAll", query="SELECT e FROM ExerciseItemAnalisi e")
+public class ExerciseItemAnalisi implements Serializable,ITrace {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4421106359272019801L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_ANALISIS_ID", unique=true, nullable=false, length=32)
+	private String exerciseAnalisisId;
+
+	@Column(name="ACCURACY",precision=10, scale=2)
+	private BigDecimal accuracy;
+
+	@Column(name="ANALYSIS")
+	private String analysis;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	@Column(name="SUBMIT_CORRECT_NUMBER")
+	private BigInteger submitCorrectNumber;
+
+	@Column(name="SUBMIT_NUMBER")
+	private BigInteger submitNumber;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="USUAL_FAULT_ANSWERS", length=255)
+	private String usualFaultAnswers;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_ITEM_ID",referencedColumnName="EXERCISE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseItem exerciseItem;
+	
+	public ExerciseItemAnalisi() {
+	}
+
+	public String getExerciseAnalisisId() {
+		return this.exerciseAnalisisId;
+	}
+
+	public void setExerciseAnalisisId(String exerciseAnalisisId) {
+		this.exerciseAnalisisId = exerciseAnalisisId;
+	}
+
+	public BigDecimal getAccuracy() {
+		return this.accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public String getAnalysis() {
+		return analysis;
+	}
+
+	public void setAnalysis(String analysis) {
+		this.analysis = analysis;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public BigInteger getSubmitCorrectNumber() {
+		return this.submitCorrectNumber;
+	}
+
+	public void setSubmitCorrectNumber(BigInteger submitCorrectNumber) {
+		this.submitCorrectNumber = submitCorrectNumber;
+	}
+
+	public BigInteger getSubmitNumber() {
+		return this.submitNumber;
+	}
+
+	public void setSubmitNumber(BigInteger submitNumber) {
+		this.submitNumber = submitNumber;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUsualFaultAnswers() {
+		return this.usualFaultAnswers;
+	}
+
+	public void setUsualFaultAnswers(String usualFaultAnswers) {
+		this.usualFaultAnswers = usualFaultAnswers;
+	}
+
+	public ExerciseItem getExerciseItem() {
+		return exerciseItem;
+	}
+
+	public void setExerciseItem(ExerciseItem exerciseItem) {
+		this.exerciseItem = exerciseItem;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java
new file mode 100644
index 0000000..da47267
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java
@@ -0,0 +1,191 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 用户做题 结果分析
+ * 
+ */
+@Entity
+@Table(name="exercise_item_analisis_u")
+@NamedQuery(name="ExerciseItemAnalisiU.findAll", query="SELECT e FROM ExerciseItemAnalisiU e")
+public class ExerciseItemAnalisiU implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_ANALISIS_U_ID", unique=true, nullable=false, length=32)
+	private String exerciseAnalisisUId;
+
+	@Column(name="ACCURACY",precision=10, scale=2)
+	private BigDecimal accuracy;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	@Column(name="SUBMIT_CORRECT_NUMBER")
+	private BigInteger submitCorrectNumber;
+
+	@Column(name="SUBMIT_NUMBER")
+	private BigInteger submitNumber;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	public ExerciseItemAnalisiU() {
+	}
+
+	public BigDecimal getAccuracy() {
+		return this.accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public BigInteger getSubmitCorrectNumber() {
+		return this.submitCorrectNumber;
+	}
+
+	public void setSubmitCorrectNumber(BigInteger submitCorrectNumber) {
+		this.submitCorrectNumber = submitCorrectNumber;
+	}
+
+	public BigInteger getSubmitNumber() {
+		return this.submitNumber;
+	}
+
+	public void setSubmitNumber(BigInteger submitNumber) {
+		this.submitNumber = submitNumber;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getExerciseAnalisisUId() {
+		return exerciseAnalisisUId;
+	}
+
+	public void setExerciseAnalisisUId(String exerciseAnalisisUId) {
+		this.exerciseAnalisisUId = exerciseAnalisisUId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswer.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswer.java
new file mode 100644
index 0000000..e461290
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswer.java
@@ -0,0 +1,143 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the exercise_item_answer database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_item_answer")
+@NamedQuery(name="ExerciseItemAnswer.findAll", query="SELECT e FROM ExerciseItemAnswer e")
+public class ExerciseItemAnswer implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_ANSWER_ID", unique=true, nullable=false, length=32)
+	private String exerciseAnswerId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public ExerciseItemAnswer() {
+	}
+
+	public String getExerciseAnswerId() {
+		return this.exerciseAnswerId;
+	}
+
+	public void setExerciseAnswerId(String exerciseAnswerId) {
+		this.exerciseAnswerId = exerciseAnswerId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java
new file mode 100644
index 0000000..9ec0423
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java
@@ -0,0 +1,84 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+/**
+ * 练习答案提交结果数据
+ * @author zhiyong
+ *
+ */
+public class ExerciseItemAnswerData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+
+	/**
+	 * 答案ID
+	 */
+	private String answerUId;
+	
+	/**  练习id  */
+	private String exerciseId;
+	
+	/** 题目类型   */
+	private int type;
+
+	/** 选择答案  */
+	private String answer;
+
+	/** 是否正确  0:错误  1:正确  */
+	private String correct;
+	
+	/**主观题打分 */
+	private String teacherScore;
+
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(String correct) {
+		this.correct = correct;
+	}
+
+	public String getAnswerUId() {
+		return answerUId;
+	}
+
+	public void setAnswerUId(String answerUId) {
+		this.answerUId = answerUId;
+	}
+
+	public String getTeacherScore() {
+		return teacherScore;
+	}
+
+	public void setTeacherScore(String teacherScore) {
+		this.teacherScore = teacherScore;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java
new file mode 100644
index 0000000..c89cc74
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java
@@ -0,0 +1,295 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_item_answer_u database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_item_answer_u")
+@NamedQuery(name="ExerciseItemAnswerU.findAll", query="SELECT e FROM ExerciseItemAnswerU e")
+public class ExerciseItemAnswerU implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ANSWER_U_ID", unique=true, nullable=false, length=32)
+	private String answerUId;
+
+	@Column(name="ANSWER")
+	private String answer;
+
+	@Column(name="CORRECT", length=128)
+	private byte correct;
+	
+	/** 未知 */
+	public static final byte CORRECT_UNKNOWN = 2;
+	
+	/** 正确 */
+	public static final byte CORRECT_RIGHT = 1;
+	
+	/** 错误 */
+	public static final byte CORRECT_ERROR = 0;
+	
+	/** 正确 */
+	public static final String CORRECT_RIGHT_STR = "1";
+	
+	/** 错误 */
+	public static final String CORRECT_ERROR_STR = "0";
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+
+	@Column(name="EXERCISE_RECORD_ID", length=32)
+	private String exerciseRecordId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="TEACHER_SCORE",precision=10, scale=2)
+	private String  teacherScore;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_ITEM_ID", referencedColumnName="EXERCISE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseItem exerciseItem;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_RECORD_ID", referencedColumnName="RECORD_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseRecord exerciseRecord;
+	
+	// 用于成绩统计功能  add by zhanglinqing 2015-12-01 
+	@Transient 
+	private String lastAnswer;  // 修改答案时才有值
+	
+	//答案转换为文字
+	@Transient 
+	private String answerValue;
+	
+	@Transient  
+	private int updateStatus;  // 修改答案时才有值
+	
+	@Transient  
+	private String imgPath;//用户头像
+	
+	//答案为新增
+	public static final int STATUS_ADD = 1;
+	
+	//答案为修改时 上次错误本次修改为正确 统计正确结果 +1
+	public static final int STATUS_UPDATE_CORRECT = 2;
+	
+	//答案为修改时 上次正确本次修改为错误 统计正确结果 -1
+	public static final int STATUS_UPDATE_ERROR = 3;
+	
+	public ExerciseRecord getExerciseRecord() {
+		return exerciseRecord;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public void setExerciseRecord(ExerciseRecord exerciseRecord) {
+		this.exerciseRecord = exerciseRecord;
+	}
+
+	public String getAnswerValue() {
+		return StringUtils.isEmpty(answerValue)?answer:answerValue;
+	}
+
+	public void setAnswerValue(String answerValue) {
+		this.answerValue = answerValue;
+	}
+
+	public ExerciseItem getExerciseItem() {
+		return exerciseItem;
+	}
+
+	public void setExerciseItem(ExerciseItem exerciseItem) {
+		this.exerciseItem = exerciseItem;
+	}
+
+	public String getAnswerUId() {
+		return this.answerUId;
+	}
+
+	public void setAnswerUId(String answerUId) {
+		this.answerUId = answerUId;
+	}
+
+	public String getAnswer() {
+		return this.answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public byte getCorrect() {
+		return this.correct;
+	}
+
+	public void setCorrect(byte correct) {
+		this.correct = correct;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseItemId() {
+		return this.exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getExerciseRecordId() {
+		return this.exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	public String getLastAnswer() {
+		return lastAnswer;
+	}
+
+	public void setLastAnswer(String lastAnswer) {
+		this.lastAnswer = lastAnswer;
+	}
+	
+	public int getUpdateStatus() {
+		return updateStatus;
+	}
+
+	public void setUpdateStatus(int updateStatus) {
+		this.updateStatus = updateStatus;
+	}
+
+	public String getTeacherScore() {
+		return teacherScore;
+	}
+
+	public void setTeacherScore(String teacherScore) {
+		this.teacherScore = teacherScore;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemData.java
new file mode 100644
index 0000000..f2944e0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemData.java
@@ -0,0 +1,87 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.qxueyou.scc.base.model.BaseVO;
+
+/**
+ * 
+ * @author ody.yuan
+ *
+ */
+public class ExerciseItemData extends BaseVO implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	private Short type ;
+	
+	private Integer itemOrder ;
+	
+	private Integer docOrder ;
+	
+	private String title ;
+	
+	private String answer ;
+	
+	private String analysis ;
+	
+	private List<ExerciseOptionData> options ;
+
+	public Short getType() {
+		return type;
+	}
+
+	public void setType(Short type) {
+		this.type = type;
+	}
+
+	public Integer getItemOrder() {
+		return itemOrder;
+	}
+
+	public void setItemOrder(Integer itemOrder) {
+		this.itemOrder = itemOrder;
+	}
+
+	public Integer getDocOrder() {
+		return docOrder;
+	}
+
+	public void setDocOrder(Integer docOrder) {
+		this.docOrder = docOrder;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getAnalysis() {
+		return analysis;
+	}
+
+	public void setAnalysis(String analysis) {
+		this.analysis = analysis;
+	}
+
+	public List<ExerciseOptionData> getOptions() {
+		return options;
+	}
+
+	public void setOptions(List<ExerciseOptionData> options) {
+		this.options = options;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java
new file mode 100644
index 0000000..c03ea20
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java
@@ -0,0 +1,243 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_item_option database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_item_option")
+@NamedQuery(name="ExerciseItemOption.findAll", query="SELECT e FROM ExerciseItemOption e")
+public class ExerciseItemOption implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="OPTION_ID", unique=true, nullable=false, length=32)
+	private String optionId;
+
+	@Column(name="CHECKED")
+	private boolean checked;
+
+	@Column(name="CONTENT",length=32)
+	private String content;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="OPTION_ORDER", length=32)
+	private String optionOrder;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_ITEM_ID", referencedColumnName="EXERCISE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseItem exerciseItem;
+
+	@Transient
+	private List<ExerciseObjectImg> imgs;
+	
+	//选项图片地址
+	@Transient
+	private String imgPath;
+	
+	//接受前台传过来的分数
+	@Transient
+	private int score;
+	
+	//接受前台传过来的分数id
+	@Transient
+	private String exerciseItemScoreId;
+	
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getExerciseItemScoreId() {
+		return exerciseItemScoreId;
+	}
+
+	public void setExerciseItemScoreId(String exerciseItemScoreId) {
+		this.exerciseItemScoreId = exerciseItemScoreId;
+	}
+
+	public int getScore() {
+		return score;
+	}
+
+	public void setScore(int score) {
+		this.score = score;
+	}
+
+	public ExerciseItem getExerciseItem() {
+		return exerciseItem;
+	}
+
+	public void setExerciseItem(ExerciseItem exerciseItem) {
+		this.exerciseItem = exerciseItem;
+	}
+
+	public ExerciseItemOption() {
+	}
+
+	public String getOptionId() {
+		return this.optionId;
+	}
+
+	public String getExerciseItemId() {
+		return exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public void setOptionId(String optionId) {
+		this.optionId = optionId;
+	}
+
+	public boolean getChecked() {
+		return this.checked;
+	}
+
+	public void setChecked(boolean checked) {
+		this.checked = checked;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getOptionOrder() {
+		return this.optionOrder;
+	}
+
+	public void setOptionOrder(String optionOrder) {
+		this.optionOrder = optionOrder;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<ExerciseObjectImg> getImgs() {
+		return imgs;
+	}
+
+	public void setImgs(List<ExerciseObjectImg> imgs) {
+		this.imgs = imgs;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemScore.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemScore.java
new file mode 100644
index 0000000..aa86de3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemScore.java
@@ -0,0 +1,207 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the EXERCISE_ITEM_SCORE database table.
+ * 
+ */
+@Entity
+@Table(name="EXERCISE_ITEM_SCORE")
+@NamedQuery(name="ExerciseItemScore.findAll", query="SELECT e FROM ExerciseItemScore e")
+public class ExerciseItemScore implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_ITEM_SCORE_ID", unique=true, nullable=false, length=32)
+	private String exerciseItemScoreId;
+	
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+	
+	@Column(name="GROUP_ID", length=32)
+	private String groupId;
+	
+	@Column(name="EXERCISE_ITEM_ANSWER", length=128)
+	private String exerciseItemAnswer;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private String score;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="ATTRIBUTE1", length=100)
+	private String attribute1;
+	
+	@Column(name="ATTRIBUTE2", length=200)
+	private String attribute2;
+
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_ITEM_ID", referencedColumnName="EXERCISE_ID",updatable=false,insertable=false)
+	@JsonIgnoreProperties("scores")
+	private ExerciseItem exerciseItem;
+	
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getScore() {
+		return score;
+	}
+
+	public void setScore(String score) {
+		this.score = score;
+	}
+
+	public String getExerciseItemScoreId() {
+		return exerciseItemScoreId;
+	}
+
+	public void setExerciseItemScoreId(String exerciseItemScoreId) {
+		this.exerciseItemScoreId = exerciseItemScoreId;
+	}
+
+	public String getExerciseItemId() {
+		return exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+
+	public String getExerciseItemAnswer() {
+		return exerciseItemAnswer;
+	}
+
+	public void setExerciseItemAnswer(String exerciseItemAnswer) {
+		this.exerciseItemAnswer = exerciseItemAnswer;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemSet.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemSet.java
new file mode 100644
index 0000000..2062b3a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemSet.java
@@ -0,0 +1,241 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_exam_item_types database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_item_set")
+@NamedQuery(name="ExerciseItemSet.findAll", query="SELECT e FROM ExerciseItemSet e")
+public class ExerciseItemSet implements Serializable, ITrace {
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = 6458308657314719506L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")	
+	@Column(name="set_id")
+	private String setId;
+	
+	@Column(name="blank_score")
+	private Double blankScore = 0.0; 
+
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	@JsonIgnore
+	private String creator;
+
+	@JsonIgnore
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="half_right_score")
+	private Double halfRightScore = 0.0;
+
+	@Column(name="item_count")
+	private int itemCount = 0;
+
+	@Column(name="item_type")
+	private short itemType = 0;
+
+	@Column(name="right_score")
+	private Double rightScore = 0.0;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name="wrong_score")
+	private Double wrongScore = 0.0;
+	
+	@Column(name="exercise_Info_Id")
+	private String exerciseInfoId;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_INFO_ID",referencedColumnName="EXERCISE_INFO_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ExerciseInfo exerciseInfo;
+	
+	@Column(name="source_group_id")
+	private String sourceGroupId;
+
+	public ExerciseItemSet() {
+	}
+	
+	public ExerciseInfo getExerciseInfo() {
+		return exerciseInfo;
+	}
+
+	public void setExerciseInfo(ExerciseInfo exerciseInfo) {
+		this.exerciseInfo = exerciseInfo;
+	}
+
+	public String getExerciseInfoId() {
+		return exerciseInfoId;
+	}
+
+	public void setExerciseInfoId(String exerciseInfoId) {
+		this.exerciseInfoId = exerciseInfoId;
+	}
+
+	public Double getBlankScore() {
+		return this.blankScore;
+	}
+
+	public void setBlankScore(Double blankScore) {
+		this.blankScore = blankScore;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Double getHalfRightScore() {
+		return halfRightScore;
+	}
+
+	public void setHalfRightScore(Double halfRightScore) {
+		this.halfRightScore = halfRightScore;
+	}
+
+	public int getItemCount() {
+		return this.itemCount;
+	}
+
+	public void setItemCount(int itemCount) {
+		this.itemCount = itemCount;
+	}
+
+	public short getItemType() {
+		return this.itemType;
+	}
+
+	public void setItemType(short itemType) {
+		this.itemType = itemType;
+	}
+
+	public Double getRightScore() {
+		return this.rightScore;
+	}
+
+	public void setRightScore(Double rightScore) {
+		this.rightScore = rightScore;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Double getWrongScore() {
+		return this.wrongScore;
+	}
+
+	public void setWrongScore(Double wrongScore) {
+		this.wrongScore = wrongScore;
+	}
+
+	public String getSetId() {
+		return setId;
+	}
+
+	public void setSetId(String setId) {
+		this.setId = setId;
+	}
+
+	public String getSourceGroupId() {
+		return sourceGroupId;
+	}
+
+	public void setSourceGroupId(String sourceGroupId) {
+		this.sourceGroupId = sourceGroupId;
+	}
+	
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java
new file mode 100644
index 0000000..7073044
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.exercise.model;
+
+
+/**
+ * 练习每道题目的统计信息VO
+ * @author zhiyong
+ *
+ */
+public class ExerciseItemStatis {
+	// 练习id
+	private String exerciseId;
+	// 统计总个数
+	private int allCount;
+	// 正确个数
+	private int correctCount;
+
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	public int getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(int allCount) {
+		this.allCount = allCount;
+	}
+
+	public int getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(int correctCount) {
+		this.correctCount = correctCount;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java
new file mode 100644
index 0000000..deadc14
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java
@@ -0,0 +1,365 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the EXERCISE_OPTION_STATISTICS database table.
+ * 
+ */
+@Entity
+@Table(name="EXERCISE_ITEM_STATISTICS")
+@NamedQuery(name="ExerciseItemStatistics.findAll", query="SELECT e FROM ExerciseItemStatistics e")
+public class ExerciseItemStatistics implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ITEM_STATISTICS_ID", unique=true, nullable=false, length=32)
+	private String itemStatisticsId;
+
+	@Column(name="EXERCISE_ITEM_TITEL", length=2000)
+	private String exerciseItemTitel;
+
+	@Column(name="EXERCISE_ITEM_TYPE")
+	private short exerciseItemType;
+	
+	@Transient
+	private String itemTypeName;
+	
+	@Transient
+	private Integer itemNo;
+	
+	@Transient
+	private String orgAccuracyShow;
+	
+	@Transient
+	private String classAccuracyShow;
+
+	@Column(name="CORRECT_ANSWER", length=32)
+	private String correctAnswer;
+
+	@Column(name="USUAL_FAULT_ANSWERS", length=255)
+	private String usualFaultAnswers;
+	
+	@Column(name="GROUP_ID", length=32) 
+	private String groupId;
+	
+	@Column(name="ORG_ID", length=32) 
+	private String orgId;
+	
+	// 机构统计  正确次数
+	@Column(name="ORG_CORRECT_NUM")
+	private BigInteger orgCorrectNum;
+
+	@Column(name="ORG_TOTAL_NUM") 
+	private BigInteger orgTotalNum;
+	
+	// 机构统计 正确率
+	@Column(name="ORG_ACCURACY", precision=10, scale=2)
+	private BigDecimal orgAccuracy;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	// 班级统计  正确次数
+	@Column(name="CLASS_CORRECT_NUM")
+	private BigInteger classCorrectNum;
+
+	@Column(name="CLASS_TOTAL_NUM") 
+	private BigInteger classTotalNum;
+	
+	// 班级统计 正确率
+	@Column(name="CLASS_ACCURACY", precision=10, scale=2)
+	private BigDecimal classAccuracy;
+	
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	
+	public ExerciseItemStatistics() {
+	}
+	
+	
+	public String getItemStatisticsId() {
+		return itemStatisticsId;
+	}
+
+	public void setItemStatisticsId(String itemStatisticsId) {
+		this.itemStatisticsId = itemStatisticsId;
+	}
+
+	public String getExerciseItemTitel() {
+		return exerciseItemTitel;
+	}
+
+	public void setExerciseItemTitel(String exerciseItemTitel) {
+		this.exerciseItemTitel = exerciseItemTitel;
+	}
+
+	public short getExerciseItemType() {
+		return exerciseItemType;
+	}
+
+	public void setExerciseItemType(short exerciseItemType) {
+		this.exerciseItemType = exerciseItemType;
+	}
+
+	public String getCorrectAnswer() {
+		return correctAnswer;
+	}
+
+	public void setCorrectAnswer(String correctAnswer) {
+		this.correctAnswer = correctAnswer;
+	}
+
+	public String getUsualFaultAnswers() {
+		return usualFaultAnswers;
+	}
+
+	public void setUsualFaultAnswers(String usualFaultAnswers) {
+		this.usualFaultAnswers = usualFaultAnswers;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+
+	public BigDecimal getClassAccuracy() {
+		return classAccuracy;
+	}
+
+	public void setClassAccuracy(BigDecimal classAccuracy) {
+		this.classAccuracy = classAccuracy;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+	
+	public BigInteger getClassCorrectNum() {
+		return classCorrectNum;
+	}
+
+	public void setClassCorrectNum(BigInteger classCorrectNum) {
+		this.classCorrectNum = classCorrectNum;
+	}
+
+	public BigInteger getClassTotalNum() {
+		return classTotalNum;
+	}
+
+	public void setClassTotalNum(BigInteger classTotalNum) {
+		this.classTotalNum = classTotalNum;
+	}
+
+	public BigInteger getOrgCorrectNum() {
+		return orgCorrectNum;
+	}
+
+	public void setOrgCorrectNum(BigInteger orgCorrectNum) {
+		this.orgCorrectNum = orgCorrectNum;
+	}
+
+	public BigInteger getOrgTotalNum() {
+		return orgTotalNum;
+	}
+
+	public void setOrgTotalNum(BigInteger orgTotalNum) {
+		this.orgTotalNum = orgTotalNum;
+	}
+
+	public BigDecimal getOrgAccuracy() {
+		return orgAccuracy;
+	}
+
+	public void setOrgAccuracy(BigDecimal orgAccuracy) {
+		this.orgAccuracy = orgAccuracy;
+	}
+
+	public String getExerciseItemId() {
+		return exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+	
+	@Override
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	@Override
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Override
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	@Override
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Override
+	public String getCreator() {
+		return this.creator;
+	}
+
+	@Override
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	@Override
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	@Override
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Override
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	@Override
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Override
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	@Override
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+	public String getItemTypeName() {
+		return itemTypeName;
+	}
+
+
+	public void setItemTypeName(String itemTypeName) {
+		this.itemTypeName = itemTypeName;
+	}
+
+
+	public Integer getItemNo() {
+		return itemNo;
+	}
+
+
+	public void setItemNo(Integer itemNo) {
+		this.itemNo = itemNo;
+	}
+
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+
+	public String getOrgAccuracyShow() {
+		return orgAccuracyShow;
+	}
+
+
+	public void setOrgAccuracyShow(String orgAccuracyShow) {
+		this.orgAccuracyShow = orgAccuracyShow;
+	}
+
+
+	public String getClassAccuracyShow() {
+		return classAccuracyShow;
+	}
+
+
+	public void setClassAccuracyShow(String classAccuracyShow) {
+		this.classAccuracyShow = classAccuracyShow;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java
new file mode 100644
index 0000000..7a8979f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java
@@ -0,0 +1,182 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_item_img database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_object_img")
+@NamedQuery(name="ExerciseObjectImg.findAll", query="SELECT e FROM ExerciseObjectImg e")
+public class ExerciseObjectImg implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="IMG_ID", unique=true, nullable=false, length=32)
+	private String imgId;
+
+	@Column(name="EXERCISE_OBJECT_ID", length=32)
+	private String exerciseObjectId;
+	
+	@Column(name="IMG_PATH", length=256)
+	private String imgPath;
+	
+	@Column(name="IMG_ORDER")
+	private Integer imgOrder;
+	
+	@Column(name="OBJECT_TYPE")
+	private Integer objectType;
+	
+	/** 对象类型   1:标题   2:选项 */
+	public static final int OBJECT_TYPE_ITEM = 1;
+	
+	public static final int OBJECT_TYPE_ITEM_OPTION = 2;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public ExerciseObjectImg() {
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getImgId() {
+		return imgId;
+	}
+
+	public void setImgId(String imgId) {
+		this.imgId = imgId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getExerciseObjectId() {
+		return exerciseObjectId;
+	}
+
+	public void setExerciseObjectId(String exerciseObjectId) {
+		this.exerciseObjectId = exerciseObjectId;
+	}
+
+	public Integer getImgOrder() {
+		return imgOrder;
+	}
+
+	public void setImgOrder(Integer imgOrder) {
+		this.imgOrder = imgOrder;
+	}
+
+	public Integer getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(Integer objectType) {
+		this.objectType = objectType;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionData.java
new file mode 100644
index 0000000..2120a06
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionData.java
@@ -0,0 +1,46 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+import com.qxueyou.scc.base.model.BaseVO;
+
+/**
+ * 
+ * @author ody.yuan
+ *
+ */
+public class ExerciseOptionData extends BaseVO implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	private String optionOrder;
+	
+	private boolean checked;
+	
+	private String content;
+
+	public String getOptionOrder() {
+		return optionOrder;
+	}
+
+	public void setOptionOrder(String optionOrder) {
+		this.optionOrder = optionOrder;
+	}
+
+	public boolean isChecked() {
+		return checked;
+	}
+
+	public void setChecked(boolean checked) {
+		this.checked = checked;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java
new file mode 100644
index 0000000..5df0977
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java
@@ -0,0 +1,299 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the EXERCISE_OPTION_STATISTICS database table.
+ * 
+ */
+@Entity
+@Table(name="EXERCISE_OPTION_STATISTICS")
+@NamedQuery(name="ExerciseOptionStatistics.findAll", query="SELECT e FROM ExerciseOptionStatistics e")
+public class ExerciseOptionStatistics implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="OPTION_STATISTICS_ID", unique=true, nullable=false, length=32)
+	private String optionStatisticsId;
+
+	@Column(name="OPTION_ID", length=32)
+	private String optionId;
+
+	@Column(name="OPTION_ORDER", length=32)
+	private String optionOrder;
+
+	@Column(name="CONTENT", length=2000)
+	private String content;
+	
+	@Column(name="CHECKED")
+	private boolean checked;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	// 班级统计   选中该选项的次数
+	@Column(name="CLASS_CORRECT_NUM")
+	private BigInteger classCorrectNum;  
+	
+	@Column(name="CLASS_TOTAL_NUM") 
+	private BigInteger classTotalNum;
+	
+	// 班级统计 选中率
+	@Column(name="CLASS_ACCURACY", precision=10, scale=2)
+	private BigDecimal classAccuracy;
+	
+	@Column(name="ORG_ID", length=32) 
+	private String orgId;
+	
+	// 机构统计   选中该选项的次数
+	@Column(name="ORG_CORRECT_NUM")
+	private BigInteger orgCorrectNum;
+
+	@Column(name="ORG_TOTAL_NUM") 
+	private BigInteger orgTotalNum;
+	
+	// 机构统计 选中率
+	@Column(name="ORG_ACCURACY", precision=10, scale=2)
+	private BigDecimal orgAccuracy;
+	
+	@Column(name="EXERCISE_ITEM_ID", length=32)
+	private String exerciseItemId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	
+	public ExerciseOptionStatistics() {
+	}
+	
+	public String getOptionStatisticsId() {
+		return optionStatisticsId;
+	}
+
+	public void setOptionStatisticsId(String optionStatisticsId) {
+		this.optionStatisticsId = optionStatisticsId;
+	}
+
+	public String getOptionId() {
+		return optionId;
+	}
+
+	public void setOptionId(String optionId) {
+		this.optionId = optionId;
+	}
+
+
+	public String getOptionOrder() {
+		return optionOrder;
+	}
+
+	public void setOptionOrder(String optionOrder) {
+		this.optionOrder = optionOrder;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public boolean getChecked() {
+		return checked;
+	}
+
+	public void setChecked(boolean checked) {
+		this.checked = checked;
+	}
+	
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+
+	public BigDecimal getClassAccuracy() {
+		return classAccuracy;
+	}
+
+	public void setClassAccuracy(BigDecimal classAccuracy) {
+		this.classAccuracy = classAccuracy;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+	
+	public BigInteger getClassCorrectNum() {
+		return classCorrectNum;
+	}
+
+	public void setClassCorrectNum(BigInteger classCorrectNum) {
+		this.classCorrectNum = classCorrectNum;
+	}
+
+	public BigInteger getClassTotalNum() {
+		return classTotalNum;
+	}
+
+	public void setClassTotalNum(BigInteger classTotalNum) {
+		this.classTotalNum = classTotalNum;
+	}
+
+	public BigInteger getOrgCorrectNum() {
+		return orgCorrectNum;
+	}
+
+	public void setOrgCorrectNum(BigInteger orgCorrectNum) {
+		this.orgCorrectNum = orgCorrectNum;
+	}
+
+	public BigInteger getOrgTotalNum() {
+		return orgTotalNum;
+	}
+
+	public void setOrgTotalNum(BigInteger orgTotalNum) {
+		this.orgTotalNum = orgTotalNum;
+	}
+
+	public BigDecimal getOrgAccuracy() {
+		return orgAccuracy;
+	}
+
+	public void setOrgAccuracy(BigDecimal orgAccuracy) {
+		this.orgAccuracy = orgAccuracy;
+	}
+
+	public String getExerciseItemId() {
+		return exerciseItemId;
+	}
+
+	public void setExerciseItemId(String exerciseItemId) {
+		this.exerciseItemId = exerciseItemId;
+	}
+	
+	@Override
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	@Override
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Override
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	@Override
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Override
+	public String getCreator() {
+		return this.creator;
+	}
+
+	@Override
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	@Override
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	@Override
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Override
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	@Override
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Override
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	@Override
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java
new file mode 100644
index 0000000..22d4764
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+
+public class ExerciseParse implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	//解析结果:成功,失败,上一类型
+	private Integer parseResult;
+	
+	//解析类型:Doc的类型     习题主题、习题选项、习题解析
+	private String parseType;
+	
+	//解析行的文本
+	private String parseLine;
+	
+	public ExerciseParse(Integer parseResult){
+		this.parseResult=parseResult;
+	}
+	
+	public ExerciseParse(Integer parseResult,String parseLine){
+		this.parseResult=parseResult;
+		this.parseLine=parseLine;
+	}
+	
+	public ExerciseParse(Integer parseResult,String parseType,String parseLine){
+		this.parseResult=parseResult;
+		this.parseType=parseType;
+		this.parseLine=parseLine;
+	}
+
+	public Integer getParseResult() {
+		return parseResult;
+	}
+
+	public void setParseResult(Integer parseResult) {
+		this.parseResult = parseResult;
+	}
+
+	public String getParseType() {
+		return parseType;
+	}
+
+	public void setParseType(String parseType) {
+		this.parseType = parseType;
+	}
+
+	public String getParseLine() {
+		return parseLine;
+	}
+
+	public void setParseLine(String parseLine) {
+		this.parseLine = parseLine;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java
new file mode 100644
index 0000000..1702e52
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class ExerciseParseResult implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	//文本  解析结果
+	private List<ExerciseImportResult> lstResult;
+	
+	//解析出的练习题
+	private List<ExerciseItem> lstItems ;
+	
+	//解析出的练习题个数
+	private Integer itemCount;
+	
+	//解析结果
+	private boolean parseFlag;
+	
+	private String parseInfo ;
+	
+	public ExerciseParseResult( ){
+	}
+	
+	public ExerciseParseResult(boolean parseFlag , String parseInfo ){
+		this.parseFlag = parseFlag ;
+		this.parseInfo = parseInfo ;
+	}
+
+	public List<ExerciseImportResult> getLstResult() {
+		return lstResult;
+	}
+
+	public void setLstResult(List<ExerciseImportResult> lstResult) {
+		this.lstResult = lstResult;
+	}
+
+	public List<ExerciseItem> getLstItems() {
+		return lstItems;
+	}
+
+	public void setLstItems(List<ExerciseItem> lstItems) {
+		this.lstItems = lstItems;
+	}
+
+	public Integer getItemCount() {
+		return itemCount;
+	}
+
+	public void setItemCount(Integer itemCount) {
+		this.itemCount = itemCount;
+	}
+
+	public boolean getParseFlag() {
+		return parseFlag;
+	}
+
+	public void setParseFlag(boolean parseFlag) {
+		this.parseFlag = parseFlag;
+	}
+
+	public String getParseInfo() {
+		return parseInfo;
+	}
+
+	public void setParseInfo(String parseInfo) {
+		this.parseInfo = parseInfo;
+	}
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java
new file mode 100644
index 0000000..6700492
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="exercise_re_course")
+public class ExerciseReCourse implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXERCISE_COURSE_ID", unique=true, nullable=false, length=32)
+	private String exerciseCourseId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  科目ID */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/**  讲义ID  */
+	@Column(name="GROUP_ID", length=32)
+	private String groupId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/**  机构ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	/** 练习管理排序,管理员排序 */
+	@Column(name="ORDER_NUM")
+	private Integer orderNum;
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	
+
+
+
+	public String getExerciseCourseId() {
+		return exerciseCourseId;
+	}
+
+	public void setExerciseCourseId(String exerciseCourseId) {
+		this.exerciseCourseId = exerciseCourseId;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecentRecord.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecentRecord.java
new file mode 100644
index 0000000..d0cb5d6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecentRecord.java
@@ -0,0 +1,213 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_recent_record database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_recent_record")
+@NamedQuery(name="ExerciseRecentRecord.findAll", query="SELECT e FROM ExerciseRecentRecord e")
+public class ExerciseRecentRecord implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RECENT_RECORD_ID", unique=true, nullable=false, length=32)
+	private String recentRecordId;
+
+	@Column(name="EXERCISE_RECORD_ID", length=32)
+	private String exerciseRecordId;
+	
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+	
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public ExerciseRecentRecord() {
+		
+	}
+
+	public String getRecentRecordId() {
+		return recentRecordId;
+	}
+
+	public void setRecentRecordId(String recentRecordId) {
+		this.recentRecordId = recentRecordId;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java
new file mode 100644
index 0000000..a102a73
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java
@@ -0,0 +1,469 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.Formula;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the exercise_record database table.
+ * 
+ */
+@Entity
+@Table(name="exercise_record")
+@NamedQuery(name="ExerciseRecord.findAll", query="SELECT e FROM ExerciseRecord e")
+public class ExerciseRecord implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RECORD_ID", unique=true, nullable=false, length=32)
+	private String recordId;
+
+	@Column(name="ACCURACY", precision=10, scale=2)
+	private BigDecimal accuracy;
+
+	@Column(name="COMPLETION_RATE", precision=10, scale=2)
+	private BigDecimal completionRate;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+
+	@Column(name="NAME", length=255)
+	private String name;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="EXAM_BATCH_ID", length=32)
+	private String examBatchId;
+
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXERCISE_GROUP_ID",referencedColumnName="GROUP_ID",updatable=false,insertable=false)
+	private ExerciseGroup group;
+	
+	@Column(name="STATUS") 
+	private String status;
+	
+	/** 0:未交卷 1:已经交卷  */
+	public final static String STATUS_NOT_SUBMIT = "0";
+	
+	public final static String STATUS_SUBMIT = "1";
+	
+	public final static String STATUS_CHECK = "3";
+	
+	/** 当前做题最大题号  */
+	@Column(name="TITLE_MAX_NUMBER", length=32)
+	private String titleMaxNumber;
+	
+	@Column(name="CORRECT_COUNT")
+	private BigInteger correctCount;
+	
+	@Column(name="DO_COUNT")
+	private BigInteger doCount;
+	
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+	
+	@Column(name = "REMAINING_SECONDS")
+	private int remainingSeconds;
+	
+	@Column(name = "SUBMIT_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+	
+	@Column(name="TOTAL_SCORE",precision=10, scale=2)
+	private BigDecimal totalScore;
+	
+	@Column(name="PASSING_SCORE",precision=10, scale=2)
+	private BigDecimal passingScore;
+	
+	@Column(name="OBJ_TOTAL_SCORE",precision=10, scale=2)
+	private BigDecimal objTotalScore;
+	
+	@Column(name="SUB_TOTAL_SCORE",precision=10, scale=2)
+	private BigDecimal subTotalScore;
+	
+	@Column(name="OBJ_SCORE",precision=10, scale=2)
+	private BigDecimal objScore;
+	
+	@Column(name="SUB_SCORE",precision=10, scale=2)
+	private BigDecimal subScore;
+	
+	@Column(name = "OBJ_ITEM_COUNT")
+	private int objItemCount;
+	
+	@Column(name = "SUB_ITEM_COUNT")
+	private int subItemCount;
+	
+	@OneToMany(fetch = FetchType.LAZY,mappedBy = "exerciseRecord")
+	private List<ExerciseItemAnswerU> exerciseItemAnswerU;
+	
+	//班级名称
+	@Transient
+	private String className;
+	
+	//答题用户
+	@Formula("(select u.name from user u WHERE u.USER_ID=USER_ID and u.DELETE_FLAG = 0)")
+	private String userName;
+	
+	public List<ExerciseItemAnswerU> getExerciseItemAnswerU() {
+		return exerciseItemAnswerU;
+	}
+
+	public void setExerciseItemAnswerU(List<ExerciseItemAnswerU> exerciseItemAnswerU) {
+		this.exerciseItemAnswerU = exerciseItemAnswerU;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getRecordId() {
+		return this.recordId;
+	}
+
+	public void setRecordId(String recordId) {
+		this.recordId = recordId;
+	}
+
+	public BigDecimal getAccuracy() {
+		return this.accuracy;
+	}
+
+	public void setAccuracy(BigDecimal accuracy) {
+		this.accuracy = accuracy;
+	}
+
+	public BigDecimal getCompletionRate() {
+		return this.completionRate;
+	}
+
+	public void setCompletionRate(BigDecimal completionRate) {
+		this.completionRate = completionRate;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseGroupId() {
+		return this.exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getTitleMaxNumber() {
+		return titleMaxNumber;
+	}
+
+	public void setTitleMaxNumber(String titleMaxNumber) {
+		this.titleMaxNumber = titleMaxNumber;
+	}
+
+	public ExerciseGroup getGroup() {
+		return group;
+	}
+
+	public void setGroup(ExerciseGroup group) {
+		this.group = group;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public BigInteger getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(BigInteger correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public BigInteger getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(BigInteger doCount) {
+		this.doCount = doCount;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getExamBatchId() {
+		return examBatchId;
+	}
+
+	public void setExamBatchId(String examBatchId) {
+		this.examBatchId = examBatchId;
+	}
+
+	public int getRemainingSeconds() {
+		return remainingSeconds;
+	}
+
+	public void setRemainingSeconds(int remainingSeconds) {
+		this.remainingSeconds = remainingSeconds;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public BigDecimal getTotalScore() {
+		return totalScore;
+	}
+
+	public void setTotalScore(BigDecimal totalScore) {
+		this.totalScore = totalScore;
+	}
+
+	public BigDecimal getPassingScore() {
+		return passingScore;
+	}
+
+	public void setPassingScore(BigDecimal passingScore) {
+		this.passingScore = passingScore;
+	}
+
+	public BigDecimal getObjTotalScore() {
+		return objTotalScore;
+	}
+
+	public void setObjTotalScore(BigDecimal objTotalScore) {
+		this.objTotalScore = objTotalScore;
+	}
+
+	public BigDecimal getSubTotalScore() {
+		return subTotalScore;
+	}
+
+	public void setSubTotalScore(BigDecimal subTotalScore) {
+		this.subTotalScore = subTotalScore;
+	}
+
+	public BigDecimal getObjScore() {
+		return objScore;
+	}
+
+	public void setObjScore(BigDecimal objScore) {
+		this.objScore = objScore;
+	}
+
+	public BigDecimal getSubScore() {
+		return subScore;
+	}
+
+	public void setSubScore(BigDecimal subScore) {
+		this.subScore = subScore;
+	}
+
+	public int getObjItemCount() {
+		return objItemCount;
+	}
+
+	public void setObjItemCount(int objItemCount) {
+		this.objItemCount = objItemCount;
+	}
+
+	public int getSubItemCount() {
+		return subItemCount;
+	}
+
+	public void setSubItemCount(int subItemCount) {
+		this.subItemCount = subItemCount;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultV.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultV.java
new file mode 100644
index 0000000..977a5a5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultV.java
@@ -0,0 +1,372 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+@Entity
+@Table(name = "exercise_result_v")
+public class ExerciseResultV implements java.io.Serializable {	
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2527653338692282584L;
+
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "exerciseInfoId", column = @Column(name = "EXERCISE_INFO_ID")),
+			@AttributeOverride(name = "studentId", column = @Column(name = "STUDENT_ID")),
+			@AttributeOverride(name = "classId", column = @Column(name = "CLASS_ID")),
+			})
+	private ExerciseResultVId id;
+	
+	@Column(name="EXERCISE_COMPLETE_ID")
+	private String exerciseCompleteId;
+	
+	@Column(name="EXERCISE_NAME")
+	private String exerciseName;
+	
+	@Column(name="EXERCISE_STATUS")
+	private short exerciseStatus;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name = "END_TIME")
+	private Date endTime;
+		
+	@Column(name = "TYPE")
+	private short type;
+	
+	@Column(name="SCORE")
+	private BigDecimal score;
+	
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+	
+	@Column(name="SUBJECT_NAME")
+	private String subjectName;
+	
+	@Column(name = "PASSING_SCORE")
+	private BigDecimal passingScore;
+	
+	@Column(name="REMIND")
+	private String remind;
+	
+	@Column(name="TEACHER_ID")
+	private String teacherId;
+	
+	@Column(name="TEACHER_NAME")
+	private String teacherName;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name = "CREATE_TIME")
+	private Date createTime;
+	
+	@Column(name="GROUP_ID")
+	private String groupId;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "SUBMIT_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+	
+	@Column(name="CLASS_NAME")
+	private String className;
+	
+	@Column(name="STUDENT_NO")
+	private String studentNo;
+	
+	@Column(name="STUDENT_NAME")
+	private String studentName;
+	
+	@Column(name="USER_ID")
+	private String userId;
+	
+	@Column(name="STUDENT_SCORE")
+	private BigDecimal studentScore;
+	
+	@Column(name="COMPLETE_STATUS")
+	private short completeStatus;
+
+	@Column(name="FILE_ID")
+	private String fileId;
+	
+	@Column(name="FILE_PATH")
+	private String filePath;
+		
+	@Column(name="TARGET_OBJECT_ID")
+	private String targetObjectId;
+
+	@Column(name="TEACHER_COMMENT")
+	private String teacherComment;
+	
+	@Column(name="UPLOAD_DESC")
+	private String uploadDesc;
+	
+	@Column(name = "SEX")
+	private short sex;
+	
+	@Column(name = "MOBILE_PHONE")
+	private String mobilePhone;
+
+	public ExerciseResultV() {
+	}
+	
+	public String getStudentName() {
+		return studentName;
+	}
+
+	public void setStudentName(String studentName) {
+		this.studentName = studentName;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+	
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public BigDecimal getPassingScore() {
+		return passingScore;
+	}
+
+	public void setPassingScore(BigDecimal passingScore) {
+		this.passingScore = passingScore;
+	}
+	
+	public ExerciseResultVId getId() {
+		return id;
+	}
+
+	public void setId(ExerciseResultVId id) {
+		this.id = id;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public String getExerciseName() {
+		return exerciseName;
+	}
+
+	public void setExerciseName(String exerciseName) {
+		this.exerciseName = exerciseName;
+	}
+
+	public short getExerciseStatus() {
+		return exerciseStatus;
+	}
+
+	public void setExerciseStatus(short exerciseStatus) {
+		this.exerciseStatus = exerciseStatus;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public String getExerciseCompleteId() {
+		return exerciseCompleteId;
+	}
+
+	public void setExerciseCompleteId(String exerciseCompleteId) {
+		this.exerciseCompleteId = exerciseCompleteId;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public String getRemind() {
+		return remind;
+	}
+
+	public void setRemind(String remind) {
+		this.remind = remind;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getStudentNo() {
+		return studentNo;
+	}
+
+	public void setStudentNo(String studentNo) {
+		this.studentNo = studentNo;
+	}
+
+	public BigDecimal getStudentScore() {
+		return studentScore;
+	}
+
+	public void setStudentScore(BigDecimal studentScore) {
+		this.studentScore = studentScore;
+	}
+
+	public short getCompleteStatus() {
+		return completeStatus;
+	}
+
+	public void setCompleteStatus(short completeStatus) {
+		this.completeStatus = completeStatus;
+	}
+
+	public String getFileId() {
+		return fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	public String getFilePath() {
+		return filePath;
+	}
+
+	public void setFilePath(String filePath) {
+		this.filePath = filePath;
+	}
+
+	public String getTargetObjectId() {
+		return targetObjectId;
+	}
+
+	public void setTargetObjectId(String targetObjectId) {
+		this.targetObjectId = targetObjectId;
+	}
+
+	public String getTeacherComment() {
+		return teacherComment;
+	}
+
+	public void setTeacherComment(String teacherComment) {
+		this.teacherComment = teacherComment;
+	}
+
+	public String getUploadDesc() {
+		return uploadDesc;
+	}
+
+	public void setUploadDesc(String uploadDesc) {
+		this.uploadDesc = uploadDesc;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public short getSex() {
+		return sex;
+	}
+
+	public void setSex(short sex) {
+		this.sex = sex;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultVId.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultVId.java
new file mode 100644
index 0000000..19867a6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseResultVId.java
@@ -0,0 +1,88 @@
+package com.qxueyou.scc.exercise.model;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * ExamResultVId generated by hbm2java
+ */
+@Embeddable
+public class ExerciseResultVId implements java.io.Serializable {
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = 8692825818826083872L;
+	
+	@Column(name = "EXERCISE_INFO_ID")
+	private String exerciseInfoId;
+	
+	@Column(name = "CLASS_ID")
+	private String classId;
+	
+	@Column(name = "STUDENT_ID")
+	private String studentId;
+
+	public ExerciseResultVId() {
+	}
+
+	public ExerciseResultVId(String exerciseInfoId, String classId, String studentId) {
+		this.exerciseInfoId = exerciseInfoId;
+		this.classId = classId;
+		this.studentId = studentId;
+	}
+	
+	public String getExerciseInfoId() {
+		return exerciseInfoId;
+	}
+
+	public void setExerciseInfoId(String exerciseInfoId) {
+		this.exerciseInfoId = exerciseInfoId;
+	}
+
+	public String getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof ExerciseResultVId))
+			return false;
+		ExerciseResultVId castOther = (ExerciseResultVId) other;
+
+		return (
+				((this.getExerciseInfoId() == castOther.getExerciseInfoId()) || (this.getExerciseInfoId() != null
+				&& castOther.getExerciseInfoId() != null && this.getExerciseInfoId().equals(castOther.getExerciseInfoId())))
+		
+				&& ((this.getStudentId() == castOther.getStudentId()) || (this.getStudentId() != null
+				&& castOther.getStudentId() != null && this.getStudentId().equals(castOther.getStudentId())))
+		
+				&& ((this.getClassId() == castOther.getClassId()) || (this.getClassId() != null
+				&& castOther.getClassId() != null && this.getClassId().equals(castOther.getClassId())))
+		);
+	}
+
+	public int hashCode() {
+		int result = 17;
+		result = 37 * result + (getExerciseInfoId() == null ? 0 : this.getExerciseInfoId().hashCode());
+		result = 37 * result + (getStudentId() == null ? 0 : this.getStudentId().hashCode());
+		result = 37 * result + (getClassId() == null ? 0 : this.getClassId().hashCode());
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java
new file mode 100644
index 0000000..ffab2dc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java
@@ -0,0 +1,206 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 练习答案提交结果数据
+ * @author zhiyong
+ *
+ */
+public class ExerciseSubmitAnswerData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+
+
+	/**  组id */
+	private String exerciseGroupId;
+	
+	/**  组id */
+	private String subjectId;
+
+	/** 记录id  */
+	private String exerciseRecordId;
+	
+	/**作业完成情况ID*/
+	private  String  exerciseCompleteId;
+	
+	/**作业ID*/
+	private  String  exerciseInfoId;
+	
+	/**   */
+	private String exerciseExtendId;
+	
+	/** 当前题号   */
+	private String currTitleNum;
+
+	/** 是否提交  0:未提交  1:提交  */
+	private String status;
+	
+	/**  练习类型  */
+	private String type;
+	
+	/** 本次习题已做的个数  */
+	private String doCount;
+	
+	/** 本次习题正确的个数  */
+	private String correctCount;
+	
+	/** 本套题目总数  */
+	private String allCount;
+	
+	/** 本套题目总数  */
+	private BigDecimal score;
+	
+	/**  练习题目集合  */
+	private List<ExerciseItemAnswerData> items;
+	
+	/**  做题时间  */
+	private String submitTime;
+	
+	/**  提交类型  1:已经重做过  */
+	private int submitType;
+	
+	private int remainingSeconds;
+
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public String getExerciseExtendId() {
+		return exerciseExtendId;
+	}
+
+	public void setExerciseExtendId(String exerciseExtendId) {
+		this.exerciseExtendId = exerciseExtendId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public List<ExerciseItemAnswerData> getItems() {
+		return items;
+	}
+
+	public void setItems(List<ExerciseItemAnswerData> items) {
+		this.items = items;
+	}
+
+	public String getCurrTitleNum() {
+		return currTitleNum;
+	}
+
+	public void setCurrTitleNum(String currTitleNum) {
+		this.currTitleNum = currTitleNum;
+	}
+
+	public String getDoCount() {
+		return doCount;
+	}
+
+	public void setDoCount(String doCount) {
+		this.doCount = doCount;
+	}
+
+	public String getCorrectCount() {
+		return correctCount;
+	}
+
+	public void setCorrectCount(String correctCount) {
+		this.correctCount = correctCount;
+	}
+
+	public String getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(String allCount) {
+		this.allCount = allCount;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(String submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public int getSubmitType() {
+		return submitType;
+	}
+
+	public void setSubmitType(int submitType) {
+		this.submitType = submitType;
+	}
+
+	public int getRemainingSeconds() {
+		return remainingSeconds;
+	}
+
+	public void setRemainingSeconds(int remainingSeconds) {
+		this.remainingSeconds = remainingSeconds;
+	}
+
+	public String getExerciseCompleteId() {
+		return exerciseCompleteId;
+	}
+
+	public void setExerciseCompleteId(String exerciseCompleteId) {
+		this.exerciseCompleteId = exerciseCompleteId;
+	}
+
+	public String getExerciseInfoId() {
+		return exerciseInfoId;
+	}
+
+	public void setExerciseInfoId(String exerciseInfoId) {
+		this.exerciseInfoId = exerciseInfoId;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java
new file mode 100644
index 0000000..06933fa
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.exercise.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 练习答案提交结果集合数据
+ * @author zhiyong
+ *
+ */
+public class ExerciseSubmitAnswerDataList implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4613854508218403663L;
+	
+	/** 练习类型  favor:全部收藏   fault:全部错题  也为空  */
+	private String exerciseType;
+	
+	/** 当前题号   */
+	private String currTitleNum;
+
+	/** 是否提交  0:未提交  1:提交  */
+	private String status;
+	
+	/** 混合list 可能错题、收藏都有  */
+	private List<ExerciseSubmitAnswerData> datas;
+
+	public List<ExerciseSubmitAnswerData> getDatas() {
+		return datas;
+	}
+
+	public void setDatas(List<ExerciseSubmitAnswerData> datas) {
+		this.datas = datas;
+	}
+
+	public String getExerciseType() {
+		return exerciseType;
+	}
+
+	public void setExerciseType(String exerciseType) {
+		this.exerciseType = exerciseType;
+	}
+
+	public String getCurrTitleNum() {
+		return currTitleNum;
+	}
+
+	public void setCurrTitleNum(String currTitleNum) {
+		this.currTitleNum = currTitleNum;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java
new file mode 100644
index 0000000..c07d6d6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java
@@ -0,0 +1,88 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+
+/**
+ * 作业完成信息类
+ * 
+ * @author kevin
+ * @createTime 2018-03-11
+ */
+public interface IExerciseCompleteService {
+
+	/**
+	 * 新增作业完成信息
+	 * 
+	 * @param exerciseCompleteInfo
+	 *            
+	 * @return 新增考试ID
+	 */
+	String addExerciseComplete(ExerciseCompleteInfo exerciseCompleteInfo);
+
+	/**
+	 * 删除作业完成信息
+	 * 
+	 * @param elxamIds
+	 *            作业完成信息ID
+	 * @return 
+	 */
+	Result deleteExerciseComplete(String[] exerciseCompleteIds);
+
+	/**
+	 * 更新作业完成信息
+	 * 
+	 * @param noticeId
+	 *            作业信息id
+	 * @return 
+	 */
+	Result updateExerciseComplete(ExerciseCompleteInfo exerciseCompleteInfo);
+
+	/**
+	 * 作业id  查询作业详情
+	 * @param exerciseCompleteId
+	 * @return
+	 */
+	ExerciseCompleteInfo queryExerciseCompleteDetail(String exerciseCompleteId);
+	
+	/**
+	 * 检查并初始化学生完成情况信息
+	 * @param exerciseInfoId
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	ExerciseCompleteInfo doCheckAndCreateExerciseCompleteInfo(String exerciseInfoId, String classId,String studentUserId);
+	
+	/**
+	 * 后台查询作业列表
+	 * @param keyword
+	 * @param exerciseInfoId
+	 * @param status
+	 * @return
+	 */
+	int listCount(String keyword, String exerciseInfoId, Short status);
+
+	/**
+	 * 后台查询作业列表
+	 * @param keyword
+	 * @param exerciseInfoId
+	 * @param status
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<ExerciseCompleteInfo> list(String keyword, String exerciseInfoId, Short status, Integer pageSize, Integer pageNum);
+	
+	/**
+	 * 根据作业ID,班级ID,学生ID,查询作业完成情况
+	 * @param exerciseInfoId
+	 * @param classId
+	 * @param studentUserId
+	 * @return
+	 */
+	ExerciseCompleteInfo queryCompleteInfo(String exerciseInfoId, String classId, String studentUserId);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java
new file mode 100644
index 0000000..c46e7c3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+
+public interface IExerciseCorrectionService {
+	
+	/**
+	 * app接口调用插入数据
+	 * @param groupId
+	 * @param groupName
+	 * @param exerciseNum
+	 * @param exerciseId
+	 * @param correctids
+	 * @param content
+	 * @return
+	 */
+	public abstract Result insertExerciseCorrection(String groupId,String groupName,String exerciseNum,String exerciseId,String correctids,String content);
+	
+	/**
+	 * 更新练习
+	 * @param item
+	 * @param lstOptions
+	 * @param analysis
+	 * @param correctionType
+	 * @return
+	 */
+	public abstract Result updateExerciseItemCorrection(ExerciseItem item, List<ExerciseItemOption> lstOptions,String analysis,short correctionType) ;
+	
+	/**
+	 * 根据纠错习题id查询提交者id
+	 * @param exerciseItemId 练习id
+	 * @return
+	 */
+	List<String> querySubmitorIdsByExerItemId(String exerciseItemId);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java
new file mode 100644
index 0000000..7956b8d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.exercise.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+
+public interface IExerciseDeepAnaService {
+	
+	/**
+	 * 文档解析完成
+	 * @param deepAnalysisId
+	 * @return
+	 */
+	public abstract Result updateExerciseDocStatus(String[] deepAnalysisId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java
new file mode 100644
index 0000000..a6a3ea1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java
@@ -0,0 +1,264 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExciseExtendReqData;
+import com.qxueyou.scc.exercise.model.ExerGroupResponseData;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseFaultRecord;
+import com.qxueyou.scc.exercise.model.ExerciseFavoriteRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerDataList;
+
+
+/**
+ * 练习扩展service
+ * @author zhiyong
+ *
+ */
+public interface IExerciseExtendService {
+	
+	/**
+	 * 计算错题统计信息
+	 * @param type
+	 * @return
+	 */
+	 Result doCalcExerFaultStatisticsByDay();
+	
+	/**
+	 * 查询错题统计信息
+	 * @param type
+	 * @return
+	 */
+	List<Map<String,Object>> doGetFaultStatisInfo(String type);
+	
+	/**
+	 * 查询错题本列表数据
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @return
+	 */
+	List<ExerGroupResponseData> queryExerciseFaultListData(int exerType, 
+			String subjectId,Pager pager);
+	
+
+	/**
+	 * 查询收藏本列表数据
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @return
+	 */
+	List<ExerGroupResponseData> queryExerciseFavorListData(int exerType, 
+			String subjectId,Pager pager);
+	
+	/**
+	 * 获取收藏练习数据
+	 * @param groupId
+	 * @return
+	 */
+	ExerItemResponseData queryExerciseFavorData(String groupId);
+	
+	/**
+	 * 获取收藏练习数据
+	 * @param groupId
+	 * @return
+	 */
+	Map<String,Object> queryExerciseMutiFavorData(String groupId);
+	
+	/**
+	 * 获取收藏练习答案数据
+	 * @param groupId
+	 * @return
+	 */
+	ExerItemResponseData queryExerciseFavorAnswerData(String groupId);
+	
+	
+	/**
+	 * 获取错题练习数据
+	 * @param groupId
+	 * @return
+	 */
+	ExerItemResponseData queryExerciseFaultData(String groupId);
+	
+	/**
+	 * 获取多套题错题练习数据
+	 * @param groupId
+	 * @return
+	 */
+	Map<String,Object> queryExerciseMutiFaultData(String groupId);
+	
+	/**
+	 * 获取错题练习组答案
+	 * @param groupId
+	 * @return
+	 */
+	ExerItemResponseData queryExerciseFaultAnswerData(String groupId);
+	
+	/**
+	 * 获取全部错题练习数据
+	 * @return
+	 */
+	ExerItemResponseData queryAllExerciseFaultData(Pager pager);
+	
+	
+	/**
+	 * 获取全部收藏练习数据
+	 * @return
+	 */
+	ExerItemResponseData queryAllExerciseFavorData(Pager pager);
+	
+	/**
+	 * 操作错题Book记录
+	 * @return
+	 */
+	Map<String,Object> doOperExerciseFaultRecordData(String subjectId, ExciseExtendReqData recordResult);
+	
+	/**
+	 * 操作收藏Book记录
+	 * @return
+	 */
+	Map<String,Object>  doOperExerciseFavorRecordData(String subjectId, ExciseExtendReqData recordResult);
+	
+	/**
+	 *提交单套题答案结果到db 
+	 * @return
+	 */
+	Result doSubmitExerciseAnswerData(ExerciseSubmitAnswerData answerResult);
+	
+	/**
+	 *提交多套题答案结果到db 
+	 * @return
+	 */
+	Map<String,Object> doSubmitMutiExerciseAnswerData(ExerciseSubmitAnswerDataList answerDataList);
+	
+	/**
+	 *提交错题结果到db
+	 * @return
+	 */
+	Map<String,Object> doSubmitExerFaultAnswerDataNew(ExerciseSubmitAnswerData answerResult);
+	
+	
+	/**
+	 *提交收藏 结果到db
+	 * @return
+	 */
+	Map<String,Object> doSubmitExerFavorAnswerDataNew(ExerciseSubmitAnswerData answerResult);
+	
+	/**
+	 * 更新错题book信息 by提交全部错题答案
+	 * @param currTitleNum
+	 * @param status
+	 * @return
+	 */
+	Result doOperFaultBookBySubmitAllAnswer(String currTitleNum, String status, String faultBookId, String exerciseType);
+	
+	/**
+	 * 更新收藏book信息 by提交全部收藏答案
+	 * @param currTitleNum
+	 * @param status
+	 * @return
+	 */
+	Result doOperFavorBookBySubmitAllAnswer(String currTitleNum, String status,String favoriteBookId, String exerciseType);
+	
+	
+	/**
+	 * 操作本次做题记录 错题
+	 * @return
+	 */
+	Map<String,Object> doUpdateFaultExerRecordNew(String groupId);
+	
+	/**
+	 * 操作本次做题记录 全部错题
+	 * @return
+	 */
+	Result doUpdateExerciseFaultBook(String currTitleNum);
+	
+	/**
+	 * 操作本次做题记录 全部收藏
+	 * @return
+	 */
+	Result doUpdateExerciseFavorBook(String currTitleNum);
+	
+	/**
+	 * 操作本次做题记录 错题
+	 * @return
+	 */
+	Result doUpdateExerciseFaultRecord(ExerciseFaultRecord record);
+	
+	/**
+	 * 操作本次做题记录 收藏
+	 * @return
+	 */
+	Result doUpdateExerciseFavorRecord(ExerciseFavoriteRecord record );
+	
+	/**
+	 * 操作本次做题记录 收藏
+	 * @return
+	 */
+	Map<String,Object> doUpdateFavortExerRecordNew(String groupId);
+	
+	/**
+	 * 
+	 * 保存app端请求保存的数据
+	 * @return
+	 */
+	String doSaveExerciseDataSubmitLog(String data, String exerBussinessId, short type, int status, String url);
+	
+	/**
+	 * 
+	 * 保存app端请求保存的数据
+	 * @return
+	 */
+	Result doUpdateExerciseDataSubmitLog(String exerciseDataLogId, String exerBussinessId);
+	
+	/**
+	 * 查询题目统计分析结果 个人统计 全站统计
+	 * @param groupId
+	 * @return
+	 */
+	List<Map<String,Object>> queryExerciseItemStatisics(String groupId);
+	
+
+	/**
+	 * 获取个人用户组对应的错题题目更新时间
+	 * @param subjectId
+	 * @param args
+	 * @return
+	 */
+	Map<String, Map<String, Object>> queryFaultRecordByGroup(String subjectId, Object[] args);
+	
+	/**
+	 * 获取个人用户组对应的收藏题目更新时间
+	 * @param subjectId
+	 * @param args
+	 * @return
+	 */
+	Map<String, Map<String, Object>> queryFavorRecordByGroup(String subjectId, Object[] args);
+	
+	/**
+	 * 查询错题做题信息
+	 * @return
+	 */
+	Map<String, Object> queryExerFaultInfo();
+	/**
+	 * 查询收藏做题信息
+	 * @return
+	 */
+	Map<String, Object> queryExerFavorInfo();
+	
+	/** -----------------------APP----V2.0--end---------------------------------------- */
+	
+	Result doInitFaultStatisData();
+	/*Result doInitFaultRecord();
+	Result doInitFavorRecord();
+	Result doInitFaultItem();
+	Result doInitExerRecentRecord();
+	Result doInitFavorItem();
+	
+	Result doSavetoDB(Object obj);*/
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java
new file mode 100644
index 0000000..f25be4b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java
@@ -0,0 +1,164 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+
+/**
+ * 题库服务类
+ *
+ * @author kevin
+ * @createTime 2018-03-11
+ */
+public interface IExerciseGroupService {
+
+	/**
+	 * 查询题库数量
+	 * @param param 查询参数
+	 * @return
+	 */
+	int queryExerciseGroupCount(Map<String,Object> param);
+
+
+	/**
+	 * 查询题库列表
+	 * @param param  查询参数
+	 * @param page   分页对象
+	 * @return
+	 */
+	List<ExerciseGroup> queryExerciseGroupList(Map<String,Object> param,Pager page);
+
+
+	/**
+	 * 新增题库
+	 *
+	 * @param exerciseGroupInfo
+	 *
+	 * @return 新增题库ID
+	 */
+	String addExerciseGroup(ExerciseGroup exerciseGroup);
+
+	/**
+	 * 删除题库
+	 *
+	 * @param elxamIds
+	 *            题库id
+	 * @return
+	 */
+	Result deleteExerciseGroup(String[] exerciseGroupIds);
+
+	/**
+	 * 更新题库信息
+	 *
+	 * @param noticeId
+	 *            题库id
+	 * @return
+	 */
+	Result updateExerciseGroup(ExerciseGroup exerciseGroup);
+
+	ExerciseGroup queryExerciseGroupDetail(String groupId,String batchId);
+	ExerciseGroup queryReExerciseGroupDetail(String groupId,String examId);
+
+	/**
+	 * 发布题库
+	 *
+	 * @param exerciseGroupIds
+	 *            题库的Ids
+	 * @return 1表示发布成功,0表示发布失败
+	 */
+	Result doExerciseGroupRealease(String[] exerciseGroupIds);
+
+	/**
+	 * 撤回发布的题库
+	 *
+	 * @param exerciseGroupIds
+	 *             题库的Ids
+	 * @return 1表示撤回成功,0表示撤回失败失败
+	 */
+	Result doExerciseGroupRevocation(String[] exerciseGroupIds);
+
+	/**
+	 * 题库id  查询题库
+	 * @param exerciseGroupId
+	 * @return
+	 */
+	ExerciseGroup queryExerciseGroupDetail(String exerciseGroupId);
+
+
+	/**
+	 * 根据原题目组及类型复制题目
+	 * @param sourceGroup  原题库
+	 * @param targetGroup  目标题库
+	 * @param startOrder   复制的起始顺序号
+	 * @return    返回复制的题库题目数量
+	 * @throws Exception
+	 */
+	public int doCopyExerciseGroupItem(ExerciseGroup sourceGroup, ExerciseGroup targetGroup,Short[] itemType,int startOrder) throws Exception;
+
+	/**
+	 * 根据题目复制原题库题目到新题库
+     * @param sourceGroup  原题库
+	 * @param targetGroup  目标题库
+	 * @param exerciseItemIds
+	 * @return
+	 */
+	int doCopyExerciseGroupItem(ExerciseGroup sourceGroup, ExerciseGroup targetGroup, String[] exerciseItemIds,int startOrder) throws Exception;
+
+	/**
+	 * 交换题库中的题目的位置顺序
+	 * @param paperGroupId
+	 * @param examItemId1
+	 * @param examIemId2
+	 * @return
+	 */
+	Result doExchangeExamPaperGroupItemOrder(String paperGroupId, String examItemId1, String examIemId2);
+
+	/**
+	 * 发布考试题库
+	 * @param groupIds
+	 * @return
+	 */
+	Result doPublishExerciseLib(String[] groupIds);
+
+
+	Result doRevokeExerciseLib(String[] groupIds);
+
+	/**
+	 *
+	 * @param groupIds
+	 * @return
+	 */
+
+	/**
+	 * 根据源题目组随机,生成新的题目组
+	 * @param sourceGroupIds  新题库名称
+	 * @param newGroupType    新题库类型
+	 * @param sourceGroupIds  源题库ID
+	 * @param lstExerciseItemSet  随机题目配置
+	 * @return string 返回新生成的题目组ID
+	 */
+	String doCreateRandomExerciseGroup(String newGroupName,short newGroupType,String[] sourceGroupIds,List<ExerciseItemSet> lstExerciseItemSet);
+
+	/**
+	 * 根据题库ID获取题库题目统计信息
+	 * @param groupIds
+	 * @return
+	 */
+	List<ExerciseGroup> queryExerciseGroupItemsStatistic(String[] groupIds);
+
+
+	/**
+	 * 根据groupIds按顺序返回名称数组
+	 * @param groupIds
+	 * @return
+	 */
+	String[] queryGroupNamesByIds(String[] groupIds);
+
+
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java
new file mode 100644
index 0000000..d58fe77
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java
@@ -0,0 +1,214 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseResultV;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+
+/**
+ * 作业
+ * 
+ * @author lihanqi
+ *
+ */
+public interface IExerciseInfoService {
+
+	/**
+	 * 保存作业
+	 * 
+	 * @return
+	 * @throws Exception
+	 */
+	public Result insertExerciseInfo(ExerciseInfo exerciseInfo);
+
+	/**
+	 * 开始作业
+	 * 
+	 * @param exerciseInfoId
+	 * @return
+	 */
+	public Result doStartExerciseInfo(String exerciseInfoId, String classId, String studentUserId);
+
+	/**
+	 * 修改作业
+	 * 
+	 * @return
+	 * @throws Exception
+	 */
+	public Result updateExerciseInfo(ExerciseInfo exerciseInfo);
+
+	/**
+	 * 删除作业
+	 * 
+	 * @param exerciseInfoId
+	 * @return
+	 */
+	public Result deleteExerciseInfo(String exerciseInfoId);
+
+	/**
+	 * 初始化平均成绩和最高成绩
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	Map<String, Object> initScore(String exerciseInfoId);
+
+	/**
+	 * 题目得分详情
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	List<ExerciseItemStatistics> itemDetailList(String exerciseInfoId);
+
+	/**
+	 * 提交文件作业和写作作业
+	 * 
+	 * @param exerciseInfoId
+	 * @param fileId
+	 * @param filePath
+	 * @param submitType
+	 * @return
+	 */
+	Result doSubmitOtherExerciseInfo(String exerciseInfoId, String content, String fileId, String filePath,
+			short submitType);
+
+	/**
+	 * 提交习题作业
+	 * 
+	 * @param answers
+	 * @return
+	 */
+	Result doSubmitAnswerExerciseInfo(ExerciseSubmitAnswerData answerData, String exerciseInfoId, String exerciseCompleteId);
+
+	/**
+	 * 发布作业
+	 * 
+	 * @param examIds
+	 *            作业的的Ids
+	 * @return 1表示发布成功,0表示发布失败
+	 */
+	Result doPublishExercise(String[] exerciseId);
+
+	/**
+	 * 撤回发布的作业
+	 * 
+	 * @param examIds
+	 *            发布的作业的Ids
+	 * @return 1表示撤回成功,0表示撤回失败失败
+	 */
+	Result doRevokeExercise(String[] exerciseId);
+
+	/**
+	 * 首页获取学生作业总条数
+	 * 
+	 * @param classId
+	 * @param userId
+	 */
+	int getExerciseCount(String classId, String userId);
+
+	/**
+	 * 首页获取学生已完成的作业条数
+	 * 
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getCommitExerciseCount(String classId, String userId);
+
+	/**
+	 * 首页获取学生带完成的条数
+	 * 
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getToBeCommitExerciseCount(String classId, String userId);
+
+	/**
+	 * 首页获取逾期未交的作业条数
+	 * 
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	int getUnCommitExerciseCount(String classId, String userId);
+
+	/**
+	 * 删除考试
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	String queryExerciseInfoRelatedGroupId(String exerciseInfoId);
+	
+	/**
+	 * 查询作业列表-教师端
+	 * 
+	 * @param pageSize
+	 * @param keyword
+	 * @param classId
+	 * @param pageNum
+	 * @return
+	 */
+	List<Map<String, Object>> teacherExerciseInfoList(Integer pageSize,String keyword,String classId,Integer pageNum);
+	
+	/**
+	 * 后台查询作业列表
+	 * @param keyword
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<ExerciseInfo> list(String keyword,String classId,Short status,Integer pageSize, Integer pageNum);
+	
+	/**
+	 * 后台查询作业列表数量
+	 * @param keyword
+	 * @param creatorId
+	 * @return
+	 */
+	int listCount(String keyword,String classId,Short status);
+	
+	/**
+	 * 查询答题作业的作业设置
+	 * @param exerciseInfoId
+	 * @return
+	 */
+	List<ExerciseItemSet> queryExerciseItemSet(String exerciseInfoId);
+
+	/**
+	 * 查询学生作业数量
+	 * @param keyword
+	 * @param exerciseInfoId
+	 * @param subjectId
+	 * @param status
+	 * @return
+	 */
+	int queryStuExerciseListCount(String keyword,String exerciseInfoId,String userId, String subjectId, Short status);
+	
+	/**
+	 * 查询学生作业情况列表
+	 * @param keyword
+	 * @param exerciseInfoId
+	 * @param subjectId
+	 * @param status
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	List<ExerciseResultV> queryStuExerciselist(String keyword,String exerciseInfoId,String userId,String subjectId, Short status, Integer pageSize, Integer pageNum);
+	
+	/**
+	 * 查询作业完成情况数量
+	 * @param lstExerciseIds
+	 * @return
+	 */
+	Map<String, Integer> queryResultStatusCount(List<String> lstExerciseIds);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java
new file mode 100644
index 0000000..8a1e709
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java
@@ -0,0 +1,23 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerciseItemData;
+
+
+/**
+ * 
+ * 练习导入解析
+ *
+ */
+public interface IExercisePyService {
+	
+	Map<String,Object> parserPyExercise( String groupId, String fullPath, String module ) ;
+	
+	Map<String, Object> validatePyExercise(String content) ;
+	
+	Result doImportPyExercise(List<ExerciseItemData> lstItems,String groupId) ;
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java
new file mode 100644
index 0000000..1e12af3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java
@@ -0,0 +1,376 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSONArray;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.ResultJson;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseParseResult;
+
+/**
+ * 练习service
+ * @author zhiyong
+ *
+ */
+public interface IExerciseService {
+	
+
+	/**
+	 * 新增练习组
+	 * @param name 练习组名称
+	 * @param type 练习组类型
+	 * @param lessonId 课程id
+	 * @param chapterId 章节id
+	 * @param singleType 练习是否只保存章节练习
+	 * @return
+	 */
+	Result insertExerciseGroup(String name, short type,String lessonId, String chapterId);
+	
+	/**
+	 * 新增练习组
+	 * @param name 练习组名称
+	 * @param type 练习组类型
+	 * @param lessonId 课程id
+	 * @param chapterId 章节id
+	 * @param singleType 练习是否只保存章节练习
+	 * @param 模拟考试   时间设置
+	 * @return
+	 */
+	Result insertExerciseGroup(String groupId,String name, short type,String lessonId,
+			String chapterId,String attribute1,boolean repeatFlag);
+	
+	/**新增机构练习组
+	 * name 练习组名称
+	 * type 练习组类型
+	 * collegeCourseId 科目id
+	 * attribute1  模拟练习时间
+	 * **/
+	Result insertOrgExercise(ExerciseGroup group, boolean repeatFlag);
+	
+	Result insertAppointExercise(String groupId [],String orgId [],String classIds[]);
+	/**
+	 * 读取练习组所有习题
+	 * @param groupId 练习组id
+	 * @return
+	 */
+	List<ExerciseItem> readExerciseItems(String groupId);
+	
+	
+	/**
+	 * 读取练习组所有习题,带编号
+	 * @param groupId 练习组id
+	 * @return
+	 */
+	List<ExerciseItem> readExerciseItemsWithNo(String groupId);
+	
+	/**
+	 * 插入ExerciseItem
+	 * @param item
+	 * @param lstOptions
+	 * @return
+	 */
+	Result insertExerciseItem(String groupId, ExerciseItem item,List<ExerciseItemOption> lstOptions,String analysis);
+	
+
+	/**
+	 * 批量保存题目
+	 * @param groupId
+	 * @param items
+	 * @return
+	 */
+	public Result saveExerciseItemBatch(String groupId,List<ExerciseItem> items);
+	
+	
+	/**
+	 * 更新练习
+	 * @param item
+	 * @param lstOptions
+	 * @return
+	 */
+	Result updateExerciseItem(ExerciseItem item, List<ExerciseItemOption> lstOptions,String analysis) ;
+	
+	
+	/**
+	 * 删除习题
+	 * @param strings 习题id
+	 * @return
+	 */
+	Result deleteExerciseItems(String[] exerciceIds,String[] reIds,String groupId);
+
+	/**
+	 * 导入习题
+	 * @param groupId 练习组id
+	 * @param file 文件
+	 * @return
+	 */
+	Result doImportItems(String groupId, File file);
+	
+	/**
+	 * 组装ExerciseGroup的list
+	 * @param groupId 主键
+	 * @return
+	 */
+	List<ExerciseGroup> initExerciseGroup(String groupId);
+	
+	/**
+	 * 批量删除ExerciseGroup
+	 * @param groupId 主键,多个id时以","分隔
+	 * @return
+	 */
+	Result deleteExerciseGroup(String groupId) ;
+	
+	/**
+	 * 批量删除ExerciseGroup
+	 * @param groupId 主键,多个id时以","分隔
+	 * @param type 多个type时以","分隔
+	 * @return
+	 */
+	Result deleteExerciseGroup(String groupId,String type,String deleteType,Integer delAll, String orgIds[], String classIds[]) ;
+	
+	/**
+	 * :后台
+	 * 插入评估模板时调用
+	 * @param name
+	 * @param type
+	 * @return
+	 */
+	ExerciseGroup insertExerciseGroup(String name,short type) ;
+	
+	/**
+	 * 查询练习列表,还需查询联系下面习题个数
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<ExerciseGroup> queryExerciceGroupList(String hql,List<Object> args);
+	
+	/**
+	 * 添加练习图片
+	 * @param imgPath
+	 * @param imgObjId
+	 * @param imgObjType
+	 * @return
+	 */
+	List<Map<String,Object>> doAddExerciseObjImg(String[] imgPath, String imgObjId, int imgObjType);
+	
+	
+	/**
+	 * 添加练习图片
+	 * @param imgPath
+	 * @param imgObjId
+	 * @param imgObjType
+	 * @return
+	 */
+	List<Map<String,Object>> doAddEvaExerciseObjImg(String[] imgPath, String imgObjId, int imgObjType);
+	
+	/**
+	 * 删除练习图片
+	 * @return
+	 */
+	Result dodelExerciseObjImg(String imgObjId);
+	
+	
+	
+	/**
+	 * 删除练习图片 问卷
+	 * @return
+	 */
+	ResultJson dodelEvaExerciseObjImg(String imgObjId);
+	
+	/**
+	 * 导入习题模块:深度解析word文档
+	 * @param groupId
+	 * @param file
+	 * @param uuid
+	 * @return
+	 */
+	Result doDeepAnalysisDoc(String groupId,String fullPath);
+	
+	/**
+	 * 导入习题模块:将解析结果返回到前台
+	 * @param groupId
+	 * @param file
+	 * @return
+	 */
+	ExerciseParseResult doParseItems(String groupId, String fullPath , String module );
+	
+	/**
+	 * 导入习题模块: 校验习题,将解析结果返回到前台
+	 * @param content
+	 * @return
+	 */
+	ExerciseParseResult validateExercise(String content);
+	
+	/**
+	 * 复制历史练习
+	 * @param fromClassId
+	 * @return
+	 */
+	Result executeCopyExercise(String groupId, String subjectId, String subjectName, String chapterId) ;
+	
+	/**
+	 * 学员得分详情列表
+	 * @param groupId
+	 * @return
+	 */
+	List<Map<String, Object>> resultList(String groupId);
+	
+	/**
+	 * 初始化平均成绩和最高成绩
+	 * @param groupId
+	 * @return
+	 */
+	Map<String, Object> initScore(String groupId);
+	
+	/**
+	 * 题目得分详情
+	 * @param groupId
+	 * @return
+	 */
+	List<ExerciseItemStatistics> itemDetailList(String groupId);
+	
+	/**
+	 * 加载题目选项详情 - 班级、机构
+	 * @param groupId
+	 * @return
+	 */
+	List<Map<String,Object>> loadOptionsList( String exerciseItemId);
+
+	Result addExerciseGroupExtendTime(String groupId, String exerciseTime,boolean repeatFlag);
+	
+	/**
+	 * 评价模块习题修改
+	 * 
+	 * @param item
+	 * @param lstOptions
+	 * @return
+	 */
+	ResultJson updateExerciseItem4Evaluate(ExerciseItem item, List<ExerciseItemOption> lstOptions,String analysis);
+
+	/**
+	 * 评价模块习题新增
+	 * 
+	 * @param groupId
+	 * @param item
+	 * @param lstOptions
+	 * @return
+	 */
+	ResultJson insertExerciseItem4Evaluate(String groupId, ExerciseItem item, 
+			List<ExerciseItemOption> lstOptions,String analysis,JSONArray titleImgs);
+	
+	/**
+	 * 查看问卷详情
+	 * 
+	 * @param groupId 问题组id
+	 * @param evaluateTemId 模板id
+	 * @return
+	 */
+	List<ExerciseItem> readExerciseItems4Evaluate(String groupId);
+	
+	/**
+	 * 查询问卷用户练习详情
+	 * @param recordId
+	 * @param evaluateId
+	 * @return
+	 */
+	ResultJson queryUserEvaExerciseDetail(String recordId,String evaluateId);
+	
+	/**
+	 * 查询问卷图片
+	 * @param imgObjId
+	 * @param imgObjType
+	 * @return
+	 */
+	List<Map<String,Object>> queryEvaExerciseObjImg(String imgObjId, int imgObjType);
+
+	/**
+	 * 编辑练习保存
+	 */
+	Result doSaveEditGroup(String groupId, String groupName);
+	
+	/**
+	 * 排序
+	 * 
+	 * @param ids 排序id
+	 * @param index 序号
+	 * @return
+	 */
+	Result doOrder(List<String> ids,  List<Integer> index);
+	
+	/**
+	 * 问卷模板练习题排序
+	 * 
+	 * @param ids 排序id
+	 * @param index 序号
+	 * @return
+	 */
+	Result doitemOrder(List<String> ids,  List<Integer> index,String groupId);
+	
+	/**
+	 * 拷贝练习
+	 * 
+	 * @param id
+	 * @param subjectId
+	 * @param collegeCourseId
+	 * @param chapterId
+	 * @return
+	 * @throws IllegalAccessException
+	 * @throws InstantiationException
+	 * @throws InvocationTargetException
+	 * @throws NoSuchMethodException
+	 */
+	Result doCopyExerciseGroup(String id, String subjectId, String collegeCourseId, String chapterId) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException;
+	
+	/**
+	 * 保存练习接口
+	 * 
+	 * @param group
+	 * @return
+	 */
+	public Result saveExerciseGroup(ExerciseGroup group);
+	
+	/**
+	 * (后台管理系统)
+	 *  管理员同步习题到班级
+	 * 
+	 * @param exerciseItemId
+	 * @return
+	 */
+	public Result doSynExercise(String[] exerciseItemIds) throws IllegalAccessException, InvocationTargetException;
+	
+	/**
+	 * 拷贝练习题
+	 * 
+	 * @param items
+	 * @param newGroupId
+	 * @param oldGroupId
+	 * @throws NoSuchMethodException 
+	 * @throws InvocationTargetException 
+	 * @throws InstantiationException 
+	 * @throws IllegalAccessException 
+	 */
+	public void doCopyExerciseItem(String newGroupId, String oldGroupId, List<ExerciseItem> items, int type) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException;
+	
+	/**
+	 * 数据同步接口,同步下发到班级的数据
+	 * 
+	 * @param orgId
+	 * @param groupId
+	 * @return
+	 */
+	public Result doSynExerciseItem(String orgId, String groupId);
+	
+	/**
+	 * 问卷评估  复制练习
+	 * @param groupId
+	 * @return
+	 */
+	public String doCopyExerciseByEvaluate(String groupId);
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java
new file mode 100644
index 0000000..869352c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java
@@ -0,0 +1,174 @@
+package com.qxueyou.scc.exercise.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.exercise.model.ExerGroupResponseData;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+
+/** 
+ * 练习service   V2.0接口
+ * @author zhiyong
+ *
+ */
+public interface IExerciseVerService {
+	
+	
+	/**
+	 * 查询练习列表数据
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @return
+	 */
+	List<ExerGroupResponseData> queryExericseListData(short exerType, 
+			String subjectId,Pager pager, Integer selected, String chapterId);
+	
+	/**
+	 * 获取练习题目
+	 * @param groupId
+	 * @param exerciseRecordId
+	 * @param getExercise
+	 * @param getAnswer
+	 * @param exerType
+	 * @return
+	 */
+	ExerItemResponseData queryExerItemResponseData(String groupId, 
+			String exerciseRecordId, boolean getExercise, boolean getAnswer,short exerType);
+	
+	
+	/**
+	 * 组装题目
+	 * @param lstItems
+	 * @param exerciseGroupId
+	 * @return
+	 */
+	List<ExerciseItem> getCommonExerItemDetail(List<ExerciseItem> lstItems, String exerciseGroupId);
+	
+	/**
+	 * 
+	 * 操作练习答案数据同步
+	 * @return
+	 */
+	Map<String,Object> doOperExerciseAnswerData(ExerciseSubmitAnswerData answerData);
+	
+	/**
+	 * 
+	 * 统计用户做题结果数据
+	 * @return
+	 */
+	Result doStatisUserExerciseItemData(String userId, String userName, ExerciseSubmitAnswerData answerData);
+	
+	
+	/**
+	 * 
+	 * 保存app端请求保存的数据
+	 * @return
+	 */
+	String doSaveExerciseDataSubmitLog(String data, String exerBussinessId, short type, int status, String url);
+	
+	/**
+	 * 
+	 * 保存app端请求保存的数据
+	 * @return
+	 */
+	Result doUpdateExerciseDataSubmitLog(String exerciseDataLogId, String exerBussinessId);
+	
+	
+	/**
+	 * 根据条件获取自由练习
+	 * @param source
+	 * @param strategy
+	 * @param mode
+	 * @param count
+	 * @param exerciseTime
+	 * @return
+	 */
+	ExerItemResponseData doGetFreeExercise(String subjectId, 
+			String source,String strategy,String mode, int count, String exerciseTime);
+	
+	/**
+	 * 查询题目统计分析结果 个人统计 全站统计
+	 * @param exerciseType
+	 * @return
+	 */
+	List<Map<String,Object>> queryExerciseItemStatisics(String groupId);
+	/**
+	 * 操作本次做题记录
+	 * @return
+	 */
+	Map<String,Object> doInsertExerRecord(String groupId);
+	
+	/**
+	 * 更新练习组班级正确率信息
+	 * @return
+	 */
+	Result doUpdateExerGroupClsAccuracy(String groupId, String doCount, String correctCount);
+	
+	/**
+	 * 发送班级正确率请求消息
+	 * @return
+	 */
+	Result sendUpdateClassAccuracyMsg(String groupId, String doCount, String correctCount);
+	
+	/**
+	 * 发送班级排名请求消息
+	 * @return
+	 */
+	Result sendUpdateClassRankMsg(String groupId);
+	
+	/**
+	 * 操作本次做题记录
+	 * @return
+	 */
+	Result doUpdateExerciseRecord(String exerciseRecordId, String groupId, String currTitleNum);
+	
+	/**
+	 * 操作本次做题记录
+	 * @return
+	 */
+	Result updateExerciseRecordObj(ExerciseRecord record);
+	
+	/**
+	 * 重新校对答案正确性
+	 * @param answerData
+	 * @return
+	 */
+	ExerciseSubmitAnswerData getExerciseSubmitAnswerDataNew(ExerciseSubmitAnswerData answerData);
+	
+	/**
+	 * 发送练习统计数据消息 
+	 * @param exerciseGroupId
+	 * @param exerItemIdMap
+	 * @return
+	 */
+	Result sendUpdateExerItemStatisticsMsg(String exerciseGroupId, ExerciseSubmitAnswerData answerData);
+	
+	/**
+	 * 更新统计 - 提交数据调用、单击统计按钮调用
+	 * @param groupId
+	 * @return
+	 */
+	Result updateRefreshStatistical(String groupId, String orgId, String classId,boolean btnFlag);
+
+	Map<String, Object> doInsertExerRecord(String groupId, String examBatchId,String classId,int remainingSeconds);
+	
+	@Deprecated
+	List<ExerciseItem> queryExerciseItemList(String groupId);
+	
+	/**
+	 * 计算填空题得分
+	 * @param itemAnswer
+	 * @param useranswer
+	 * @param itemRightScore
+	 * @return
+	 */
+	BigDecimal calFillBlanksItemScore(String itemAnswer, String useranswer, float itemRightScore);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java
new file mode 100644
index 0000000..41fb136
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java
@@ -0,0 +1,195 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.service.IExerciseCompleteService;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.model.SchHandout;
+
+/**
+ * 考试管理服务层
+ * 
+ * @author kevin
+ * @createTime 2017-11-1
+ */
+@Service
+public class ExerciseCompleteService extends CommonAppService implements IExerciseCompleteService {
+
+	@Autowired
+	IOrgTextService orgTextService;
+	
+	@Autowired
+	IMsgInfoService msgInfoService;
+	
+	@Override
+	public List<ExerciseCompleteInfo> list(String keyword,String exerciseInfoId,Short status,Integer pageSize,Integer pageNum) {
+		StringBuffer hql =  new StringBuffer(500);
+		
+		hql.append("from ExerciseCompleteInfo e where e.exerciseInfoId=? and e.studentUserName like ? and e.deleteFlag is false");		
+		List<Object> params = CollectionUtils.newList(exerciseInfoId,'%'+keyword.trim()+'%');
+
+		if(status!=null){
+			hql.append(" and e.completeStatus = ? ");
+			params.add(status);
+		}
+		hql.append(" order by e.studentNo ASC");
+		return this.findList(hql.toString(), new Pager(pageSize, pageNum), params,ExerciseCompleteInfo.class);
+	}
+	
+	@Override
+	public int listCount(String keyword,String exerciseInfoId,Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		
+		hql.append("from ExerciseCompleteInfo where exerciseInfoId=? and studentUserName like ? and deleteFlag is false ");		
+		List<Object> params = CollectionUtils.newList(exerciseInfoId,'%'+keyword.trim()+'%');
+		
+		if(status!=null){
+			hql.append(" and completeStatus = ?");
+			params.add(status);
+		}
+		
+		return this.findCount(hql.toString(),params);
+	}
+
+	@Override
+	public String addExerciseComplete(ExerciseCompleteInfo exerciseCompleteInfo) {
+		exerciseCompleteInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_DRAFT);
+		TraceUtils.setCreateTrace(exerciseCompleteInfo);
+		this.insert(exerciseCompleteInfo);
+		return exerciseCompleteInfo.getExerciseCompleteId();
+	}
+
+	@Override
+	public Result deleteExerciseComplete(String[] exerciseCompleteIds) {
+		return bulkUpdateInLoop("update ExerciseCompleteInfo set deleteFlag = true where exerciseCompleteId=?", exerciseCompleteIds);
+	}
+
+	@Override
+	public Result updateExerciseComplete(ExerciseCompleteInfo exerciseCompleteInfo) {
+		exerciseCompleteInfo.setTeacherId(ClientUtils.getUserId());
+		exerciseCompleteInfo.setTeacherName(ClientUtils.getUserName());
+		TraceUtils.setUpdateTrace(exerciseCompleteInfo);
+		
+		save(exerciseCompleteInfo);
+		
+		if(exerciseCompleteInfo.getCompleteStatus()==ExerciseCompleteInfo.STATUS_CHECKED){
+			doCheckMsg(exerciseCompleteInfo);
+		}
+		
+		return new Result(true);
+	}
+	
+	private void doCheckMsg(ExerciseCompleteInfo completeInfo){
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class,completeInfo.getExerciseInfoId());
+		
+		Map<String,String> attrs = CollectionUtils.newStringMap("exerciseInfoId",exerciseInfo.getExerciseInfoId(),"exerciseName",exerciseInfo.getName(),
+					"subjectId",exerciseInfo.getSubjectId(),"subjectName",exerciseInfo.getSubject().getName()
+					,"exerciseCompleteId",completeInfo.getExerciseCompleteId());
+			
+		msgInfoService.doSendTextMsgToUsers(new String[]{completeInfo.getStudentUserId()},MsgInfo.TYPE_CHECK,"老师批改了作业 ", attrs);
+	}
+	
+
+	@Override
+	public ExerciseCompleteInfo queryExerciseCompleteDetail(String exerciseCompleteId) {
+		ExerciseCompleteInfo completeInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteId);
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, completeInfo.getExerciseInfoId());
+		completeInfo.setCommitUploadType(exerciseInfo.getCommitUploadType());
+		completeInfo.setRemind(exerciseInfo.getRemind());
+		completeInfo.setExerciseType(exerciseInfo.getType());
+		completeInfo.setExerciseName(exerciseInfo.getName());
+		completeInfo.setContent(completeInfo.getUploadDesc());
+		completeInfo.setTotalScore(exerciseInfo.getScore());
+
+		// 如果文件作业是视频音频作业
+		if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_VIDEO 
+				|| exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_AUDIO) {
+			if (StringUtils.isNotEmpty(completeInfo.getTargetObjectId())) {
+				MediaVideo video = this.read(MediaVideo.class, completeInfo.getTargetObjectId());
+				if (video.getStatus() == MediaVideo.STATUS_DRAFT) {
+					completeInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_OK);
+					completeInfo
+							.setPreviewPath(StringUtils.isNotEmpty(video.getAndroidHD()) ? 
+									video.getAndroidHD() : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD());
+				} else {
+					completeInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_NO);
+				}
+			}
+		}
+
+		// 如果文件作业是讲义
+		if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_DOC) {
+			if (StringUtils.isNotEmpty(completeInfo.getTargetObjectId())) {
+				SchHandout handout = this.read(SchHandout.class, completeInfo.getTargetObjectId());
+				if (handout.getStatus() == SchHandout.STATUS_DRAFT) {
+					completeInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_OK);
+					completeInfo.setPreviewPath(handout.getFullPath());
+				} else {
+					completeInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_NO);
+				}
+			}
+		}
+
+		// 如果是写作作业
+		if (exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_WRITING && StringUtils.isNotEmpty(completeInfo.getTargetObjectId())) {
+			completeInfo.setContent(this.orgTextService.getOrgText(completeInfo.getExerciseCompleteId(), OrgText.TABLE_WRITING_EXERCISE).getContent());
+		}
+		return completeInfo;
+	}
+	
+	@Override
+	public ExerciseCompleteInfo queryCompleteInfo(String exerciseInfoId, String classId,String studentUserId){
+		return this.findUnique(
+			"from ExerciseCompleteInfo where exerciseInfoId=? and classId=? and studentUserId=? and deleteFlag is false",
+			CollectionUtils.newList(exerciseInfoId, classId, StringUtils.isNotEmpty(studentUserId)?studentUserId:ClientUtils.getUserId()),
+			ExerciseCompleteInfo.class);
+	}
+
+	@Override
+	public ExerciseCompleteInfo doCheckAndCreateExerciseCompleteInfo(String exerciseInfoId, String classId,String studentUserId) {
+		
+		ExerciseCompleteInfo completeInfo = queryCompleteInfo(exerciseInfoId,classId,studentUserId);
+
+		if (completeInfo == null) {
+			String hql = " select s.studentId,s.studentNo,s.userId,s.name,c.classId,c.name from StuStudent s ,ClsClass c where  "
+					  +  " s.classId= c.classId  and s.classId=? and s.userId=? and c.deleteFlag is false and s.deleteFlag is false ";
+
+			Object[] arrObj = this.findUnique(hql, 
+					CollectionUtils.newList(classId, StringUtils.isNotEmpty(studentUserId)?studentUserId:ClientUtils.getUserId()),
+					Object[].class);
+			
+			if(arrObj!=null){
+				completeInfo = new ExerciseCompleteInfo();
+				completeInfo.setStudentId((String) arrObj[0]);
+				completeInfo.setStudentNo((String) arrObj[1]);
+				completeInfo.setStudentUserId((String) arrObj[2]);
+				completeInfo.setStudentUserName((String) arrObj[3]);
+				completeInfo.setClassId((String) arrObj[4]);
+				completeInfo.setClassName((String) arrObj[5]);
+				completeInfo.setExerciseInfoId(exerciseInfoId);
+				completeInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_DRAFT);
+				TraceUtils.setCreateTrace(completeInfo);
+				this.save(completeInfo);
+			}
+		}
+		return completeInfo;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java
new file mode 100644
index 0000000..ea4bc76
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java
@@ -0,0 +1,171 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exercise.model.ExerciseCorrection;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.service.IExerciseCorrectionService;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.sys.model.SysDictionary;
+
+
+/**
+ * 练习  实现service
+ * @author 
+ *
+ */
+@Service
+public class ExerciseCorrectionService extends CommonAppService implements IExerciseCorrectionService {
+	
+	@Autowired
+	private IExerciseService exerciseService;
+	
+//	@Autowired
+//	IScoreChangeService  scoreChangeService;
+
+	/**
+	 * app接口调用插入数据
+	 * @param groupId
+	 * @param groupName
+	 * @param exerciseNum
+	 * @param exerciseId
+	 * @param correctids
+	 * @param content
+	 * @return
+	 */
+	public Result insertExerciseCorrection(String groupId,String groupName,String exerciseNum,String exerciseId,String correctids,String content){
+		//赋值
+		ExerciseCorrection exerCorrection=new ExerciseCorrection();
+		exerCorrection.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(exerCorrection);
+		exerCorrection.setExerciseGroupId(groupId);
+		exerCorrection.setExerciseGroupName(groupName);
+		
+		// 修改为从数据库取,如果数据库中有值
+		String hql = " from ExerciseGroupItemRe r where r.exerciseGroupId = ? and r.exerciseItemId = ? and r.deleteFlag is false  ";
+		ExerciseGroupItemRe re = this.findUnique(hql, CollectionUtils.newList(groupId,exerciseId), ExerciseGroupItemRe.class);
+		if(null != re && re.getItemOrder() != null ){
+			exerCorrection.setExerciseItemOrder(String.valueOf(re.getItemOrder()));
+		}else{
+			exerCorrection.setExerciseItemOrder(exerciseNum);
+		}
+		
+		exerCorrection.setExerciseItemId(exerciseId);
+		exerCorrection.setRemark(content);
+		//字典字段的赋值
+		initDicForExerciseCorrection(correctids,exerCorrection);
+		
+		//提交人,提交人id 以及其他信息赋值通过查找ClientUtils
+		String classId = ClientUtils.getClassId();
+		exerCorrection.setClassId(classId);
+		exerCorrection.setSubmitUserId(ClientUtils.getUserId());
+		exerCorrection.setSubmitUserName(ClientUtils.getUserName());
+		exerCorrection.setSubmitTime(new Date(System.currentTimeMillis()));
+		exerCorrection.setDealStatus(ExerciseCorrection.DEAL_STATUS_TODO);
+		
+		this.save(exerCorrection);
+		
+		//纠错增加积分
+//		scoreChangeService.doExerCor(ClientUtils.getUserId(), exerciseId);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 字典字段赋值
+	 * @param correctids
+	 * @param exerCorrection
+	 */
+	private void initDicForExerciseCorrection(String correctids,ExerciseCorrection exerCorrection){
+		String[] arrCorrectId = correctids.split(",");
+		
+		SysDictionary sysDic ;
+		String errorTypeId = "";
+		String errorTypeName = "";
+		for(String strId: arrCorrectId){
+			sysDic = this.read(SysDictionary.class, strId);
+			errorTypeId = errorTypeId.concat(sysDic.getDictionaryId()).concat(",");
+			errorTypeName = errorTypeName.concat(sysDic.getValue()).concat(",");
+		}
+		//去掉多余","
+		if(StringUtils.isNotBlank(errorTypeId) && errorTypeId.indexOf(',') != -1){
+			errorTypeId = errorTypeId.substring(0, errorTypeId.length()-1);
+			errorTypeName = errorTypeName.substring(0, errorTypeName.length()-1);
+		}
+		
+		exerCorrection.setErrorTypeId(errorTypeId);
+		exerCorrection.setErrorTypeName(errorTypeName);
+	}
+	
+	/**
+	 * 更新练习
+	 * @param item
+	 * @param lstOptions
+	 * @param analysis
+	 * @param correctionType
+	 * @return
+	 */
+	public Result updateExerciseItemCorrection(ExerciseItem item, List<ExerciseItemOption> lstOptions,String analysis,short correctionType) {
+		
+		if(correctionType==ExerciseCorrection.DEAL_STATUS_DONE){
+			
+			//待推送用户id列表
+			List<String> submitorIdsLst = querySubmitorIdsByExerItemId(item.getExerciseId());
+			
+			String hql = "update ExerciseCorrection set dealStatus = " + ExerciseCorrection.DEAL_STATUS_DONE + " where exerciseItemId = ? "  ;
+			
+			bulkUpdateInLoop(hql, new String[]{item.getExerciseId()});
+			
+			//推送消息给习题纠错学员
+			pushNotification(item,submitorIdsLst);
+			
+			//纠错被处理增加积分
+//			scoreChangeService.doExerCorDeal(null, item.getExerciseId());
+			
+		}
+		return exerciseService.updateExerciseItem(item, lstOptions,analysis);
+	}
+
+	/**
+	 * 推送通知给用户
+	 * @param item
+	 */
+	private void pushNotification(ExerciseItem item,List<String> submitorIdsLst) {
+		
+		Map<String,String> extras = new HashMap<String,String>(1);
+		extras.put("senderId", "sys_msg");
+		extras.put("type", "SYS_MSG");
+		
+		//jpushService.doJpushByUserIds(submitorIdsLst, extras, "习题纠错", "纠错已处理:"+item.getTitle(), "纠错已处理:"+item.getTitle());
+		//pushService.pushToAccountList("exerciseCorrect", "习题纠错", "纠错已处理:"+item.getTitle(), submitorIdsLst,"sys_msg","SYS_MSG");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseCorrectionService#getSubmitorLstByExerciseItemId(java.lang.String)
+	 */
+	@Override
+	public List<String> querySubmitorIdsByExerItemId(String exerciseItemId) {
+		
+		String hql = "select c.submitUserId from ExerciseCorrection c where c.exerciseItemId=? and c.dealStatus=? and c.deleteFlag is false ";
+
+		return find(hql, CollectionUtils.newList(exerciseItemId,ExerciseCorrection.DEAL_STATUS_TODO),
+				String.class);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java
new file mode 100644
index 0000000..8ad1ef3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.exercise.model.ExerciseDeepAnalysis;
+import com.qxueyou.scc.exercise.service.IExerciseDeepAnaService;
+
+
+/**
+ * 练习  实现service
+ * @author 
+ *
+ */
+@Service
+public class ExerciseDeepAnaService extends CommonAppService implements IExerciseDeepAnaService {
+	
+	/**
+	 * 文档解析完成
+	 * @param deepAnalysisId
+	 * @return
+	 */
+	public Result updateExerciseDocStatus(String[] deepAnalysisId){
+		
+		//TODO  发送短信
+		
+		
+		List<ExerciseDeepAnalysis> lstAna = new ArrayList<ExerciseDeepAnalysis>();
+		for(String id:deepAnalysisId){
+			ExerciseDeepAnalysis objAna = this.read(ExerciseDeepAnalysis.class, id);
+			
+			objAna.setStatus(ExerciseDeepAnalysis.STATUS_DONE);
+			objAna.setHandleTime(new Date(System.currentTimeMillis()));
+			
+			lstAna.add(objAna);
+		}
+		
+		this.saveOrUpdateAll(lstAna);
+		
+		
+		//bulkUpdateInLoop("update ExerciseDeepAnalysis set status = " + ExerciseDeepAnalysis.STATUS_DONE + ", where deleteFlag is false and deepAnalysisId = ?",deepAnalysisId);
+		
+		return new Result(true);
+		
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java
new file mode 100644
index 0000000..b6f25fb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java
@@ -0,0 +1,3250 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.model.Constants;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.DateTimeUtils;
+import com.qxueyou.scc.base.util.DateUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exercise.model.ExciseExtendReqData;
+import com.qxueyou.scc.exercise.model.ExerGroupResponseData;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog;
+import com.qxueyou.scc.exercise.model.ExerciseExtendRecordData;
+import com.qxueyou.scc.exercise.model.ExerciseFault;
+import com.qxueyou.scc.exercise.model.ExerciseFaultBook;
+import com.qxueyou.scc.exercise.model.ExerciseFaultHis;
+import com.qxueyou.scc.exercise.model.ExerciseFaultRecord;
+import com.qxueyou.scc.exercise.model.ExerciseFaultStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseFavorite;
+import com.qxueyou.scc.exercise.model.ExerciseFavoriteBook;
+import com.qxueyou.scc.exercise.model.ExerciseFavoriteHis;
+import com.qxueyou.scc.exercise.model.ExerciseFavoriteRecord;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisiU;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerDataList;
+import com.qxueyou.scc.exercise.service.IExerciseExtendService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.exercise.util.ExerciseUtils;
+
+
+/**
+ * 练习  实现service
+ * @author zhiyong
+ *
+ */
+@Service(value = "exerciseExtendService")
+public class ExerciseExtendService extends CommonAppService implements IExerciseExtendService {
+	/** 日志 */
+	private static final Logger log = LogManager.getLogger(ExerciseExtendService.class);
+	
+	/** 练习接口service  */
+	@Autowired
+	private IExerciseVerService exerciseVerService;
+	
+	/** 做题记录id */
+	private static final String EXERCISE_RECORD_ID = "exerciseRecordId";
+	
+	/** 更新时间 */
+	private static final String UPDATE_TIME = "updateTime";
+	
+	/**
+	 * 新增收藏book记录
+	 * @param groupId
+	 * @return 
+	 */
+	public String insertExerciseFavorBook(String currTitleNum) {
+		
+		ExerciseFavoriteBook record = new ExerciseFavoriteBook();
+		record.setUserId(ClientUtils.getUserId());
+		record.setClassId(ClientUtils.getClassId());
+		record.setDeleteFlag(false);
+		//record.setTitleMaxNumber(currTitleNum);
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return record.getFavoriteBookId();
+	}
+	
+	/**
+	 * 新增错题book记录
+	 * @param groupId
+	 * @return 
+	 */
+	public String insertExerciseFaultBook() {
+		
+		ExerciseFaultBook record = new ExerciseFaultBook();
+		record.setUserId(ClientUtils.getUserId());
+		record.setClassId(ClientUtils.getClassId());
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return record.getResumeBookId();
+	}
+	
+	/**
+	 * 新增收藏记录
+	 * @param groupId
+	 * @return 
+	 */
+	public Result insertExerciseFavor(String favoriteBookId, String exerciseItemId) {
+		ExerciseFavorite record = new ExerciseFavorite();
+		record.setFavoriteBookId(favoriteBookId);
+		record.setExerciseItemId(exerciseItemId);
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 新增错题记录
+	 * @param groupId
+	 * @return 
+	 */
+	public Result insertExerciseFault(String resumeBookId, String exerciseItemId, String repeatFlag) {
+		ExerciseFault record = new ExerciseFault();
+		record.setExerciseItemId(exerciseItemId);
+		record.setResumeBookId(resumeBookId);
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	/** -------------------------APP--V2.0- start------------------------------------------- */
+	/**
+	 * 操作错题记录
+	 */
+	public Map<String,Object> doOperExerciseFaultRecordData(String subjectId, ExciseExtendReqData recordResult) {
+		// 练习组id
+		String exerciseGroupId = recordResult.getExerciseGroupId();
+		String exerciseGroupType = recordResult.getExerciseGroupType();
+		
+		// 1.操作练习总记录
+		ExerciseFaultBook resumeBook = doOperExerciseFaultBook(subjectId,recordResult);
+		String resumeBookId = resumeBook.getResumeBookId();
+		
+		// 2.操作练习记录
+		ExerciseFaultRecord record = doOperExerciseFaultRecord(resumeBookId,
+				exerciseGroupId, exerciseGroupType, recordResult);
+		
+		String faultRecordId = record.getFaultRecordId();
+		
+		// 3.组装错题结果入库
+		doOperFaultExerciseToDB(resumeBookId, faultRecordId, recordResult);
+		
+		// 4.重新计算做题记录正确个数 做题个数  正确率  错题本
+		record = this.doCalcFaultExericseStatisBySubmitData(record,resumeBook,subjectId);
+		
+		// 5.返回结果
+		Map<String,Object> map = new HashMap<String, Object>(3);
+		map.put(EXERCISE_RECORD_ID, faultRecordId);
+		map.put("exerciseGroupId", exerciseGroupId);
+		map.put(UPDATE_TIME, DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		
+		return map;
+	}
+	
+	/**
+	 * 重新计算错题record数据结果
+	 * @param record
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Result updateExerciseFaultRecordData(ExerciseFaultRecord record){
+		String sql = "SELECT"+
+				" count(1) allCount,"+
+				" sum(CORRECT = 1) corrCount,"+
+				" sum(ANSWER IS NOT NULL) doCount,"+
+				" round(sum(CORRECT = 1) / count(1) * 100,2) accuracy,"+
+				" round(sum(ANSWER IS NOT NULL) / count(1) * 100,2) rate"+
+				" FROM exercise_fault"+
+				" WHERE DELETE_FLAG = 0"+
+				" AND FAULT_RECORD_ID = ?";
+
+		List<Object[]> lstFault = this.findBySql(sql,  CollectionUtils.newList(record.getFaultRecordId()));
+		
+		Object[] objs = lstFault.get(0);
+		
+		// 拆分子数据
+		packagingExerciseFaultRecordData(record, objs);
+		
+		if(record.getAllCount().compareTo(BigInteger.ZERO) == 0){// 全部删除后 数据清0
+			record.setTitleMaxNumber("0");
+			record.setStatus("0");
+		}else if(StringUtils.isNotBlank(record.getTitleMaxNumber()) && 
+				record.getAllCount().compareTo(new BigInteger(record.getTitleMaxNumber())) < 0){// 总个数小于最大题号数
+			record.setTitleMaxNumber(String.valueOf(record.getAllCount()));
+		}
+		TraceUtils.setUpdateTrace(record);
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 重新计算错题record数据结果   拆分子数据
+	 * @param record
+	 * @param objs
+	 */
+	private void packagingExerciseFaultRecordData(ExerciseFaultRecord record,
+			Object[] objs) {
+		record.setAllCount((BigInteger)objs[0]);
+		record.setCorrectCount(new BigInteger(String.valueOf(objs[1]==null ? "0" : objs[1])));
+		record.setDoCount(new BigInteger(String.valueOf(objs[2]==null ? "0" : objs[2])));
+		record.setAccuracy(new BigDecimal(String.valueOf(objs[3]==null ? "0" : objs[3])));
+		record.setCompletionRate(new BigDecimal(String.valueOf(objs[4]==null ? "0" : objs[4])));
+		record.setScore(record.getAccuracy());
+	}
+	
+	/**
+	 * 重新计算做题记录总个数    错题本 正确个数 做题个数  正确率  错题本
+	 * @return
+	 */
+	public ExerciseFaultRecord doCalcFaultExericseStatisBySubmitData(ExerciseFaultRecord record,
+			ExerciseFaultBook resumeBook, String subjectId){
+		// 1.计算做题总个数 record
+		this.updateExerciseFaultRecordData(record);
+		
+		// 2.计算该班级的总个数
+		this.updateExerciseFaultBookInfo(resumeBook);
+		if(resumeBook.getAllCount().compareTo(BigInteger.ZERO) == 0){// 全部删除后 数据清0
+			resumeBook.setTitleMaxNumber("0");
+			resumeBook.setStatus("0");
+		}else if(StringUtils.isNotBlank(resumeBook.getTitleMaxNumber()) && 
+				resumeBook.getAllCount().compareTo(new BigInteger(resumeBook.getTitleMaxNumber())) < 0){// 总个数小于最大题号数
+			resumeBook.setTitleMaxNumber(String.valueOf(resumeBook.getAllCount()));
+		}
+		TraceUtils.setUpdateTrace(resumeBook);
+		this.save(resumeBook);
+		
+		return record;
+	}
+	
+	/**
+	 * 组装错题结果入库
+	 * @param resumeBookId
+	 * @param faultRecordId
+	 * @param recordResult
+	 * @return
+	 */
+	private Result doOperFaultExerciseToDB(String resumeBookId, String faultRecordId, ExciseExtendReqData recordResult){
+		List<ExerciseExtendRecordData> lstItems = recordResult.getItems();
+		
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for(int i=0; i<lstItems.size(); i++){
+			args[i] = lstItems.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+		argsMap.put("resumeBookId", resumeBookId);
+		
+		//  查询此用户是否有错题记录
+		String hql = "from ExerciseFault where exerciseItemId in (:exerciseIds) and resumeBookId=:resumeBookId and deleteFlag is false ";
+		List<ExerciseFault> lstExistfavor = this.findByComplexHql(hql, argsMap, ExerciseFault.class);
+		
+		Map<String, ExerciseFault> faultMap = new HashMap<String, ExerciseFault>();
+		for(ExerciseFault fault:lstExistfavor){
+			faultMap.put(fault.getExerciseItemId(), fault);
+		}
+		
+		List<ExerciseFault> lstFault = new ArrayList<ExerciseFault>(recordResult.getItems().size());
+		ExerciseFault fault=null;
+		
+		// 循环每一条记录
+		// 判断客户端提交的数据是否重复map
+		Map<String,Object> repeatMap = new HashMap<String,Object>(lstItems.size());
+		
+		for(ExerciseExtendRecordData record:lstItems){
+				if(repeatMap.get(record.getExerciseId()) != null && 
+						(boolean)repeatMap.get(record.getExerciseId()) == record.getFlag()){//重复数据
+					continue;
+				}
+			
+				fault=faultMap.get(record.getExerciseId());
+				if(record.getFlag()){//添加错题
+					if(fault == null){
+						fault = new ExerciseFault();
+						fault.setFaultRecordId(faultRecordId);
+						fault.setResumeBookId(resumeBookId);
+						fault.setExerciseItemId(record.getExerciseId());
+						fault.setDeleteFlag(false);
+						TraceUtils.setCreateTrace(fault);
+					}else{// 原来已经删除  恢复
+						if(fault.getDeleteFlag()){
+							fault.setDeleteFlag(false);
+							fault.setAnswer(null);
+							fault.setCorrect(Byte.valueOf("0"));
+							TraceUtils.setUpdateTrace(fault);
+						}else{
+							continue;
+						}
+					}
+					
+				}else{// 删除错题
+					if(fault == null){
+						continue;
+					}
+					fault.setDeleteFlag(true);
+					fault.setAnswer(null);
+					fault.setCorrect(Byte.valueOf("0"));
+					TraceUtils.setUpdateTrace(fault);
+				}
+				lstFault.add(fault);
+				
+				repeatMap.put(record.getExerciseId(), record.getFlag());
+		}
+		
+		// 2.记录错题itemList
+		// 批量增加
+		this.saveOrUpdateAll(lstFault);
+		this.flush();
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 操作练习记录
+	 * @param subjectId
+	 * @return
+	 */
+	public ExerciseFaultRecord doOperExerciseFaultRecord(String resumeBookId,String exerciseGroupId,
+			String exerciseGroupType, ExciseExtendReqData recordResult){
+		// 错题记录 当前组
+		String hql = "from ExerciseFaultRecord where resumeBookId=? and exerciseGroupId=? and deleteFlag is false ";
+		
+		ExerciseFaultRecord record = this.findUnique(hql, 
+				CollectionUtils.newList(resumeBookId, exerciseGroupId), ExerciseFaultRecord.class);
+		
+		if(null == record){// 记录不存在
+			
+			record = new ExerciseFaultRecord();
+			record.setResumeBookId(resumeBookId);
+			record.setExerciseGroupId(exerciseGroupId);
+			record.setExerciseGroupType(Short.valueOf(exerciseGroupType));
+			record.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(record);
+			
+			this.save(record);
+		}
+		
+		
+		return record;
+	}
+	
+	
+	/**
+	 * 操作练习记录
+	 * @param subjectId
+	 * @return
+	 */
+	public ExerciseFaultBook doOperExerciseFaultBook(String subjectId,ExciseExtendReqData recordResult){
+		StringBuffer hql = new StringBuffer(512);
+		hql.append("from ExerciseFaultBook where classId=? and userId=? and deleteFlag is false ");
+		
+		List<Object> args = CollectionUtils.newList(ClientUtils.getClassId(), 
+					ClientUtils.getUserId());
+		if(StringUtils.isNotBlank(subjectId)){// 高校
+			hql.append(" and subjectId=? ");
+			 args.add(subjectId);
+		}
+		
+		//  查询此用户是否有错题记录
+		List<ExerciseFaultBook> lstFault = this.find(hql.toString(), args, ExerciseFaultBook.class);
+		
+		ExerciseFaultBook book = null;
+		String hql_book;
+		if(lstFault.isEmpty()){// 记录为空
+			
+			if(StringUtils.isNotBlank(subjectId)){// 高校
+				
+				// 先查询上级记录是否存在
+				hql_book = "from ExerciseFaultBook where classId=? and userId=? and deleteFlag is false ";
+				
+				lstFault = this.find(hql_book, CollectionUtils.newList(ClientUtils.getClassId(), 
+						ClientUtils.getUserId()), ExerciseFaultBook.class);
+				
+				if(lstFault.isEmpty()){//班级记录不存在
+					book = this.insertExerciseFaultBookNew(ExerciseFaultBook.TYPE_ORGANIZATION, null);
+				}
+				
+				book = this.insertExerciseFaultBookNew(ExerciseFaultBook.TYPE_COLLEGE, lstFault.get(0).getResumeBookId());
+				
+				
+			}else{
+				book = this.insertExerciseFaultBookNew(ExerciseFaultBook.TYPE_ORGANIZATION, null);
+			}
+		}else{
+			book = lstFault.get(0);
+		}
+		
+		
+		return book;
+	}
+	
+	
+	/**
+	 * 新增错题book记录
+	 * @param groupId
+	 * @return 
+	 */
+	public ExerciseFaultBook insertExerciseFaultBookNew(short type, String parentId) {
+		
+		ExerciseFaultBook record = new ExerciseFaultBook();
+		record.setUserId(ClientUtils.getUserId());
+		record.setClassId(ClientUtils.getClassId());
+		record.setCollegeCourseId(ClientUtils.getCourseId());
+		record.setOrgId(ClientUtils.getOrgId());
+		//record.setSubjectId();
+		record.setParentId(parentId);
+		record.setType(type);
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return record;
+	}
+	
+	/**
+	 * 更新错题book记录
+	 * @param groupId
+	 * @return 
+	 */
+	public Result updateExerciseFaultBookNew(ExerciseFaultBook record) {
+		
+		TraceUtils.setUpdateTrace(record);
+		
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	
+	/**
+	 * 操作错题记录
+	 */
+	public Map<String,Object> doOperExerciseFavorRecordData(String subjectId, ExciseExtendReqData recordResult) {
+		// 练习组id
+		String exerciseGroupId = recordResult.getExerciseGroupId();
+		String exerciseGroupType = recordResult.getExerciseGroupType();
+		
+		// 1.操作练习总记录
+		ExerciseFavoriteBook  favorBook = doOperExerciseFavoriteBook(subjectId, recordResult);
+		String favoriteBookId = favorBook.getFavoriteBookId();
+		
+		// 2.操作练习记录
+		ExerciseFavoriteRecord record = doOperExerciseFavorRecord(favoriteBookId,
+				exerciseGroupId, exerciseGroupType,recordResult);
+		String favoriteRecordId = record.getFavoriteRecordId();
+		
+		// 3.组装错题结果入库
+		doOperFavorExerciseToDB(favoriteBookId, favoriteRecordId, recordResult);
+		
+		
+		// 4. 重新计算做题记录总个数  收藏
+		record = this.doCalcFavorExericseStatisBySubmitData(record, favorBook, subjectId);
+		
+		// 5.返回结果
+		Map<String,Object> map = new HashMap<String, Object>(3);
+		map.put(EXERCISE_RECORD_ID, favoriteRecordId);
+		map.put("exerciseGroupId", exerciseGroupId);
+		map.put(UPDATE_TIME, DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		
+		return map;
+	}
+	
+	/**
+	 * 更新ExerciseFavoriteRecord数据
+	 * @param record
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Result updateExerciseFavoriteRecordData(ExerciseFavoriteRecord record){
+		String sql = "SELECT"+
+				" count(1) allCount,"+
+				" sum(CORRECT = 1) corrCount,"+
+				" sum(ANSWER IS NOT NULL) doCount,"+
+				" round(sum(CORRECT = 1) / count(1) * 100,2) accuracy,"+
+				" round(sum(ANSWER IS NOT NULL) / count(1) * 100,2) rate"+
+				" FROM exercise_favorite"+
+				" WHERE DELETE_FLAG = 0"+
+				" AND FAVORITE_RECORD_ID = ?";
+
+		List<Object[]> lstFault = this.findBySql(sql,  CollectionUtils.newList(record.getFavoriteRecordId()));
+		
+		Object[] objs = lstFault.get(0);
+		
+		//  拆分子数据
+		packagingExerciseFavoriteRecordData(record, objs);
+		
+		if(record.getAllCount().compareTo(BigInteger.ZERO) == 0){// 全部删除后 数据清0
+			record.setTitleMaxNumber("0");
+			record.setStatus("0");
+		}else if(StringUtils.isNotBlank(record.getTitleMaxNumber()) && 
+				record.getAllCount().compareTo(new BigInteger(record.getTitleMaxNumber())) < 0){// 总个数小于最大题号数
+			record.setTitleMaxNumber(String.valueOf(record.getAllCount()));
+		}
+		TraceUtils.setUpdateTrace(record);
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 拆分子数据
+	 * @param record
+	 * @param objs
+	 */
+	private void packagingExerciseFavoriteRecordData(
+			ExerciseFavoriteRecord record, Object[] objs) {
+		record.setAllCount((BigInteger)objs[0]);
+		record.setCorrectCount(new BigInteger(String.valueOf(objs[1]==null ? "0" : objs[1])));
+		record.setDoCount(new BigInteger(String.valueOf(objs[2]==null ? "0" : objs[2])));
+		record.setAccuracy(new BigDecimal(String.valueOf(objs[3]==null ? "0" : objs[3])));
+		record.setCompletionRate(new BigDecimal(String.valueOf(objs[4]==null ? "0" : objs[4])));
+		record.setScore(record.getAccuracy());
+	}
+	
+	/**
+	 * 重新计算做题记录总个数  收藏
+	 * @param exerciseGroupId
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	public ExerciseFavoriteRecord doCalcFavorExericseStatisBySubmitData(ExerciseFavoriteRecord record,
+			ExerciseFavoriteBook favorBook,String subjectId){
+		// 1.计算做题总个数 record
+		this.updateExerciseFavoriteRecordData(record);
+				
+		// 2.计算该班级的总个数
+		this.updateExerciseFavorBookInfo(favorBook);
+		if(favorBook.getAllCount().compareTo(BigInteger.ZERO) == 0){// 全部删除后 数据清0
+			favorBook.setTitleMaxNumber("0");
+			favorBook.setStatus("0");
+		}else if(StringUtils.isNotBlank(favorBook.getTitleMaxNumber()) 
+				&& favorBook.getAllCount().compareTo(new BigInteger(favorBook.getTitleMaxNumber())) < 0){// 总个数小于最大题号数
+			favorBook.setTitleMaxNumber(String.valueOf(favorBook.getAllCount()));
+		}
+		TraceUtils.setUpdateTrace(favorBook);
+		this.save(favorBook);
+		
+		return record;
+	}
+	
+	/**
+	 * 组装错题结果入库
+	 * @param resumeBookId
+	 * @param faultRecordId
+	 * @param recordResult
+	 * @return
+	 */
+	private Result doOperFavorExerciseToDB(String favoriteBookId, String favoriteRecordId, ExciseExtendReqData recordResult){
+		List<ExerciseExtendRecordData> lstItems = recordResult.getItems();
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for(int i=0; i<lstItems.size(); i++){
+			args[i] = lstItems.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+		argsMap.put("favoriteRecordId", favoriteRecordId);
+		
+		//  查询此用户是否有收藏记录
+		String hql = "from ExerciseFavorite where exerciseItemId in (:exerciseIds) and favoriteRecordId=:favoriteRecordId and deleteFlag is false";
+		List<ExerciseFavorite>  lstExistfavor =  this.findByComplexHql(hql, argsMap, ExerciseFavorite.class);
+		Map<String, ExerciseFavorite> favorMap = new HashMap<String, ExerciseFavorite>();
+		for(ExerciseFavorite favor:lstExistfavor){
+			favorMap.put(favor.getExerciseItemId(), favor);
+		}
+		
+		List<ExerciseFavorite> lstFavor= new ArrayList<ExerciseFavorite>();
+		ExerciseFavorite favor=null;
+		// 循环每一条记录
+		// 判断客户端提交的数据是否重复map
+		Map<String,Object> repeatMap = new HashMap<String,Object>(lstItems.size());
+		
+		for(ExerciseExtendRecordData record:lstItems){
+			if(repeatMap.get(record.getExerciseId()) != null && 
+					(boolean)repeatMap.get(record.getExerciseId()) == record.getFlag()){//重复数据
+				continue;
+			}
+				
+			favor = favorMap.get(record.getExerciseId());
+			if(record.getFlag()){//添加收藏记录
+				if(favor == null){
+					favor = new ExerciseFavorite();
+					favor.setFavoriteBookId(favoriteBookId);
+					favor.setFavoriteRecordId(favoriteRecordId);
+					favor.setExerciseItemId(record.getExerciseId());
+					TraceUtils.setCreateTrace(favor);
+					favor.setDeleteFlag(false);
+				}else{//原来已经删除 现在恢复
+					if(favor.getDeleteFlag()){
+						favor.setAnswer(null);
+						favor.setCorrect(Byte.valueOf("0"));
+						favor.setDeleteFlag(false);
+						TraceUtils.setUpdateTrace(favor);
+					}else{
+						continue;
+					}
+				}
+				
+			}else{// 删除收藏
+				if(favor == null){
+					continue;
+				}
+				favor.setDeleteFlag(true);
+				favor.setAnswer(null);
+				favor.setCorrect(Byte.valueOf("0"));
+				favor.setCreateTime(new Date(System.currentTimeMillis()));
+				TraceUtils.setUpdateTrace(favor);
+			}
+			lstFavor.add(favor);
+			
+			repeatMap.put(record.getExerciseId(), record.getFlag());
+		}
+		
+		// 2.记录收藏itemList
+		// 批量增加或者更新
+		this.saveOrUpdateAll(lstFavor);
+		this.flush();
+		
+		return new Result(true);
+	}
+	/**
+	 * 操作练习记录
+	 * @param subjectId
+	 * @return
+	 */
+	public ExerciseFavoriteRecord doOperExerciseFavorRecord(String favoriteBookId,String exerciseGroupId,
+			String exerciseGroupType,ExciseExtendReqData recordResult){
+		// 错题记录 当前组
+		String hql = "from ExerciseFavoriteRecord where favoriteBookId=? and exerciseGroupId=? and deleteFlag is false ";
+		
+		ExerciseFavoriteRecord record = this.findUnique(hql, 
+				CollectionUtils.newList(favoriteBookId, exerciseGroupId), ExerciseFavoriteRecord.class);
+		
+		if(null == record){// 记录不存在
+			
+			record = new ExerciseFavoriteRecord();
+			record.setFavoriteBookId(favoriteBookId);
+			record.setExerciseGroupId(exerciseGroupId);
+			record.setExerciseGroupType(Short.valueOf(exerciseGroupType));
+			record.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(record);
+			
+			this.save(record);
+		}
+		
+		return record;
+	}
+	
+	
+	/**
+	 * 操作练习记录
+	 * @param subjectId
+	 * @return
+	 */
+	public ExerciseFavoriteBook doOperExerciseFavoriteBook(String subjectId,ExciseExtendReqData recordResult){
+		StringBuffer hql = new StringBuffer(512);
+		hql.append("from ExerciseFavoriteBook where classId=? and userId=? and deleteFlag is false ");
+		
+		List<Object> args = CollectionUtils.newList(ClientUtils.getClassId(), 
+					ClientUtils.getUserId());
+		if(StringUtils.isNotBlank(subjectId)){// 高校
+			hql.append(" and subjectId=? ");
+			args.add(subjectId);
+		}
+		
+		//  查询此用户是否有错题记录
+		List<ExerciseFavoriteBook> lstFavor = this.find(hql.toString(), args, ExerciseFavoriteBook.class);
+		
+		ExerciseFavoriteBook book = null;
+		String hql_book;
+		if(lstFavor.isEmpty()){// 记录为空
+			
+			if(StringUtils.isNotBlank(subjectId)){// 高校
+				
+				// 先查询上级记录是否存在
+				hql_book = "from ExerciseFavoriteBook where classId=? and userId=? and deleteFlag is false ";
+				
+				lstFavor = this.find(hql_book, CollectionUtils.newList(ClientUtils.getClassId(), 
+						ClientUtils.getUserId()), ExerciseFavoriteBook.class);
+				
+				if(lstFavor.isEmpty()){//班级记录不存在
+					book = this.insertExerciseFavorBookNew(ExerciseFavoriteBook.TYPE_ORGANIZATION, null);
+				}else{
+					book = lstFavor.get(0);
+				}
+				
+				book = this.insertExerciseFavorBookNew(ExerciseFavoriteBook.TYPE_COLLEGE, book.getFavoriteBookId());
+				
+				
+			}else{
+				book = this.insertExerciseFavorBookNew(ExerciseFavoriteBook.TYPE_ORGANIZATION, null);
+			}
+		}else{
+			book = lstFavor.get(0);
+		}
+		
+		return book;
+	}
+	
+	/**
+	 * 新增错题book记录
+	 * @param groupId
+	 * @return 
+	 */
+	public Result updateExerciseFavorBookNew(ExerciseFavoriteBook record) {
+		
+		TraceUtils.setUpdateTrace(record);
+		
+		this.save(record);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 新增错题book记录
+	 * @param groupId
+	 * @return 
+	 */
+	public ExerciseFavoriteBook insertExerciseFavorBookNew(short type, String parentId) {
+		
+		ExerciseFavoriteBook record = new ExerciseFavoriteBook();
+		record.setUserId(ClientUtils.getUserId());
+		record.setClassId(ClientUtils.getClassId());
+		record.setCollegeCourseId(ClientUtils.getCourseId());
+		record.setOrgId(ClientUtils.getOrgId());
+		record.setParentId(parentId);
+		record.setType(type);
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return record;
+	}
+	
+	/**
+	 * 错题本提交答案
+	 */
+	@Override
+	public Map<String,Object> doSubmitExerFaultAnswerDataNew(ExerciseSubmitAnswerData clientAnswerResult) {
+		
+		// 0.重新整理答题数据
+		ExerciseSubmitAnswerData answerResult = exerciseVerService.getExerciseSubmitAnswerDataNew(clientAnswerResult);
+		
+		// 1.更新错题记录
+		ExerciseFaultRecord record = this.doOperExerFaultRecord(answerResult);
+		
+		if(null == record){
+			return null;
+		}
+		
+		String faultRecordId = record.getFaultRecordId();
+		
+		// 返回结果
+		Map<String,Object> map = new HashMap<String, Object>(3);
+		map.put(EXERCISE_RECORD_ID, faultRecordId);
+		map.put("exerciseGroupId", record.getExerciseGroupId());
+		map.put(UPDATE_TIME, DateTimeUtils.getCurrDateTime(record.getAnswerUpdateTime()));
+		map.put("exerciseBookId", record.getResumeBookId());
+		map.put("correctCount", answerResult.getCorrectCount());
+		map.put("doCount", answerResult.getDoCount());
+				
+		if(answerResult.getItems().isEmpty() 
+				&& answerResult.getSubmitType() != 1){//  submitType:1表示本地无网情况下重新做题过
+			return map;
+		}
+		
+		// 2.判断是否本地重新做过 submitType:1表示本地无网情况下重新做题过
+		if(1 == answerResult.getSubmitType()){
+			doOperExerciseFaultRecordByRedo(faultRecordId);
+		}
+		
+		// 2.更新答案
+		answerResult.setExerciseRecordId(faultRecordId);
+		Result result = this.doUpdateExerFaultAnswerData(answerResult);
+		
+		if(!result.isSuccess()){
+			return null;
+		}
+		
+		// 3.重新计算做题记录正确个数 做题个数  正确率
+		this.updateExerciseFaultRecordData(record);
+		
+		return map;
+	}
+	
+	/**
+	 * 更新错题记录
+	 * @param answerResult
+	 * @return 
+	 */
+	public ExerciseFaultRecord doOperExerFaultRecord(ExerciseSubmitAnswerData answerResult) {
+		
+		ExerciseFaultRecord record = null;
+		String exerciseRecordId = answerResult.getExerciseRecordId();
+		if(StringUtils.isNotBlank(exerciseRecordId)){// 正常做题
+			
+			record = this.read(ExerciseFaultRecord.class, answerResult.getExerciseRecordId());
+			
+		}else{// 无网情况下
+			String hql = "from ExerciseFaultRecord r where r.deleteFlag is false and "
+					+ "r.faultBook.userId=? and r.faultBook.classId=? and r.exerciseGroupId=?";
+			
+			record = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getClassId(),
+					answerResult.getExerciseGroupId()), ExerciseFaultRecord.class);
+		}
+		
+		if(null == record){
+			return null;
+		}
+		
+		if(answerResult.getItems().isEmpty() 
+				&& ExerciseRecord.STATUS_SUBMIT.equals(answerResult.getStatus())){//仅仅交卷
+			record.setStatus(answerResult.getStatus());
+			// 更新答案时间
+			record.setAnswerUpdateTime(new Date(System.currentTimeMillis()));
+			
+			this.save(record);
+			
+			return record;
+		}
+		
+		
+		// 计算
+//		if(!"1".equals(record.getStatus())){// 非提交的就更新  
+//		}
+		record.setStatus(StringUtils.isBlank(answerResult.getStatus()) ? "0" : answerResult.getStatus());
+		if(!"0".equals(answerResult.getCurrTitleNum())){
+			record.setTitleMaxNumber(StringUtils.isBlank(answerResult.getCurrTitleNum()) ? "0" : answerResult.getCurrTitleNum());
+		}
+		// 更新答案时间
+		record.setAnswerUpdateTime(new Date(System.currentTimeMillis()));
+		
+		this.save(record);
+		
+		return record;
+	}
+	
+	/**
+	 *提交 错题结果到db
+	 * @return
+	 */
+	public Result doUpdateExerFaultAnswerData(ExerciseSubmitAnswerData answerResult) {
+		List<ExerciseItemAnswerData> lstAnswers = answerResult.getItems();
+		if(lstAnswers.isEmpty()){
+			return new Result(true);
+		}
+		
+		// 批量更新答案
+		List<ExerciseFault> lstResultFault =new ArrayList<ExerciseFault>(lstAnswers.size());
+		
+		// 2.1.组装参数 用于查询练习选项图片
+		Map<String, Object> argsMap = new HashMap<String, Object>(2);
+		Object[] args = new Object[lstAnswers.size()];
+		for(int i=0; i<lstAnswers.size(); i++){
+			args[i] = lstAnswers.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+		argsMap.put(EXERCISE_RECORD_ID, answerResult.getExerciseRecordId());
+		
+		String hql = "from ExerciseFault where deleteFlag is false and exerciseItemId in (:exerciseIds) and faultRecordId =:exerciseRecordId ";
+		List<ExerciseFault> lstFault = this.findByComplexHql(hql, argsMap, ExerciseFault.class);
+		
+		// 按练习id 对应放到map中
+		Map<String, ExerciseFault> faultMap = new HashMap<String, ExerciseFault>(lstFault.size());
+		for(ExerciseFault fault:lstFault){
+			faultMap.put(fault.getExerciseItemId(), fault);
+		}
+		
+		ExerciseFault fault=null;
+		for(ExerciseItemAnswerData answer:lstAnswers){
+			fault = faultMap.get(answer.getExerciseId());
+			if(null == fault){
+				continue;
+			}
+			if(StringUtils.isBlank(answer.getAnswer())){// 答案为空
+				continue;
+			}
+			
+			fault.setAnswer(answer.getAnswer());
+			fault.setCorrect(Byte.valueOf(answer.getCorrect()));
+			TraceUtils.setUpdateTrace(fault);
+			lstResultFault.add(fault);
+		}
+		
+		// 1.保存 错题 收集lst
+		this.saveOrUpdateAll(lstResultFault);
+		this.flush();
+		
+		return new Result(true);
+	}
+	
+	/**
+	 *  收藏本提交答案
+	 */
+	@Override
+	public Map<String,Object> doSubmitExerFavorAnswerDataNew(ExerciseSubmitAnswerData clientAnswerResult) {
+		
+		// 0.重新整理答题数据
+		ExerciseSubmitAnswerData answerResult = exerciseVerService.getExerciseSubmitAnswerDataNew(clientAnswerResult);
+		
+		// 1.更新错题记录
+		ExerciseFavoriteRecord record = doOperExerFavorRecord(answerResult);
+		if(null == record){
+			return null;
+		}
+		String favoriteRecordId = record.getFavoriteRecordId();
+		
+		// 返回结果
+		Map<String,Object> map = new HashMap<String, Object>(3);
+		map.put(EXERCISE_RECORD_ID, favoriteRecordId);
+		map.put("exerciseGroupId", record.getExerciseGroupId());
+		map.put(UPDATE_TIME,   DateTimeUtils.getCurrDateTime(record.getAnswerUpdateTime()));
+		map.put("exerciseBookId", record.getFavoriteBookId());
+		
+		if(answerResult.getItems().isEmpty() && answerResult.getSubmitType() != 1){//仅仅交卷
+			return map;
+		}
+		
+		// 2.判断是否本地重新做过 submitType:1表示本地无网情况下重新做题过
+		if(1 == answerResult.getSubmitType()){
+			doOperExerciseFavorRecordByRedo(favoriteRecordId);
+		}
+				
+		// 2.更新答案
+		answerResult.setExerciseRecordId(favoriteRecordId);
+		Result result = doUpdateExerFavorAnswerData(answerResult);
+		
+		if(!result.isSuccess()){
+			return null;
+		}
+		
+		//  3.重新计算做题记录正确个数 做题个数  正确率  收藏
+		this.updateExerciseFavoriteRecordData(record);
+		
+		return map;
+	}
+	
+	/**
+	 * 更新错题记录
+	 * @param answerResult
+	 * @return 
+	 */
+	public ExerciseFavoriteRecord doOperExerFavorRecord(ExerciseSubmitAnswerData answerResult) {
+		
+		ExerciseFavoriteRecord record = null;
+		String exerciseRecordId = answerResult.getExerciseRecordId();
+		if(StringUtils.isNotBlank(exerciseRecordId)){// 正常做题
+			
+			record = this.read(ExerciseFavoriteRecord.class, exerciseRecordId);
+			
+		}else{// 无网情况下
+			String hql = "from ExerciseFavoriteRecord r where r.deleteFlag is false "
+					+ " and r.favorBook.userId=? and r.favorBook.classId=? and r.exerciseGroupId=?";
+			
+			record = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId(),ClientUtils.getClassId(),
+					answerResult.getExerciseGroupId()), ExerciseFavoriteRecord.class);
+		}
+		
+		if(null == record){
+			return null;
+		}
+		
+		if(answerResult.getItems().isEmpty() 
+				&& ExerciseRecord.STATUS_SUBMIT.equals(answerResult.getStatus())){//仅仅交卷
+			record.setStatus(answerResult.getStatus());
+			// 更新答案时间
+			record.setAnswerUpdateTime(new Date(System.currentTimeMillis()));
+			
+			this.save(record);
+			
+			return record;
+		}
+		
+//		// 计算
+//		if(!"1".equals(record.getStatus())){// 非提交的就更新
+//		}
+		record.setStatus(answerResult.getStatus());
+		if(!"0".equals(answerResult.getCurrTitleNum())){
+			record.setTitleMaxNumber(answerResult.getCurrTitleNum());
+		}
+		
+		// 更新答案时间
+		record.setAnswerUpdateTime(new Date(System.currentTimeMillis()));
+		
+		this.save(record);
+		
+		return record;
+	}
+	
+	
+	/**
+	 *提交 错题结果到db
+	 * @return
+	 */
+	public Result doUpdateExerFavorAnswerData(ExerciseSubmitAnswerData answerResult) {
+		List<ExerciseItemAnswerData> lstAnswers = answerResult.getItems();
+		
+		if(lstAnswers.isEmpty()){
+			return new Result(true);
+		}
+		// 批量更新答案
+		List<ExerciseFavorite> lstResultFavor =new ArrayList<ExerciseFavorite>(lstAnswers.size());
+		
+		// 2.1.组装参数 用于查询练习选项图片
+		Map<String, Object> argsMap = new HashMap<String, Object>(2);
+		Map<String, Object> exerItemIdMap = new HashMap<String, Object>(1);
+		Object[] args = new Object[lstAnswers.size()];
+		for(int i=0; i<lstAnswers.size(); i++){
+			args[i] = lstAnswers.get(i).getExerciseId();
+		}
+		exerItemIdMap.put("exerciseIds", args);
+		argsMap.put("exerciseIds", args);
+		argsMap.put(EXERCISE_RECORD_ID, answerResult.getExerciseRecordId());
+		
+		String hql = "from ExerciseFavorite where deleteFlag is false and exerciseItemId in (:exerciseIds) and favoriteRecordId =:exerciseRecordId ";
+		List<ExerciseFavorite> lstFavor = this.findByComplexHql(hql, argsMap, ExerciseFavorite.class);
+		
+		// 按练习id 对应放到map中
+		Map<String, ExerciseFavorite> favorMap = new HashMap<String, ExerciseFavorite>(lstFavor.size());
+		for(ExerciseFavorite favor:lstFavor){
+			favorMap.put(favor.getExerciseItemId(), favor);
+		}
+		
+		ExerciseFavorite favor;
+		for(ExerciseItemAnswerData answer:lstAnswers){
+			favor = favorMap.get(answer.getExerciseId());
+			if(null == favor){
+				continue;
+			}
+			if(StringUtils.isBlank(answer.getAnswer())){// 答案为空
+				continue;
+			}
+			favor.setAnswer(answer.getAnswer());
+			favor.setCorrect(Byte.valueOf(answer.getCorrect()));
+			TraceUtils.setUpdateTrace(favor);
+			lstResultFavor.add(favor);
+		}
+		
+		this.saveOrUpdateAll(lstResultFavor);
+		this.flush();
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 查询错题本列表数据
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @return
+	 */
+	@Override
+	public List<ExerGroupResponseData> queryExerciseFaultListData(
+			int exerType, String subjectId, Pager pager) {
+		StringBuffer hql = new StringBuffer(512);
+		//  1.查询分组列表
+		hql.append("select r,g from ExerciseFaultRecord r, ExerciseFaultBook b, ExerciseGroup g "
+				+ " where r.resumeBookId=b.resumeBookId "
+				+ " and r.exerciseGroupId=g.groupId "
+				+ "	and r.deleteFlag is false "
+				+ "	and b.deleteFlag is false "
+				+ "	and b.userId=?  and r.allCount>0 ");
+		
+		List<Object> args = CollectionUtils.newList(ClientUtils.getUserId());
+		if(exerType != 0){ //表示查询全部错题
+			hql.append(" and r.exerciseGroupType=?");
+			args.add((short)exerType);
+		}
+				
+		if(StringUtils.isNotBlank(subjectId)){// 高校  通过课程过滤
+			
+			hql.append(" and b.type=? and b.subjectId=? and g.subjectId=? ");
+			args.add(ExerciseFaultBook.TYPE_COLLEGE);
+			args.add(subjectId);
+			args.add(subjectId);
+		}else{// 非高校
+			
+			hql.append(" and b.type=? and b.classId=? and g.classId=?");
+			args.add(ExerciseFaultBook.TYPE_ORGANIZATION);
+			args.add(ClientUtils.getClassId());
+			args.add(ClientUtils.getClassId());
+		}
+		hql.append(" order by r.updateTime desc ");
+		
+		// 根据结构查询得到所需记录
+		List<Object[]> lstRecord = this.findList(hql.toString(), pager, args, Object[].class);
+		
+		if(lstRecord.isEmpty()){// 查询结果记录为空
+			return null;
+		}
+		
+		// 3.组装参数
+		Object[] argss = new Object[lstRecord.size()];
+		ExerciseGroup groupp=null;
+		for(int i=0; i<lstRecord.size(); i++){
+			groupp = (ExerciseGroup)lstRecord.get(i)[1];
+			argss[i] = groupp.getGroupId();
+		}
+		
+		// 获取个人用户组对应的收藏记录 题目更新时间
+		Map<String, Map<String, Object>> favorMap = this.queryFavorRecordByGroup(subjectId, argss);
+				
+		// 结果返回参数
+		List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size());
+		
+		for(Object[] objs:lstRecord){
+			
+			// 组装练习错题本列表数据
+			lstResult.add(packagingExerciseFaultListData(
+					favorMap, objs));
+		}
+		
+		return lstResult; 
+	}
+
+	/**
+	 * 组装练习错题本列表数据
+	 * @param favorMap
+	 * @param objs
+	 * @return
+	 */
+	private ExerGroupResponseData packagingExerciseFaultListData(
+			Map<String, Map<String, Object>> favorMap, Object[] objs) {
+		ExerciseFaultRecord record = (ExerciseFaultRecord)objs[0];
+		ExerciseGroup group = (ExerciseGroup)objs[1];
+		
+		ExerGroupResponseData resultObj = new ExerGroupResponseData();
+		
+		// 拆分方法
+		packagingExerciseFaultListChildData(record, resultObj);
+		
+		resultObj.setExtendAllCount(record.getAllCount()==null ? BigInteger.ZERO  : record.getAllCount());
+		if(new BigInteger(resultObj.getCurrTitleNumber()).compareTo(resultObj.getExtendAllCount())>0){
+			resultObj.setCurrTitleNumber(String.valueOf(resultObj.getExtendAllCount()));
+		}
+		BeanUtils.copyProperties(group, resultObj);
+		resultObj.setExerciseTime(group.getAttribute1());
+		resultObj.setUpdateTime(record.getUpdateTime());
+		resultObj.setAnswerUpdateTime(record.getAnswerUpdateTime());
+		resultObj.setFaultUpdateTime(record.getUpdateTime());
+		resultObj.setFaultCount(resultObj.getAllCount());
+		if(favorMap != null && favorMap.get(group.getGroupId()) != null){
+			resultObj.setFavorUpdateTime((Timestamp)favorMap.get(group.getGroupId()).get(UPDATE_TIME));//设置收藏本题目更新时间
+			resultObj.setFavorCount((BigInteger)favorMap.get(group.getGroupId()).get("allCount"));
+		}
+		
+		if(resultObj.getDoCount().compareTo(resultObj.getExtendAllCount())>0){
+			resultObj.setDoCount(resultObj.getExtendAllCount());
+		}
+		return resultObj;
+	}
+	
+	/**
+	 * 组装练习错题本列表数据 拆分方法
+	 * @param record
+	 * @param resultObj
+	 */
+	private void packagingExerciseFaultListChildData(
+			ExerciseFaultRecord record, ExerGroupResponseData resultObj) {
+		resultObj.setStatus(record.getStatus());
+		resultObj.setGroupId(record.getExerciseGroupId());
+		resultObj.setExerciseRecordId(record.getFaultRecordId());
+		resultObj.setAccuracy(record.getAccuracy()==null ? BigDecimal.ZERO : record.getAccuracy());
+		resultObj.setCorrectCount(record.getCorrectCount()==null ? BigInteger.ZERO : record.getCorrectCount());
+		resultObj.setDoCount(record.getDoCount()==null ? BigInteger.ZERO : record.getDoCount());
+		resultObj.setCurrTitleNumber(record.getTitleMaxNumber()==null ? "0" : record.getTitleMaxNumber());
+	}
+	
+	/**
+	 * 获取个人用户组对应的错题题目更新时间
+	 * @param subjectId
+	 * @param args
+	 * @return
+	 */
+	@Override
+	public Map<String, Map<String, Object>> queryFaultRecordByGroup(String subjectId, Object[] args) {
+		StringBuffer hql = new StringBuffer(512);
+		//  1.查询分组列表
+		hql.append("select r.exerciseGroupId,r.updateTime,r.allCount from ExerciseFaultRecord r, ExerciseFaultBook b "
+				+ " where r.resumeBookId=b.resumeBookId "
+				+ "	and b.userId = :userId and r.exerciseGroupId in (:groupIds)  ");
+		
+		Map<String, Object> argsMap = new HashMap<String, Object>(4);
+		
+		argsMap.put("userId", ClientUtils.getUserId());
+		argsMap.put("groupIds", args);
+		
+		if(StringUtils.isNotBlank(subjectId)){// 高校  通过课程过滤
+			
+			hql.append(" and b.type=:type and b.subjectId=:subjectId ");
+			argsMap.put("type", ExerciseFaultBook.TYPE_COLLEGE);
+			argsMap.put("subjectId", subjectId);
+		}else{// 非高校
+			
+			hql.append(" and b.type=:type and b.classId=:classId ");
+			argsMap.put("type", ExerciseFaultBook.TYPE_ORGANIZATION);
+			argsMap.put("classId", ClientUtils.getClassId());
+		}
+		
+		// 根据结构查询得到所需记录
+		List<Object[]> lstRecord = this.findByComplexHql(hql.toString(), argsMap, Object[].class);
+		
+		Map<String, Map<String, Object>> resultMap = new HashMap<String, Map<String, Object>>(lstRecord.size());
+		Map<String, Object> paramMap = null;
+		for(Object[] obj:lstRecord){
+			paramMap = new HashMap<String, Object>(2);
+			paramMap.put(UPDATE_TIME, obj[1]);
+			paramMap.put("allCount", obj[2]);
+			resultMap.put(String.valueOf(obj[0]), paramMap);
+		}
+		
+		return resultMap;
+	}
+	
+	/**
+	 *获取个人用户组对应的收藏题目更新时间
+	 * @param subjectId
+	 * @param args
+	 * @return
+	 */
+	@Override
+	public Map<String, Map<String, Object>> queryFavorRecordByGroup(String subjectId, Object[] args) {
+		StringBuffer hql = new StringBuffer(512);
+		//  1.查询分组列表
+		hql.append("select r.exerciseGroupId,r.updateTime,r.allCount from ExerciseFavoriteRecord r, ExerciseFavoriteBook b"
+				+ " where r.favoriteBookId=b.favoriteBookId "
+				+ "	and b.userId = :userId and r.exerciseGroupId in (:groupIds)  ");
+		
+		Map<String, Object> argsMap = new HashMap<String, Object>(4);
+		
+		argsMap.put("userId", ClientUtils.getUserId());
+		argsMap.put("groupIds", args);
+		
+		if(StringUtils.isNotBlank(subjectId)){// 高校  通过课程过滤
+			
+			hql.append(" and b.type=:type and b.subjectId=:subjectId ");
+			argsMap.put("type", ExerciseFaultBook.TYPE_COLLEGE);
+			argsMap.put("subjectId", subjectId);
+		}else{// 非高校
+			
+			hql.append(" and b.type=:type and b.classId=:classId ");
+			argsMap.put("type", ExerciseFaultBook.TYPE_ORGANIZATION);
+			argsMap.put("classId", ClientUtils.getClassId());
+		}
+		
+		// 根据结构查询得到所需记录
+		List<Object[]> lstRecord = this.findByComplexHql(hql.toString(), argsMap, Object[].class);
+		Map<String, Map<String, Object>> resultMap = new HashMap<String, Map<String, Object>>(lstRecord.size());
+		Map<String, Object> paramMap = null;
+		for(Object[] obj:lstRecord){
+			paramMap = new HashMap<String, Object>(2);
+			paramMap.put(UPDATE_TIME, obj[1]);
+			paramMap.put("allCount", obj[2]);
+			resultMap.put(String.valueOf(obj[0]), paramMap);
+		}
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 查询收藏本列表数据
+	 * @param exerType 0:表示全部错题
+	 * @param subjectId
+	 * @param pager
+	 * @return
+	 */
+	@Override
+	public List<ExerGroupResponseData> queryExerciseFavorListData(int exerType,
+			String subjectId, Pager pager) {
+		StringBuffer hql = new StringBuffer(512);
+		//  1.查询分组列表
+		hql.append("select r, g from ExerciseFavoriteRecord r, ExerciseFavoriteBook b, ExerciseGroup g"
+				+ " where r.favoriteBookId=b.favoriteBookId "
+				+ " and r.exerciseGroupId=g.groupId "
+				+ "	and r.deleteFlag is false "
+				+ "	and b.deleteFlag is false "
+				+ " and b.userId=? and r.allCount>0 ");
+		
+		List<Object> args = CollectionUtils.newList(ClientUtils.getUserId());
+		if(exerType != 0){ //表示查询非全部收藏  exerType=0为查询全部收藏
+			hql.append(" and r.exerciseGroupType=?");
+			args.add((short)exerType);
+		}
+		
+		if(StringUtils.isNotBlank(subjectId)){// 高校  通过课程过滤
+			
+			hql.append(" and b.type=? and b.subjectId=? and g.subjectId=? ");
+			args.add(ExerciseFaultBook.TYPE_COLLEGE);
+			args.add(subjectId);
+			args.add(subjectId);
+		}else{// 非高校
+			
+			hql.append(" and b.type=? and b.classId=? and g.classId=?");
+			args.add(ExerciseFaultBook.TYPE_ORGANIZATION);
+			args.add(ClientUtils.getClassId());
+			args.add(ClientUtils.getClassId());
+		}
+		hql.append(" order by r.updateTime desc ");
+		
+		// 根据结构查询得到所需记录
+		List<Object[]> lstRecord = this.findList(hql.toString(), pager, args,Object[].class);
+		
+		if(lstRecord.isEmpty()){// 查询结果记录为空
+			return null;
+		}
+		
+		Object[] argss = new Object[lstRecord.size()];
+		ExerciseGroup groupp=null;
+		for(int i=0; i<lstRecord.size(); i++){
+			groupp = (ExerciseGroup)lstRecord.get(i)[1];
+			argss[i] = groupp.getGroupId();
+		}
+		
+		// 获取个人用户组对应的错题记录 题目更新时间
+		Map<String, Map<String, Object>> faultMap = this.queryFaultRecordByGroup(subjectId, argss);
+		
+		// 结果返回参数
+		List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size());
+		
+		for(Object[] objs:lstRecord){
+			
+			// 组装练习收藏列表数据
+			lstResult.add(packagingExerciseFavorListData(
+					faultMap, objs));
+			
+		}
+		
+		return lstResult;
+	}
+	
+	/**
+	 * 组装练习收藏列表数据
+	 * @param faultMap
+	 * @param objs
+	 * @return
+	 */
+	private ExerGroupResponseData packagingExerciseFavorListData(
+			Map<String, Map<String, Object>> faultMap, Object[] objs) {
+		ExerciseFavoriteRecord record = (ExerciseFavoriteRecord)objs[0];
+		ExerciseGroup group = (ExerciseGroup)objs[1];
+		
+		ExerGroupResponseData resultObj = new ExerGroupResponseData();
+		
+		// 拆分组装数据
+		packagingExerciseFavorListChildData(record, resultObj);
+		
+		resultObj.setExtendAllCount(record.getAllCount()==null ? BigInteger.ZERO  : record.getAllCount());
+		if(new BigInteger(resultObj.getCurrTitleNumber()).compareTo(resultObj.getExtendAllCount())>0){
+			resultObj.setCurrTitleNumber(String.valueOf(resultObj.getExtendAllCount()));
+		}
+		
+		BeanUtils.copyProperties(group, resultObj);
+		resultObj.setExerciseTime(group.getAttribute1());
+		resultObj.setUpdateTime(record.getUpdateTime());
+		resultObj.setAnswerUpdateTime(record.getAnswerUpdateTime());
+		resultObj.setFavorUpdateTime(record.getUpdateTime());
+		resultObj.setFavorCount(resultObj.getAllCount());
+		if(faultMap !=null && faultMap.get(group.getGroupId()) !=null){
+			resultObj.setFaultUpdateTime((Timestamp)faultMap.get(group.getGroupId()).get(UPDATE_TIME));//设置错题本题目更新时间
+			resultObj.setFaultCount((BigInteger)faultMap.get(group.getGroupId()).get("allCount"));
+		}
+		
+		if(resultObj.getDoCount().compareTo(resultObj.getExtendAllCount())>0){
+			resultObj.setDoCount(resultObj.getExtendAllCount());
+		}
+		return resultObj;
+	}
+	
+	/**
+	 * 组装练习收藏列表数据 拆分组装数据
+	 * @param record
+	 * @param resultObj
+	 */
+	private void packagingExerciseFavorListChildData(
+			ExerciseFavoriteRecord record, ExerGroupResponseData resultObj) {
+		resultObj.setStatus(record.getStatus());
+		resultObj.setGroupId(record.getExerciseGroupId());
+		resultObj.setExerciseRecordId(record.getFavoriteRecordId());
+		resultObj.setAccuracy(record.getAccuracy()==null ? BigDecimal.ZERO : record.getAccuracy());
+		resultObj.setCorrectCount(record.getCorrectCount()==null ? BigInteger.ZERO : record.getCorrectCount());
+		resultObj.setDoCount(record.getDoCount()==null ? BigInteger.ZERO : record.getDoCount());
+		resultObj.setCurrTitleNumber(record.getTitleMaxNumber()==null ? "0" : record.getTitleMaxNumber());
+	}
+	
+
+	/**
+	 * 获取全部收藏练习数据
+	 * @return
+	 */
+	@Override
+	public ExerItemResponseData queryAllExerciseFavorData(Pager pager) {
+		//  1.查询此用户是否有错题记录
+		String hql = "select item, favor.favorRecord.exerciseGroupId,favor.favorRecord.favorBook.status "
+				+ " from ExerciseItem item, ExerciseFavorite favor "
+				+ " where item.exerciseId=favor.exerciseItemId"
+				+ " and favor.favorRecord.favorBook.classId=?"
+				+ " and favor.favorRecord.favorBook.userId=?"
+				+ " and item.deleteFlag is false"
+				+ " and favor.deleteFlag is false"
+				+ " order by favor.createTime";
+		
+		List<Object[]> lstResult = this.findList(hql, pager, 
+				CollectionUtils.newList(ClientUtils.getClassId(), ClientUtils.getUserId()), Object[].class);
+		
+		
+		if(lstResult.isEmpty()){
+			return null; 
+		}
+		
+		String status=null;
+		ExerciseItem item = null;
+		List<ExerciseItem> lstItems = new ArrayList<ExerciseItem>(lstResult.size());
+		for(Object[] objs:lstResult){
+			if(null != objs[2]) {
+				status = String.valueOf(objs[2]);
+			}
+			item = new ExerciseItem();
+			BeanUtils.copyProperties((ExerciseItem)objs[0], item);// 防止item同一个内存地址
+			item.setExerciseGroupId(String.valueOf(objs[1]));//设置每个题目的组id
+			lstItems.add(item);
+		}
+		
+		// 2.重新组装练习题 加入分析结果
+		lstItems =  exerciseVerService.getCommonExerItemDetail(lstItems, null);
+		
+		// 3.组装答案
+		ExerItemResponseData result = new ExerItemResponseData();
+				
+		result.setItems(lstItems);
+		result.setStatus(status);
+		
+		result.setResult(new Result(true,"查询成功"));
+		
+		return result; 
+	}
+	
+	/**
+	 * 获取收藏练习数据
+	 * @param groupId
+	 * @param exerciseRecordId 废弃
+	 * @return
+	 */
+	@Override
+	public ExerItemResponseData queryExerciseFavorData(String groupId) {
+		//  1.查询此用户是否有错题记录
+		String hql = "select item, favor "
+				+ " from ExerciseItem item, ExerciseFavorite favor "
+				+ " where item.exerciseId=favor.exerciseItemId"
+				+ " and favor.favorRecord.exerciseGroupId=?"
+				+ " and favor.favorRecord.favorBook.userId=?"
+				+ " and item.deleteFlag is false"
+				+ " and favor.deleteFlag is false"
+				+ " order by favor.createTime";
+		
+		List<Object[]> lstResult = this.findwithRawResult(hql, CollectionUtils.newList(groupId,ClientUtils.getUserId()));
+		
+		
+		return goQueryExerciseFavorData(lstResult, groupId); 
+	}
+	
+	/**
+	 * 获取多套收藏练习数据
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public Map<String,Object> queryExerciseMutiFavorData(String groupId) {
+		//  1.查询此用户是否有错题记录
+		String hql = "select item.exerciseId "
+				+ " from ExerciseItem item, ExerciseFavorite favor "
+				+ " where item.exerciseId=favor.exerciseItemId"
+				+ " and favor.favorRecord.favorBook.userId=?"
+				+ " and favor.favorRecord.favorBook.classId=?"
+				+ " and favor.favorRecord.exerciseGroupId=?"
+				+ " and item.deleteFlag is false"
+				+ " and favor.deleteFlag is false"
+				+ " order by favor.createTime";
+		
+		List<String> lstFavor = this.find(hql, CollectionUtils.newList(ClientUtils.getUserId(), 
+				ClientUtils.getClassId(), groupId),String.class);
+		
+		List<Map<String,String>> lstResult = new ArrayList<Map<String,String>>(lstFavor.size());
+		Map<String,String>  exerciseIdMap = null;
+		for(String exerciseId:lstFavor){
+			exerciseIdMap = new HashMap<String, String>(1);
+			exerciseIdMap.put("exerciseId", exerciseId);
+			lstResult.add(exerciseIdMap);
+		}
+		
+		Map<String,Object> resultMap = new HashMap<String, Object>(2);
+		resultMap.put("exerciseGroupId", groupId);
+		resultMap.put("exerciseIds", lstResult);
+		
+		return resultMap; 
+	}
+	
+	/**
+	 * 查询收藏题目明细
+	 * @param lstResult
+	 * @param groupId
+	 * @return
+	 */
+	public ExerItemResponseData goQueryExerciseFavorData(List<Object[]> lstResult, String groupId) {
+		if(lstResult.isEmpty()){
+			return null; 
+		}
+		
+		List<ExerciseItem> lstItems = new ArrayList<ExerciseItem>(lstResult.size());
+		ExerciseItem item;
+		List<ExerciseItemAnswerU> lstAnswers = new ArrayList<ExerciseItemAnswerU>(lstResult.size());
+		ExerciseItemAnswerU answerU;
+		
+		ExerciseFavorite favor;
+		for(Object[] objs:lstResult){
+			
+			item = (ExerciseItem)objs[0];
+			lstItems.add(item);
+			
+			favor = (ExerciseFavorite)objs[1];
+			
+			if(StringUtils.isNotBlank(favor.getAnswer())){
+				answerU = new ExerciseItemAnswerU();
+				answerU.setAnswer(favor.getAnswer());
+				answerU.setCorrect(favor.getCorrect());
+				answerU.setAnswerUId(favor.getExerciseFavoriteId());
+				answerU.setExerciseItemId(favor.getExerciseItemId());
+				answerU.setExerciseRecordId(favor.getFavoriteRecordId());
+				lstAnswers.add(answerU);
+			}
+			
+		}
+		
+		// 2.重新组装练习题 加入分析结果
+		lstItems =  exerciseVerService.getCommonExerItemDetail(lstItems, groupId);
+		
+		
+		// 3.组装答案
+		ExerItemResponseData result = new ExerItemResponseData();
+				
+		result.setExerciseGroupId(groupId);
+		
+		result.setItems(lstItems);
+		
+		result.setAnswers(lstAnswers);
+		
+		result.setResult(new Result(true,"查询成功"));
+		
+		return result; 
+	}
+	
+	/**
+	 * 获取全部错题练习数据
+	 * @return
+	 */
+	@Override
+	public ExerItemResponseData queryAllExerciseFaultData(Pager pager) {
+		//  1.查询此用户是否有错题记录
+		String hql = "select item, fault.faultRecord.exerciseGroupId,fault.faultRecord.faultBook.status "
+				+ " from ExerciseItem item, ExerciseFault fault "
+				+ " where item.exerciseId=fault.exerciseItemId"
+				+ " and fault.faultRecord.faultBook.userId=?" 
+				+ " and fault.faultRecord.faultBook.classId=?"
+				+ " and item.deleteFlag is false"
+				+ " and fault.deleteFlag is false"
+				+ " order by fault.createTime";
+		
+		List<Object[]> lstResult = this.findList(hql, pager, CollectionUtils.newList(ClientUtils.getUserId(),ClientUtils.getClassId()),Object[].class);
+		
+		
+		if(lstResult.isEmpty()){
+			return null; 
+		}
+		
+		List<ExerciseItem> lstItems = new ArrayList<ExerciseItem>(lstResult.size());
+		ExerciseItem item = null;
+		String status=null;
+		for(Object[] objs:lstResult){
+			if(objs[2] !=null) {
+				status=String.valueOf(objs[2]);//获取全部题目的提交状态
+			}
+			item = new ExerciseItem();
+			BeanUtils.copyProperties((ExerciseItem)objs[0], item);// 防止item同一个内存地址
+			item.setExerciseGroupId(String.valueOf(objs[1]));//设置每个题目的组id
+			lstItems.add(item);
+		}
+		
+		// 2.重新组装练习题 加入分析结果
+		lstItems = exerciseVerService.getCommonExerItemDetail(lstItems, null);
+		
+		
+		// 3.组装答案
+		ExerItemResponseData result = new ExerItemResponseData();
+		
+		result.setStatus(status);
+		result.setItems(lstItems);
+		
+		result.setResult(new Result(true,"查询成功"));
+		
+		return result; 
+	}
+	
+	/**
+	 * 获取单套题错题练习数据
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public ExerItemResponseData queryExerciseFaultData(String groupId) {
+		//  1.查询此用户是否有错题记录
+		String hql = "select item, fault "
+				+ " from ExerciseItem item, ExerciseFault fault "
+				+ " where item.exerciseId=fault.exerciseItemId"
+				+ " and fault.faultRecord.faultBook.userId=?"
+				+ " and fault.faultRecord.exerciseGroupId=?"
+				+ " and item.deleteFlag is false"
+				+ " and fault.deleteFlag is false"
+				+ " order by fault.createTime";
+		// 2.查询答案
+		
+		List<Object[]> lstResult = this.findwithRawResult(hql, CollectionUtils.newList(ClientUtils.getUserId(), groupId));
+		
+		return goQueryExerciseFaultData(lstResult, groupId); 
+	}
+	
+	/**
+	 * 获取多套题错题练习数据
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public Map<String,Object> queryExerciseMutiFaultData(String groupId) {
+		
+		//  1.查询题目
+		String hql = "select item.exerciseId "
+				+ " from ExerciseItem item, ExerciseFault fault "
+				+ " where item.exerciseId=fault.exerciseItemId"
+				+ " and fault.faultRecord.faultBook.userId=?"
+				+ " and fault.faultRecord.faultBook.classId=?"
+				+ " and fault.faultRecord.exerciseGroupId=?"
+				+ " and item.deleteFlag is false"
+				+ " and fault.deleteFlag is false"
+				+ " order by fault.createTime";
+		
+		List<String> lstFault = this.find(hql, CollectionUtils.newList(ClientUtils.getUserId(), 
+				ClientUtils.getClassId(), groupId),String.class);
+		
+		List<Map<String,String>> lstResult = new ArrayList<Map<String,String>>(lstFault.size());
+		Map<String,String>  exerciseIdMap = null;
+		for(String exerciseId:lstFault){
+			exerciseIdMap = new HashMap<String, String>(1);
+			exerciseIdMap.put("exerciseId", exerciseId);
+			lstResult.add(exerciseIdMap);
+		}
+		
+		Map<String,Object> resultMap = new HashMap<String, Object>(2);
+		resultMap.put("exerciseGroupId", groupId);
+		resultMap.put("exerciseIds", lstResult);
+		
+		return resultMap; 
+	}
+	
+	
+	/**
+	 * 查询错题明细数据
+	 * @param lstResult
+	 * @param groupId
+	 * @return
+	 */
+	public ExerItemResponseData goQueryExerciseFaultData(List<Object[]> lstResult, String groupId) {
+		if(lstResult.isEmpty()){
+			return null; 
+		}
+		
+		List<ExerciseItem> lstItems = new ArrayList<ExerciseItem>(lstResult.size());
+		ExerciseItem item;
+		List<ExerciseItemAnswerU> lstAnswers = new ArrayList<ExerciseItemAnswerU>(lstResult.size());
+		ExerciseItemAnswerU answerU;
+		
+		ExerciseFault fault;
+		for(Object[] objs:lstResult){
+			
+			item = (ExerciseItem)objs[0];
+			if(StringUtils.isBlank(groupId)){// 表示查询所有错题
+				item.setExerciseGroupId(String.valueOf(objs[2]));//设置每个题目的组id
+			}
+			lstItems.add(item);
+			
+			fault = (ExerciseFault)objs[1];
+			
+			
+			if(StringUtils.isNotBlank(fault.getAnswer())){
+				answerU = new ExerciseItemAnswerU();
+				answerU.setAnswer(fault.getAnswer());
+				answerU.setCorrect(fault.getCorrect());
+				answerU.setAnswerUId(fault.getExerciseFaultId());
+				answerU.setExerciseItemId(fault.getExerciseItemId());
+				answerU.setExerciseRecordId(fault.getFaultRecordId());
+				lstAnswers.add(answerU);
+			}
+		}
+		
+		// 2.重新组装练习题 加入分析结果
+		lstItems = exerciseVerService.getCommonExerItemDetail(lstItems, groupId);
+		
+		
+		// 3.组装答案
+		ExerItemResponseData result = new ExerItemResponseData();
+		
+		result.setExerciseGroupId(groupId);
+				
+		result.setItems(lstItems);
+		
+		result.setAnswers(lstAnswers);
+		
+		result.setResult(new Result(true,"查询成功"));
+		
+		return result; 
+	}
+	
+	/**
+	 * 获取收藏本答案数据 
+	 */
+	@Override
+	public ExerItemResponseData queryExerciseFavorAnswerData(String groupId) {
+		
+		String hql = "select f "
+				+ " from ExerciseFavorite f "
+				+ " where f.favorRecord.exerciseGroupId=?"
+				+ " and f.favorRecord.favorBook.userId=?"
+				+ " and f.favorRecord.favorBook.classId=?"
+				+ " and f.answer is not null and f.deleteFlag is false";
+		
+		//  1.查询错题
+		List<ExerciseFavorite> lstFavors = this.find(hql, CollectionUtils.newList(groupId,
+				ClientUtils.getUserId(),ClientUtils.getClassId()), ExerciseFavorite.class);
+		
+		List<ExerciseItemAnswerU> lstAnswers = new ArrayList<ExerciseItemAnswerU>(lstFavors.size());
+		ExerciseItemAnswerU answerU;
+		
+		for(ExerciseFavorite favor:lstFavors){
+			answerU = new ExerciseItemAnswerU();
+			answerU.setAnswer(favor.getAnswer());
+			answerU.setCorrect(favor.getCorrect());
+			answerU.setExerciseItemId(favor.getExerciseItemId());
+			lstAnswers.add(answerU);
+		}
+			
+		// 3.组装答案
+		ExerItemResponseData result = new ExerItemResponseData();
+				
+		result.setAnswers(lstAnswers);
+		result.setExerciseGroupId(groupId);
+		
+		return result; 
+	}
+	
+	/**
+	 * 获取错题本答案数据 
+	 */
+	@Override
+	public ExerItemResponseData queryExerciseFaultAnswerData(String groupId) {
+		
+		String hql = "select f "
+				+ " from ExerciseFault f "
+				+ " where f.faultRecord.exerciseGroupId=?"
+				+ " and f.faultRecord.faultBook.userId=?"
+				+ " and f.faultRecord.faultBook.classId=?"
+				+ " and f.answer is not null and f.deleteFlag is false";
+		
+		//  1.查询错题
+		List<ExerciseFault> lstFaults = this.find(hql, CollectionUtils.newList(groupId, 
+				ClientUtils.getUserId(),ClientUtils.getClassId()), ExerciseFault.class);
+		
+		List<ExerciseItemAnswerU> lstAnswers = new ArrayList<ExerciseItemAnswerU>(lstFaults.size());
+		ExerciseItemAnswerU answerU;
+		
+		for(ExerciseFault fault:lstFaults){
+			answerU = new ExerciseItemAnswerU();
+			answerU.setAnswer(fault.getAnswer());
+			answerU.setCorrect(fault.getCorrect());
+			answerU.setExerciseItemId(fault.getExerciseItemId());
+			lstAnswers.add(answerU);
+		}
+			
+		// 3.组装答案
+		ExerItemResponseData result = new ExerItemResponseData();
+				
+		result.setAnswers(lstAnswers);
+		result.setExerciseGroupId(groupId);
+		
+		return result; 
+	}
+
+	/**
+	 * 操作本次做题记录
+	 * groupId 习题组ID  如果为All时,表示全部错题、全部收藏
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> doUpdateFaultExerRecordNew(String groupId) {
+		
+		if("All".equals(groupId)){//表示全部错题重做
+			return doCleanAllFaultRecordByRedo();
+		}
+		
+		String hql="select r from ExerciseFaultRecord r,ExerciseFaultBook b where"
+				+ " r.resumeBookId=b.resumeBookId and r.exerciseGroupId=? and b.userId=? and b.classId=? and b.type=?";
+		
+		ExerciseFaultRecord record = this.findUnique(hql, CollectionUtils.newList(groupId,
+				ClientUtils.getUserId(), ClientUtils.getClassId(),ExerciseFaultBook.TYPE_ORGANIZATION), ExerciseFaultRecord.class);
+		
+		if(null == record){
+			return null;
+		}
+		
+		record.setScore(BigDecimal.ZERO);
+		record.setCompletionRate(BigDecimal.ZERO);
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setAccuracy(BigDecimal.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		
+		TraceUtils.setUpdateTrace(record);
+		
+		this.save(record);
+		
+		String faultRecordId = record.getFaultRecordId();
+		
+		//  重新做题 清理旧数据 
+		doOperExerciseFaultRecordByRedo(faultRecordId);
+		
+		
+		// 更新全部收藏题目的信息
+		this.doOperFaultBookBySubmitAllAnswer(
+				null, null, record.getResumeBookId(),null);
+		
+		
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put(EXERCISE_RECORD_ID, faultRecordId);
+		resultMap.put("exerciseGroupId", groupId);
+		resultMap.put(UPDATE_TIME,  DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 全部错题重做
+	 * @return
+	 */
+	private Map<String,Object> doCleanAllFaultRecordByRedo(){
+		
+		/** 1.更新错题book记录为初始值 */
+		String hql_book = "from ExerciseFaultBook b where b.userId=? and b.classId=? and b.type=? ";
+		
+		ExerciseFaultBook book = this.findUnique(hql_book, CollectionUtils.newList(ClientUtils.getUserId(),
+				ClientUtils.getClassId(),ExerciseFaultBook.TYPE_ORGANIZATION), ExerciseFaultBook.class);
+		
+		if(book == null){
+			return null;
+		}
+		
+		book.setScore(BigDecimal.ZERO);
+		book.setCompletionRate(BigDecimal.ZERO);
+		book.setDoCount(BigInteger.ZERO);
+		book.setCorrectCount(BigInteger.ZERO);
+		book.setAccuracy(BigDecimal.ZERO);
+		book.setTitleMaxNumber("0");
+		book.setStatus("0");
+		TraceUtils.setUpdateTrace(book);
+		this.save(book);
+		
+		String resumeBookId = book.getResumeBookId();
+		BigDecimal decimalZero = BigDecimal.ZERO;
+		BigInteger integerZero = BigInteger.ZERO;
+		
+		/** 2.更新所有错题record记录为初始值 */
+		String hql_record = "update ExerciseFaultRecord t set t.score="+decimalZero+", t.completionRate="+decimalZero+", t.doCount="+integerZero+","
+				+ "  t.correctCount="+integerZero+", t.accuracy="+decimalZero+", t.titleMaxNumber='0', t.status='0'"
+				+ "  where t.resumeBookId=? and t.deleteFlag is false";
+		
+		this.bulkUpdateInLoop(hql_record, new String[]{resumeBookId});
+		
+		
+		/** 3.重新做题 清理所有旧数据    */
+		// 3.1复制错题数据到历史表
+		String hql_fault = "from ExerciseFault where resumeBookId=? and answer is not null and deleteFlag is false";
+		doCopyExerciseFaultToHis(hql_fault,resumeBookId);
+		
+		// 3.2清空错题做题记录
+		String hql_delFault = "update ExerciseFault t set t.answer=null,t.correct=0"
+				+ " where t.resumeBookId=? and t.answer is not null and t.deleteFlag is false";
+		this.bulkUpdateInLoop(hql_delFault, new String[]{resumeBookId});
+		
+		/** 4.返回结果    */
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put(EXERCISE_RECORD_ID, null);
+		resultMap.put("exerciseGroupId", "All");
+		resultMap.put(UPDATE_TIME, book.getUpdateTime());
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 重新做题 清理旧数据 
+	 * @param faultRecordId
+	 * @return
+	 */
+	public Result doOperExerciseFaultRecordByRedo(String faultRecordId){
+		
+		// 1.拷贝做题记录到错题答案历史表
+		String hql = "from ExerciseFault where faultRecordId=? and answer is not null and deleteFlag is false";
+		doCopyExerciseFaultToHis(hql, faultRecordId);
+		
+		// 2.删除做题记录
+		deleteExerciseFaultRecord(faultRecordId);
+				
+		return new Result(true);
+	}
+	
+	/**
+	 * 拷贝做题记录到错题答案历史表
+	 * @param faultRecordId/resumeBookId
+	 * @return
+	 */
+	public Result doCopyExerciseFaultToHis(String hql,String recordId){
+		List<ExerciseFault> lstFault = this.find(hql, CollectionUtils.newList(recordId), ExerciseFault.class);
+		
+		// 错题历史记录表
+		List<ExerciseFaultHis> lstFaultHis = new ArrayList<ExerciseFaultHis>(lstFault.size());
+		ExerciseFaultHis his = null;
+		for(ExerciseFault fault:lstFault){
+			his = new ExerciseFaultHis();
+			BeanUtils.copyProperties(fault, his);
+			his.setUpdateTime(new Date(System.currentTimeMillis()));
+			
+			lstFaultHis.add(his);
+		}
+		
+		this.saveOrUpdateAll(lstFaultHis);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 批量刪除错题做题记录
+	 * @param faultRecordId
+	 * @return
+	 */
+	public Result deleteExerciseFaultRecord(String faultRecordId){
+		
+		String hql = "update ExerciseFault t set t.answer=null,t.correct=0"
+				+ " where t.faultRecordId=? and t.answer is not null and t.deleteFlag is false";
+		
+		Result result = this.bulkUpdateInLoop(hql, new String[]{faultRecordId});
+		this.flush();
+		return result;
+	}
+	
+	/**
+	 * 批量刪除错题做题记录
+	 * @param faultRecordId
+	 * @return
+	 */
+	public Result deleteExerciseFavorRecord(String favorRecordId){
+		
+		String hql = "update ExerciseFavorite t set t.answer=null,t.correct=0"
+				+ " where t.favoriteRecordId=? and t.deleteFlag is false";
+		
+		Result result = this.bulkUpdateInLoop(hql, new String[]{favorRecordId});
+		this.flush();
+		return result;
+	}
+	
+	/**
+	 * 操作本次做题记录 收藏
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> doUpdateFavortExerRecordNew(String groupId) {
+		
+		if("All".equals(groupId)){//表示全部收藏重做
+			return doCleanAllFavorRecordByRedo();
+		}
+		
+		
+		String hql="select r from ExerciseFavoriteRecord r,ExerciseFavoriteBook b where"
+				+ " r.favoriteBookId=b.favoriteBookId and r.exerciseGroupId=? and b.userId=? and b.classId=? ";
+		
+		ExerciseFavoriteRecord record = this.findUnique(hql, CollectionUtils.newList(groupId,
+				ClientUtils.getUserId(), ClientUtils.getClassId()), ExerciseFavoriteRecord.class);
+		
+		if(null == record){
+			return null;
+		}
+		
+		record.setScore(BigDecimal.ZERO);
+		record.setCompletionRate(BigDecimal.ZERO);
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setAccuracy(BigDecimal.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		
+		TraceUtils.setUpdateTrace(record);
+		
+		this.save(record);
+		
+		String favoriteRecordId = record.getFavoriteRecordId();
+	
+		//  重新开始做题 清理旧数据
+		doOperExerciseFavorRecordByRedo(favoriteRecordId);
+		
+		// 更新全部收藏题目的统计信息
+		this.doOperFavorBookBySubmitAllAnswer(null, null, record.getFavoriteBookId(),null);
+		
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put(EXERCISE_RECORD_ID, favoriteRecordId);
+		resultMap.put(UPDATE_TIME, DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		return resultMap;
+	}
+	
+	/**
+	 * 全部收藏重做
+	 * @return
+	 */
+	private Map<String,Object> doCleanAllFavorRecordByRedo(){
+		
+		/** 1.更新收藏book记录为初始值 */
+		String hql_book = "from ExerciseFavoriteBook b where b.userId=? and b.classId=? and b.type=? ";
+		
+		ExerciseFavoriteBook book = this.findUnique(hql_book, CollectionUtils.newList(ClientUtils.getUserId(),
+				ClientUtils.getClassId(),ExerciseFaultBook.TYPE_ORGANIZATION), ExerciseFavoriteBook.class);
+		
+		if(book == null){
+			return null;
+		}
+		
+		book.setScore(BigDecimal.ZERO);
+		book.setCompletionRate(BigDecimal.ZERO);
+		book.setDoCount(BigInteger.ZERO);
+		book.setCorrectCount(BigInteger.ZERO);
+		book.setAccuracy(BigDecimal.ZERO);
+		book.setTitleMaxNumber("0");
+		book.setStatus("0");
+		TraceUtils.setUpdateTrace(book);
+		this.save(book);
+		
+		String favoriteBookId = book.getFavoriteBookId();
+		BigDecimal decimalZero = BigDecimal.ZERO;
+		BigInteger integerZero = BigInteger.ZERO;
+		
+		/** 2.更新所有收藏record记录为初始值 */
+		String hql_record = "update ExerciseFavoriteRecord t set t.score="+decimalZero+", t.completionRate="+decimalZero+", t.doCount="+integerZero+","
+				+ "  t.correctCount="+integerZero+", t.accuracy="+decimalZero+", t.titleMaxNumber='0', t.status='0'"
+				+ "  where t.favoriteBookId=? and t.deleteFlag is false";
+		
+		this.bulkUpdateInLoop(hql_record, new String[]{favoriteBookId});
+		
+		
+		/** 3.重新做题 清理所有旧数据    */
+		// 3.1复制收藏数据到历史表
+		String hql_favor = "from ExerciseFavorite where favoriteBookId=? and answer is not null and deleteFlag is false";
+		doCopyExerciseFavorToHis(hql_favor,favoriteBookId);
+		
+		// 3.2清空收藏做题记录
+		String hql_delFavor = "update ExerciseFavorite t set t.answer=null,t.correct=0"
+				+ " where t.favoriteBookId=? and t.answer is not null and t.deleteFlag is false";
+		this.bulkUpdateInLoop(hql_delFavor, new String[]{favoriteBookId});
+		
+		/** 4.返回结果    */
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put(EXERCISE_RECORD_ID, null);
+		resultMap.put("exerciseGroupId", "All");
+		resultMap.put(UPDATE_TIME, book.getUpdateTime());
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 重新开始做题 清理旧数据
+	 * @param favoriteRecordId
+	 * @return
+	 */
+	public Result doOperExerciseFavorRecordByRedo(String favoriteRecordId){
+		
+		// 1.拷贝做题记录到收藏答案历史表
+		String hql = "from ExerciseFavorite where favoriteRecordId=? and answer is not null and deleteFlag is false";
+		doCopyExerciseFavorToHis(hql, favoriteRecordId);
+		
+		// 2.删除做题记录
+		deleteExerciseFavorRecord(favoriteRecordId);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 拷贝做题记录到收藏答案历史表
+	 * @param faultRecordId/favoriteBookId
+	 * @return
+	 */
+	public Result doCopyExerciseFavorToHis(String hql, String recordId){
+		List<ExerciseFavorite> lstFavor = this.find(hql, CollectionUtils.newList(recordId), ExerciseFavorite.class);
+		
+		// 错题历史记录表
+		List<ExerciseFavoriteHis> lstFavorHis = new ArrayList<ExerciseFavoriteHis>(lstFavor.size());
+		ExerciseFavoriteHis his = null;
+		for(ExerciseFavorite favor:lstFavor){
+			his = new ExerciseFavoriteHis();
+			BeanUtils.copyProperties(favor, his);
+			his.setUpdateTime(new Date(System.currentTimeMillis()));
+			
+			lstFavorHis.add(his);
+		}
+		
+		this.saveOrUpdateAll(lstFavorHis);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 查询题目统计分析结果 个人统计 全站统计
+	 * @param exerciseType
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> queryExerciseItemStatisics(String exerciseType) {
+		// 题目个人统计
+		String hql_analisisU = "";
+		// 题目全站统计
+		String hql_analisis = "";
+		// 题目
+		String hql_item = "";
+		
+		if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+			
+			hql_analisisU = "select a from ExerciseItemAnalisiU a,ExerciseFault re"
+					+ " where a.exerciseItemId=re.exerciseItemId "
+					+ " and a.userId=? and re.faultBook.userId=? and re.faultBook.classId=?"
+					+ " and a.deleteFlag is false and re.deleteFlag is false ";
+			
+			hql_analisis = "select a from ExerciseItemAnalisi a, ExerciseFault re"
+					+ " where a.exerciseItemId=re.exerciseItemId "
+					+ " and re.faultBook.userId=? and re.faultBook.classId=?"
+					+ " and a.deleteFlag is false and re.deleteFlag is false ";
+			
+			hql_item = "select re.exerciseItemId from ExerciseFault re"
+					+ " where re.faultBook.userId=? and re.faultBook.classId=? "
+					+ " and re.deleteFlag is false order by re.createTime";
+			
+		}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+			
+			hql_analisisU =  "select a from ExerciseItemAnalisiU a,ExerciseFavorite re"
+					+ " where a.exerciseItemId=re.exerciseItemId "
+					+ " and a.userId=? and re.favorBook.userId=? and re.favorBook.classId=?"
+					+ " and a.deleteFlag is false and re.deleteFlag is false ";
+			
+			hql_analisis = "select a from ExerciseItemAnalisi a, ExerciseFavorite re"
+					+ " where a.exerciseItemId=re.exerciseItemId "
+					+ " and re.favorBook.userId=? and re.favorBook.classId=?"
+					+ " and a.deleteFlag is false and re.deleteFlag is false ";
+			
+			hql_item =  "select re.exerciseItemId from ExerciseFavorite re"
+					+ " where re.favorBook.userId=? and re.favorBook.classId=? "
+					+ " and re.deleteFlag is false order by re.createTime";
+		}
+		
+		List<Map<String, Object>> resultLst = this.doQueryExerciseItemStatisicsData(hql_analisisU, hql_analisis, hql_item);
+		
+		return resultLst;
+	}
+	
+	/**
+	 * 查询错题题目统计
+	 * @return
+	 */
+	private List<Map<String, Object>> doQueryExerciseItemStatisicsData(String hql_analisisU,
+			String hql_analisis, String hql_item) {
+		// 1.查询个人统计
+		List<ExerciseItemAnalisiU> lstAnalisiU = this.find(hql_analisisU,
+				CollectionUtils.newList(ClientUtils.getUserId(),ClientUtils.getUserId(),ClientUtils.getClassId()), ExerciseItemAnalisiU.class);
+		
+		Map<String, ExerciseItemAnalisiU> anasisUMap = new HashMap<String, ExerciseItemAnalisiU>(lstAnalisiU.size());
+		for(ExerciseItemAnalisiU analisisU:lstAnalisiU){
+			anasisUMap.put(analisisU.getExerciseItemId(), analisisU);
+		}
+		
+		// 2.查询全站统计
+		List<ExerciseItemAnalisi> lstAnalisi = this.find(hql_analisis,
+				CollectionUtils.newList(ClientUtils.getUserId(),ClientUtils.getClassId()), ExerciseItemAnalisi.class);
+		Map<String, ExerciseItemAnalisi> anasisMap = new HashMap<String, ExerciseItemAnalisi>(lstAnalisi.size());
+		for(ExerciseItemAnalisi analisi:lstAnalisi){
+			anasisMap.put(analisi.getExerciseItemId(), analisi);
+		}
+		
+		if(lstAnalisiU.isEmpty() && lstAnalisi.isEmpty()){
+			return null;
+		}
+		
+		// 3.查询此组所有题目
+		List<String> lstItemIds = this.find(hql_item,
+				CollectionUtils.newList(ClientUtils.getUserId(),ClientUtils.getClassId()), String.class);
+		
+		List<Map<String, Object>> lstResult = new ArrayList<Map<String, Object>>(lstItemIds.size());
+		Map<String, Object> resultMap = null;
+		ExerciseItemAnalisi analisis;
+		ExerciseItemAnalisiU analisisU;
+		
+		// 3.组装结果 
+		
+		// 循坏组所有题目
+		for(String  exerciseItemId:lstItemIds){
+			// 结果map
+			resultMap = new HashMap<String, Object>(10);
+			
+			// 1.个人分析结果
+			analisisU = anasisUMap.get(exerciseItemId);
+			// 2.全站分析结果
+			analisis = anasisMap.get(exerciseItemId);
+			
+			resultMap.put("exerciseId", exerciseItemId);
+			
+			// 3.个人统计
+			if(null == analisisU){// 为空
+				resultMap.put("doAll_u", 0);
+				resultMap.put("doError_u", 0);
+				resultMap.put("doAccuracy_u", 0);
+			}else{
+				resultMap.put("doAll_u", analisisU.getSubmitNumber());
+				resultMap.put("doError_u", analisisU.getSubmitNumber().subtract(analisisU.getSubmitCorrectNumber()));
+				resultMap.put("doAccuracy_u", analisisU.getAccuracy());
+			}
+			
+			// 4.全站统计
+			if(null == analisis){// 为空
+				resultMap.put("doAll", 0);
+				resultMap.put("doAccuracy", 0);
+			}else{
+				resultMap.put("doAll", analisis.getSubmitNumber());
+				resultMap.put("doAccuracy", analisis.getAccuracy());
+			}
+			
+			lstResult.add(resultMap);
+		}
+		
+		
+		return lstResult;
+	}
+	
+	/**
+	 * 更新错题book信息
+	 * @param faultBookId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private void updateExerciseFaultBookInfo(ExerciseFaultBook book){
+		
+		String sql = "SELECT"+
+				" count(1) allCount,"+
+				" sum(CORRECT = 1) corrCount,"+
+				" sum(ANSWER IS NOT NULL) doCount,"+
+				" round(sum(CORRECT = 1) / count(1) * 100,2) accuracy,"+
+				" round(sum(ANSWER IS NOT NULL) / count(1) * 100,2) rate"+
+				" FROM exercise_fault"+
+				" WHERE DELETE_FLAG = 0"+
+				" AND RESUME_BOOK_ID = ?";
+
+		List<Object[]> lstFault = this.findBySql(sql,  CollectionUtils.newList(book.getResumeBookId()));
+		
+		Object[] objs = lstFault.get(0);
+		book.setAllCount((BigInteger)objs[0]);
+		book.setCorrectCount(new BigInteger(String.valueOf(objs[1]==null ? "0" : objs[1])));
+		book.setDoCount(new BigInteger(String.valueOf(objs[2]==null ? "0" : objs[2])));
+		book.setAccuracy(new BigDecimal(String.valueOf(objs[3]==null ? "0" : objs[3])));
+		book.setCompletionRate(new BigDecimal(String.valueOf(objs[4]==null ? "0" : objs[4])));
+		book.setScore(book.getAccuracy());
+	}
+	
+	/**
+	 * 更新错题book信息 by提交全部错题答案
+	 * @param currTitleNum
+	 * @param status
+	 * @return
+	 */
+	@Override
+	public Result doOperFaultBookBySubmitAllAnswer(String currTitleNum,
+			String status,String faultBookId, String exerciseType) {
+		ExerciseFaultBook book = null;
+		if(StringUtils.isBlank(faultBookId)){// 是否全部错题  仅仅提交操作
+			if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)
+				&& ExerciseRecord.STATUS_SUBMIT.equals(status)){// 全部错题仅提交答案
+				
+				book = this.findUnique("from ExerciseFaultBook where classId=? and userId=? and type=? and deleteFlag is false ",
+						CollectionUtils.newList(ClientUtils.getClassId(), 
+						ClientUtils.getUserId(),ExerciseFaultBook.TYPE_ORGANIZATION), ExerciseFaultBook.class);
+				
+			}else{
+				return new Result(false);
+			}
+			
+		}else{// 混合提交
+			book = this.read(ExerciseFaultBook.class, faultBookId);
+			if(book == null){
+				return new Result(false);
+			}
+		}
+		
+		// 更新book信息
+		this.updateExerciseFaultBookInfo(book);
+		
+		if(StringUtils.isNotBlank(currTitleNum)){
+			book.setTitleMaxNumber(currTitleNum);
+		}
+		if(StringUtils.isNotBlank(status)){
+			book.setStatus("1".equals(status)?"1":"0");// 1:提交 0:未提交
+			
+			if("1".equals(status)){// 全部错题提交答案时  对应的record也改为提交状态
+				
+				/** 更新所有错题record记录为提交状态 */
+				String hql_record = "update ExerciseFaultRecord t set t.status='1'"
+						+ "  where t.resumeBookId=? and t.deleteFlag is false";
+				
+				this.bulkUpdateInLoop(hql_record, new String[]{book.getResumeBookId()});
+			}
+		}
+		
+		TraceUtils.setUpdateTrace(book);
+		this.save(book);
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 更新收藏book信息
+	 * @param faultBookId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private void updateExerciseFavorBookInfo(ExerciseFavoriteBook book){
+		String sql = "SELECT"+
+				" count(1) allCount,"+
+				" sum(CORRECT = 1) corrCount,"+
+				" sum(ANSWER IS NOT NULL) doCount,"+
+				" round(sum(CORRECT = 1) / count(1) * 100,2) accuracy,"+
+				" round(sum(ANSWER IS NOT NULL) / count(1) * 100,2) rate"+
+				" FROM exercise_favorite"+
+				" WHERE DELETE_FLAG = 0"+
+				" AND FAVORITE_BOOK_ID = ?";
+
+		List<Object[]> lstFault = this.findBySql(sql,  CollectionUtils.newList(book.getFavoriteBookId()));
+		
+		Object[] objs = lstFault.get(0);
+		book.setAllCount((BigInteger)objs[0]);
+		book.setCorrectCount(new BigInteger(String.valueOf(objs[1]==null ? "0" : objs[1])));
+		book.setDoCount(new BigInteger(String.valueOf(objs[2]==null ? "0" : objs[2])));
+		book.setAccuracy(new BigDecimal(String.valueOf(objs[3]==null ? "0" : objs[3])));
+		book.setCompletionRate(new BigDecimal(String.valueOf(objs[4]==null ? "0" : objs[4])));
+		book.setScore(book.getAccuracy());
+	}
+	
+	/**
+	 * 更新收藏book信息 by提交全部收藏答案
+	 * @param currTitleNum
+	 * @param status
+	 * @return
+	 */
+	@Override
+	public Result doOperFavorBookBySubmitAllAnswer(String currTitleNum,
+			String status,String favoriteBookId, String exerciseType) {
+		
+		ExerciseFavoriteBook book = null;
+		if(StringUtils.isBlank(favoriteBookId)){// 是否全部收藏  仅仅提交操作
+			if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)
+				&& ExerciseRecord.STATUS_SUBMIT.equals(status)){// 全部错题仅提交答案
+				
+				book = this.findUnique("from ExerciseFavoriteBook where classId=? and userId=? and type=? and deleteFlag is false ",
+						CollectionUtils.newList(ClientUtils.getClassId(), 
+						ClientUtils.getUserId(),ExerciseFaultBook.TYPE_ORGANIZATION), ExerciseFavoriteBook.class);
+				
+			}else{
+				return new Result(false);
+			}
+			
+		}else{// 混合提交
+			book = this.read(ExerciseFavoriteBook.class, favoriteBookId);
+			if(book == null){
+				return new Result(false);
+			}
+		}
+		
+		// 更新收藏book信息
+		this.updateExerciseFavorBookInfo(book);
+		
+		if(StringUtils.isNotBlank(currTitleNum)){
+			book.setTitleMaxNumber(currTitleNum);
+		}
+		
+		if(StringUtils.isNotBlank(status)){
+			book.setStatus("1".equals(status)?"1":"0");// 1:提交 0:未提交
+			
+			if("1".equals(status)){// 全部收藏提交答案时  对应的record也改为提交状态
+				
+				/** 更新所有收藏record记录为提交状态 */
+				String hql_record = "update ExerciseFavoriteRecord t set t.status='1'"
+						+ "  where t.favoriteBookId=? and t.deleteFlag is false";
+				
+				this.bulkUpdateInLoop(hql_record, new String[]{book.getFavoriteBookId()});
+			}
+		}
+		
+		TraceUtils.setUpdateTrace(book);
+		this.save(book);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 查询错题本book信息
+	 */
+	@Override
+	public Map<String, Object> queryExerFaultInfo() {
+		String hql = "from ExerciseFaultBook where classId=? and userId=? and type=? and deleteFlag is false ";
+		
+		ExerciseFaultBook book = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getClassId(), 
+				ClientUtils.getUserId(), ExerciseFaultBook.TYPE_ORGANIZATION), ExerciseFaultBook.class);
+		
+		Map<String, Object> map = new HashMap<String, Object>(5);
+		
+		if(book == null){
+			map.put("allCount", 0);
+			map.put("doCount", 0);
+			map.put(UPDATE_TIME, null);
+			map.put("currTitleNum",  "0");
+			map.put("status",  "0");
+			return map;
+		}
+		
+		map.put("allCount", book.getAllCount());
+		map.put("doCount", book.getDoCount());
+		map.put(UPDATE_TIME, book.getUpdateTime());
+		map.put("currTitleNum", StringUtils.isBlank(book.getTitleMaxNumber()) ? "0" :book.getTitleMaxNumber());
+		map.put("status",  StringUtils.isBlank(book.getStatus()) ? "0" :book.getStatus());
+		
+		return map;
+	}
+
+	/**
+	 * 查询收藏本book信息
+	 */
+	@Override
+	public Map<String, Object> queryExerFavorInfo() {
+		String hql = "from ExerciseFavoriteBook where classId=? and userId=? and type=? and deleteFlag is false ";
+		
+		ExerciseFavoriteBook book = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getClassId(), 
+				ClientUtils.getUserId(), ExerciseFavoriteBook.TYPE_ORGANIZATION), ExerciseFavoriteBook.class);
+		
+		Map<String, Object> map = new HashMap<String, Object>(5);
+		
+		if(book == null){
+			map.put("allCount", 0);
+			map.put("doCount", 0);
+			map.put(UPDATE_TIME, null);
+			map.put("currTitleNum",  "0");
+			map.put("status",  "0");
+			return map;
+		}
+		
+		map.put("allCount", book.getAllCount());
+		map.put("doCount", book.getDoCount());
+		map.put(UPDATE_TIME, book.getUpdateTime());
+		map.put("currTitleNum", StringUtils.isBlank(book.getTitleMaxNumber()) ? "0" :book.getTitleMaxNumber());
+		map.put("status",  StringUtils.isBlank(book.getStatus()) ? "0" :book.getStatus());
+		
+		return map;	
+	}
+	
+	/**
+	 * 计算用户每天做错题的统计信息
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result doCalcExerFaultStatisticsByDay(){
+		log.info("---------------定时器 开始统计做题错题统计信息-----------start ------------------");
+		// 1.计算前一天 对应做题人的做题信息
+		String sql = "SELECT"
+				+ " 	r.CLASS_ID,"
+				+ " 	t.USER_ID,"
+				+ " 	count(1) doCount,"
+				+ " 	sum(t.CORRECT = 0) faultCount,"
+				+ " 	r.ORG_ID,"
+				+ " 	r.COLLEGE_COURSE_ID,"
+				+ " 	r.SUBJECT_ID"
+				+ " FROM"
+				+ " 	exercise_item_answer_u t,"
+				+ " 	exercise_record r"
+				+ " WHERE"
+				+ " 	t.EXERCISE_RECORD_ID = r.RECORD_ID"
+				+ " AND t.UPDATE_TIME >= ?"
+				+ " AND t.UPDATE_TIME < ?"
+				+ " AND t.DELETE_FLAG = 0"
+				+ " AND r.DELETE_FLAG = 0"
+				+ " GROUP BY"
+				+ " 	r.CLASS_ID,"
+				+ " 	t.USER_ID";
+		
+		String yesterday = DateUtils.getTheDay(-1);
+		List<Object[]> resultlst = this.findBySql(sql, CollectionUtils.newList(yesterday, DateUtils.getToday()));
+		
+		
+		// 2.错题信息记录表
+		List<ExerciseFaultStatistics> statisLst = new ArrayList<ExerciseFaultStatistics>(resultlst.size());
+		ExerciseFaultStatistics faultStatis = null;
+		for(Object[] objs:resultlst){
+			faultStatis = new ExerciseFaultStatistics();
+			
+			faultStatis.setClassId(String.valueOf(objs[0]));
+			faultStatis.setUserId(String.valueOf(objs[1]));
+			faultStatis.setDoCount(new BigInteger(String.valueOf(objs[2])));
+			faultStatis.setFaultCount(new BigInteger(String.valueOf(objs[3])));
+			faultStatis.setFaultRate( ExerciseUtils.parseStrToBigDecimal(String.valueOf(objs[3]), String.valueOf(objs[2])));
+			faultStatis.setOrgId(String.valueOf(objs[4]));
+			faultStatis.setCollegeCourseId(String.valueOf(objs[5]));
+			faultStatis.setSubjectId(String.valueOf(objs[6]));
+			faultStatis.setExerciseTime(DateTimeUtils.stringConvertTS(yesterday));
+			
+			TraceUtils.setCreateTrace(faultStatis);
+			statisLst.add(faultStatis);
+		}
+		
+		this.saveOrUpdateAll(statisLst);
+		
+		log.info("---------------定时器 开始统计做题错题统计信息-----------end ------------------");
+		return new Result(true, "操作成功,统计记录总条数:"+statisLst.size());
+	}
+	
+	/**
+	 * 查询错题统计信息
+	 * @param type:  week 最近一周   month:最近一月  year:最近一年
+	 * @return
+	 */
+	@Override
+	public List<Map<String,Object>> doGetFaultStatisInfo(String type) {
+		try {
+			// 开始时间
+			String startDate = "";
+			// 结束时间  今天
+			String endDate = DateUtils.getToday();
+				
+			if("week".equals(type)){// 最近一周     7天前到今天 不包含今天
+				
+				startDate= DateUtils.getTheDay(-7);
+			}else if("month".equals(type)){// 最近一月   30天前到今天  不包含今天
+				
+				startDate= DateUtils.getTheDay(-30);
+			}else if("year".equals(type)){// 最近一年 365天前到今天  不包含今天
+				
+				startDate= DateUtils.getTheDay(-365);
+			}
+			
+			String hql = "select exerciseTime,doCount,faultCount,faultRate"
+					+ "  from ExerciseFaultStatistics where deleteFlag is false "
+					+ " and userId=? and classId=?"
+					+ " and exerciseTime >=? and exerciseTime<=?"
+					+ " order by exerciseTime";
+			
+			// 查询结果
+			List<Object[]> statisLst = this.findwithRawResult(hql, 
+						CollectionUtils.newList(ClientUtils.getUserId(),ClientUtils.getClassId(), 
+								DateUtils.convertStringToDate(startDate, "yyyy-MM-dd"), 
+								DateUtils.convertStringToDate(endDate, "yyyy-MM-dd")));
+			
+			
+			Map<String,Object> resultMap = null;
+			List<Map<String,Object>> resultLst = new ArrayList<Map<String,Object>>(statisLst.size());
+			
+			if(statisLst.isEmpty()){
+				return resultLst;
+			}
+			
+			for(Object[] objs:statisLst){
+				resultMap = new HashMap<String, Object>(4);
+				resultMap.put("exerciseTime", objs[0]);
+				resultMap.put("doCount", objs[1]);
+				resultMap.put("faultCount", objs[2]);
+				resultMap.put("faultRate", objs[3]);
+			
+				resultLst.add(resultMap);
+			}
+			
+			return resultLst;
+			
+		} catch (ParseException e) {
+			log.error("查询错题容错率接口异常", e);
+		}
+		
+		return null;
+	}
+	
+	/**
+	 * 操作本次做题记录 错题
+	 * @return
+	 */
+	@Override
+	public Result doUpdateExerciseFaultRecord(ExerciseFaultRecord record) {
+		//TraceUtils.setUpdateTrace(record);不更新updateTime
+		this.save(record);
+		return new Result(true);
+	}
+
+	/**
+	 * 操作本次做题记录 收藏
+	 * @return
+	 */
+	@Override
+	public Result doUpdateExerciseFavorRecord(ExerciseFavoriteRecord record) {
+		//TraceUtils.setUpdateTrace(record); 不更新updateTime
+		this.save(record);
+		return new Result(true);
+	}
+	
+	/**
+	 * 
+	 * 保存app端请求保存的数据
+	 * @return
+	 */
+	@Override
+	public String doSaveExerciseDataSubmitLog(String data,
+			String exerBussinessId, short type, int status, String url) {
+		
+		return exerciseVerService.doSaveExerciseDataSubmitLog(data,
+				exerBussinessId, type, status, url);
+	}
+	
+	@Override
+	public Result doUpdateExerciseFaultBook(String currTitleNum) {
+		//  查询此用户是否有收藏记录
+		String hql = "from ExerciseFaultBook where classId=? and userId=? and deleteFlag is false ";
+		
+		List<ExerciseFaultBook> lstFault = this.find(hql,
+				CollectionUtils.newList(ClientUtils.getClassId(), 
+						ClientUtils.getUserId()), ExerciseFaultBook.class);
+		
+		
+		ExerciseFaultBook book =  lstFault.get(0);
+		
+		book.setTitleMaxNumber(currTitleNum);
+		this.save(book);
+		
+		return new Result(true);
+	}
+
+	@Override
+	public Result doUpdateExerciseFavorBook(String currTitleNum) {
+		//  查询此用户是否有收藏记录
+		String hql = "from ExerciseFavoriteBook where classId=? and userId=? and deleteFlag is false ";
+		
+		List<ExerciseFavoriteBook> lstFavor = this.find(hql,
+				CollectionUtils.newList(ClientUtils.getClassId(), 
+						ClientUtils.getUserId()), ExerciseFavoriteBook.class);
+		
+		
+		ExerciseFavoriteBook book =  lstFavor.get(0);
+		
+		book.setTitleMaxNumber(currTitleNum);
+		this.save(book);
+		
+		return new Result(true);
+	}
+
+	/**
+	 *提交多套题答案结果到db 
+	 */
+	@Override
+	public Map<String, Object> doSubmitMutiExerciseAnswerData(ExerciseSubmitAnswerDataList answerDataList) {
+		// 用户本次做题提交的数据
+		List<ExerciseSubmitAnswerData> lstRecord = null;
+		ExerciseSubmitAnswerData answerResult= null;
+		List<ExerciseItemAnswerData> lstAnswers= null;
+		Map<String,Object> resultMap = new HashMap<String,Object>(2);
+		Map<String,Object> returnMap = null;
+		resultMap.put("success", false);
+		resultMap.put("attrs", null);
+		
+		lstRecord = answerDataList.getDatas();
+		
+		List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>(lstRecord.size());
+		
+		// 错题、收藏本bookid
+		String faultBookId = null;
+		String favoriteBookId = null;
+		for(int i=0; i<lstRecord.size(); i++){
+			
+			answerResult = lstRecord.get(i);
+			if(null == answerResult){
+				continue;
+			}
+			
+			lstAnswers = answerResult.getItems();
+			
+			// 记录id
+			String initExerciseRecordId = answerResult.getExerciseRecordId();
+						
+			String recordData = JSONObject.toJSONString(answerResult);
+			
+			if(lstAnswers.isEmpty() 
+					&& !ExerciseRecord.STATUS_SUBMIT.equals(answerResult.getStatus()) 
+					&& answerResult.getSubmitType() != 1){// 提交状态
+				this.doSaveExerciseDataSubmitLog(recordData,
+						initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER,
+						ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Extend/exerExtendMutiAnswers");
+				continue;
+			}
+			
+			/**  1.---------记录提交的数据日志 */
+			// 记录提交的数据日志
+			String exerciseDataLogId = this.doSaveExerciseDataSubmitLog(recordData,
+					initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER, 
+					ExerciseDataSubmitLog.STATUS_SUCCESS, "/exercise/Extend/exerExtendMutiAnswers");
+						
+			/** 2.提交答案  */
+			String exerciseType = answerResult.getType();
+			if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+				// 更新 提交练习答案
+				returnMap = this.doSubmitExerFaultAnswerDataNew(answerResult);
+				
+				if(null == returnMap){
+					continue;
+				}
+				
+				faultBookId = (String) returnMap.get("exerciseBookId");
+			}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+				// 更新 提交练习答案
+				returnMap = this.doSubmitExerFavorAnswerDataNew(answerResult);
+				
+				if(null == returnMap){
+					continue;
+				}
+				
+				favoriteBookId = (String) returnMap.get("exerciseBookId");
+			}else{
+				continue;
+			}
+			
+			/** 3.发送 题目的全站统计  个人统计请求消息  */
+			exerciseVerService.sendUpdateExerItemStatisticsMsg(answerResult.getExerciseGroupId(), answerResult);
+			
+			returnMap.put("type", exerciseType);
+			resultList.add(returnMap);
+			
+			// 4.---------更新本次提交的数据日志exerciseRecordId
+			if(StringUtils.isBlank(initExerciseRecordId) 
+					&& returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
+				exerciseVerService.doUpdateExerciseDataSubmitLog(exerciseDataLogId, 
+						String.valueOf(returnMap.get(EXERCISE_RECORD_ID)));
+				
+			}
+						
+		}
+		
+		/** 4.判断是否全部做题时 统计全部做题信息  */
+		this.doOperFaultBookBySubmitAllAnswer(
+				answerDataList.getCurrTitleNum(), answerDataList.getStatus(),faultBookId, answerDataList.getExerciseType());
+		
+		this.doOperFavorBookBySubmitAllAnswer(
+				answerDataList.getCurrTitleNum(), answerDataList.getStatus(),favoriteBookId, answerDataList.getExerciseType());
+		
+		/**  5.返回结果 */
+		resultMap.put("success", true);
+		resultMap.put("attrs", resultList);
+		resultMap.put("msg", "提交成功");
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 提交单套题答案结果到db 
+	 */
+	@Override
+	public Result doSubmitExerciseAnswerData(ExerciseSubmitAnswerData answerResult) {
+		// 用户本次做题提交的数据
+		Result result = new Result(false);
+					
+		if(answerResult.getItems().isEmpty() 
+				&& !ExerciseRecord.STATUS_SUBMIT.equals(answerResult.getStatus()) 
+				&& answerResult.getSubmitType() != 1){// 提交状态
+			return result;
+		}
+		
+		String exerciseType = answerResult.getType();
+		
+		Map<String,Object> resultMap = null;
+		if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
+			// 更新 提交练习答案
+			resultMap = this.doSubmitExerFaultAnswerDataNew(answerResult);
+			
+			if(null == resultMap){
+				return new Result(false,"提交失败");
+			}
+			
+			// 统计全部做题信息/
+			this.doOperFaultBookBySubmitAllAnswer(null,null,(String) resultMap.get("exerciseBookId"),null);
+			
+		}else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
+			// 更新 提交练习答案
+			resultMap = this.doSubmitExerFavorAnswerDataNew(answerResult);
+			
+			if(null == resultMap){
+				return new Result(false,"提交失败");
+			}
+			
+			// 统计全部做题信息/
+			this.doOperFavorBookBySubmitAllAnswer(null,null, (String) resultMap.get("exerciseBookId"),null);
+		}else{
+			
+			return new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
+		}
+		
+		
+		// 3.发送 题目的全站统计  个人统计请求消息
+		List<ExerciseItemAnswerData> lstAnswers= answerResult.getItems();
+		if(!lstAnswers.isEmpty()){
+			exerciseVerService.sendUpdateExerItemStatisticsMsg(answerResult.getExerciseGroupId(), answerResult);
+		}
+		
+		result.setData(resultMap);
+		result.setResult(true);
+			
+		return result;
+	}
+	
+	/**
+	 * 初始化错题统计数据
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result doInitFaultStatisData() {
+		log.info("---------------定时器 开始统计做题错题统计信息-----------start ------------------");
+		// 1.计算前一天 对应做题人的做题信息
+		String sql = "SELECT"
+				+ " 	r.CLASS_ID,"
+				+ " 	t.USER_ID,"
+				+ " 	count(1) doCount,"
+				+ " 	sum(t.CORRECT = 0) faultCount,"
+				+ " 	r.ORG_ID,"
+				+ " 	r.COLLEGE_COURSE_ID,"
+				+ " 	r.SUBJECT_ID,"
+				+ " 	r.UPDATE_TIME"
+				+ " FROM"
+				+ " 	exercise_item_answer_u t,"
+				+ " 	exercise_record r"
+				+ " WHERE"
+				+ " 	t.EXERCISE_RECORD_ID = r.RECORD_ID"
+				+ " AND t.UPDATE_TIME < ?"
+				+ " AND t.DELETE_FLAG = 0"
+				+ " AND r.DELETE_FLAG = 0"
+				+ " GROUP BY"
+				+ " 	r.CLASS_ID,"
+				+ " 	t.USER_ID,"
+				+ " 	r.UPDATE_TIME";
+		
+		String yesterday = DateUtils.getTheDay(-1);
+		List<Object[]> resultlst = this.findBySql(sql, CollectionUtils.newList(yesterday));
+		
+		
+		// 2.错题信息记录表
+		List<ExerciseFaultStatistics> statisLst = new ArrayList<ExerciseFaultStatistics>(resultlst.size());
+		ExerciseFaultStatistics faultStatis = null;
+		for(Object[] objs:resultlst){
+			faultStatis = new ExerciseFaultStatistics();
+			
+			faultStatis.setClassId(String.valueOf(objs[0]));
+			faultStatis.setUserId(String.valueOf(objs[1]));
+			faultStatis.setDoCount(new BigInteger(String.valueOf(objs[2])));
+			faultStatis.setFaultCount(new BigInteger(String.valueOf(objs[3])));
+			faultStatis.setFaultRate( ExerciseUtils.parseStrToBigDecimal(String.valueOf(objs[3]), String.valueOf(objs[2])));
+			faultStatis.setOrgId(String.valueOf(objs[4]));
+			faultStatis.setCollegeCourseId(String.valueOf(objs[5]));
+			faultStatis.setSubjectId(String.valueOf(objs[6]));
+			faultStatis.setExerciseTime((Date)(objs[7]));
+			
+			TraceUtils.setCreateTrace(faultStatis);
+			statisLst.add(faultStatis);
+		}
+		
+		this.saveOrUpdateAll(statisLst);
+		
+		log.info("---------------定时器 开始统计做题错题统计信息-----------end ------------------");
+		return new Result(true, "操作成功,统计记录总条数:"+statisLst.size());
+	}
+
+	@Override
+	public Result doUpdateExerciseDataSubmitLog(String exerciseDataLogId,
+			String exerBussinessId) {
+		return exerciseVerService.doUpdateExerciseDataSubmitLog(exerciseDataLogId, exerBussinessId);
+	}
+
+	/** -----------------------APP----V2.0--end---------------------------------------- */
+	
+	/*@SuppressWarnings("unchecked")
+	@Override
+	public Result doInitExerRecentRecord() {
+		
+		String sql = " select r.RECORD_ID,"
+				+"  r.EXERCISE_GROUP_ID,"
+				+"  r.CLASS_ID,"
+				+"  r.USER_ID,"
+				+"  r.COLLEGE_COURSE_ID,"
+				+"  r.ORG_ID,"
+				+"  r.SUBJECT_ID,"
+				+"  r.CREATE_TIME,"
+				+"  r.CREATE_ID,"
+				+"  r.CREATOR,"
+				+"  r.UPDATE_ID,"
+				+"  r.UPDATE_TIME,"
+				+"  r.UPDATOR"
+				+"  from exercise_record r, "
+				+" ("
+				+" select max(UPDATE_TIME) uptime,t.USER_ID,t.EXERCISE_GROUP_ID "
+				+" from exercise_record t "
+				+" group by t.USER_ID,t.EXERCISE_GROUP_ID) tmp"
+				+" where r.EXERCISE_GROUP_ID=tmp.EXERCISE_GROUP_ID "
+				+" and r.USER_ID=tmp.USER_ID "
+				+" and r.UPDATE_TIME=tmp.uptime"
+				+" and not EXISTS"
+				+" (select 1 from exercise_recent_record re"
+				+" where re.EXERCISE_RECORD_ID=r.RECORD_ID)";
+		
+		List<Object[]> lstData =this.findBySql(sql, new ArrayList<Object>());
+		
+		if(lstData.isEmpty()){
+			return new Result(false,"最近做题记录数据为空");
+		}
+		
+		List<ExerciseRecentRecord> lstRecord = new ArrayList<ExerciseRecentRecord>(lstData.size());
+		ExerciseRecentRecord record=null;
+		for(Object[] objs:lstData){
+			record = new ExerciseRecentRecord();
+			record.setExerciseRecordId(String.valueOf(objs[0]));
+			record.setExerciseGroupId(String.valueOf(objs[1]));
+			record.setClassId(objs[2]==null?null:String.valueOf(objs[2]));
+			record.setUserId(String.valueOf(objs[3]));
+			record.setCollegeCourseId(objs[4]==null?null:String.valueOf(objs[4]));
+			record.setOrgId(objs[5]==null?null:String.valueOf(objs[5]));
+			record.setSubjectId(objs[6]==null?null:String.valueOf(objs[6]));
+			record.setCreateTime((Date)(objs[7]));
+			record.setCreateId(String.valueOf(objs[8]));
+			record.setCreator(String.valueOf(objs[9]));
+			record.setDeleteFlag(false);
+			TraceUtils.setUpdateTrace(record);
+			
+			lstRecord.add(record);
+		}
+		
+		this.saveOrUpdateAll(lstRecord);
+		
+		return new Result(true,"此次插入ExerciseRecentRecord条数:"+lstRecord.size());
+	}
+
+	@SuppressWarnings({ "unchecked" })
+	@Override
+	public Result doInitFaultRecord() {
+		String sql = "select b.USER_ID,re.EXERCISE_GROUP_ID,g.TYPE,g.ALL_COUNT,count(1),b.RESUME_BOOK_ID,b.TITLE_MAX_NUMBER,"
+		+" (select count(1) from exercise_fault t where t.EXERCISE_FAULT_ID=f.EXERCISE_FAULT_ID and t.CORRECT=1 ) correctCount,"
+		+" (select count(1) from exercise_fault t where t.EXERCISE_FAULT_ID=f.EXERCISE_FAULT_ID and t.answer is not null ) doCount,"
+		+ " b.UPDATE_ID,b.UPDATE_TIME,b.UPDATOR,b.CREATE_ID,b.CREATE_TIME,b.CREATOR"
+		+" from exercise_fault f,exercise_group_item_re re,exercise_fault_book b,exercise_group g"
+		+" where f.EXERCISE_ITEM_ID =re.EXERCISE_ITEM_ID"
+		+" and f.RESUME_BOOK_ID=b.RESUME_BOOK_ID"
+		+" and re.EXERCISE_GROUP_ID=g.GROUP_ID"
+		+" and (f.FAULT_RECORD_ID is null or f.FAULT_RECORD_ID='') "
+		+" group by b.USER_ID,re.EXERCISE_GROUP_ID";
+
+		List<Object[]> lstData =this.findBySql(sql, new ArrayList<Object>());
+		
+		if(lstData.isEmpty()){
+			return new Result(false,"错题数据为空,本次没有需要更新的错题数据");
+		}
+		
+		
+		String hql_existRecord = "from ExerciseFaultRecord where  resumeBookId=? and exerciseGroupId=? ";
+		
+		List<ExerciseFaultRecord> lstRecord = new ArrayList<ExerciseFaultRecord>(lstData.size());
+		ExerciseFaultRecord record=null;
+		BigInteger allCount;
+		for(Object[] objs:lstData){
+			if(!this.find(hql_existRecord, 
+					CollectionUtils.newList(String.valueOf(objs[5]),String.valueOf(objs[1])), ExerciseFaultRecord.class).isEmpty()){
+				continue;
+			}
+			
+			record = new ExerciseFaultRecord();
+			
+			allCount = (BigInteger)objs[4];
+			
+			if(allCount.compareTo(BigInteger.ZERO) == 0){
+				continue;
+			}
+			record.setResumeBookId(String.valueOf(objs[5]));
+			record.setExerciseGroupId(String.valueOf(objs[1]));
+			record.setExerciseGroupType((short)objs[2]);
+			
+			record.setAllCount(allCount);
+			record.setDoCount(new BigInteger(String.valueOf(objs[8]==null ? 0 :objs[8])));
+			record.setCorrectCount(new BigInteger(String.valueOf(objs[7]==null ? 0 :objs[7])));
+			record.setCompletionRate(new BigDecimal(CommonUtils.formatDecimalFormat(
+					record.getDoCount().doubleValue()/allCount.doubleValue()*100,
+					CommonUtils.PARTEN_TWO)));
+			
+			record.setAccuracy(new BigDecimal(CommonUtils.formatDecimalFormat(
+					record.getCorrectCount().doubleValue()/allCount.doubleValue()*100,
+					CommonUtils.PARTEN_TWO)));
+			record.setScore(record.getAccuracy());
+			record.setStatus("0");
+			record.setTitleMaxNumber(objs[6]==null?null:String.valueOf(objs[6]));
+			if(StringUtils.isNotBlank(record.getTitleMaxNumber()) && 
+							new BigInteger(record.getTitleMaxNumber()).compareTo(record.getAllCount())>0){
+				record.setTitleMaxNumber(String.valueOf(record.getAllCount()));
+			}
+			record.setCreateId(String.valueOf(objs[12]));
+			record.setCreateTime((Date)(objs[13]));
+			record.setCreator(String.valueOf(objs[14]));
+			TraceUtils.setUpdateTrace(record);
+			
+			lstRecord.add(record);
+		}
+		
+		this.saveOrUpdateAll(lstRecord);
+		
+		return new Result(true, "插入ExerciseFaultRecord条数:"+lstRecord.size());
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result doInitFavorRecord() {
+		
+		String sql = " select b.USER_ID,re.EXERCISE_GROUP_ID,g.TYPE,g.ALL_COUNT,count(1),b.FAVORITE_BOOK_ID,b.TITLE_MAX_NUMBER,"
+				+" (select count(1) from exercise_favorite t where t.EXERCISE_FAVORITE_ID=f.EXERCISE_FAVORITE_ID and t.CORRECT=1 ) correctCount,"
+				+" (select count(1) from exercise_favorite t where t.EXERCISE_FAVORITE_ID=f.EXERCISE_FAVORITE_ID and t.answer is not null ) doCount,"
+				+" +  b.UPDATE_ID,b.UPDATE_TIME,b.UPDATOR,b.CREATE_ID,b.CREATE_TIME,b.CREATOR"
+				+" from exercise_favorite f,exercise_group_item_re re,exercise_favorite_book b,exercise_group g"
+				+" where f.EXERCISE_ITEM_ID =re.EXERCISE_ITEM_ID"
+				+" and f.FAVORITE_BOOK_ID=b.FAVORITE_BOOK_ID"
+				+" and re.EXERCISE_GROUP_ID=g.GROUP_ID"
+				+" and (f.FAVORITE_RECORD_ID is null or f.FAVORITE_RECORD_ID = '')"
+				+" group by b.USER_ID,re.EXERCISE_GROUP_ID";
+
+				List<Object[]> lstData =this.findBySql(sql, new ArrayList<Object>());
+				
+				if(lstData.isEmpty()){
+					return new Result(false,"收藏数据为空,本次没有需要更新的收藏数据");
+				}
+				
+				String hql_existRecord = "from ExerciseFavoriteRecord where  favoriteBookId=? and exerciseGroupId=? ";
+				
+				List<ExerciseFavoriteRecord> lstRecord = new ArrayList<ExerciseFavoriteRecord>(lstData.size());
+				ExerciseFavoriteRecord record=null;
+				BigInteger allCount;
+				for(Object[] objs:lstData){
+					if(!this.find(hql_existRecord, 
+							CollectionUtils.newList(String.valueOf(objs[5]),String.valueOf(objs[1])), ExerciseFavoriteRecord.class).isEmpty()){
+						continue;
+					}
+					
+					record = new ExerciseFavoriteRecord();
+					
+					allCount = (BigInteger)objs[4];
+					
+					if(allCount.compareTo(BigInteger.ZERO) == 0){
+						continue;
+					}
+					record.setFavoriteBookId(String.valueOf(objs[5]));
+					record.setExerciseGroupId(String.valueOf(objs[1]));
+					record.setExerciseGroupType((short)objs[2]);
+					
+					record.setAllCount(allCount);
+					record.setDoCount(new BigInteger(String.valueOf(objs[8]==null ? 0 :objs[8])));
+					record.setCorrectCount(new BigInteger(String.valueOf(objs[7]==null ? 0 :objs[7])));
+					record.setCompletionRate(new BigDecimal(CommonUtils.formatDecimalFormat(
+							record.getDoCount().doubleValue()/allCount.doubleValue()*100,
+							CommonUtils.PARTEN_TWO)));
+					
+					record.setAccuracy(new BigDecimal(CommonUtils.formatDecimalFormat(
+							record.getCorrectCount().doubleValue()/allCount.doubleValue()*100,
+							CommonUtils.PARTEN_TWO)));
+					record.setScore(record.getAccuracy());
+					record.setStatus("0");
+					record.setTitleMaxNumber(objs[6]==null?null:String.valueOf(objs[6]));
+					if(record.getTitleMaxNumber() != null && 
+							new BigInteger(record.getTitleMaxNumber()).compareTo(record.getAllCount())>0){
+						record.setTitleMaxNumber(String.valueOf(record.getAllCount()));
+					}
+					record.setCreateId(String.valueOf(objs[12]));
+					record.setCreateTime((Date)(objs[13]));
+					record.setCreator(String.valueOf(objs[14]));
+					TraceUtils.setUpdateTrace(record);
+					
+					lstRecord.add(record);
+				}
+				
+				this.saveOrUpdateAll(lstRecord);
+				
+				
+				return new Result(true,"插入ExerciseFavoriteRecord条数:"+lstRecord.size());
+	}
+
+	@Override
+	public Result doInitFaultItem() {
+		// 2.
+		String sql2="select f,re.exerciseGroupId"
+				+" from ExerciseFault f,ExerciseGroupItemRe re"
+				+" where f.exerciseItemId=re.exerciseItemId"
+				+" and (f.faultRecordId is null or f.faultRecordId='') order by f.exerciseFaultId";
+		
+		List<Object[]> lstData2 =this.findwithRawResult(sql2, new ArrayList<Object>());
+		
+		if(lstData2.isEmpty()){//抛异常回滚
+			return new Result(false,"错题数据为空2222");
+		}
+		
+		String hql_existRecord = "from ExerciseFaultRecord where  resumeBookId=? and exerciseGroupId=? ";
+		List<ExerciseFault> lstFaults = new ArrayList<ExerciseFault>(lstData2.size());
+		ExerciseFault fault=null;
+		ExerciseFault newFault=null;
+		String exerciseFaultId="";
+		List<ExerciseFaultRecord> lstRecord = null;
+		for(Object[] objs:lstData2){
+			fault = (ExerciseFault)objs[0];
+			if(fault.getExerciseFaultId().equals(exerciseFaultId)){
+				newFault = new ExerciseFault();
+				BeanUtils.copyProperties(fault, newFault);
+				newFault.setExerciseFaultId(null);
+				
+				lstRecord = this.find(hql_existRecord, CollectionUtils.newList(newFault.getResumeBookId(),String.valueOf(objs[1])), ExerciseFaultRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				newFault.setFaultRecordId(lstRecord.get(0).getFaultRecordId());
+				TraceUtils.setUpdateTrace(newFault);
+				lstFaults.add(newFault);
+			}else{
+				lstRecord = this.find(hql_existRecord, CollectionUtils.newList(fault.getResumeBookId(),String.valueOf(objs[1])), ExerciseFaultRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				fault.setFaultRecordId(lstRecord.get(0).getFaultRecordId());
+				TraceUtils.setUpdateTrace(fault);
+				lstFaults.add(fault);
+			}
+			
+			exerciseFaultId=fault.getExerciseFaultId();
+		}
+		
+		this.saveOrUpdateAll(lstFaults);
+		
+		return new Result(true, "更新ExerciseFault条数:"+lstFaults.size());
+	}
+
+	@Override
+	public Result doInitFavorItem() {
+		// 2.
+		String sql2="select f,re.exerciseGroupId"
+				+" from ExerciseFavorite f,ExerciseGroupItemRe re"
+				+" where f.exerciseItemId=re.exerciseItemId"
+				+" and (f.favoriteRecordId is null or f.favoriteRecordId = '') order by f.exerciseFavoriteId";
+		
+		List<Object[]> lstData2 =this.findwithRawResult(sql2, new ArrayList<Object>());
+		
+		if(lstData2.isEmpty()){//抛异常回滚
+			return new Result(false,"收藏数据为空2222");
+		}
+		
+		String hql_existRecord = "from ExerciseFavoriteRecord where  favoriteBookId=? and exerciseGroupId=? ";
+		List<ExerciseFavoriteRecord> lstRecord = null;
+		List<ExerciseFavorite> lstFavors = new ArrayList<ExerciseFavorite>(lstData2.size());
+		ExerciseFavorite favor=null;
+		ExerciseFavorite newFavor=null;
+		String exerciseFavoriteId="";
+		for(Object[] objs:lstData2){
+			favor = (ExerciseFavorite)objs[0];
+			if(favor.getExerciseFavoriteId().equals(exerciseFavoriteId)){
+				
+				newFavor = new ExerciseFavorite();
+				BeanUtils.copyProperties(favor, newFavor);
+				newFavor.setExerciseFavoriteId(null);
+				
+				lstRecord = this.find(hql_existRecord, CollectionUtils.newList(newFavor.getFavoriteBookId(),String.valueOf(objs[1])), ExerciseFavoriteRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				newFavor.setFavoriteRecordId(lstRecord.get(0).getFavoriteRecordId());
+				TraceUtils.setUpdateTrace(newFavor);
+				lstFavors.add(newFavor);
+			}else{
+				lstRecord = this.find(hql_existRecord, CollectionUtils.newList(favor.getFavoriteBookId(),String.valueOf(objs[1])), ExerciseFavoriteRecord.class);
+				if(lstRecord.isEmpty()){
+					continue;
+				}
+				
+				favor.setFavoriteRecordId(lstRecord.get(0).getFavoriteRecordId());
+				TraceUtils.setUpdateTrace(favor);
+				lstFavors.add(favor);
+			}
+			
+			exerciseFavoriteId = favor.getExerciseFavoriteId();
+		}
+		
+		this.saveOrUpdateAll(lstFavors);
+		
+		return new Result(true,"|更新ExerciseFavorite条数:"+lstFavors.size());
+	}
+
+	@Override
+	public Result doSavetoDB(Object obj) {
+		this.save(obj);
+		return new Result(true);
+	}*/
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java
new file mode 100644
index 0000000..2f0e8f4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java
@@ -0,0 +1,93 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+
+/**
+ * 班级正确率处理service
+ * @author zhiyong
+ *
+ */	
+@Service("ExerciseGroupAccuracyDealService")
+public class ExerciseGroupAccuracyDealService  {
+	
+	/** 缓存service  */
+	@Autowired
+	ICacheService cache;
+	
+	/** 练习接口service  */
+	@Autowired
+	IExerciseVerService exerciseVerService;
+	
+	/** 配置service  */
+	/*@Autowired
+	IConfigService config;*/
+	
+	/**
+	 * 排名更新时间,默认60秒  半小时更新一次
+	 */
+	//private int updateRankMinutes = 60;
+	
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ExerciseGroupAccuracyDealService");
+
+	/*@PostConstruct
+	void init() {
+
+		CommonONSConsumer.registerHandler("EXER_GROUP_ACCURACY", "ExerciseGroupAccuracyDealService");
+			
+		//updateRankMinutes = Integer.parseInt(config.getConfigByEnv("ons-classAccuracy-update-minutes"));
+	}
+
+	
+	@Override
+	public void doHandle(Message msg, ConsumeContext context) {
+		try {
+			
+			String groupId = msg.getUserProperties("groupId");
+			String doCount = msg.getUserProperties("doCount");
+			String correctCount = msg.getUserProperties("correctCount");
+			
+			if(cache.get(getCacheIdFromRank(groupId), Integer.class) != null){// 缓存不为空 说明已经处理过
+				return;
+			}
+			
+			updateUpdateTime(groupId);
+			
+			// 更新字段值到exercise_group_extend表
+			exerciseVerService.doUpdateExerGroupClsAccuracy(groupId,doCount,correctCount);
+			
+			
+		} catch (Exception e) {
+
+			log.error("更新练习组班级正确率失败:" + e, e);
+
+			throw e;
+
+		}
+	}*/
+
+	/**
+	 * 插入缓存记录,标记本次更新排名时间    半小时更新一次
+	 * 
+	 * @param rank
+	private void updateUpdateTime(String groupId) {
+		cache.set(getCacheIdFromRank(groupId), 30 * updateRankMinutes, 1);
+	}
+
+	/**
+	 * 获取cacheId
+	 * 
+	 * @param rank
+	 * @return
+	private String getCacheIdFromRank(String groupId) {
+		return Constants.EXER_GROUP_ACCURACY_CACHE_KEY + groupId;
+	}*/
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java
new file mode 100644
index 0000000..95d0528
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java
@@ -0,0 +1,815 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.BoundValueOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemScore;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.exercise.util.ExerciseUtils;
+
+/**
+ * 通知管理服务层
+ *
+ * @author kevin
+ * @createTime 2017-11-1
+ */
+@Service
+public class ExerciseGroupService extends CommonAppService implements IExerciseGroupService {
+
+	@SuppressWarnings("rawtypes")
+	@Autowired
+	private RedisTemplate redisTemplate;
+
+	private static final Logger log = LoggerFactory.getLogger(ExerciseGroupService.class);
+
+	@Override
+	public int queryExerciseGroupCount(Map<String, Object> param) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	@Override
+	public List<ExerciseGroup> queryExerciseGroupList(Map<String, Object> param, Pager page) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String addExerciseGroup(ExerciseGroup exerciseGroup) {
+		TraceUtils.setCreateTrace(exerciseGroup);
+		this.insert(exerciseGroup);
+		return exerciseGroup.getGroupId();
+	}
+
+	@Override
+	public Result deleteExerciseGroup(String[] groupIds) {
+		Result result = new Result(true);
+		if (groupIds != null && groupIds.length > 0) {
+			String hql = "update ExerciseGroup set deleteFlag = true where groupId=?";
+			result = bulkUpdateInLoop(hql, groupIds);
+		}
+		return result;
+	}
+
+	@Override
+	public Result updateExerciseGroup(ExerciseGroup param) {
+		ExerciseGroup exerciseGroup = read(ExerciseGroup.class, param.getGroupId());
+		if (exerciseGroup != null) {
+			TraceUtils.setUpdateTrace(exerciseGroup);
+			exerciseGroup.setGroupRange(ExerciseGroup.GROUP_RANGE_PRIV);
+			exerciseGroup.setSubjectId(param.getSubjectId());
+			exerciseGroup.setName(param.getName());
+			exerciseGroup.setDifficultLevel(param.getDifficultLevel());
+		}
+		return save(exerciseGroup);
+	}
+
+	@Override
+	public Result doExerciseGroupRealease(String[] groupIds) {
+		Map<String, Object> pramMap = null;
+		if (groupIds != null && groupIds.length > 0) {
+			pramMap = new HashMap<String, Object>(1);
+			pramMap.put("examIds", groupIds);
+			String hql = "from ExerciseGroup where groupId in (:groupIds)";
+			List<ExerciseGroup> lstExerciseGroup = this.findByComplexHql(hql, pramMap, ExerciseGroup.class);
+
+			for (ExerciseGroup exerciseGroup : lstExerciseGroup) {
+				if (ExerciseGroup.STATUS_DRAFT != exerciseGroup.getStatus()) {
+					return new Result(false, "只有草稿状态的题库,才能发布。");
+				}
+				exerciseGroup.setStatus(ExerciseGroup.STATUS_PUBLISHED);
+				TraceUtils.setUpdateTrace(exerciseGroup);
+				save(exerciseGroup);
+			}
+		} else {
+			return new Result(false, "没有选择要发布的题库。");
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public Result doExerciseGroupRevocation(String[] examIds) {
+		Map<String, Object> pramMap = null;
+		if (examIds != null && examIds.length > 0) {
+			pramMap = new HashMap<String, Object>(1);
+			pramMap.put("examIds", examIds);
+			String hql = "from ExerciseGroup where examId in (:examIds)";
+			List<ExerciseGroup> lstExerciseGroup = this.findByComplexHql(hql, pramMap, ExerciseGroup.class);
+			for (ExerciseGroup exerciseGroup : lstExerciseGroup) {
+				if (ExerciseGroup.STATUS_DRAFT != exerciseGroup.getStatus()) {
+					return new Result(false, "只有发布状态的题库,才能撤回。");
+				}
+				exerciseGroup.setStatus(ExerciseGroup.STATUS_DRAFT);
+				TraceUtils.setUpdateTrace(exerciseGroup);
+				save(exerciseGroup);
+			}
+		} else {
+			return new Result(false, "没有选择要撤回的题库。");
+		}
+
+		return new Result(true);
+	}
+
+	@Override
+	public ExerciseGroup queryExerciseGroupDetail(String groupId) {
+		ExerciseGroup exerciseGroup = this.read(ExerciseGroup.class, groupId);
+		if(exerciseGroup!=null){
+			exerciseGroup.setItems(this.queryExerciseItemList(exerciseGroup));
+		}
+		return exerciseGroup;
+	}
+	@Override
+	public ExerciseGroup queryExerciseGroupDetail(String groupId,String batchId) {
+		ExerciseGroup exerciseGroup = this.read(ExerciseGroup.class, groupId);
+		if(exerciseGroup!=null){
+			//根据批次ID查询考试ID
+			String hql="select r.examId from ExamBatchClassRe r where r.examBatchId=?";
+			String examId = this.findUnique(hql, CollectionUtils.newList(batchId), String.class);
+			exerciseGroup.setItems(this.queryExerciseItemList(exerciseGroup,examId));
+		}
+		return exerciseGroup;
+	}
+	//补考考试获取试卷设置
+	@Override
+	public ExerciseGroup queryReExerciseGroupDetail(String groupId,String examId) {
+		ExerciseGroup exerciseGroup = this.read(ExerciseGroup.class, groupId);
+		if(exerciseGroup!=null){
+			exerciseGroup.setItems(this.queryExerciseItemList(exerciseGroup,examId));
+		}
+		return exerciseGroup;
+	}
+
+	/**
+	 * 查询练习题目list
+	 *
+	 * @param groupId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private List<ExerciseItem> queryExerciseItemList(ExerciseGroup exerciseGroup) {
+		BoundValueOperations<String, List<ExerciseItem>> boundValueOperations = redisTemplate.boundValueOps(exerciseGroup.getGroupId());
+		List<ExerciseItem> lstItems = boundValueOperations.get();
+
+		if(lstItems==null){
+			// 1.查询练习题目信息
+			StringBuffer hqlBuffer = new StringBuffer(1000);
+			hqlBuffer.append("select item from ExerciseItem item, ExerciseGroupItemRe re, ExerciseGroup g");
+			hqlBuffer.append(" where item.exerciseId=re.exerciseItemId and re.exerciseGroupId=g.groupId");
+			hqlBuffer.append(" and g.groupId = ?  and item.deleteFlag is false  and g.deleteFlag is false");
+			//如果是题库按照题目类型排序,其他按照题目顺序排序
+			if(exerciseGroup.getType() == ExerciseGroup.TYPE_EXERCISE_GROUP_LIB){
+				hqlBuffer.append(" and re.deleteFlag is false order by item.type, re.itemOrder");
+			}else{
+				hqlBuffer.append(" and re.deleteFlag is false order by re.itemOrder");
+			}
+
+			lstItems = this.find(hqlBuffer.toString(), CollectionUtils.newList(exerciseGroup.getGroupId()), ExerciseItem.class);
+
+			// 为空
+			if (lstItems.isEmpty()) {
+				return lstItems;
+			}
+
+			// 组装选项,答案,解析等信息
+			lstItems = getCommonExerItemDetail(lstItems, exerciseGroup.getGroupId());
+
+			boundValueOperations.setIfAbsent(lstItems);
+			boundValueOperations.expire(30, TimeUnit.DAYS);
+		}
+
+		return lstItems;
+	}
+	private List<ExerciseItem> queryExerciseItemList(ExerciseGroup exerciseGroup,String examId) {
+		BoundValueOperations<String, List<ExerciseItem>> boundValueOperations = redisTemplate.boundValueOps(exerciseGroup.getGroupId());
+		List<ExerciseItem> lstItems = boundValueOperations.get();
+
+		if(true){
+			// 1.查询练习题目信息
+			StringBuffer hqlBuffer = new StringBuffer(1000);
+			hqlBuffer.append("select item from ExerciseItem item, ExerciseGroupItemRe re, ExerciseGroup g");
+			hqlBuffer.append(" where item.exerciseId=re.exerciseItemId and re.exerciseGroupId=g.groupId");
+			hqlBuffer.append(" and g.groupId = ?  and item.deleteFlag is false  and g.deleteFlag is false");
+			//如果是题库按照题目类型排序,其他按照题目顺序排序
+			if(exerciseGroup.getType() == ExerciseGroup.TYPE_EXERCISE_GROUP_LIB){
+				hqlBuffer.append(" and re.deleteFlag is false order by item.type, re.itemOrder");
+			}else{
+				hqlBuffer.append(" and re.deleteFlag is false order by re.itemOrder");
+			}
+
+			lstItems = this.find(hqlBuffer.toString(), CollectionUtils.newList(exerciseGroup.getGroupId()), ExerciseItem.class);
+
+			// 为空
+			if (lstItems.isEmpty()) {
+				return lstItems;
+			}
+
+			// 组装选项,答案,解析等信息
+			lstItems = getCommonExerItemDetail(lstItems, exerciseGroup.getGroupId(),examId);
+
+			boundValueOperations.setIfAbsent(lstItems);
+			boundValueOperations.expire(30, TimeUnit.DAYS);
+		}
+
+		return lstItems;
+	}
+
+	/**
+	 * 重新组装练习题 加入分析结果
+	 *
+	 * @param lstItems
+	 * @param exerciseGroupId
+	 * @param currTitleNumber
+	 * @return
+	 */
+	private List<ExerciseItem> getCommonExerItemDetail(List<ExerciseItem> lstItems, String exerciseGroupId) {
+		// 0.组装参数
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for (int i = 0; i < lstItems.size(); i++) {
+			args[i] = lstItems.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+		//查询题目得分
+		String hql_itemScores = "from ExerciseItemScore s where s.groupId=:groupId and s.exerciseItemId in (:exerciseIds) and s.deleteFlag is false  order by exerciseItemId";
+		List<ExerciseItemScore> lstItemScores = this.findByComplexHql(hql_itemScores, CollectionUtils.newObjectMap("groupId",exerciseGroupId,"exerciseIds",args), ExerciseItemScore.class);
+		Map<String, List<ExerciseItemScore>> scoresMap=  new HashMap<String,List<ExerciseItemScore>>(lstItemScores.size());
+		ExerciseUtils.packageExerciseItemScore(scoresMap, lstItemScores);
+
+		// 1.查询练习题目全站分析
+		String hql_analisis = "from ExerciseItemAnalisi  where exerciseItemId in (:exerciseIds)  and deleteFlag is false ";
+		List<ExerciseItemAnalisi> lstAnalisis = this.findByComplexHql(hql_analisis, argsMap, ExerciseItemAnalisi.class);
+		Map<String, List<ExerciseItemAnalisi>> analisiMap = new HashMap<String, List<ExerciseItemAnalisi>>(lstAnalisis.size());
+		for (ExerciseItemAnalisi analisis : lstAnalisis) {
+			if(analisiMap.containsKey(analisis.getExerciseItemId())){
+				analisiMap.get(analisis.getExerciseItemId()).add(analisis);
+			}else{
+				analisiMap.put(analisis.getExerciseItemId(),CollectionUtils.newList(ExerciseItemAnalisi.class, analisis));
+			}
+		}
+
+		// 2.查询练习题目答案选项
+		Map<String, List<ExerciseItemOption>> optionsMap = new HashMap<String, List<ExerciseItemOption>>(
+				lstItems.size());
+		Map<String, String> answerMap = new HashMap<String, String>();
+		String hql_options = "from ExerciseItemOption where exerciseItemId in (:exerciseIds) and deleteFlag is false order by exerciseItemId, optionOrder ";
+		List<ExerciseItemOption> lstAllOptions = this.findByComplexHql(hql_options, argsMap, ExerciseItemOption.class);
+
+		// 重新组装练习
+		ExerciseUtils.packageExerciseItem(optionsMap, answerMap, lstAllOptions, null);
+
+		String exerciseId = null;
+		for (ExerciseItem item : lstItems) {
+
+			// 4.0 分析结果
+			exerciseId = item.getExerciseId();
+
+			// 得到练习组id
+			if (StringUtils.isNotBlank(exerciseGroupId)) {
+				item.setExerciseGroupId(exerciseGroupId);
+			}
+
+			// 4.3 题目选项
+			item.setOptions(optionsMap.get(exerciseId));
+
+			item.setAnalisisResult(null);
+			item.setAnalysises(null);
+			item.setAnalysises(analisiMap.get(exerciseId));
+
+			//组装练习题目
+			item.setScores(scoresMap.get(exerciseId));
+		}
+
+		return lstItems;
+	}
+	/**
+	 * 重新组装练习题 加入分析结果
+	 *
+	 * @param lstItems
+	 * @param exerciseGroupId
+	 * @param currTitleNumber
+	 * @return
+	 */
+	private List<ExerciseItem> getCommonExerItemDetail(List<ExerciseItem> lstItems, String exerciseGroupId,String examId) {
+		// 0.组装参数
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for (int i = 0; i < lstItems.size(); i++) {
+			args[i] = lstItems.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+
+		//查询题目得分
+		String hql_itemScores = "from ExerciseItemScore s where s.groupId=:groupId and s.exerciseItemId in (:exerciseIds) and s.deleteFlag is false  order by exerciseItemId";
+		List<ExerciseItemScore> lstItemScores = this.findByComplexHql(hql_itemScores, CollectionUtils.newObjectMap("groupId",exerciseGroupId,"exerciseIds",args), ExerciseItemScore.class);
+		Map<String, List<ExerciseItemScore>> scoresMap= new HashMap<String,List<ExerciseItemScore>>();
+		log.error("=================================================");
+		List<ExerciseItemSet> exerciseItemSets=null;
+		if (lstItemScores==null||lstItemScores.size()<=0){
+			//根据考试ID查询itemSet
+			String hql = "select r from ExerciseItemSet r where r.exerciseInfoId=?";
+			exerciseItemSets = this.find(hql, CollectionUtils.newList(examId), ExerciseItemSet.class);
+		}else {
+			ExerciseUtils.packageExerciseItemScore(scoresMap, lstItemScores);
+		}
+
+		// 1.查询练习题目全站分析
+		String hql_analisis = "from ExerciseItemAnalisi  where exerciseItemId in (:exerciseIds)  and deleteFlag is false ";
+		List<ExerciseItemAnalisi> lstAnalisis = this.findByComplexHql(hql_analisis, argsMap, ExerciseItemAnalisi.class);
+		Map<String, List<ExerciseItemAnalisi>> analisiMap = new HashMap<String, List<ExerciseItemAnalisi>>(lstAnalisis.size());
+		for (ExerciseItemAnalisi analisis : lstAnalisis) {
+			if(analisiMap.containsKey(analisis.getExerciseItemId())){
+				analisiMap.get(analisis.getExerciseItemId()).add(analisis);
+			}else{
+				analisiMap.put(analisis.getExerciseItemId(),CollectionUtils.newList(ExerciseItemAnalisi.class, analisis));
+			}
+		}
+
+		// 2.查询练习题目答案选项
+		Map<String, List<ExerciseItemOption>> optionsMap = new HashMap<String, List<ExerciseItemOption>>(
+				lstItems.size());
+		Map<String, String> answerMap = new HashMap<String, String>();
+		String hql_options = "from ExerciseItemOption where exerciseItemId in (:exerciseIds) and deleteFlag is false order by exerciseItemId, optionOrder ";
+		List<ExerciseItemOption> lstAllOptions = this.findByComplexHql(hql_options, argsMap, ExerciseItemOption.class);
+
+		// 重新组装练习
+		ExerciseUtils.packageExerciseItem(optionsMap, answerMap, lstAllOptions, null);
+
+		String exerciseId = null;
+		for (ExerciseItem item : lstItems) {
+
+			// 4.0 分析结果
+			exerciseId = item.getExerciseId();
+
+			// 得到练习组id
+			if (StringUtils.isNotBlank(exerciseGroupId)) {
+				item.setExerciseGroupId(exerciseGroupId);
+			}
+
+			// 4.3 题目选项
+			item.setOptions(optionsMap.get(exerciseId));
+
+			item.setAnalisisResult(null);
+			item.setAnalysises(null);
+			item.setAnalysises(analisiMap.get(exerciseId));
+			//组装练习题目
+			item.setScores(scoresMap.get(exerciseId));
+			//随机试题没有对应分数,需要根据考试Id从item_set里查询每种题目的分数设置
+			if (exerciseItemSets != null ) {
+				//遍历每个item
+				short type = item.getType();
+				//遍历itemset,每个item根据type获取对应类型的分数设置
+				for (ExerciseItemSet exerciseItemSet : exerciseItemSets) {
+					if (exerciseItemSet.getItemType() == type) {
+						/**
+						 * attribute1: null
+						 * attribute2: null
+						 * exerciseItemAnswer: null
+						 * exerciseItemId: "2c92ad6a710b09db0171b4477f620122"
+						 * exerciseItemScoreId: "2c92ad6a72507b08017251baf6ce000d"
+						 * groupId: "2c92ad6a72507b08017251ba5c6f0002"
+						 * score: "4.00"
+						 */
+						List<ExerciseItemScore> exeSets = new ArrayList<>();
+						ExerciseItemScore exerciseItemScore = new ExerciseItemScore();
+						exerciseItemScore.setExerciseItemId(item.getExerciseId());
+						exerciseItemScore.setGroupId(exerciseGroupId);
+						exerciseItemScore.setScore(exerciseItemSet.getRightScore().toString());
+						exeSets.add(exerciseItemScore);
+						item.setScores(exeSets);
+					}
+				}
+			}
+		}
+		return lstItems;
+	}
+
+	@Override
+	public int doCopyExerciseGroupItem(ExerciseGroup sourceGroup, ExerciseGroup targetGroup,Short[] itemTypes, int startOrder)
+			throws IllegalAccessException, InvocationTargetException {
+		//参数判断
+		if(sourceGroup==null || targetGroup==null || ArrayUtils.isEmpty(itemTypes)){
+			return  0;
+		}
+
+		//查询题目组与题目关联关系,需要过滤掉在目标题目组中已拷贝过的题目
+		String hql = "select r1 from ExerciseGroupItemRe r1,ExerciseItem i where r1.exerciseItemId = i.exerciseId and i.type in(:itemTypes) and r1.deleteFlag is false and r1.exerciseGroupId = :sourceGroupId "
+				+ " and not exists (select 1 from ExerciseGroupItemRe r2 where r2.deleteFlag is false and r2.exerciseItemId = r1.exerciseItemId  and r2.exerciseGroupId = :targetGroupId ) order by r1.itemOrder ASC ";
+
+		Map<String,Object> queryParamMap = new HashMap<String,Object>();
+		queryParamMap.put("sourceGroupId", sourceGroup.getGroupId());
+		queryParamMap.put("targetGroupId", targetGroup.getGroupId());
+		queryParamMap.put("itemTypes", itemTypes);
+		List<ExerciseGroupItemRe> lstSourceGroupRe = this.findByComplexHql(hql,queryParamMap,ExerciseGroupItemRe.class);
+
+		//查询题目组关联的得分信息,只关联获取没初化过的
+		String hql_itemScores = "select s1 from ExerciseItemScore s1,ExerciseItem i where s1.exerciseItemId = i.exerciseId and i.type in(:itemTypes) and s1.groupId=:sourceGroupId and s1.deleteFlag is false and not exists ("
+				+ " select 1 from ExerciseItemScore s2 where s2.deleteFlag is false and s2.exerciseItemId = s1.exerciseItemId  and s2.groupId =:targetGroupId ) order by s1.exerciseItemId";
+		List<ExerciseItemScore> lstItemScores = this.findByComplexHql(hql_itemScores,queryParamMap, ExerciseItemScore.class);
+		Map<String, List<ExerciseItemScore>> scoresMap=  new HashMap<String,List<ExerciseItemScore>>(lstItemScores.size());
+		ExerciseUtils.packageExerciseItemScore(scoresMap, lstItemScores);
+
+		List<ExerciseGroupItemRe> lstTargetItemRe = new ArrayList<ExerciseGroupItemRe>(lstSourceGroupRe.size());
+		List<ExerciseItemScore> lstTargetItemScore = new ArrayList<ExerciseItemScore>(lstSourceGroupRe.size());
+
+		int copyItemSize=0;
+		if(lstSourceGroupRe!=null && lstSourceGroupRe.size()>0){
+			//更新item的顺序号
+			this.bulkUpdate("update ExerciseGroupItemRe r set r.itemOrder=r.itemOrder+"+lstSourceGroupRe.size()
+				+" where r.exerciseGroupId=? and r.itemOrder>? and r.deleteFlag is false ", new Object[]{targetGroup.getGroupId(),startOrder});
+
+			//拷贝item
+			copyItemSize=lstSourceGroupRe.size();
+			int itemOrder = startOrder;
+			ExerciseItemScore objItemScore = null;
+			ExerciseGroupItemRe ojbItemRe=null;
+			for (ExerciseGroupItemRe it : lstSourceGroupRe) {
+				ojbItemRe = new ExerciseGroupItemRe();
+				BeanUtils.copyProperties(it, ojbItemRe);
+				ojbItemRe.setItemOrder(++itemOrder);
+				ojbItemRe.setRelationId(null);
+				ojbItemRe.setExerciseGroupId(targetGroup.getGroupId());
+				lstTargetItemRe.add(ojbItemRe);
+
+				//复制题目分数信息
+				List<ExerciseItemScore> scores = scoresMap.get(it.getExerciseItemId());
+				if(scores!=null && scores.size()>0){
+					for(int i=0;i<scores.size();i++){
+						objItemScore = new ExerciseItemScore();
+						BeanUtils.copyProperties(scores.get(i), objItemScore);
+						objItemScore.setExerciseItemScoreId(null);
+						objItemScore.setGroupId(targetGroup.getGroupId());
+						lstTargetItemScore.add(objItemScore);
+					}
+				}
+			}
+			this.saveOrUpdateAll(lstTargetItemRe);
+			this.saveOrUpdateAll(lstTargetItemScore);
+		}
+		return copyItemSize;
+	}
+
+	@Override
+	public int doCopyExerciseGroupItem(ExerciseGroup sourceGroup, ExerciseGroup targetGroup,String[] exerciseItemIds, int startOrder)
+			throws IllegalAccessException, InvocationTargetException {
+		//参数判断
+		if(sourceGroup==null || targetGroup==null || ArrayUtils.isEmpty(exerciseItemIds)){
+			return  0;
+		}
+
+		//查询题目组与题目关联关系,需要过滤掉在目标题目组中已拷贝过的题目
+		String hql = "select r1 from ExerciseGroupItemRe r1 where r1.exerciseItemId in(:exerciseItemIds) and r1.deleteFlag is false and r1.exerciseGroupId = :sourceGroupId "
+				+ " and not exists (select 1 from ExerciseGroupItemRe r2 where r2.deleteFlag is false and r2.exerciseItemId = r1.exerciseItemId  and r2.exerciseGroupId = :targetGroupId ) order by r1.itemOrder ASC ";
+
+		Map<String,Object> queryParamMap = new HashMap<String,Object>();
+		queryParamMap.put("sourceGroupId", sourceGroup.getGroupId());
+		queryParamMap.put("targetGroupId", targetGroup.getGroupId());
+		queryParamMap.put("exerciseItemIds", exerciseItemIds);
+		List<ExerciseGroupItemRe> lstSourceGroupRe = this.findByComplexHql(hql,queryParamMap,ExerciseGroupItemRe.class);
+
+		//查询题目组关联的得分信息,只关联获取没初化过的
+		String hql_itemScores = "select s1 from ExerciseItemScore s1 where s1.exerciseItemId in (:exerciseItemIds) and  s1.groupId=:sourceGroupId and s1.deleteFlag is false and not exists ("
+				+ " select 1 from ExerciseItemScore s2 where s2.deleteFlag is false and s2.exerciseItemId = s1.exerciseItemId  and s2.groupId =:targetGroupId ) order by s1.exerciseItemId";
+		List<ExerciseItemScore> lstItemScores = this.findByComplexHql(hql_itemScores,queryParamMap, ExerciseItemScore.class);
+		Map<String, List<ExerciseItemScore>> scoresMap=  new HashMap<String,List<ExerciseItemScore>>(lstItemScores.size());
+		ExerciseUtils.packageExerciseItemScore(scoresMap, lstItemScores);
+
+		List<ExerciseGroupItemRe> lstTargetItemRe = new ArrayList<ExerciseGroupItemRe>(lstSourceGroupRe.size());
+		List<ExerciseItemScore> lstTargetItemScore = new ArrayList<ExerciseItemScore>(lstSourceGroupRe.size());
+
+		int copyItemSize=0;
+		if(lstSourceGroupRe!=null && lstSourceGroupRe.size()>0){
+			//更新item的顺序号
+			this.bulkUpdate("update ExerciseGroupItemRe r set r.itemOrder=r.itemOrder+"+lstSourceGroupRe.size()
+				+" where r.exerciseGroupId=? and r.itemOrder>? and r.deleteFlag is false ", new Object[]{targetGroup.getGroupId(),startOrder});
+
+			//拷贝item
+			copyItemSize=lstSourceGroupRe.size();
+			int itemOrder = startOrder;
+			ExerciseItemScore objItemScore = null;
+			ExerciseGroupItemRe ojbItemRe=null;
+			for (ExerciseGroupItemRe it : lstSourceGroupRe) {
+				ojbItemRe = new ExerciseGroupItemRe();
+				BeanUtils.copyProperties(it, ojbItemRe);
+				ojbItemRe.setItemOrder(++itemOrder);
+				ojbItemRe.setRelationId(null);
+				ojbItemRe.setExerciseGroupId(targetGroup.getGroupId());
+				lstTargetItemRe.add(ojbItemRe);
+
+				//复制题目分数信息
+				List<ExerciseItemScore> scores = scoresMap.get(it.getExerciseItemId());
+				if(scores!=null && scores.size()>0){
+					for(int i=0;i<scores.size();i++){
+						objItemScore = new ExerciseItemScore();
+						BeanUtils.copyProperties(scores.get(i), objItemScore);
+						objItemScore.setExerciseItemScoreId(null);
+						objItemScore.setGroupId(targetGroup.getGroupId());
+						lstTargetItemScore.add(objItemScore);
+					}
+				}
+			}
+			this.saveOrUpdateAll(lstTargetItemRe);
+			this.saveOrUpdateAll(lstTargetItemScore);
+		}
+		return copyItemSize;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result doExchangeExamPaperGroupItemOrder(String groupId, String exerciseItemId1, String exerciseItemId2) {
+		String hql = "from ExerciseGroupItemRe where deleteFlag is false and exerciseGroupId = :groupId and exerciseItemId in (:exerciseItemIds)";
+
+		Map<String, Object> queryParams = new HashMap<String, Object>();
+		queryParams.put("groupId", groupId);
+		queryParams.put("exerciseItemIds", new String[] { exerciseItemId1, exerciseItemId2 });
+		List<ExerciseGroupItemRe> lstItemRe = this.findByComplexHql(hql, queryParams, ExerciseGroupItemRe.class);
+		// 交换顺序号
+		int tempOrder = lstItemRe.get(0).getItemOrder();
+		lstItemRe.get(0).setItemOrder(lstItemRe.get(1).getItemOrder());
+		lstItemRe.get(1).setItemOrder(tempOrder);
+		this.saveOrUpdateAll(lstItemRe);
+		this.redisTemplate.delete(groupId);
+		return new Result(true);
+	}
+
+	@Override
+	public Result doPublishExerciseLib(String[] groupIds) {
+		Map<String, Object> pramMap = null;
+		if (groupIds != null && groupIds.length > 0) {
+			pramMap = new HashMap<String, Object>(2);
+			pramMap.put("type", ExerciseGroup.TYPE_EXERCISE_GROUP_LIB);
+			pramMap.put("groupIds", groupIds);
+
+			String hql = "from ExerciseGroup where  type=:type and  groupId in (:groupIds)";
+			List<ExerciseGroup> lstExerciseLibs = this.findByComplexHql(hql, pramMap, ExerciseGroup.class);
+
+			for (ExerciseGroup exerciseGroup : lstExerciseLibs) {
+				if (ExerciseGroup.STATUS_DRAFT != exerciseGroup.getStatus()) {
+					return new Result(false, "只有草稿状态的题库,才能发布。");
+				}
+				//判断题库中是否有题,有题目的题库才能发布
+				if(exerciseGroup.getAllCount()==null || exerciseGroup.getAllCount().intValue()<=0){
+					return new Result(false, "只有已经配置题目的题库,才能发布。");
+				}
+				exerciseGroup.setStatus(ExerciseGroup.STATUS_PUBLISHED);
+				TraceUtils.setUpdateTrace(exerciseGroup);
+				save(exerciseGroup);
+			}
+		} else {
+			return new Result(false, "没有选择要发布的题库。");
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public Result doRevokeExerciseLib(String[] groupIds) {
+		Map<String, Object> pramMap = null;
+		if (groupIds != null && groupIds.length > 0) {
+			pramMap = new HashMap<String, Object>(2);
+			pramMap.put("type", ExerciseGroup.TYPE_EXERCISE_GROUP_LIB);
+			pramMap.put("groupIds", groupIds);
+			String hql = "from ExerciseGroup where  type=:type and  groupId in (:groupIds)";
+			List<ExerciseGroup> lstExerciseLibs = this.findByComplexHql(hql, pramMap, ExerciseGroup.class);
+
+			for (ExerciseGroup exerciseGroup : lstExerciseLibs) {
+				if (ExerciseGroup.STATUS_PUBLISHED != exerciseGroup.getStatus()) {
+					return new Result(false, "只有发布状态的题库,才能撤回。");
+				}
+				exerciseGroup.setStatus(ExerciseGroup.STATUS_DRAFT);
+				TraceUtils.setUpdateTrace(exerciseGroup);
+				save(exerciseGroup);
+			}
+		} else {
+			return new Result(false, "没有选择要撤回的题库。");
+		}
+		return new Result(true);
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public String doCreateRandomExerciseGroup(String newGroupName,short newGroupType,String [] sourceGroupIds,List<ExerciseItemSet> lstExerciseItemSet){
+		Result result = this.doCreateRandomExerciseItem(sourceGroupIds,lstExerciseItemSet );
+
+		if (!result.isSuccess()) {
+			return null;
+		}
+
+		List<Map<String, Object>> lstExerciseItem = (List<Map<String, Object>>) result.getData();
+
+		ExerciseGroup group = new ExerciseGroup();
+		group.setDeleteFlag(false);
+		group.setName(newGroupName);
+		group.setOrderNum(BigInteger.ZERO);
+		group.setType(newGroupType);
+		group.setOrgId(ClientUtils.getOrgId());
+		group.setStatus(ExerciseGroup.STATUS_PUBLISHED);
+		group.setAllCount(BigInteger.valueOf(lstExerciseItem.size()));
+		TraceUtils.setCreateTrace(group);
+		this.save(group);
+
+		int k = 1;
+		for (Map<String, Object> item : lstExerciseItem) {
+			ExerciseGroupItemRe itemRe = new ExerciseGroupItemRe();
+			itemRe.setDocOrder(item.get("docOrder") == null ? 0 : (Integer) item.get("docOrder"));
+			itemRe.setItemOrder(k);
+			itemRe.setExerciseGroupId(group.getGroupId());
+			itemRe.setExerciseItemId((String) item.get("exerciseId"));
+			itemRe.setDeleteFlag(false);
+			k++;
+			this.save(itemRe);
+		}
+		return group.getGroupId();
+	}
+
+
+	/**
+	 * 创建考试题目
+	 *
+	 * @param groupIds
+	 * @return
+	 */
+	private Result doCreateRandomExerciseItem(String[] groupIds, List<ExerciseItemSet> lstExerciseItemSet) {
+		if (groupIds.length == 0 || lstExerciseItemSet == null || lstExerciseItemSet.size() == 0) {
+			return new Result(false, "参数错误");
+		}
+
+		List<Map<String, Object>> lstExerciseItem = new ArrayList<Map<String, Object>>();
+
+		//按照题型(单选题(1),多选题(2),判断题(3), 填空题(8),简答题(4))排序lstExerciseItemSet
+		Collections.sort(lstExerciseItemSet, new Comparator<ExerciseItemSet>(){
+			@Override
+			public int compare(ExerciseItemSet o1, ExerciseItemSet o2) {
+				int type1 = o1.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION?Short.MAX_VALUE:o1.getItemType();
+				int type2 = o2.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION?Short.MAX_VALUE:o2.getItemType();
+				return type1-type2;
+			}
+		});
+
+		String[] paramGroupIds=null;
+		for (ExerciseItemSet itemSet : lstExerciseItemSet) {
+			if(StringUtils.isEmpty(itemSet.getSourceGroupId())){
+				paramGroupIds = groupIds;
+			}else{
+				paramGroupIds = new String[]{itemSet.getSourceGroupId()};
+			}
+
+			List<Map<String, Object>> lstItem = this.findListWithMapByHql(
+					"select i.exerciseId as exerciseId, r.docOrder as docOrder"
+							+ " from ExerciseGroupItemRe r, ExerciseItem i where i.deleteFlag is false and r.deleteFlag is false"
+							+ " and r.exerciseItemId = i.exerciseId and r.exerciseGroupId in (:exerciseGroupId) and type = :type",
+					CollectionUtils.newObjectMap("exerciseGroupId", paramGroupIds, "type", itemSet.getItemType()));
+
+			if (lstItem.size() < itemSet.getItemCount()) {
+				return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数");
+			}
+
+			lstExerciseItem.addAll(this.getRandomList(lstItem, itemSet.getItemCount()));
+		}
+
+		return new Result(true, "", lstExerciseItem);
+	}
+
+	/**
+	 * 随机获取List中若干数据
+	 *
+	 * @param paramList
+	 * @param count
+	 * @return
+	 */
+	private List<Map<String, Object>> getRandomList(List<Map<String, Object>> paramList, int count) {
+		if (paramList.size() < count) {
+			return paramList;
+		}
+		Random random = new Random();
+		List<Integer> tempList = new ArrayList<Integer>();
+		List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
+		int temp = 0;
+		for (int i = 0; i < count; i++) {
+			temp = random.nextInt(paramList.size());// 将产生的随机数作为被抽list的索引
+			if (!tempList.contains(temp)) {
+				tempList.add(temp);
+				newList.add(paramList.get(temp));
+			} else {
+				i--;
+			}
+		}
+		return newList;
+	}
+
+	/**
+	 * 获取题库中各种题型的数量
+	 * @param groupIds
+	 * @return
+	 */
+	@Override
+	public List<ExerciseGroup> queryExerciseGroupItemsStatistic(String[] groupIds){
+		Map<String,ExerciseGroup> resultMap =null;
+		if(groupIds!=null && groupIds.length>0){
+			resultMap = new LinkedHashMap<String,ExerciseGroup>(groupIds.length);
+			String hql = " select g.groupId,g.name,i.type,count(i.type) from ExerciseGroup g,ExerciseGroupItemRe r,ExerciseItem i where g.groupId in (:groupIds) and  "
+					+ " g.groupId=r.exerciseGroupId  and r.exerciseItemId = i.exerciseId and r.deleteFlag is false group by r.exerciseGroupId,i.type";
+			Map<String,Object> param =new HashMap<String,Object>();
+			param.put("groupIds", groupIds);
+			List<Object[]> lstItemStatics = this.findByComplexHql(hql, param, Object[].class);
+
+			ExerciseGroup tempGroup = null;
+			String tempGroupId=null;
+			String tempGroupName=null;
+			short tempType= 0;
+			int tempCount=0;
+			for(int i=0;i<lstItemStatics.size();i++){
+				tempGroupId= (String) lstItemStatics.get(i)[0];
+				tempGroupName=(String) lstItemStatics.get(i)[1];
+				tempType = (Short) lstItemStatics.get(i)[2];
+				tempCount = ((Long) lstItemStatics.get(i)[3]).intValue();
+
+				if(resultMap.get(tempGroupId)==null){
+					tempGroup = new ExerciseGroup();
+					tempGroup.setGroupId(tempGroupId);
+					tempGroup.setName(tempGroupName);
+					resultMap.put(tempGroupId, tempGroup);
+				}else{
+					tempGroup = resultMap.get(tempGroupId);
+				}
+
+				if(tempType==ExerciseItem.TYPE_SINGLE_SELECT){
+					tempGroup.setSingleSelectCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_MULTI_SELECT){
+					tempGroup.setMultiSelectCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_TRUE_OR_FALSE){
+					tempGroup.setJudgeCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_ESSAY_QUESTION){
+					tempGroup.setQuestionCount(tempCount);
+				}else if(tempType==ExerciseItem.TYPE_FILL_BLANKS){
+					tempGroup.setFillBlanksCount(tempCount);
+				}
+			}
+		}
+		return  new ArrayList<ExerciseGroup>( resultMap.values());
+	}
+
+
+	 @Override
+	 public String [] queryGroupNamesByIds(String[] groupIds){
+	    	if(groupIds!=null && groupIds.length==0){
+	    		return null;
+	    	}
+
+	    	String [] groupNames = null;
+
+	    	List<Map<String,Object>> lstResult= this.findListWithMapByHql("select g.groupId as groupId ,g.name as groupName from ExerciseGroup g where g.groupId in (:groupIds) ",
+	    			CollectionUtils.newObjectMap("groupIds",groupIds));
+
+	    	if(lstResult!=null && lstResult.size()==groupIds.length){
+	    		Map<String,String> map= new HashMap<String,String>(lstResult.size());
+	    		groupNames =new String[groupIds.length];
+
+	    		for(Map<String,Object> item:lstResult){
+	        		map.put((String)item.get("groupId"), (String)item.get("groupName"));
+	        	}
+
+	    		for(int i=0;i<groupIds.length;i++){
+	    			groupNames[i]= map.get(groupIds[i]);
+	    		}
+	    	}
+
+	    	return groupNames;
+	    }
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java
new file mode 100644
index 0000000..0a0a36e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java
@@ -0,0 +1,1265 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.querydsl.core.types.Expression;
+import com.querydsl.core.types.dsl.CaseBuilder;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.score.model.view.QHomeworkScoreV;
+import com.qxueyou.scc.base.dao.CommonRedisTemplate;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.DateTimeUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog;
+import com.qxueyou.scc.exercise.model.ExerciseExamReClass;
+import com.qxueyou.scc.exercise.model.ExerciseExamReGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseResultV;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.model.QExerciseInfo;
+import com.qxueyou.scc.exercise.service.IExerciseCompleteService;
+import com.qxueyou.scc.exercise.service.IExerciseGroupService;
+import com.qxueyou.scc.exercise.service.IExerciseInfoService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.service.IMediaVideoService;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.model.HandoutConverTask;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.school.service.IHandoutService;
+import com.qxueyou.scc.teach.res.model.ResFile;
+
+/**
+ * 考试
+ * 
+ * @author lihanqi
+ *
+ */
+@Service
+public class ExerciseInfoService extends CommonAppService implements IExerciseInfoService {
+	private final Logger log = LogManager.getLogger(ExerciseInfoService.class);
+
+	private final String[] EXAM_TYPES = new String[] { "A", "B", "C", "D" };
+
+	/** 练习V2.0版本接口service */
+	@Autowired
+	private IExerciseVerService exerciseVerService;
+
+	@Autowired
+	CommonRedisTemplate commonRedisTemplate;
+
+	@Autowired
+	IOrgTextService orgTextService;
+
+	@Autowired
+	IMediaVideoService mediaVideoService;
+
+	@Autowired
+	IHandoutService handoutService;
+	
+	@Autowired
+	IMsgInfoService msgInfoService;
+	
+	@Autowired
+	IExerciseCompleteService exerciseCompleteService;
+	
+	@Autowired
+	IExerciseGroupService exerciseGroupService;
+	
+	@Override
+	public List<ExerciseInfo> list(String keyword,String classId,Short status,Integer pageSize,Integer pageNum) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExerciseInfo e where e.name like ? and e.createId =? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+		
+		if(status!=null){
+			hql.append(" and e.status = ? ");
+			params.add(status);
+		}
+		
+		if(StringUtils.isNotEmpty(classId)){
+			hql.append(" and exists(select 1 from ExerciseExamReClass r where e.exerciseInfoId=r.examId and r.classId = ? and r.deleteFlag is false)");
+			params.add(classId);
+		}
+		
+		hql.append(" and e.deleteFlag is false order by e.createTime desc");
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, ExerciseInfo.class);
+	}
+	
+	@Override
+	public int listCount(String keyword,String classId, Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExerciseInfo e where e.name like ? and e.createId =? ");
+		List<Object> params = CollectionUtils.newList('%' + keyword.trim() + '%',ClientUtils.getUserId());
+		
+		if(status!=null){
+			hql.append(" and e.status = ? ");
+			params.add(status);
+		}
+		
+		if(StringUtils.isNotEmpty(classId)){
+			hql.append(" and exists(select 1 from ExerciseExamReClass r where e.exerciseInfoId=r.examId and r.classId = ? and r.deleteFlag is false)");
+			params.add(classId);
+		}
+		
+		hql.append(" and e.deleteFlag is false ");
+		return findCount(hql.toString(),params);
+	}
+	
+	/**
+	 * 保存作业
+	 * 
+	 * @return
+	 */
+	public Result insertExerciseInfo(ExerciseInfo exerciseInfo) {
+		String[] classIds = QBeanUtils.listPropertyVal(exerciseInfo.getReClasses(), "classId").toArray(new String[exerciseInfo.getReClasses().size()]);
+		
+		String exerciseInfoId = UUIDUtils.generateUUID().replace("-", "");
+		exerciseInfo.setExerciseInfoId(exerciseInfoId);
+		exerciseInfo.setOrgId(ClientUtils.getOrgId());
+		exerciseInfo.setClassCount(classIds == null ? 0 : classIds.length);
+		exerciseInfo.setClassCount(exerciseInfo.getReClasses().size());
+		TraceUtils.setCreateTrace(exerciseInfo);
+		this.save(exerciseInfo);
+
+		if (exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_ANSWER) {
+			// 保存题目类型
+			List<ExerciseItemSet> lstExerciseItemSet = exerciseInfo.getExerciseItemSets();
+			this.saveExerciseItemSet(exerciseInfoId,lstExerciseItemSet);
+			
+			//生成作业题目信息
+			String[] sourceGroupIds = QBeanUtils.listPropertyVal(exerciseInfo.getReGroups(), "groupId").toArray(new String[exerciseInfo.getReGroups().size()]);
+			
+			String newGroupId = this.exerciseGroupService.doCreateRandomExerciseGroup(
+					exerciseInfo.getName() + "-作业",ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,lstExerciseItemSet);
+				
+			if(StringUtils.isEmpty(newGroupId)){
+				return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数",exerciseInfoId);
+			}
+			
+			this.saveExerciseExamReGroup(exerciseInfoId,new String[]{newGroupId},EXAM_TYPES[0],ExerciseExamReGroup.GROUP_TYPE_EXAM);
+			
+			// 保存关联题库信息
+			this.saveExerciseExamReGroup(exerciseInfoId,sourceGroupIds,null,ExerciseExamReGroup.GROUP_TYPE_SOURCE);
+		}
+		
+		// 保存关联班级
+		this.saveExerciseExamReClass(exerciseInfoId, classIds);
+		
+		return new Result(true, "", exerciseInfoId);
+	}
+
+	/**
+	 * 修改练习
+	 * 
+	 * @return
+	 */
+	public Result updateExerciseInfo(ExerciseInfo exerciseInfo) {
+		String[] classIds = QBeanUtils.listPropertyVal(exerciseInfo.getReClasses(), "classId").toArray(new String[exerciseInfo.getReClasses().size()]);
+		
+		String exerciseInfoId = exerciseInfo.getExerciseInfoId();
+		
+		ExerciseInfo newExerciseInfo = this.read(ExerciseInfo.class, exerciseInfoId);
+		newExerciseInfo.setScore(exerciseInfo.getScore());
+		newExerciseInfo.setClassCount(classIds == null ? 0 : classIds.length);
+		newExerciseInfo.setEndTime(exerciseInfo.getEndTime());
+		newExerciseInfo.setName(exerciseInfo.getName());
+		newExerciseInfo.setDate(exerciseInfo.getDate());
+		newExerciseInfo.setStartTime(exerciseInfo.getStartTime());
+		newExerciseInfo.setSubjectId(exerciseInfo.getSubjectId());
+		newExerciseInfo.setRemind(exerciseInfo.getRemind());
+		newExerciseInfo.setPassingScore(exerciseInfo.getPassingScore());
+		newExerciseInfo.setCommitUploadType(exerciseInfo.getCommitUploadType());
+		TraceUtils.setUpdateTrace(newExerciseInfo);
+		this.save(newExerciseInfo);
+		
+		//清理旧关系数据
+		this.doClearExerciseExamReData(exerciseInfoId);
+		
+		// 答题作业默认按照统一卷生成作业题目
+		
+		if (newExerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_ANSWER) {
+			
+			// 保存题目类型
+			List<ExerciseItemSet> lstExerciseItemSet = exerciseInfo.getExerciseItemSets();
+			
+			saveExerciseItemSet(exerciseInfoId,lstExerciseItemSet);
+			
+			//生成作业题目信息
+			String[] groupIds = QBeanUtils.listPropertyVal(exerciseInfo.getReGroups(), "groupId").toArray(new String[exerciseInfo.getReGroups().size()]);
+			String newGroupId = this.exerciseGroupService.doCreateRandomExerciseGroup(
+						exerciseInfo.getName() + "-作业",ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,groupIds, lstExerciseItemSet);
+				
+			if(StringUtils.isEmpty(newGroupId)){
+				return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数");
+			}
+			
+			this.saveExerciseExamReGroup(exerciseInfoId,new String[]{newGroupId},EXAM_TYPES[0],ExerciseExamReGroup.GROUP_TYPE_EXAM);
+			
+			// 保存关联题库信息
+			this.saveExerciseExamReGroup(exerciseInfoId,groupIds,null,ExerciseExamReGroup.GROUP_TYPE_SOURCE);
+			
+		
+		}
+
+		// 保存关联班级
+		this.saveExerciseExamReClass(exerciseInfoId, classIds);
+		
+		return new Result(true, "", exerciseInfoId);
+	}
+	
+	//清除之前的练习关联关系数据
+	private void doClearExerciseExamReData(String exerciseInfoId){
+		this.bulkUpdate("update ExerciseExamReGroup set deleteFlag = 1 where examId = ?",new Object[]{exerciseInfoId});
+		this.bulkUpdate("update ExerciseExamReClass set deleteFlag = 1 where examId = ?",new Object[] {exerciseInfoId});
+		this.bulkUpdate("update ExerciseItemSet set deleteFlag = 1 where exerciseInfoId = ?",new Object[]{exerciseInfoId});
+	}
+	
+	private void saveExerciseExamReClass(String exerciseInfoId,String[] classIds){
+		ExerciseExamReClass reClass = null;
+		for (String classId : classIds) {
+			reClass = new ExerciseExamReClass();
+			reClass.setClassId(classId);
+			reClass.setDeleteFlag(false);
+			reClass.setExamId(exerciseInfoId);
+			TraceUtils.setCreateTrace(reClass);
+			this.save(reClass);	
+		}
+	}
+	
+	private void saveExerciseExamReGroup(String exerciseInfoId, String [] groupIds,String examType,short reType){
+		ExerciseExamReGroup reGroup = null;
+		for (String groupId : groupIds) {
+			reGroup = new ExerciseExamReGroup();
+			reGroup.setGroupId(groupId);
+			reGroup.setDeleteFlag(false);
+			reGroup.setExamType(examType);
+			reGroup.setType(reType);
+			reGroup.setExamId(exerciseInfoId);
+			TraceUtils.setCreateTrace(reGroup);
+			this.save(reGroup);
+		}		
+	}
+	
+	private void saveExerciseItemSet(String exerciseInfoId,List<ExerciseItemSet> lstExerciseItemSet){
+		for (ExerciseItemSet itemSet : lstExerciseItemSet) {
+			itemSet.setExerciseInfoId(exerciseInfoId);
+			TraceUtils.setCreateTrace(itemSet);
+			this.save(itemSet);
+		}
+	}
+
+	/**
+	 * 删除作业
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	@Override
+	public Result deleteExerciseInfo(String exerciseInfoIds) {
+		return bulkUpdateInLoop("update ExerciseInfo set deleteFlag = true where exerciseInfoId=?",exerciseInfoIds.split(","));
+	}
+
+	@Override
+	public String queryExerciseInfoRelatedGroupId(String exerciseInfoId) {
+		return this.findUnique("select groupId from ExerciseExamReGroup where examId=? and type=? and deleteFlag is false ", 
+								CollectionUtils.newList(exerciseInfoId, ExerciseExamReGroup.GROUP_TYPE_EXAM),String.class);
+	}
+	
+	
+	@Override
+	public List<ExerciseItemSet> queryExerciseItemSet(String exerciseInfoId){
+		return this.find("from ExerciseItemSet where exerciseInfoId=? and deleteFlag is false order by itemType ASC", 
+				CollectionUtils.newList(exerciseInfoId), ExerciseItemSet.class);
+	}
+	
+	@Override
+	public List<ExerciseResultV> queryStuExerciselist(String keyword,String exerciseInfoId,String userId,String subjectId,Short status,Integer pageSize,Integer pageNum) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExerciseResultV where exerciseStatus=?");
+		List<Object> params = CollectionUtils.newList(ExerciseInfo.EXERCISE_STATUS_PUBLISHED);
+		
+		if(!StringUtils.isEmpty(userId)){
+			hql.append(" and userId=? ");
+			params.add(userId);	
+		}
+		
+		if(!StringUtils.isEmpty(exerciseInfoId)){
+			hql.append(" and id.exerciseInfoId=?");
+			params.add(exerciseInfoId);	
+		}
+		
+		if(!StringUtils.isEmpty(keyword)){
+			hql.append(" and studentName like ?");
+			params.add("%" + keyword.trim() + "%");	
+		}
+		
+		if(!StringUtils.isEmpty(subjectId)){
+			hql.append(" and subjectId=?");
+			params.add(subjectId);
+		}
+		
+		//默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交
+		if(status!=null){
+			Date nowTime = new Date();
+			if(status==0){
+				hql.append(" and startTime<=? and endTime>? and (completeStatus=? or completeStatus is null)");
+				params.add(nowTime);
+				params.add(nowTime);
+				params.add(ExerciseCompleteInfo.STATUS_DRAFT);
+			}else if (status==1){
+				hql.append(" and  completeStatus=? ");
+				params.add(ExerciseCompleteInfo.STATUS_COMMIT);
+			}else if (status==2){
+				hql.append(" and  completeStatus=? ");
+				params.add(ExerciseCompleteInfo.STATUS_CHECKED);
+			}else if (status==3){
+				hql.append(" and  completeStatus=? ");
+				params.add(ExerciseCompleteInfo.STATUS_REDO);
+			}else if (status==4){
+				hql.append(" and endTime<=? and (completeStatus=? or completeStatus is null)");
+				params.add(nowTime);
+				params.add(ExerciseCompleteInfo.STATUS_DRAFT);
+			}
+		}
+		
+		hql.append(" order by startTime desc");
+		
+		return this.findList(hql.toString(),new Pager(pageSize, pageNum),params, ExerciseResultV.class);
+	}
+	
+	@Override
+	public int queryStuExerciseListCount(String keyword,String exerciseInfoId,String userId,String subjectId,Short status) {
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from ExerciseResultV where exerciseStatus=?");
+		List<Object> params = CollectionUtils.newList(ExerciseInfo.EXERCISE_STATUS_PUBLISHED);
+		
+		if(!StringUtils.isEmpty(userId)){
+			hql.append(" and userId=? ");
+			params.add(userId);	
+		}
+		
+		if(!StringUtils.isEmpty(exerciseInfoId)){
+			hql.append(" and id.exerciseInfoId=?");
+			params.add(exerciseInfoId);	
+		}
+		
+		if(!StringUtils.isEmpty(keyword)){
+			hql.append(" and studentName like ?");
+			params.add("%" + keyword.trim() + "%");
+		}
+		
+		if(!StringUtils.isEmpty(subjectId)){
+			hql.append(" and subjectId=?");
+			params.add(subjectId);
+		}
+		
+		//默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交
+		if(status!=null){
+			Date nowTime = new Date();
+			if(status==0){
+				hql.append(" and startTime<=? and endTime>? and (completeStatus=? or completeStatus is null)");
+				params.add(nowTime);
+				params.add(nowTime);
+				params.add(ExerciseCompleteInfo.STATUS_DRAFT);
+			}else if (status==1){
+				hql.append(" and  completeStatus=? ");
+				params.add(ExerciseCompleteInfo.STATUS_COMMIT);
+			}else if (status==2){
+				hql.append(" and  completeStatus=? ");
+				params.add(ExerciseCompleteInfo.STATUS_CHECKED);
+			}else if (status==3){
+				hql.append(" and  completeStatus=? ");
+				params.add(ExerciseCompleteInfo.STATUS_REDO);
+			}else if (status==4){
+				hql.append(" and endTime<=? and (completeStatus=? or completeStatus is null)");
+				params.add(nowTime);
+				params.add(ExerciseCompleteInfo.STATUS_DRAFT);
+			}
+		}
+		
+		return  this.findCount(hql.toString(), params); 
+	}
+	
+	/**
+	 * 初始化平均成绩和最高成绩
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> initScore(String exerciseInfoId) {
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, exerciseInfoId);
+		Map<String, Object> map = new HashMap<String, Object>(1);
+		map.put("groupName", exerciseInfo.getName());
+		return map;
+	}
+
+	/**
+	 * 题目得分详情
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public List<ExerciseItemStatistics> itemDetailList(String examId) {
+		String hql_itemStatis = "from ExerciseItemStatistics where deleteFlag is false and groupId in "
+				+ "( select c.groupId from ExerciseExamReGroup c where c.examId = ? and c.type = ? and c.deleteFlag is false )";
+		List<ExerciseItemStatistics> itemStatisLst = this.find(hql_itemStatis,
+				CollectionUtils.newList(examId, ExerciseExamReGroup.GROUP_TYPE_EXAM), ExerciseItemStatistics.class);
+
+		if (itemStatisLst.isEmpty()) {
+			return new ArrayList<ExerciseItemStatistics>();
+		}
+
+		// 默认章节练习
+		String hql = "select item from ExerciseItem item,ExerciseGroupItemRe re where re.exerciseGroupId in("
+				+ " select c.groupId from ExerciseExamReGroup c where c.examId = ? and c.type = ? and c.deleteFlag is false)"
+				+ "and re.exerciseItemId=item.exerciseId and item.deleteFlag is false "
+				+ "and re.deleteFlag is false order by re.itemOrder ";
+
+		// 查询当前组的所有题目
+		List<ExerciseItem> itemAllLst = this.find(hql,
+				CollectionUtils.newList(examId, ExerciseExamReGroup.GROUP_TYPE_EXAM), ExerciseItem.class);
+
+		if (itemAllLst.isEmpty()) {
+			return new ArrayList<ExerciseItemStatistics>();
+		}
+
+		// 同步编号
+		List<ExerciseItemStatistics> listResult = new ArrayList<ExerciseItemStatistics>(itemStatisLst.size());
+		ExerciseItemStatistics obj = null;
+		for (int j = 0; j < itemAllLst.size(); j++) {
+			for (int i = 0; i < itemStatisLst.size(); i++) {
+				obj = itemStatisLst.get(i);
+				if (obj.getExerciseItemId().equals(itemAllLst.get(j).getExerciseId())) {
+
+					obj.setItemNo(j + 1);
+					obj.setClassAccuracyShow(obj.getClassAccuracy() + "%");
+					obj.setOrgAccuracyShow(obj.getOrgAccuracy() + "%");
+
+					// 给类型赋值
+					setExerItemTypeNewName(obj);
+					listResult.add(obj);
+					break;
+				}
+			}
+		}
+
+		return listResult;
+	}
+
+	private void setExerItemTypeNewName(ExerciseItemStatistics obj) {
+		// 判断类型文字显示
+		if (obj.getExerciseItemType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+			obj.setItemTypeName("单选题");
+		} else if (obj.getExerciseItemType() == ExerciseItem.TYPE_MULTI_SELECT) {
+			obj.setItemTypeName("多选题");
+		} else if (obj.getExerciseItemType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+			obj.setItemTypeName("判断题");
+		} else if (obj.getExerciseItemType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+			obj.setItemTypeName("问答题");
+		}
+	}
+
+	/**
+	 * 开始题目作业
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	public Result doStartExerciseInfo(String exerciseInfoId, String classId, String studentUserId) {
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, exerciseInfoId);
+		ClsClass clsClass = this.read(ClsClass.class, classId);
+		return exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_ANSWER?
+				this.doStartAnswerExercise(exerciseInfo, clsClass, studentUserId)
+				:
+				this.doStartOtherExercise(exerciseInfo, clsClass, studentUserId);
+		
+	}
+
+	/**
+	 * 开始题目作业
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	private Result doStartAnswerExercise(ExerciseInfo exerciseInfo, ClsClass clsClass, String studentUserId) {
+		Result result = new Result(true);
+		// 正在做题数
+		ExerciseRecord record = this.findUnique(
+				"select r from ExerciseRecord r where r.deleteFlag is false and r.userId = ? and r.exerciseGroupId in"
+						+ " (select g.groupId from ExerciseExamReGroup g where g.examId = ? and g.deleteFlag is false and g.type = ?)",
+				CollectionUtils.newList(StringUtils.isNotEmpty(studentUserId) ? studentUserId : ClientUtils.getUserId(),
+						exerciseInfo.getExerciseInfoId(), ExerciseExamReGroup.GROUP_TYPE_EXAM),ExerciseRecord.class);
+
+		if (record == null) {
+			// 获取分组练习
+			String groupId = this.findUnique(
+					"select g.groupId from ExerciseExamReGroup g where g.examId = ? and g.deleteFlag is false and g.type = ?",
+					CollectionUtils.newList(exerciseInfo.getExerciseInfoId(), ExerciseExamReGroup.GROUP_TYPE_EXAM),
+					String.class);
+
+			if (StringUtils.isEmpty(groupId)) {
+				return new Result(false, "开始作业获取题目失败");
+			}
+
+			Map<String, Object> recordResult = this.insertExerRecord(exerciseInfo,groupId);
+
+			// 生成做题记录
+			record = (ExerciseRecord) recordResult.get("record");
+		}
+
+		// 获取结果
+		ExerItemResponseData responseData = exerciseVerService.queryExerItemResponseData(record.getExerciseGroupId(),
+				record.getRecordId(), true, true, ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM);
+		responseData.setExerciseRecordId(record.getRecordId());
+		responseData.setExerciseGroupId(record.getExerciseGroupId());
+		responseData.setStatus(record.getStatus());
+		result.addData("exerItem", responseData);
+
+		// 如果已提交就查询用户答案信息
+		// if (Integer.valueOf(record.getStatus()) > 0) {
+		result.addData("userAnswers", this.findListWithMapByHql(
+				"select u.answerUId as answerUId, u.exerciseItemId as exerciseId,u.answer as answer,u.correct as correct,i.type as type,u.teacherScore as teacherScore"
+						+ "	from ExerciseItemAnswerU u,ExerciseItem i  where u.exerciseItemId = i.exerciseId and u.exerciseRecordId=:recordId  and u.deleteFlag is false order by u.createTime asc ",
+				CollectionUtils.newObjectMap("recordId", record.getRecordId())));
+
+		// 查询学生考试总分
+		result.addData("studentScore", record.getScore());
+		result.addData("objStudentScore", record.getObjScore()==null?BigDecimal.ZERO:record.getObjScore());
+		
+		ExerciseCompleteInfo completeInfo = doGetOrCreateExerciseCompleteInfo(exerciseInfo.getExerciseInfoId(),clsClass.getClassId() , studentUserId);
+		
+		if(completeInfo!=null){
+			result.addData("exerciseCompleteId", completeInfo.getExerciseCompleteId());
+		}
+		
+		result.addData("itemSet", exerciseInfo.getExerciseItemSets());
+
+		return result;
+	}
+	
+	private ExerciseCompleteInfo doGetOrCreateExerciseCompleteInfo(String exerciseInfoId,String classId,String studentUserId){
+		  // 判断是否已经初始化
+			ExerciseCompleteInfo completeInfo = exerciseCompleteService.queryCompleteInfo(exerciseInfoId,classId , studentUserId);
+			
+			if(completeInfo==null){
+				String hql = " select s.studentId as studentId,s.studentNo as studentNo,s.userId as studentUserId,s.name as studentName,"
+						+ " c.classId as classId,c.name as className from StuStudent s ,ClsClass c,ExerciseExamReClass r  "
+						+ " where r.examId=:exerciseInfoId and r.classId =c.classId and c.classId= s.classId and s.userId=:userId"
+						+ " and s.classId=:classId and r.examId=:exerciseInfoId  and r.deleteFlag is false and s.deleteFlag is false and c.deleteFlag is false";
+			
+				List<Map<String, Object>> resultMap = this.findListWithMapByHql(hql, 
+					CollectionUtils.newObjectMap("userId",studentUserId,"classId",classId,"exerciseInfoId",exerciseInfoId));
+				
+				if(resultMap!=null && resultMap.get(0)!=null){
+					Map<String, Object> map = resultMap.get(0);
+					
+					completeInfo = new ExerciseCompleteInfo();
+					TraceUtils.setCreateTrace(completeInfo);
+					completeInfo.setStudentId((String) map.get("studentId"));
+					completeInfo.setStudentNo((String) map.get("studentNo"));
+					completeInfo.setStudentUserId((String) map.get("studentUserId"));
+					completeInfo.setStudentUserName((String) map.get("studentName"));
+					completeInfo.setClassId((String) map.get("classId"));
+					completeInfo.setClassName((String) map.get("className"));
+					completeInfo.setExerciseInfoId(exerciseInfoId);
+					completeInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_DRAFT);
+					this.save(completeInfo);
+				}
+			}
+			
+			return completeInfo;
+	}
+	
+	private Map<String,Object>  insertExerRecord(ExerciseInfo exerciseInfo,String groupId) {
+		ExerciseRecord record = new ExerciseRecord();
+		record.setDeleteFlag(false);
+		record.setExerciseGroupId(groupId);
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		record.setScore(BigDecimal.ZERO);
+		record.setUserId(ClientUtils.getUserId());
+		record.setOrgId(ClientUtils.getOrgId());
+		TraceUtils.setCreateTrace(record);
+		
+		//获取考试题目统计信息,并保存
+		Map<String,Object> result = this.queryItemStatics(exerciseInfo.getExerciseItemSets());
+		record.setTotalScore(new BigDecimal(exerciseInfo.getScore()));
+		record.setPassingScore(exerciseInfo.getPassingScore());
+		record.setSubTotalScore((BigDecimal)result.get("subTotalScore"));
+		record.setObjTotalScore((BigDecimal)result.get("objTotalScore"));
+		record.setSubItemCount((int)result.get("subItemCount"));
+		record.setObjItemCount((int)result.get("objItemCount"));
+		
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+		
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put("exerciseRecordId", record.getRecordId());
+		resultMap.put("updateTime", DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		resultMap.put("exerciseGroupId", groupId);
+		resultMap.put("record", record);
+		
+		return resultMap;
+	}
+	
+	private Map<String,Object> queryItemStatics(List<ExerciseItemSet> itemSets){
+		float subTotalScore = 0,objTotalScore=0;
+		int subItemCount=0,objItemCount=0;
+		
+		//如果是随机组卷
+		if(itemSets!=null && itemSets.size()>0){
+			for(ExerciseItemSet s:itemSets){
+				if(s.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION){
+					subTotalScore+= s.getItemCount()*s.getRightScore();
+					subItemCount+=s.getItemCount();
+				}else{
+					objTotalScore += s.getItemCount()*s.getRightScore();
+					objItemCount  += s.getItemCount();
+				}
+			}
+		}
+			
+		Map<String,Object> result = new HashMap<String,Object>();
+		result.put("subTotalScore", new BigDecimal(subTotalScore));
+		result.put("objTotalScore", new BigDecimal(objTotalScore));
+		result.put("subItemCount", subItemCount);
+		result.put("objItemCount", objItemCount);
+		
+		return result;
+	}	
+
+	/**
+	 * 开始文件和写作作业
+	 * 
+	 * @param examId
+	 * @return
+	 */
+	private Result doStartOtherExercise(ExerciseInfo exerciseInfo, ClsClass clsClass, String studentUserId) {
+		// 查询是否已经存在做题记录,如果不存在需要新建
+		ExerciseCompleteInfo exerciseCompleteInfo = exerciseCompleteService.doCheckAndCreateExerciseCompleteInfo(
+				exerciseInfo.getExerciseInfoId(), clsClass.getClassId(), studentUserId);
+		
+		exerciseCompleteInfo.setCommitUploadType(exerciseInfo.getCommitUploadType());
+		exerciseCompleteInfo.setRemind(exerciseInfo.getRemind());
+		exerciseCompleteInfo.setExerciseType(exerciseInfo.getType());
+		exerciseCompleteInfo.setExerciseName(exerciseInfo.getName());
+		exerciseCompleteInfo.setContent(exerciseCompleteInfo.getUploadDesc());
+
+		if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_VIDEO
+				|| exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_AUDIO) {
+			if (StringUtils.isNotEmpty(exerciseCompleteInfo.getTargetObjectId())) {
+				MediaVideo video = this.read(MediaVideo.class, exerciseCompleteInfo.getTargetObjectId());
+				if (video.getStatus() == MediaVideo.STATUS_DRAFT) {
+					exerciseCompleteInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_OK);
+					exerciseCompleteInfo
+							.setPreviewPath(StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD()
+									: StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD()
+											: video.getAndroidLD());
+				} else {
+					exerciseCompleteInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_NO);
+				}
+			}
+		}
+
+		if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_DOC) {
+			if (StringUtils.isNotEmpty(exerciseCompleteInfo.getTargetObjectId())) {
+				SchHandout handout = this.read(SchHandout.class, exerciseCompleteInfo.getTargetObjectId());
+				if (handout.getStatus() == SchHandout.STATUS_DRAFT) {
+					exerciseCompleteInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_OK);
+					exerciseCompleteInfo.setPreviewPath(handout.getFullPath());
+				} else {
+					exerciseCompleteInfo.setTransStatus(ExerciseCompleteInfo.PREVIEW_STATUS_NO);
+				}
+			}
+		}
+
+		if (exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_WRITING && StringUtils.isNotEmpty(exerciseCompleteInfo.getTargetObjectId())) {
+			exerciseCompleteInfo.setContent(this.orgTextService
+					.getOrgText(exerciseCompleteInfo.getExerciseCompleteId(), OrgText.TABLE_WRITING_EXERCISE)
+					.getContent());
+		}
+		
+		exerciseCompleteInfo.setTotalScore(exerciseInfo.getScore());
+
+		return new Result(true,"",CollectionUtils.newObjectMap("exerciseCompleteInfo", exerciseCompleteInfo));
+	}
+
+	@Override
+	public Result doSubmitOtherExerciseInfo(String exerciseCompleteInfoId, String content, String fileId,
+			String filePath, short submitType) {
+		Result result = new Result(true);
+		ExerciseCompleteInfo exerciseCompleteInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteInfoId);
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, exerciseCompleteInfo.getExerciseInfoId());
+		
+		if (exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_WRITING) {
+			result = this.doSubmitWritingExerciseInfo(exerciseCompleteInfoId, content, submitType);
+		} else if (exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_FILE) {
+			result = this.doSubmitFileExerciseInfo(exerciseCompleteInfoId, content, fileId, filePath, submitType);
+		}
+
+		return result;
+	}
+
+	/**
+	 * 提交写作作业
+	 * 
+	 * @param exerciseInfoId
+	 * @param content
+	 * @param submitType
+	 * @return
+	 */
+	private Result doSubmitWritingExerciseInfo(String exerciseCompleteInfoId, String content, short submitType) {
+		ExerciseCompleteInfo exerciseCompleteInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteInfoId);
+		// 保存到orgtext
+		if (StringUtils.isEmpty(exerciseCompleteInfo.getTargetObjectId())) {
+			Result result =  orgTextService.doInsertOrgText(exerciseCompleteInfoId, OrgText.TABLE_WRITING_EXERCISE, content);
+			exerciseCompleteInfo.setTargetObjectId((String)result.getData("orgTextId"));
+		} else {
+			OrgText orgText = orgTextService.getOrgText(exerciseCompleteInfoId, OrgText.TABLE_WRITING_EXERCISE);
+			orgText.setContent(content);
+			this.save(orgText);
+		}
+
+		if (submitType > 0) {
+			exerciseCompleteInfo.setSubmitTime(new Date());
+			exerciseCompleteInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_COMMIT);
+		}
+	
+		this.save(exerciseCompleteInfo);
+		return new Result(true);
+	}
+
+	/**
+	 * 提交文件作业
+	 * 
+	 * @param exerciseCompleteInfoId
+	 * @param content
+	 * @param fileId
+	 * @param filePath
+	 * @param submitType
+	 * @return
+	 */
+	private Result doSubmitFileExerciseInfo(String exerciseCompleteInfoId, String content, String fileId,
+			String filePath, short submitType) {
+		ExerciseCompleteInfo exerciseCompleteInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteInfoId);
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, exerciseCompleteInfo.getExerciseInfoId());
+
+		String targetObjectId = null;
+
+		if (submitType > 0) {
+			exerciseCompleteInfo.setSubmitTime(new Date());
+			exerciseCompleteInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_COMMIT);
+		}
+		TraceUtils.setUpdateTrace(exerciseCompleteInfo);
+
+		if (StringUtils.isNotEmpty(fileId)) {
+			ResFile resFile = this.read(ResFile.class, fileId);
+			exerciseCompleteInfo.setFileId(fileId);
+			exerciseCompleteInfo.setFilePath(filePath);
+			exerciseCompleteInfo.setOrgiFileName(resFile.getFileName());
+		}
+
+		exerciseCompleteInfo.setUploadDesc(content);
+
+		// 判断作业提交类型,不同提交类型保存到不同地方
+		if (StringUtils.isNotEmpty(fileId)) {
+			String fileType = filePath.substring(filePath.lastIndexOf("."));
+			String fileName = filePath.substring(filePath.lastIndexOf("/"));
+
+			if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_VIDEO
+					|| exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_AUDIO) {
+				if (!exerciseCompleteInfo.getFilePath().equals("filePath")) {
+					MediaVideo mediaVideo = new MediaVideo();
+					TraceUtils.setCreateTrace(mediaVideo);
+					mediaVideo.setUrl(filePath);
+					mediaVideo.setOrigUrl(filePath);
+					mediaVideo.setName(fileName);
+					mediaVideo.setFormat(fileType);
+					if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_VIDEO) {
+						mediaVideo.setType(MediaVideo.MEDIA_VIDEO);
+					} else if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_AUDIO) {
+						mediaVideo.setType(MediaVideo.MEDIA_AUDIO);
+					}
+					if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_AUDIO) {
+						mediaVideo.setStatus(MediaVideo.STATUS_DRAFT);
+					} else {
+						mediaVideo.setStatus(MediaVideo.STATUS_LINEUP);
+					}
+					this.save(mediaVideo);
+					targetObjectId = mediaVideo.getVideoId();
+					mediaVideoService.insertVideoConverTask(mediaVideo);
+				}
+
+			} else if (exerciseInfo.getCommitUploadType() == ExerciseInfo.EXERCISE_FILE_COMMIT_DOC) {
+				if (!exerciseCompleteInfo.getFilePath().equals("filePath")) {
+					SchHandout handout = new SchHandout();
+					handout.setClassId(exerciseCompleteInfo.getClassId());
+					handout.setName(fileName);
+					handout.setStatus(SchHandout.STATUS_PROCESSING);
+					handout.setFullPath(filePath);
+					handout.setOrigPath(filePath);
+					TraceUtils.setCreateTrace(handout);
+					this.save(handout);
+					targetObjectId = handout.getHandoutId();
+
+					if (!"PDF".equals(fileType.toUpperCase())) {
+						// 添加到讲义转码队列表
+						HandoutConverTask task = new HandoutConverTask();
+						task.setCreateTime(new Date(System.currentTimeMillis()));
+						task.setUpdateTime(new Date(System.currentTimeMillis()));
+						task.setDeleteFlag(false);
+						task.setHandoutId(handout.getHandoutId());
+						task.setHandoutUrl(filePath);
+						task.setStatus(0);
+						this.save(task);
+					}
+				}
+			}
+		}
+
+		if (StringUtils.isNotEmpty(targetObjectId)) {
+			exerciseCompleteInfo.setTargetObjectId(targetObjectId);
+		}
+		this.save(exerciseCompleteInfo);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result doSubmitAnswerExerciseInfo(ExerciseSubmitAnswerData answerData, String exerciseInfoId, String exerciseCompleteId) {
+		Result result = new Result(true);
+
+		// 用户本次做题提交的数据
+		List<ExerciseItemAnswerData> lstAnswers = null;
+		String initRecordId = null;
+		ExerciseCompleteInfo exerciseCompleteInfo = null;
+		ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, exerciseInfoId);
+
+		try {
+			// 提交记录id
+			initRecordId = answerData.getExerciseRecordId();
+			lstAnswers = answerData.getItems();
+
+			if (lstAnswers.isEmpty() && !ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus())) {
+				exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData), initRecordId,
+						ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,
+						"/exercise/Exercise/exerAnswers");
+
+				return new Result(false, "提交数据异常");
+			}
+			
+			ExerciseRecord record = this.read(ExerciseRecord.class, initRecordId);
+
+			//计算得分
+			double studentScore = this.doCalculateExerciseScores(answerData, exerciseInfo.getExerciseItemSets());
+			
+			// 提交试卷答案
+			answerData.setScore(new BigDecimal(studentScore));
+			Map<String, Object> resultMap = exerciseVerService.doOperExerciseAnswerData(answerData);
+
+			// 更新得分记录及状态
+			exerciseCompleteInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteId);
+			resultMap.put("studentScore", studentScore);
+		
+			
+			// 更新完成得分
+			if (ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus())) {
+				resultMap.put("objScore", studentScore);
+				exerciseCompleteInfo.setSubmitTime(new Date());
+				
+				if(record.getSubItemCount()==0){
+					exerciseCompleteInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_CHECKED);
+				}else{
+					exerciseCompleteInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_COMMIT);
+				}
+				
+				this.bulkUpdate(
+						"update ExerciseRecord set status=1 , score=" + studentScore + ",objScore=" + studentScore
+								+ " where deleteFlag is false and recordId=?",
+						new Object[] { resultMap.get("recordId") });
+			}if (ExerciseRecord.STATUS_CHECK.equals(answerData.getStatus())) {
+				exerciseCompleteInfo.setSubmitTime(new Date());
+				exerciseCompleteInfo.setCompleteStatus(ExerciseCompleteInfo.STATUS_CHECKED);
+				this.bulkUpdate(
+						"update ExerciseRecord set status=3 , score=" + studentScore + ",objScore=" + studentScore
+								+ " where deleteFlag is false and recordId=?",
+						new Object[] { resultMap.get("recordId") });
+			} else {
+				this.bulkUpdate(
+						"update ExerciseRecord set score=" + studentScore+ ",objScore=" + studentScore
+								+ " where deleteFlag is false and recordId=? ",
+						new Object[] { resultMap.get("recordId") });
+			}
+			exerciseCompleteInfo.setStudentScore(new BigDecimal(studentScore));	
+			
+			this.save(exerciseCompleteInfo);
+			
+			// 记录提交的数据日志
+			exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData), initRecordId,
+					ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS,
+					"/exercise/Exercise/exerAnswers");
+
+			result = new Result(true, "答案提交成功");
+			result.setData(resultMap);
+
+		} catch (Exception e) {
+			log.error("考试保存错误", e);
+
+			result = new Result(false, "提交练习答案请求异常");
+
+			exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData), initRecordId,
+					ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED,
+					"/exercise/Exercise/exerAnswers");
+		}
+
+		return result;
+	}
+
+	private double doCalculateExerciseScores(ExerciseSubmitAnswerData answerData, List<ExerciseItemSet> lstItemSet) {
+		//获取填空题答案信息
+		Map<String,String> exerciseFillItemMap= null;
+		List<Object[]> lstObj =  this.find("select i.exerciseId,i.answer from ExerciseGroupItemRe r, ExerciseItem i where r.exerciseItemId=i.exerciseId and  r.exerciseGroupId=? and r.deleteFlag is false and i.type=? and i.deleteFlag is false", 
+				CollectionUtils.newList(answerData.getExerciseGroupId(),ExerciseItem.TYPE_FILL_BLANKS), Object[].class);
+		if(lstObj!=null && lstObj.size()>0){
+			exerciseFillItemMap = new HashMap<String,String>(lstObj.size());
+			for(Object[] arrObj : lstObj){
+				exerciseFillItemMap.put((String)arrObj[0],(String)arrObj[1]);
+			}	
+		}
+		
+		Map<String, Double> scoreMap = new HashMap<String, Double>();
+		for (int i = 0; i < lstItemSet.size(); i++) {
+			if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+				scoreMap.put("single_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("single_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("single_noanswer", lstItemSet.get(i).getBlankScore());
+			} else if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_MULTI_SELECT) {
+				scoreMap.put("multi_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("multi_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("multi_noanswer", lstItemSet.get(i).getBlankScore());
+			} else if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+				scoreMap.put("judge_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("judge_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("judeg_noanswer", lstItemSet.get(i).getBlankScore());
+			}else if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_FILL_BLANKS) {
+				scoreMap.put("fill_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("fill_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("fill_noanswer", lstItemSet.get(i).getBlankScore());
+			} 
+		}
+		double totalScore = 0.00;
+		String tempRightAnswer =null;
+		BigDecimal tempScore = BigDecimal.ZERO;
+		if (answerData.getItems() != null && answerData.getItems().size() > 0) {
+			for (ExerciseItemAnswerData data : answerData.getItems()) {
+				if (Integer.valueOf(data.getCorrect()) > 0) {
+					if (data.getType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+						totalScore += scoreMap.get("single_right");
+					} else if (data.getType() == ExerciseItem.TYPE_MULTI_SELECT) {
+						totalScore += scoreMap.get("multi_right");
+					} else if (data.getType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+						totalScore += scoreMap.get("judge_right");
+					}else if (data.getType() == ExerciseItem.TYPE_FILL_BLANKS) {
+						if(exerciseFillItemMap!=null && exerciseFillItemMap.size()>0){
+							tempRightAnswer = exerciseFillItemMap.get(data.getExerciseId());
+						}
+						tempScore = this.exerciseVerService.calFillBlanksItemScore(tempRightAnswer,data.getAnswer(), scoreMap.get("fill_right").floatValue());
+						data.setTeacherScore(tempScore.toPlainString());
+						totalScore += tempScore.doubleValue();
+					}else if (data.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+						if(StringUtils.isNotEmpty(data.getTeacherScore())){
+							tempScore = new BigDecimal(data.getTeacherScore());
+						}else{
+							tempScore = BigDecimal.ZERO;
+						}
+						totalScore += tempScore.doubleValue();
+					}
+				} else {
+					if (data.getType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+						totalScore += scoreMap.get("single_wrong");
+					} else if (data.getType() == ExerciseItem.TYPE_MULTI_SELECT) {
+						totalScore += scoreMap.get("multi_wrong");
+					} else if (data.getType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+						totalScore += scoreMap.get("judge_wrong");
+					}else if (data.getType() == ExerciseItem.TYPE_FILL_BLANKS) {
+						if(exerciseFillItemMap!=null && exerciseFillItemMap.size()>0){
+							tempRightAnswer = exerciseFillItemMap.get(data.getExerciseId());
+						}
+						tempScore = this.exerciseVerService.calFillBlanksItemScore(tempRightAnswer,data.getAnswer(), scoreMap.get("fill_right").floatValue());
+						data.setTeacherScore(tempScore.toPlainString());
+						totalScore += tempScore.doubleValue();
+					}else if (data.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+						if(StringUtils.isNotEmpty(data.getTeacherScore())){
+							tempScore = new BigDecimal(data.getTeacherScore());
+						}else{
+							tempScore = BigDecimal.ZERO;
+						}
+						totalScore += tempScore.doubleValue();
+					}
+				}
+			}
+		}
+
+		return totalScore;
+	}
+	
+	@Override
+	public Result doPublishExercise(String[] exerciseIds) {
+		// 更新作业状态
+		this.bulkUpdateInLoop("update ExerciseInfo set status=" + ExerciseInfo.EXERCISE_STATUS_PUBLISHED + " WHERE exerciseInfoId=?",exerciseIds);
+
+		// 初始化作业完成记录
+		String hql = null;
+		List<Map<String, Object>> students = null;
+		ExerciseCompleteInfo temp = null;
+		List<ExerciseCompleteInfo> lstCompleteInfos = null;
+		for (String exerciseId : exerciseIds) {
+			// 判断是否已经初始化,如果已经初始化则继续 -> TODO:需要处理新加入班级学生
+			int count = this.findCount("from ExerciseCompleteInfo f where f.deleteFlag is false and f.exerciseInfoId=?",CollectionUtils.newList(exerciseId));
+			
+			if (count == 0) {
+				hql = " select s.studentId as studentId,s.studentNo as studentNo,s.userId as studentUserId,s.name as studentName,c.classId as classId,c.name as className "
+						+ " from StuStudent s ,ClsClass c,ExerciseExamReClass r where r.examId=:exerciseInfoId "
+						+ " and r.classId =c.classId and c.classId= s.classId and r.deleteFlag is false and s.deleteFlag is false";
+
+				students = this.findListWithMapByHql(hql, CollectionUtils.newObjectMap("exerciseInfoId", exerciseId));
+				if (students != null && students.size() > 0) {
+					lstCompleteInfos = new ArrayList<ExerciseCompleteInfo>();
+					for (Map<String, Object> obj : students) {
+						temp = new ExerciseCompleteInfo();
+						TraceUtils.setCreateTrace(temp);
+						temp.setStudentId((String) obj.get("studentId"));
+						temp.setStudentNo((String) obj.get("studentNo"));
+						temp.setStudentUserId((String) obj.get("studentUserId"));
+						temp.setStudentUserName((String) obj.get("studentName"));
+						temp.setClassId((String) obj.get("classId"));
+						temp.setClassName((String) obj.get("className"));
+						temp.setExerciseInfoId(exerciseId);
+						temp.setCompleteStatus(ExerciseCompleteInfo.STATUS_DRAFT);
+						lstCompleteInfos.add(temp);
+					}
+					this.saveOrUpdateAll(lstCompleteInfos);
+				}
+			}
+			
+			//发布作业消息
+			this.doExercisePublishMsg(exerciseId);
+		}
+		
+		return new Result(true);
+	}
+	
+	private void doExercisePublishMsg(String exerciseInfoId){
+		ExerciseInfo exerciseInfo= this.read(ExerciseInfo.class, exerciseInfoId);
+		
+		List<String> lstUserIds = this.find("select userId from ExerciseResultV where id.exerciseInfoId=?", 
+										CollectionUtils.newList(exerciseInfoId), String.class);
+		
+		if(lstUserIds!=null && lstUserIds.size()>0){
+			Map<String,String> attrs = CollectionUtils.newStringMap("exerciseInfoId",exerciseInfoId,"exerciseName",exerciseInfo.getName(),
+					"subjectId",exerciseInfo.getSubjectId(),"subjectName",exerciseInfo.getSubject().getName()); 
+			
+			msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]), 
+										MsgInfo.TYPE_EXERCISE," 发布了作业 ", attrs);
+		}
+	}
+
+	@Override
+	public Result doRevokeExercise(String[] exerciseIds) {
+		// 更新作业状态
+		this.bulkUpdateInLoop("update ExerciseInfo set status=" + ExerciseInfo.EXERCISE_STATUS_DRAFT + " WHERE exerciseInfoId=?",exerciseIds);
+		// 清除作业完成情况
+		this.bulkUpdateInLoop("update ExerciseCompleteInfo set deleteFlag= true  WHERE exerciseInfoId=?", exerciseIds);
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 获取逾期未交的作业
+	 */
+	@Override
+	public int getUnCommitExerciseCount(String classId, String userId) {
+		String sql = "SELECT  c.exercise_info_id, c. NAME, c.start_time, c.end_time, c.type,"
+				+ "c.score, d.student_score, d.complete_status, c.class_id, c.className "
+				+ "FROM ( SELECT f.exercise_info_id, f. NAME, f.start_time, f.end_time, "
+				+ "f.create_time, f.type, f.score, s.class_id, s.`NAME` AS className "
+				+ "FROM exercise_info f, exercise_exam_re_class r, cls_class s WHERE "
+				+ "r.exam_id = f.exercise_info_id AND r.class_id = s.class_id AND "
+				+ "r.class_id =:classId AND f. STATUS = 1 AND r.delete_flag = 0 AND "
+				+ "f.delete_flag = 0 ) c LEFT OUTER JOIN ( SELECT e.exercise_info_id,"
+				+ "e.student_score, e.complete_status, e.CLASS_ID FROM exercise_complete_info "
+				+ "e WHERE e.delete_flag IS FALSE AND e.student_user_id =:userId ) d ON "
+				+ "c.exercise_info_id = d.exercise_info_id AND c.class_id = d.class_id "
+				+ "where IFNULL(d.complete_status,0) = 0 and (c.end_Time - CURRENT_TIMESTAMP ()) < 0 ";
+
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("classId", classId, "userId", userId),
+				Object[].class);
+		return list.size();
+	}
+
+	/**
+	 * 获取待完成的作业
+	 */
+	@Override
+	public int getToBeCommitExerciseCount(String classId, String userId) {
+		String sql = "SELECT  c.exercise_info_id, c. NAME, c.start_time, c.end_time, c.type,"
+				+ "c.score, d.student_score, d.complete_status, c.class_id, c.className "
+				+ "FROM ( SELECT f.exercise_info_id, f. NAME, f.start_time, f.end_time, "
+				+ "f.create_time, f.type, f.score, s.class_id, s.`NAME` AS className "
+				+ "FROM exercise_info f, exercise_exam_re_class r, cls_class s WHERE "
+				+ "r.exam_id = f.exercise_info_id AND r.class_id = s.class_id AND "
+				+ "r.class_id =:classId AND f. STATUS = 1 AND r.delete_flag = 0 AND "
+				+ "f.delete_flag = 0 ) c LEFT OUTER JOIN ( SELECT e.exercise_info_id,"
+				+ "e.student_score, e.complete_status, e.CLASS_ID FROM exercise_complete_info "
+				+ "e WHERE e.delete_flag IS FALSE AND e.student_user_id =:userId ) d ON "
+				+ "c.exercise_info_id = d.exercise_info_id AND c.class_id = d.class_id "
+				+ "where IFNULL(d.complete_status,0) = 0 and (c.end_Time - CURRENT_TIMESTAMP ()) > 0 ";
+
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("classId", classId, "userId", userId),
+				Object[].class);
+		return list.size();
+	}
+
+	/**
+	 * 获取完成的作业个数
+	 * 
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	@Override
+	public int getCommitExerciseCount(String classId, String userId) {
+		String sql = "SELECT  c.exercise_info_id, c. NAME, c.start_time, c.end_time, c.type,"
+				+ "c.score, d.student_score, d.complete_status, c.class_id, c.className "
+				+ "FROM ( SELECT f.exercise_info_id, f. NAME, f.start_time, f.end_time, "
+				+ "f.create_time, f.type, f.score, s.class_id, s.`NAME` AS className "
+				+ "FROM exercise_info f, exercise_exam_re_class r, cls_class s WHERE "
+				+ "r.exam_id = f.exercise_info_id AND r.class_id = s.class_id AND "
+				+ "r.class_id =:classId AND f. STATUS = 1 AND r.delete_flag = 0 AND "
+				+ "f.delete_flag = 0 ) c LEFT OUTER JOIN ( SELECT e.exercise_info_id,"
+				+ "e.student_score, e.complete_status, e.CLASS_ID FROM exercise_complete_info "
+				+ "e WHERE e.delete_flag IS FALSE AND e.student_user_id =:userId ) d ON "
+				+ "c.exercise_info_id = d.exercise_info_id AND c.class_id = d.class_id "
+				+ "where IFNULL(d.complete_status,0) > 0 ";
+
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("classId", classId, "userId", userId),
+				Object[].class);
+		return list.size();
+	}
+
+	/**
+	 * 获取作业总数
+	 */
+	@Override
+	public int getExerciseCount(String classId, String userId) {
+		String hqlCount = "from ExerciseInfo i,ExerciseExamReClass r WHERE"
+				+ " r.examId=i.exerciseInfoId AND r.classId =:classId AND i.status=:status  "
+				+ "AND i.deleteFlag is false AND r.deleteFlag is false";
+		int exerciseCount = findCountByComplexHql(hqlCount,
+				CollectionUtils.newObjectMap("classId", classId, "status", ExerciseInfo.EXERCISE_STATUS_PUBLISHED));
+		return exerciseCount;
+	}
+	
+	/**
+	 * 查询作业列表-教师端
+	 * 
+	 * @param pageSize
+	 * @param keyword
+	 * @param classId
+	 * @param pageNum
+	 * @return
+	 */
+	public List<Map<String, Object>> teacherExerciseInfoList(Integer pageSize,String keyword,String classId,Integer pageNum) {
+		QHomeworkScoreV qHomeworkScoreV = QHomeworkScoreV.homeworkScoreV;
+		QExerciseInfo qExerciseInfo = QExerciseInfo.exerciseInfo;
+		
+		Expression<Integer> cases = new CaseBuilder()
+			    .when(qHomeworkScoreV.completeStatus.isNull()).then(1)
+			    .otherwise(0).sum().as("homeworkNoSubmitCount");
+		
+		Expression<Integer> cases2 = new CaseBuilder()
+			    .when(qHomeworkScoreV.completeStatus.eq(String.valueOf(ExerciseCompleteInfo.STATUS_CHECKED))).then(1)
+			    .otherwise(0).sum().as("homeworkToAuditCount");
+		
+		Expression<Integer> cases3 = new CaseBuilder()
+			    .when(qHomeworkScoreV.completeStatus.eq(String.valueOf(ExerciseCompleteInfo.STATUS_COMMIT))).then(1)
+			    .otherwise(0).sum().as("homeworkHasAuditCount");
+		
+		return this.getQueryFactory().select(cases,cases2,cases3, qExerciseInfo.name.max(),
+				qExerciseInfo.startTime.max(), qExerciseInfo.endTime.max(), qExerciseInfo.type.max()).from(qHomeworkScoreV, qExerciseInfo)
+				.where(qHomeworkScoreV.classId.eq(classId)
+						.and(qHomeworkScoreV.id.homeworkId.eq(qExerciseInfo.exerciseInfoId))
+						.and(qExerciseInfo.deleteFlag.isFalse()))
+				.groupBy(qHomeworkScoreV.id.homeworkId)
+				.orderBy(qExerciseInfo.createTime.desc())
+				.fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>();
+					map.put("name", tuple.get(3, String.class));
+					map.put("startTime", tuple.get(4, String.class));
+					map.put("endTime", tuple.get(5, String.class));
+					map.put("type", tuple.get(6, Integer.class));
+					map.put("homeworkNoSubmitCount", tuple.get(0, Integer.class));
+					map.put("homeworkToAuditCount", tuple.get(1, Integer.class));
+					map.put("homeworkHasAuditCount", tuple.get(2, Integer.class));
+					return map;
+				}).collect(Collectors.toList());
+	}
+	
+	@Override
+	public Map<String,Integer> queryResultStatusCount(List<String> lstExerciseIds) {
+		if(lstExerciseIds== null || lstExerciseIds.size()==0){
+			return null;
+		}
+		
+		String hql = "select id.exerciseInfoId||'-'||completeStatus ,count(1)  from ExerciseResultV "
+						+ "where id.exerciseInfoId in(:exerciseIds) group by id.exerciseInfoId,completeStatus";
+		
+		List<Object[]> lstResult = this.findByComplexHql(hql, 
+				CollectionUtils.newObjectMap("exerciseIds",lstExerciseIds.toArray(new String[lstExerciseIds.size()])), Object[].class);
+		
+		Map<String,Integer> resultMap = new HashMap<String,Integer>(lstResult.size()); 
+		
+		for(Object[] o:lstResult){
+			resultMap.put((String)o[0],((Long)o[1]).intValue());
+		}
+
+		return resultMap;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java
new file mode 100644
index 0000000..0dfab0a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+
+/*import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.msg.model.Message;*/
+
+/**
+ * 练习题目全站统计 个人统计
+ * @author zhiyong
+ *
+ */
+@Service("ExerciseItemStatisticsDealService")
+public class ExerciseItemStatisticsDealService{
+	
+//	/** 缓存service  */
+//	@Autowired
+//	ICacheService cacheService;
+	
+	/** 练习接口service  */
+	@Autowired
+	IExerciseVerService exerciseVerService;
+	
+	@SuppressWarnings("unused")
+	private static final Logger log = LogManager.getLogger("ExerciseItemStatisticsDealService");
+
+//	@PostConstruct
+//	void init() {
+//
+//		CommonONSConsumer.registerHandler("USER_EXER_ITEM_STATIS", "ExerciseItemStatisticsDealService");
+//			
+//	}
+
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+//		try {
+//			String userId = msg.getUserProperties("userId");
+//			String userName = msg.getUserProperties("userName");
+//			String currTime = msg.getUserProperties("currTime");
+//			String exerciseGroupId = msg.getUserProperties("groupId");
+//			
+//			
+//			String key = Constants.EXER_ITEM_STATISTICAL_CACHE_KEY 
+//					+ userId + exerciseGroupId +  currTime;
+//			
+//			// 获取答案集合
+//			ExerciseSubmitAnswerData answerData = cacheService.get(key, ExerciseSubmitAnswerData.class);
+//			//log.error("练习个人全站统计开始---------exerItemIdMap="+exerItemIdMap);
+//			if(answerData == null){
+//				return;
+//			}
+//			Result result = exerciseVerService.doStatisUserExerciseItemData(userId, userName, answerData);
+//			
+//			if(result.isSuccess()){
+//				cacheService.delete(key);
+//			}
+//			
+//		} catch (Exception e) {
+//
+//			log.error("更新用户练习个人统计全站统计数据失败:" + e, e);
+//
+//			throw e;
+//		}
+//	}
+
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java
new file mode 100644
index 0000000..c3db240
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java
@@ -0,0 +1,381 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.POIXMLDocument;
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.IFileUploadService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.ExerciseItemData;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseOptionData;
+import com.qxueyou.scc.exercise.service.IExercisePyService;
+
+@Service
+@EnableConfigurationProperties(SccConfig.class)
+public class ExercisePyService extends CommonAppService implements
+		IExercisePyService {
+
+	@Autowired
+	SccConfig sccConfig;
+
+	@Autowired
+	IFileUploadService fileUploadService;
+
+	private static Logger log = LogManager.getLogger("ExercisePyService");
+
+	/**
+	 * 上传解析
+	 */
+	public Map<String, Object> parserPyExercise(String groupId, String fullPath,
+			String module) {
+
+		File file = downloadFile(groupId, fullPath, module);
+		List<String> lst = generateLstFromFile(file, fullPath);
+
+		if (null == lst || lst.isEmpty()) {
+			return CollectionUtils.newObjectMap("resultCode",0,"msg","文档解析内容为空");
+		}
+
+		return exerciseParsePy(lst, fullPath);
+
+	}
+
+	/**
+	 * 校验
+	 * 
+	 * @param content
+	 *            习题文本内容
+	 * @return
+	 */
+	public Map<String, Object> validatePyExercise(String content) {
+
+		String[] arrLine = content.split("\n");
+		List<String> lst = new ArrayList<String>(arrLine.length);
+		
+		for(int i =0;i<arrLine.length;i++ ){
+			if(StringUtils.isBlank(arrLine[i])){
+				continue ;
+			}
+			lst.add(arrLine[i]);
+		}
+
+		// 判断:是否为空
+		if (null == lst || lst.isEmpty()) {
+			return CollectionUtils.newObjectMap("resultCode",0,"msg","文档解析内容为空");
+		}
+
+		return exerciseParsePy(lst, "" );
+		
+	}
+	
+	public Result doImportPyExercise(List<ExerciseItemData> lstItems,String groupId) {
+		
+		if(null == lstItems || lstItems.isEmpty()){
+			return new Result(false, "没有记录");
+		}
+		
+		ExerciseGroupItemRe re ;
+		ExerciseItemAnalisi analysis;
+		ExerciseItemOption option ;
+		ExerciseItem item ;
+		
+		int itemOrder = 0; 
+		String hql = "from ExerciseGroupItemRe r where r.exerciseGroupId = ? order by r.itemOrder desc ";
+		ExerciseGroupItemRe groupRe = this.findUnique(hql, CollectionUtils.newList(groupId), ExerciseGroupItemRe.class);
+		if( null != groupRe ){
+			itemOrder = groupRe.getItemOrder() ;
+		}
+		
+		
+		
+		BigInteger iCount = BigInteger.ZERO ;
+		try {
+			
+			for(ExerciseItemData data : lstItems){
+				
+				item = new ExerciseItem();
+				re = new ExerciseGroupItemRe();
+				
+				BeanUtils.copyProperties(item, data);
+				item.setDeleteFlag(false);
+				TraceUtils.setCreateTrace(item);
+				this.save(item);
+				
+				iCount = iCount.add(BigInteger.ONE);
+				
+				BeanUtils.copyProperties(re, data);
+				itemOrder++;
+				re.setDeleteFlag(false);
+				re.setExerciseGroupId(groupId);
+				re.setExerciseItemId(item.getExerciseId());
+				re.setItemOrder(itemOrder);
+				re.setDeleteFlag(false);
+				this.save(re);
+				
+				if(StringUtils.isNotBlank(data.getAnalysis())){
+					analysis = new ExerciseItemAnalisi();
+					BeanUtils.copyProperties(analysis, data);
+					TraceUtils.setCreateTrace(analysis);
+					analysis.setDeleteFlag(false);
+					analysis.setExerciseItemId(item.getExerciseId());
+					this.save(analysis);
+				}
+				
+				if( data.getOptions() != null && !data.getOptions().isEmpty() ){
+					
+					for( ExerciseOptionData opt : data.getOptions() ){
+						option = new ExerciseItemOption();
+						BeanUtils.copyProperties(option, opt);
+						TraceUtils.setCreateTrace(option);
+						option.setDeleteFlag(false);
+						option.setExerciseItemId(item.getExerciseId());
+						this.save(option);
+					}
+					
+				}
+				
+			}
+			
+			this.bulkUpdate("update ExerciseGroup set allCount = allCount + ? , " +
+					" updateTime = sysdate(), updateId = ? , updator = ? where groupId = ?  " , 
+					new Object[]{ iCount,ClientUtils.getUserId(), ClientUtils.getUserName(), groupId } );
+			
+		} catch (Exception e) {
+			log.error("解析习题copyProperties 失败:" ,e );
+			return new Result(false , "服务器内部转换错误");
+		}
+		
+		return new Result(true , "成功导入" + iCount + "道习题");
+	}
+	
+
+	private Map<String, Object> exerciseParsePy(List<String> lst, String fullPath) {
+
+		return pyExerciseParseByParam(lst, lst.size());
+		//return pyExerciseParseByCache(lst, lst.size());
+			
+		
+	}
+	
+	/**
+	 * post传参
+	 * @param key
+	 * @param size
+	 * @return
+	 * @throws Exception
+	 */
+	private Map<String, Object> pyExerciseParseByParam(List<String> lst0, int size) {
+		
+		return null;
+
+	}
+	
+
+
+	/**
+	 * 缓存版本
+	 * @param key
+	 * @param size
+	 * @return
+	 * @throws Exception
+	 */
+	
+	@SuppressWarnings("unused")
+	private Map<String, Object> pyExerciseParseByCache(List<String> lst, int size){
+		
+		return null;
+
+	}
+
+
+	private File downloadFile(String groupId, String fullPath, String module) {
+
+		String filePart[] = fullPath.split("\\.");
+		String fileType = filePart[filePart.length - 1];
+		String uuid = UUIDUtils.generateUUID();
+		String filePath = ExerciseService.class.getClassLoader()
+				.getResource("../uploads").getPath()
+				.concat("exercise/" + uuid + "/" + uuid + "." + fileType);
+
+		return fileUploadService.doGetOssFile(fullPath, filePath, module,
+				ClientUtils.getUserId());
+
+	}
+
+	private List<String> generateLstFromFile(File file, String fullPath) {
+
+		String txtFilePath = transformDocToTxt(file);
+
+		List<String> lst = new ArrayList<String>(100);
+
+		FileReader reader = null;
+		BufferedReader br = null;
+		try {
+			reader = new FileReader(txtFilePath);
+			br = new BufferedReader(reader);
+
+			String currLine = "";
+			while ((currLine = br.readLine()) != null) {
+				if (StringUtils.isNotBlank(currLine)) {
+					lst.add(currLine);
+				}
+			}
+		} catch (Exception e) {
+			log.error("解析练习txt文档失败:" + fullPath, e);
+		} finally {
+			IOUtils.closeQuietly(br);
+			IOUtils.closeQuietly(reader);
+		}
+
+		File txt = new File(txtFilePath);
+		FileUtils.deleteQuietly(txt);
+
+		return lst;
+
+	}
+
+	/**
+	 * 从office转换到txt:2007转换:自带序号格式会丢失;2003会解析出来
+	 * 
+	 * @param file
+	 * @return
+	 */
+	private String transformDocToTxt(File file) {
+		InputStream is = null;
+		FileWriter writer = null;
+		String strText = "";
+
+		try {
+			String fileExtention = fileExtension(file.getName());
+			is = new FileInputStream(file.getAbsolutePath());
+
+			if ("doc".equals(fileExtention)) {
+				WordExtractor extractor = new WordExtractor(is);
+				// 获取Word文件中的文本+自带序号
+				strText = extractor.getText();
+				extractor.close();
+			} else if ("docx".equals(fileExtention)) {
+				OPCPackage opcPackage = POIXMLDocument.openPackage(file
+						.getAbsolutePath());
+				POIXMLTextExtractor extractor = new XWPFWordExtractor(
+						opcPackage);
+				// 只能获取Word文件中的文本,不能取到office序号
+				strText = extractor.getText();
+				extractor.close();
+			} else {
+				throw new RuntimeException("文件格式错误, 请上传word文档(.doc及.docx)格式",
+						null);
+			}
+
+			// 将得到的文本全角转半角
+			strText = formatFullToHalf(strText);
+
+			// 解决空格保存为txt的时候,乱码为?
+			byte bytes[] = { (byte) 0xC2, (byte) 0xA0 };
+			String UTFSpace = new String(bytes, "UTF-8");
+			strText = strText.replaceAll(UTFSpace, " ");
+
+			File txtFile = new File(file.getParentFile().getAbsolutePath()
+					+ "/"
+					+ file.getName().substring(0,
+							file.getName().lastIndexOf(".")) + ".txt");
+			writer = new FileWriter(txtFile, true);
+			writer.write(strText);
+
+			return txtFile.getAbsolutePath();
+
+		} catch (FileNotFoundException e) {
+			throw new RuntimeException("office文档未找到", e);
+		} catch (IOException e) {
+			throw new RuntimeException("office文档读取失败", e);
+		} catch (Exception e) {
+			throw new RuntimeException(e.getMessage(), e);
+		} finally {
+			IOUtils.closeQuietly(writer);
+			IOUtils.closeQuietly(is);
+		}
+	}
+
+	/**
+	 * 全角转半角
+	 * 
+	 * @param oriText
+	 * @return
+	 */
+	private String formatFullToHalf(String oriText) {
+		if (null == oriText || oriText.length() <= 0) {
+			return "";
+		}
+
+		char[] charArray = oriText.toCharArray();
+		// 对全角字符转换的char数组遍历
+		for (int i = 0; i < charArray.length; ++i) {
+			int charIntValue = (int) charArray[i];
+
+			// 如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换
+			if (charIntValue >= 65281 && charIntValue <= 65374) {
+				charArray[i] = (char) (charIntValue - 65248);
+			} else if (charIntValue == 12288) {
+				charArray[i] = (char) 32;
+			} else if (charIntValue == 58033) {
+				// 空格
+				charArray[i] = (char) 32;
+			} else if (charIntValue == 65380) {
+				// 顿号
+				charArray[i] = (char) 12289;
+			} else if (charIntValue == 65377) {
+				// 句号
+				charArray[i] = (char) 12290;
+			}
+		}
+		return new String(charArray);
+
+	}
+
+	/**
+	 * 解析文件后缀
+	 * 
+	 * @param filename
+	 * @return
+	 */
+	private String fileExtension(String filename) {
+
+		return filename.substring(filename.lastIndexOf('.') + 1,
+				filename.length());
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java
new file mode 100644
index 0000000..22de33b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java
@@ -0,0 +1,3685 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.POIXMLDocument;
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.ResultJson;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.IFileUploadService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.exercise.dao.ExerciseDAO;
+import com.qxueyou.scc.exercise.model.ExerciseDeepAnalysis;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupExtend;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseImportResult;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemScore;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseObjectImg;
+import com.qxueyou.scc.exercise.model.ExerciseOptionStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseParse;
+import com.qxueyou.scc.exercise.model.ExerciseParseResult;
+import com.qxueyou.scc.exercise.model.ExerciseReCourse;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.QExerciseGroup;
+import com.qxueyou.scc.exercise.model.QExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.QExerciseItem;
+import com.qxueyou.scc.exercise.model.QExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.QExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.QExerciseItemOption;
+import com.qxueyou.scc.exercise.model.QExerciseObjectImg;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.exercise.service.impl.node.Doc;
+import com.qxueyou.scc.exercise.util.ExerciseUtils;
+import com.qxueyou.scc.org.model.OrgCharger;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchCourseware;
+import com.qxueyou.scc.school.model.SchEvaluate;
+import com.qxueyou.scc.school.service.ICourseWareService;
+import com.qxueyou.scc.sys.model.SysFileUploadTrace;
+import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.user.model.UserRegistration;
+
+/**
+ * 练习 实现service  练习后台
+ * 
+ * @author zhiyong
+ *
+ */
+@Service
+public class ExerciseService extends CommonAppService implements IExerciseService {
+	private ExerciseDAO exerDAO;
+
+	@Autowired
+	IOssService ossService;
+
+	@Autowired
+	ICacheService cacheService;
+	
+	@Autowired
+	IFileUploadService fileUploadService;
+	
+	@Autowired
+	private ICourseWareService courseWareService;
+	
+	@SuppressWarnings("rawtypes")
+	@Autowired
+	private RedisTemplate redisTemplate;
+	
+	
+	private final String[] letter = "A B C D E F G H I J K L M N O P Q".split(" ");
+
+	private static Logger log = LogManager.getLogger("ExerciseService");
+
+	public ExerciseDAO getExerDAO() {
+		return exerDAO;
+	}
+
+	/**
+	 * 依赖注入
+	 *
+	 * @param exerExtendDAO
+	 */
+	@Autowired(required = false)
+	public void setExerDAO(@Qualifier("exerciseDAO") ExerciseDAO exerDAO) {
+		this.exerDAO = exerDAO;
+	}
+
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#insertExerciseGroup(java.lang.String, short, java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Result insertExerciseGroup(String name, short type, String lessonId, String chapterId) {
+
+		int iCount = 0;
+		if (type == 3) {
+			// 查询当前class存在的存在的顺序、随机练习或者 章节练习 个数
+			// 可能结果:0、 新增三种;1,新增两种(顺序随机),2,新增一种(章节),3的话,不增加
+			String hsql = "from ExerciseGroup where classId = ? and  case when type = ? then 1 when type = ? then 1 when type = ? and "
+					+ " attribute1 = ? and attribute2 = ? then 1 else 0 end  = 1 and deleteFlag is false";
+			iCount = findCount(hsql, CollectionUtils.newList(ClientUtils.getClassId(), ExerciseGroup.TYPE_EXERCISE_RANDOM, ExerciseGroup.TYPE_EXERCISE_SEQUENCE, ExerciseGroup.TYPE_CHAPTER_ITEM, lessonId, chapterId));
+		}
+
+		Result objResult = saveOrUpdateAll(initExerciseGroupList(name, type, lessonId, chapterId, iCount));
+
+		// 保存
+		return objResult;
+	}
+
+	/**
+	 * 新增练习组
+	 * 
+	 * @param name
+	 *            练习组名称
+	 * @param type
+	 *            练习组类型
+	 * @param lessonId
+	 *            课程id
+	 * @param chapterId
+	 *            章节id
+	 * @param 模拟考试
+	 *            时间设置
+	 * @return
+	 */
+	public Result insertExerciseGroup(String groupId,String name, short type, String lessonId, String chapterId, String attribute1, boolean repeatFlag) {
+		
+		if(StringUtils.isNotBlank(groupId)){ // 更新
+			
+			return updateExerciseGroup(groupId, name, type, lessonId, chapterId, attribute1, repeatFlag);
+		}else{ // 新增
+			
+			return saveExerciseGroup(name, type, lessonId, chapterId, attribute1, repeatFlag);
+		}
+	}
+	
+	public Result updateExerciseGroup(String groupId,String name, short type, String subjectId, String chapterId, String attribute1, boolean repeatFlag) {
+		ExerciseGroup group = read(ExerciseGroup.class, groupId);
+		
+		if(type == ExerciseGroup.TYPE_CHAPTER_ITEM){ // 章节练习
+			
+			group.setAttribute2(chapterId);
+		}
+		if (type == ExerciseGroup.TYPE_MOCK_EXAM) {// 模拟考试
+			// 添加练习组时间 、是否重做
+			addExerciseGroupExtendTime(groupId, attribute1, repeatFlag);
+		}
+		if (type == ExerciseGroup.TYPE_HOMEWORK) {// 家庭作业
+			// 添加是否重做
+			addExerciseGroupExtendTime(groupId, null, repeatFlag);
+		}
+		
+		group.setName(name);
+		//group.setSubjectId(subjectId);
+		TraceUtils.setUpdateTrace(group);
+		
+		return this.saveExerciseGroup(group);
+	}
+	
+	public Result saveExerciseGroup(String name, short type, String lessonId, String chapterId, String attribute1, boolean repeatFlag) {
+		int iCount = 0;
+		if (type == ExerciseGroup.TYPE_EXERCISE_SEQUENCE) {
+			// 查询当前class存在的存在的顺序、随机练习或者 章节练习 个数
+			// 可能结果:0、 新增三种;1,新增两种(顺序随机),2,新增一种(章节),3的话,不增加
+			String hsql = "from ExerciseGroup where classId = ? and  case when type = ? then 1 when type = ? then 1 when type = ? and "
+					+ " attribute1 = ? and attribute2 = ? then 1 else 0 end  = 1 and deleteFlag is false";
+			iCount = findCount(hsql, CollectionUtils.newList(ClientUtils.getClassId(), ExerciseGroup.TYPE_EXERCISE_RANDOM, ExerciseGroup.TYPE_EXERCISE_SEQUENCE, ExerciseGroup.TYPE_CHAPTER_ITEM, lessonId, chapterId));
+		}
+
+		List<ExerciseGroup> lstExeGroup = initExerciseGroupList(name, type, lessonId, chapterId, iCount);
+
+		// 兼容1.0版本 模拟考试时间设置
+		for (ExerciseGroup group : lstExeGroup) {
+			
+			group.setOrderNum(BigInteger.valueOf(SchCourseware.COURSEWARE_MAX_ORDER));
+			
+			if (ExerciseGroup.TYPE_MOCK_EXAM == group.getType()) {
+				group.setAttribute1(attribute1);
+			}
+			
+			this.saveExerciseGroup(group);
+		}
+
+		//Result objResult = saveOrUpdateAll(lstExeGroup);
+
+		if (type == ExerciseGroup.TYPE_MOCK_EXAM) {// 模拟考试
+			// 添加练习组时间 、是否重做
+			addExerciseGroupExtendTime(lstExeGroup.get(0).getGroupId(), attribute1, repeatFlag);
+		}
+		if (type == ExerciseGroup.TYPE_HOMEWORK) {// 家庭作业
+			// 添加是否重做
+			addExerciseGroupExtendTime(lstExeGroup.get(0).getGroupId(), null, repeatFlag);
+		}
+
+		// 保存
+		return new Result(true);
+	}
+
+	/**
+	 * 新增题库
+	 * 
+	 * @param name
+	 *            练习组名称
+	 * @param type
+	 *            练习组类型
+	 * @param lessonId
+	 *            课程id
+	 * @param chapterId
+	 *            章节id
+	 * @param 模拟考试
+	 *            时间设置
+	 * @return
+	 */
+	public Result insertOrgExercise(ExerciseGroup group, boolean repeatFlag) {
+		
+		if(StringUtils.isNotBlank(group.getGroupId())){ // 更新
+			
+			return updateOrgExerciseGroup(group, repeatFlag);
+		}else{ // 新增
+			
+			return saveOrgExerciseGroup(group, repeatFlag);
+		}
+	}
+	
+	public Result updateOrgExerciseGroup(ExerciseGroup group, boolean repeatFlag) {
+		
+		ExerciseGroup oldGroup = read(ExerciseGroup.class, group.getGroupId());
+		
+		if (oldGroup.getType() == ExerciseGroup.TYPE_MOCK_EXAM) {// 模拟考试
+			// 添加练习组时间 、是否重做
+			addExerciseGroupExtendTime(group.getGroupId(), group.getAttribute1(), repeatFlag);
+		}
+		if (oldGroup.getType() == ExerciseGroup.TYPE_HOMEWORK) {// 家庭作业
+			// 添加是否重做
+			addExerciseGroupExtendTime(group.getGroupId(), null, repeatFlag);
+		}
+		
+		oldGroup.setName(group.getName());
+		TraceUtils.setUpdateTrace(oldGroup);
+		
+		return this.saveExerciseGroup(oldGroup);
+	}
+	
+	public Result saveOrgExerciseGroup(ExerciseGroup group, boolean repeatFlag) {
+		group.setGroupId(null);
+		TraceUtils.setCreateTrace(group);
+		group.setDeleteFlag(false);
+		group.setOrgId(ClientUtils.getOrgId());
+		group.setAllCount(BigInteger.ZERO);
+		this.saveExerciseGroup(group);
+		group.setOriginExerciseId(group.getGroupId());
+		this.saveExerciseGroup(group);
+
+		if (StringUtils.isNotBlank(group.getAttribute1())) {
+			addExerciseGroupExtendTime(group.getGroupId(), group.getAttribute1(), repeatFlag);
+		}
+		if (group.getType() == ExerciseGroup.TYPE_HOMEWORK) {// 家庭作业
+			// 添加是否重做
+			addExerciseGroupExtendTime(group.getGroupId(), null, repeatFlag);
+		}
+		
+		this.insertReCourse(group.getCollegeCourseId(), group.getGroupId());
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 拷贝练习
+	 * 
+	 * @param id
+	 * @param subjectId
+	 * @param collegeCourseId
+	 * @param chapterId
+	 * @return
+	 * @throws IllegalAccessException
+	 * @throws InstantiationException
+	 * @throws InvocationTargetException
+	 * @throws NoSuchMethodException
+	 */
+	public Result doCopyExerciseGroup(String id, String subjectId, String collegeCourseId, String chapterId) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
+		ExerciseGroup oldExercise = this.read(ExerciseGroup.class, id);
+		
+		ExerciseGroup newGroup = new ExerciseGroup();
+		TraceUtils.setCreateTrace(newGroup);
+		newGroup.setGroupId(null);
+		newGroup.setAllCount(oldExercise.getAllCount());
+		newGroup.setClassId(oldExercise.getClassId());
+		newGroup.setAttribute1(oldExercise.getAttribute1());
+		newGroup.setAttribute2(oldExercise.getAttribute2());
+		newGroup.setEditFlag(oldExercise.getEditFlag());
+		newGroup.setOriginExerciseId(oldExercise.getGroupId());
+		newGroup.setOrderNum(BigInteger.valueOf(SchCourseware.COURSEWARE_MAX_ORDER));
+		newGroup.setDoCount("0");
+		newGroup.setType(oldExercise.getType());
+		newGroup.setOrgId(ClientUtils.getOrgId());
+		newGroup.setName(oldExercise.getName());
+		newGroup.setSubjectId(subjectId);
+		newGroup.setChapterId(chapterId);
+		newGroup.setCollegeCourseId(collegeCourseId);
+		
+		this.saveExerciseGroup(newGroup);
+		
+		//班级拷贝不需要新增关联表
+		if(StringUtils.isEmpty(ClientUtils.getClassId())){
+			newGroup.setOriginExerciseId(newGroup.getGroupId());
+			this.saveExerciseGroup(newGroup);
+			this.insertReCourse(collegeCourseId, newGroup.getGroupId());
+		}
+		
+		// 扩展表: extend
+		this.doSaveCopyExtend(oldExercise,newGroup);
+		
+		this.doCopyExerciseItem(newGroup.getGroupId(), oldExercise.getGroupId(), null, 1);//拷贝
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 拷贝练习题
+	 * 
+	 * @param items
+	 * @param newGroupId
+	 * @param oldGroupId
+	 * @throws NoSuchMethodException 
+	 * @throws InvocationTargetException 
+	 * @throws InstantiationException 
+	 * @throws IllegalAccessException 
+	 */
+	public void doCopyExerciseItem(String newGroupId, String oldGroupId, List<ExerciseItem> items, int type) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException{
+		if(items == null || items.size() == 0){
+			items = this.find("select i from ExerciseItem i, ExerciseGroupItemRe r where i.deleteFlag is false AND r.exerciseGroupId = ?"+
+					" and r.exerciseItemId = i.exerciseId AND r.deleteFlag IS FALSE",
+					CollectionUtils.newList(oldGroupId), ExerciseItem.class);
+		}
+		if(items != null && !items.isEmpty()){
+			List<ExerciseItemAnalisi> analysisesNew = new ArrayList<>();
+			List<ExerciseGroupItemRe> reNew = new ArrayList<>();
+			List<ExerciseObjectImg> exerciseObjectImgNew = new ArrayList<>();
+			
+			// 得到当前组题目的最大题号
+			int maxGroupItemOrder = queryExerciseGroupItemNo(newGroupId);
+			
+			for(ExerciseItem objExerciseItem : items){
+				ExerciseGroupItemRe oldExerciseGroupItemRe = this.findUnique("from ExerciseGroupItemRe where deleteFlag is false and exerciseGroupId = ? and exerciseItemId = ?",
+						CollectionUtils.newList(oldGroupId, objExerciseItem.getExerciseId()), ExerciseGroupItemRe.class);
+				
+				//临时对象
+				ExerciseItem tem = new ExerciseItem();
+				tem = (ExerciseItem) BeanUtils.cloneBean(objExerciseItem);
+				List<ExerciseObjectImg> exerciseObjectImg = this.find("from ExerciseObjectImg m where m.deleteFlag is false and m.exerciseObjectId = ?",
+						CollectionUtils.newList(objExerciseItem.getExerciseId()), ExerciseObjectImg.class);
+				ExerciseItemAnalisi analysises = this.findUnique("from ExerciseItemAnalisi m where m.deleteFlag is false and m.exerciseItemId = ?",
+						CollectionUtils.newList(objExerciseItem.getExerciseId()), ExerciseItemAnalisi.class);
+				List<ExerciseItemOption> options = objExerciseItem.getOptions();
+				tem.setOptions(null);
+				tem.setAnalysises(null);
+//				tem.setGroups(null);
+				tem.setScores(null);
+				
+				ExerciseItem objExerciseItemNew = new ExerciseItem();
+				BeanUtils.copyProperties(objExerciseItemNew, tem);
+				objExerciseItemNew.setExerciseId(null);
+				//拷贝的练习不同步
+				objExerciseItemNew.setOrgiExerciseId(type == 1?null:StringUtils.isEmpty(objExerciseItem.getOrgiExerciseId())?objExerciseItem.getExerciseId():objExerciseItem.getOrgiExerciseId());
+				TraceUtils.setCreateTrace(objExerciseItemNew);
+				
+				this.save(objExerciseItemNew);
+				
+				String exerciseIdNew = objExerciseItemNew.getExerciseId();
+			
+				for(ExerciseItemOption objExerciseItemOption : options){
+					ExerciseItemOption objExerciseItemOptionNew = new ExerciseItemOption();
+					BeanUtils.copyProperties(objExerciseItemOptionNew, objExerciseItemOption);
+					objExerciseItemOptionNew.setExerciseItemId(exerciseIdNew);
+					objExerciseItemOptionNew.setOptionId(null);
+					
+					TraceUtils.setCreateTrace(objExerciseItemOptionNew);
+					
+					this.save(objExerciseItemOptionNew);
+					//optionsNew.add(objExerciseItemOptionNew);
+					
+					List<ExerciseObjectImg> optionObjectImgs = this.find("from ExerciseObjectImg m where m.deleteFlag is false and m.exerciseObjectId = ?",
+							CollectionUtils.newList(objExerciseItemOption.getOptionId()), ExerciseObjectImg.class);
+					if(optionObjectImgs != null && !optionObjectImgs.isEmpty()){
+						for(ExerciseObjectImg optionObjectImg : optionObjectImgs){
+							ExerciseObjectImg objExerciseObjectImgNew = new ExerciseObjectImg();
+							BeanUtils.copyProperties(objExerciseObjectImgNew, optionObjectImg);
+							objExerciseObjectImgNew.setExerciseObjectId(objExerciseItemOptionNew.getOptionId());
+							objExerciseObjectImgNew.setImgId(null);
+							
+							TraceUtils.setCreateTrace(objExerciseObjectImgNew);
+							
+							exerciseObjectImgNew.add(objExerciseObjectImgNew);
+						}
+					}
+				}
+				if(analysises != null){
+					ExerciseItemAnalisi objExerciseItemAnalisiNew = new ExerciseItemAnalisi();
+					BeanUtils.copyProperties(objExerciseItemAnalisiNew, analysises);
+					objExerciseItemAnalisiNew.setExerciseItemId(exerciseIdNew);
+					objExerciseItemAnalisiNew.setExerciseAnalisisId(null);
+					
+					TraceUtils.setCreateTrace(objExerciseItemAnalisiNew);
+					
+					analysisesNew.add(objExerciseItemAnalisiNew);
+				}
+				if(exerciseObjectImg != null && !exerciseObjectImg.isEmpty()){
+					for(ExerciseObjectImg objExerciseObjectImg : exerciseObjectImg){
+						ExerciseObjectImg objExerciseObjectImgNew = new ExerciseObjectImg();
+						BeanUtils.copyProperties(objExerciseObjectImgNew, objExerciseObjectImg);
+						objExerciseObjectImgNew.setExerciseObjectId(exerciseIdNew);
+						objExerciseObjectImgNew.setImgId(null);
+						
+						TraceUtils.setCreateTrace(objExerciseObjectImgNew);
+						
+						exerciseObjectImgNew.add(objExerciseObjectImgNew);
+					}
+				}
+				
+				ExerciseGroupItemRe re = new ExerciseGroupItemRe();
+				re.setDeleteFlag(false);
+				re.setExerciseGroupId(newGroupId);
+				re.setExerciseItemId(exerciseIdNew);
+				re.setRelationId(null);
+				if(oldExerciseGroupItemRe != null){
+					re.setDocOrder(oldExerciseGroupItemRe.getDocOrder());
+				}
+				re.setItemOrder(++maxGroupItemOrder);
+				reNew.add(re);
+			}
+			
+			this.saveOrUpdateAll(reNew);
+			//this.saveOrUpdateAll(optionsNew);
+			this.saveOrUpdateAll(analysisesNew);
+			this.saveOrUpdateAll(exerciseObjectImgNew);
+			
+			//更新统计
+			this.updateGroupUpdateTimeByList(this.find("from ExerciseGroup where groupId = ?", CollectionUtils.newList(newGroupId), ExerciseGroup.class));
+		}
+	}
+	
+	/**
+	 * 插入练习和科目关联
+	 * 
+	 * @param collegeCourseId
+	 * @param handoutId
+	 */
+	private void insertReCourse(String collegeCourseId, String groupId){
+		// 序号
+		String hql = "select MAX(c.orderNum) from ExerciseReCourse c where c.deleteFlag is false and c.collegeCourseId = ? and orgId = ? ";
+		Integer iMax = this.findUnique(hql, CollectionUtils.newList(collegeCourseId, ClientUtils.getOrgId()), Integer.class);
+	
+		if (iMax == null || iMax == 0) {
+			iMax = 1;
+		} else {
+			iMax = iMax + 1;
+		}
+	
+		ExerciseReCourse course = new ExerciseReCourse();
+		TraceUtils.setCreateTrace(course);
+		course.setCollegeCourseId(collegeCourseId);
+		course.setDeleteFlag(false);
+		course.setGroupId(groupId);
+		course.setOrgId(ClientUtils.getOrgId());
+		course.setOrderNum(iMax);
+		save(course);
+	}
+
+	public Result insertAppointExercise(String groupIds[], String orgIds[], String classIds[]) {
+
+		if (null == groupIds || groupIds.length == 0) {
+			return new Result(false, "参数错误");
+		}
+		// 一次性查询groupId对应的collegeCourseId
+		String hql = " from ExerciseReCourse where groupId in (:groupIds) and deleteFlag is false";
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		argsMap.put("groupIds", groupIds);
+		List<ExerciseReCourse> courseList = findByComplexHql(hql, argsMap, ExerciseReCourse.class);
+
+		// 放入map中 KEY:groupId VALUE:collegeCourseId
+		Map<String, String> groupReCourse = new HashMap<String, String>();
+		for (ExerciseReCourse exerciseReCourse : courseList) {
+			groupReCourse.put(exerciseReCourse.getGroupId(), exerciseReCourse.getCollegeCourseId());
+		}
+
+		// 一次性查询classId对应的orgId
+		Map<String, String> classMap = new HashMap<String, String>();
+		if (classIds.length > 0) {
+			hql = " from ClsClass where classId in (:classIds) and deleteFlag is false";
+			argsMap = new HashMap<String, Object>();
+			argsMap.put("classIds", classIds);
+			List<ClsClass> classList = findByComplexHql(hql, argsMap, ClsClass.class);
+
+			// 放入map中 KEY:classId VALUE:orgId
+
+			for (ClsClass orgClass : classList) {
+				classMap.put(orgClass.getClassId(), orgClass.getOrgId());
+			}
+		}
+		
+		// 一次性查询groupId对应的orderNum
+		Map<String, Integer> orderMap = new HashMap<String, Integer>();
+		
+		hql = " from ExerciseReCourse where groupId in (:groupIds) and deleteFlag is false and orgId = :currOrgId";
+		argsMap = new HashMap<String, Object>();
+		argsMap.put("groupIds", groupIds);
+		argsMap.put("currOrgId", ClientUtils.getOrgId());
+		List<ExerciseReCourse> courseLst = findByComplexHql(hql, argsMap, ExerciseReCourse.class);
+
+		// 放入map中 KEY:classId VALUE:orgId
+		for (ExerciseReCourse c : courseLst) {
+			orderMap.put(c.getGroupId(), c.getOrderNum());
+		}
+		
+		for (String groupId : groupIds) {
+			if (orgIds.length > 0) { // 指定给机构
+				insertOrgGroup(groupId, orgIds, groupReCourse.get(groupId),orderMap);
+			}
+			if (classIds.length > 0) { // 指定给班级
+				ExerciseGroup group = read(ExerciseGroup.class, groupId);
+				insertClassGroup(groupId, classIds, group, groupReCourse.get(groupId), classMap,orderMap);
+			}
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * 指定给机构
+	 * 
+	 * @param groupId
+	 * @param orgIds
+	 * @param groupReCourse
+	 * @return
+	 */
+	public void insertOrgGroup(String groupId, String orgIds[], String collegeCourseId,Map<String, Integer> orderMap) {
+		// 查询出所有不符合条件的数据
+		String hql = "select orgId from ExerciseReCourse where groupId = :groupId and deleteFlag is false and orgId in (:orgIds)";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put("groupId", groupId);
+		args.put("orgIds", orgIds);
+		List<String> strings = findByComplexHql(hql, args, String.class);
+		List<String> orgList = new ArrayList<String>();
+		for (String orgId : orgIds) {
+			orgList.add(orgId);
+		}
+		// 剔除掉不符合条件的orgId
+		orgList.removeAll(strings);
+		if(orgList.isEmpty()){
+			return;
+		}
+
+		for (String orgId : orgList) {
+			ExerciseReCourse exerCourse = new ExerciseReCourse();
+			exerCourse.setExerciseCourseId(null);
+			exerCourse.setOrgId(orgId);
+			exerCourse.setGroupId(groupId);
+			exerCourse.setCollegeCourseId(collegeCourseId);
+			exerCourse.setDeleteFlag(false);
+			exerCourse.setOrderNum(orderMap.get(groupId));
+			TraceUtils.setCreateTrace(exerCourse);
+			save(exerCourse);
+			
+			this.courseWareService.insertOrgCourseware(groupId, ClientUtils.getOrgId(), orgId, collegeCourseId);
+		}
+
+	}
+	/**
+	 * 指定给班级
+	 * @param groupId
+	 * @param classIds
+	 * @param group
+	 * @param collegeCourseId
+	 * @param classMap
+	 */
+	public void insertClassGroup(String groupId, String classIds[], ExerciseGroup group, String collegeCourseId, Map<String, String> classMap,Map<String, Integer> orderMap) {
+		//章节id
+		Map<String,SubjectChapter> origChapterMap = new HashMap<String, SubjectChapter>();
+		Map<String, String> subjectMap = new HashMap<String, String>();
+		String hql = "from ExerciseGroupExtend where deleteFlag is false and groupId=? ";
+		// 查询练习组扩展表
+		ExerciseGroupExtend extend = this.findUnique(hql, CollectionUtils.newList(groupId), ExerciseGroupExtend.class);
+
+		//hql = " from ExerciseGroupItemRe where exerciseGroupId = ? and deleteFlag is false ";
+		//List<ExerciseGroupItemRe> lstItem = find(hql, CollectionUtils.newList(groupId), ExerciseGroupItemRe.class);
+
+		// 查询出所有不符合条件的数据
+		hql = "select classId from ExerciseGroup where classId in (:classIds) and originExerciseId = :groupId and deleteFlag is false";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put("classIds", classIds);
+		args.put("groupId", groupId);
+		List<String> strings = findByComplexHql(hql, args, String.class);
+		List<String> classList = new ArrayList<String>();
+		for (String classId : classIds) {
+			classList.add(classId);
+		}
+		// 剔除不符合的classId
+		classList.removeAll(strings);
+		if(classList.isEmpty()){
+			return;
+		}
+		if(StringUtils.isNotEmpty(group.getSubjectId())){
+			// 一次性查询班级ID对应的classSubjectId
+			hql = " from SchClassSubject where classId in(:classIds) and origSubjectId = :subjectId and deleteFlag is false";
+			args = new HashMap<String, Object>();
+			args.put("classIds", classList.toArray());
+			args.put("subjectId", group.getSubjectId());
+			List<SchClassSubject> lstClassSubject = findByComplexHql(hql, args, SchClassSubject.class);
+			for (SchClassSubject schClassSubject : lstClassSubject) {
+				subjectMap.put(schClassSubject.getClassId(), schClassSubject.getClassSubjectId());
+			}
+		}
+		for (String classId : classList) {
+
+			ExerciseGroup newGroup = new ExerciseGroup();
+			newGroup.setAllCount(group.getAllCount());
+			newGroup.setAttribute1(group.getAttribute1());
+			newGroup.setAttribute2(group.getAttribute2());
+			newGroup.setCollegeCourseId(collegeCourseId);
+			newGroup.setDeleteFlag(false);
+			newGroup.setDoCount(group.getDoCount());
+			newGroup.setName(group.getName());
+			newGroup.setOrgId(classMap.get(classId));
+			newGroup.setType(group.getType());
+			newGroup.setClassId(classId);
+			newGroup.setOriginExerciseId(groupId);
+			newGroup.setOrderNum(group.getOrderNum());
+			newGroup.setSubjectId(subjectMap.get(classId));
+			if(null != origChapterMap.get(classId)){
+				newGroup.setChapterId(origChapterMap.get(classId).getChapterId());
+			}else{
+				newGroup.setChapterId(null);
+			}
+			TraceUtils.setCreateTrace(newGroup);
+			this.saveExerciseGroup(newGroup);
+
+			if (extend != null) {
+				if (StringUtils.isNotBlank(extend.getExerciseTime())) {
+					addExerciseGroupExtendTime(newGroup.getGroupId(), extend.getExerciseTime(), extend.getRepeatFlag());
+				}
+				if (newGroup.getType() == ExerciseGroup.TYPE_HOMEWORK) {// 家庭作业
+					// 添加是否重做
+					addExerciseGroupExtendTime(newGroup.getGroupId(), null, extend.getRepeatFlag());
+				}
+			}
+			try {
+				
+				this.doCopyExerciseItem(newGroup.getGroupId(), groupId, null, 2);
+				
+			}catch (IllegalAccessException e) {
+				log.error("下发练习出错", e);
+			} catch (InvocationTargetException e) {
+				log.error("下发练习出错", e);
+			} catch (InstantiationException e) {
+				log.error("下发练习出错", e);
+			} catch (NoSuchMethodException e) {
+				log.error("下发练习出错", e);
+			}
+		}
+	}
+
+
+
+	/**
+	 * 添加练习时间
+	 * 
+	 * @param groupId
+	 * @param exerciseTime
+	 * @return
+	 */
+	public Result addExerciseGroupExtendTime(String groupId, String exerciseTime, boolean repeatFlag) {
+
+		String hql = "from ExerciseGroupExtend where deleteFlag is false and groupId=? ";
+
+		// 查询练习组扩展表
+		ExerciseGroupExtend extend = this.findUnique(hql, CollectionUtils.newList(groupId), ExerciseGroupExtend.class);
+
+		if (null == extend) {
+			extend = new ExerciseGroupExtend();
+			extend.setGroupId(groupId);
+			extend.setExerciseTime(exerciseTime);
+			extend.setRepeatFlag(repeatFlag);
+
+			insertExerciseGroupExtend(extend);
+		} else {
+			extend.setExerciseTime(exerciseTime);
+			extend.setRepeatFlag(repeatFlag);
+			updateExerciseGroupExtend(extend);
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 新增练习扩展表
+	 * 
+	 * @param extend
+	 * @return
+	 */
+	public Result insertExerciseGroupExtend(ExerciseGroupExtend extend) {
+
+		extend.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(extend);
+		this.save(extend);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 更新练习扩展表
+	 * 
+	 * @param extend
+	 * @return
+	 */
+	public Result updateExerciseGroupExtend(ExerciseGroupExtend extend) {
+
+		TraceUtils.setUpdateTrace(extend);
+		this.save(extend);
+
+		return new Result(true);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#readExerciseItems(java.lang.String)
+	 */
+	@Override
+	public List<ExerciseItem> readExerciseItems(String groupId) {
+		ExerciseGroup group = read(ExerciseGroup.class, groupId);
+		List<ExerciseItem> lst = group.getItems();
+		TraceUtils.removeDelete(lst);
+		return lst;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#readExerciseItems(java.lang.String) 20150901:增加排序,习题数据和前台app顺序默认一致,题号保持一致。随机练习处理
+	 */
+	@Override
+	public List<ExerciseItem> readExerciseItemsWithNo(String groupId) {
+
+		ExerciseGroup group = read(ExerciseGroup.class, groupId);
+		if (null == group) {
+			return null;
+		}
+
+		// 默认章节练习
+		String hql = "select item,re.docOrder,re.relationId " + "from ExerciseItem item,ExerciseGroupItemRe re " + "where re.exerciseGroupId=? " + "and re.exerciseItemId=item.exerciseId " + "and item.deleteFlag is false " + "and re.deleteFlag is false " + "order by re.itemOrder ";
+
+		// 随机练习,顺序练习
+		if (ExerciseGroup.TYPE_EXERCISE_RANDOM == group.getType() || ExerciseGroup.TYPE_EXERCISE_SEQUENCE == group.getType()) {
+			hql = "select item,re.docOrder,re.relationId " + "from ExerciseItem item,ExerciseGroupItemRe re " + "where re.exerciseGroupId=? and " + "re.exerciseItemId=item.exerciseId " + "and item.deleteFlag is false " + "and re.deleteFlag is false " + "order by item.chapterId, re.itemOrder ";
+		}
+
+		List<Object[]> objs = this.exerDAO.findwithRawResult(hql, CollectionUtils.newList(groupId));
+
+		List<ExerciseItem> items = new ArrayList<ExerciseItem>(objs.size());
+
+		ExerciseItem item;
+		ExerciseItem newitem;
+		if (null != objs && !objs.isEmpty()) {
+			for (int iNum = 0; iNum < objs.size(); iNum++) {
+				if (null == objs.get(iNum)) {
+					continue;
+				}
+
+				item = new ExerciseItem();
+				try {
+					newitem = (ExerciseItem) objs.get(iNum)[0];
+					newitem.setOptions(null);
+					newitem.setScores(null);
+					newitem.setAnalysises(null);
+					BeanUtils.copyProperties(item, newitem);
+				} catch (IllegalAccessException e) {
+					log.error(e, e);
+				} catch (InvocationTargetException e) {
+					log.error(e, e);
+				}
+
+				// 此序号和app一致
+				item.setItemNo(iNum + 1);
+
+				// 此序号和导入的doc文档一致,如果是导入的习题
+				if (null != objs.get(iNum)[1]) {
+					item.setDocNo((int) objs.get(iNum)[1]);
+				}
+
+				// 关联表ID
+				if (null != objs.get(iNum)[2]) {
+					item.setReId((String) objs.get(iNum)[2]);
+				}
+
+				items.add(item);
+
+			}
+		}
+
+		return items;
+	}
+
+	/**
+	 * 查看问卷详情
+	 * 
+	 * @param groupId
+	 *            问题组id
+	 * @param evaluateTemId
+	 *            模板id
+	 * @return
+	 */
+	@Override
+	public List<ExerciseItem> readExerciseItems4Evaluate(String groupId) {
+
+		ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+		if (null == group) {
+			new ResultJson(false, "习题组不存在");
+		}
+
+		QExerciseItem qItem = QExerciseItem.exerciseItem;
+		QExerciseGroupItemRe qRe = QExerciseGroupItemRe.exerciseGroupItemRe;
+		
+		List<ExerciseItem> lstItems = this.getQueryFactory()
+		.select(qItem)
+		.from(qItem,qRe)
+		.where(qItem.exerciseId.eq(qRe.exerciseItemId)
+				.and(qRe.exerciseGroupId.eq(groupId))
+				.and(qItem.deleteFlag.eq(false))
+				.and(qRe.deleteFlag.eq(false)))
+				.orderBy(qRe.itemOrder.asc())
+				.fetch();
+		
+		if(lstItems.isEmpty()){
+			return lstItems;
+		}
+		
+		// 0.组装参数
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for(int i=0; i<lstItems.size(); i++){
+			args[i] = lstItems.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+		
+		// 1.查询练习题目全站分析
+		String hql_analisis = "from ExerciseItemAnalisi  where exerciseItemId in (:exerciseIds)  and deleteFlag is false ";
+		List<ExerciseItemAnalisi> lstAnalisis = this.findByComplexHql(hql_analisis, argsMap, ExerciseItemAnalisi.class);
+		Map<String, ExerciseItemAnalisi> analisiMap = new HashMap<String, ExerciseItemAnalisi>(lstAnalisis.size());
+		for(ExerciseItemAnalisi analisis:lstAnalisis){
+			analisiMap.put(analisis.getExerciseItemId(), analisis);
+		}
+		
+		// 2.查询练习题目答案选项
+		Map<String, List<ExerciseItemOption>> optionsMap = new HashMap<String, List<ExerciseItemOption>>(lstItems.size());
+		Map<String, String> answerMap = new HashMap<String, String>();
+		String hql_options = "from ExerciseItemOption where exerciseItemId in (:exerciseIds) and deleteFlag is false order by exerciseItemId, optionOrder ";
+		List<ExerciseItemOption> lstAllOptions = this.findByComplexHql(hql_options, argsMap, ExerciseItemOption.class);
+		// 2.1.组装参数 用于查询练习选项图片
+		Map<String, Object> argsImgMap = new HashMap<String, Object>();
+		Object[] argImgs = new Object[lstAllOptions.size()];
+		for(int i=0; i<lstAllOptions.size(); i++){
+			argImgs[i] = lstAllOptions.get(i).getOptionId();
+		}
+		argsImgMap.put("optionIds", argImgs);
+		
+		// 2-3-1查询题目是否关联图片
+		String hql_itemImgs = "from ExerciseObjectImg where exerciseObjectId in (:exerciseIds) and deleteFlag is false and objectType=1 order by exerciseObjectId,imgOrder ";
+		List<ExerciseObjectImg> lstItemImgs = this.findByComplexHql(hql_itemImgs, argsMap, ExerciseObjectImg.class);
+		Map<String, List<ExerciseObjectImg>> imgItemMap = ExerciseUtils.packageExerciseItemImg(lstItemImgs);
+		
+		Map<String, List<ExerciseObjectImg>> imgOptionMap = null;
+		if(argImgs.length > 0) {
+			// 2-3-2查询题目选项是否关联图片
+			String hql_optionImgs = "from ExerciseObjectImg where exerciseObjectId in (:optionIds) and deleteFlag is false and objectType=2";
+			List<ExerciseObjectImg> lstOptionImgs = this.findByComplexHql(hql_optionImgs, argsImgMap, ExerciseObjectImg.class);
+			imgOptionMap = ExerciseUtils.packageExerciseItemImg(lstOptionImgs);
+		}
+		
+		// 重新组装练习
+		ExerciseUtils.packageExerciseItem(optionsMap, answerMap, lstAllOptions, imgOptionMap);
+		
+		
+		// 4.重新组装返回结果
+		String exerciseId = null;
+		for(ExerciseItem item:lstItems){
+			// 4.0  分析结果
+			exerciseId = item.getExerciseId();
+			
+			// 得到练习组id
+			if(StringUtils.isNotBlank(groupId)){
+				item.setExerciseGroupId(groupId);
+			}
+			
+			// 4.3 题目选项
+			item.setOptions(optionsMap.get(exerciseId));
+			
+			// 4.5题目中是否有图片
+			if(imgItemMap.get(exerciseId) != null){
+				item.setImgs(imgItemMap.get(exerciseId));
+			}
+			
+			if(analisiMap.get(exerciseId) != null){
+				item.setAnalisis(analisiMap.get(exerciseId));
+			}
+		}
+		
+		return lstItems;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#insertExerciseItem(java.lang.String, com.iqtogether.qxueyou.exercise.model.ExerciseItem, java.util.List)
+	 */
+	@Override
+	public Result insertExerciseItem(String groupId, ExerciseItem item, List<ExerciseItemOption> lstOptions, String analysis) {
+
+		TraceUtils.setCreateTrace(lstOptions);
+		// 1. 保存习题
+		ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+		handlerExerciseItem(group, item);
+		save(item);
+
+		// 2. 保存习题和习题组关系
+		// 获取一个习题需要跟新的关系条数
+		List<ExerciseGroup> result = initExerciseGroup(groupId);
+
+		// 得到当前组题目的最大题号
+		int maxGroupItemOrder = queryExerciseGroupItemNo(groupId);
+
+		List<ExerciseGroupItemRe> groupRes = initExerciseGroupItemRe(result, item.getExerciseId(), getGroupReMaxOrder(groupId), ++maxGroupItemOrder );
+
+		// 得到最大的ORDER
+		saveOrUpdateAll(groupRes);
+		
+		// 20150618:配合前台app,所有修改同时修改group表最后修改时间
+		updateGroupUpdateTimeByList(result);
+
+		// 3. 保存习题解析
+		ExerciseItemAnalisi analysisVO = new ExerciseItemAnalisi();
+		analysisVO.setAnalysis(analysis);
+		analysisVO.setAccuracy(BigDecimal.ZERO);
+		analysisVO.setSubmitCorrectNumber(BigInteger.ZERO);
+		analysisVO.setSubmitNumber(BigInteger.ZERO);
+		item.setAnalisis(analysisVO);
+		saveAnalysis(item);
+		
+
+		// 4. 保存习题选项
+		for (ExerciseItemOption option : lstOptions) {
+			option.setExerciseItemId(item.getExerciseId());
+			save(option);
+			// 新增习题选项图片
+			updateExerOptionObjImgId(option);
+		}
+		item.setOptions(lstOptions);
+
+		// 新增习题图片
+		updateExerciseObjImgId(item);
+		
+		//保存题目分数
+		List<ExerciseItemScore>  lstExerciseItemScore = item.getScores();
+		if(lstExerciseItemScore!=null && lstExerciseItemScore.size()>0){
+			for (ExerciseItemScore score : lstExerciseItemScore) {
+				TraceUtils.setCreateTrace(score);
+				score.setGroupId(groupId);
+				score.setExerciseItemId(item.getExerciseId());
+				save(score);
+			}
+		}
+		
+//		if(StringUtils.isEmpty(group.getClassId())){
+//			// 同步习题
+//			String hql = " from ExerciseGroup where originExerciseId = ?  and deleteFlag is false and groupId != ?";
+//			List<ExerciseGroup> lstGroup = find(hql, CollectionUtils.newList(group.getOriginExerciseId(), groupId), ExerciseGroup.class);
+//			List<ExerciseItem> items = find("from ExerciseItem where exerciseId = ?", CollectionUtils.newList(item.getExerciseId()), ExerciseItem.class);
+//			for (ExerciseGroup exerciseGroup : lstGroup) {
+//				exerciseGroup.setAllCount(group.getAllCount());
+//				TraceUtils.setUpdateTrace(exerciseGroup);
+//				this.saveExerciseGroup(exerciseGroup);
+//				try {
+//					this.doCopyExerciseItem(exerciseGroup.getGroupId(), groupId, items, 2);
+//				} catch (IllegalAccessException | InstantiationException | InvocationTargetException
+//						| NoSuchMethodException e) {
+//					log.error("新增练习同步到班级错误", e);
+//				}
+//			}
+//		}
+
+		return new Result(true, item.getExerciseId());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#insertExerciseItem(java.lang.String, com.iqtogether.qxueyou.exercise.model.ExerciseItem, java.util.List)
+	 */
+	@Override
+	public ResultJson insertExerciseItem4Evaluate(String groupId, ExerciseItem item,
+			List<ExerciseItemOption> lstOptions,String analysis,JSONArray titleImgs) {
+		// 1. 保存习题
+		TraceUtils.setCreateTrace(item);
+		this.save(item);
+
+		// 2、保存习题关联组
+		QExerciseGroupItemRe qRe =QExerciseGroupItemRe.exerciseGroupItemRe;
+		Integer maxGroupItemOrder = 
+				this.getQueryFactory().select(qRe.itemOrder.max())
+				.from(qRe).where(qRe.deleteFlag.eq(false).and(qRe.exerciseGroupId.eq(groupId)))
+				.fetchOne();
+
+		if (maxGroupItemOrder == null) {
+			maxGroupItemOrder = 0;
+		}
+
+		ExerciseGroupItemRe re = new ExerciseGroupItemRe();
+		re.setExerciseGroupId(groupId);
+		re.setExerciseItemId(item.getExerciseId());
+		re.setItemOrder(maxGroupItemOrder);
+		re.setDeleteFlag(false);
+		this.save(re);
+		
+		// 题目组题目个数+1
+		QExerciseGroup g = QExerciseGroup.exerciseGroup;
+		this.getQueryFactory()
+		.update(g)
+		.set(g.allCount, g.allCount.add(BigInteger.ONE))
+		.where(g.groupId.eq(groupId))
+		.execute();
+		
+		
+		// 3. 保存习题选项
+		for (int i = 0; i < lstOptions.size(); i++) {
+			ExerciseItemOption option = lstOptions.get(i);
+			option.setExerciseItemId(item.getExerciseId());
+			option.setOptionId(null);
+			option.setOptionOrder(letter[i]);
+			TraceUtils.setCreateTrace(option);
+			this.save(option);
+			
+			// 更新选项图片
+			updateEvaExerOptionObjImgId(option);
+			
+			ExerciseItemScore objExerciseItemScore = new ExerciseItemScore();
+			TraceUtils.setCreateTrace(objExerciseItemScore);
+			objExerciseItemScore.setAttribute1(option.getOptionId());
+			objExerciseItemScore.setExerciseItemId(item.getExerciseId());
+			objExerciseItemScore.setExerciseItemAnswer(letter[i]);
+			objExerciseItemScore.setScore(String.valueOf(option.getScore()));
+			this.save(objExerciseItemScore);
+		}
+		
+		// 更新题目图片
+		this.updateEvaExerciseObjImgId(titleImgs,item.getExerciseId());
+
+		// 4. 保存习题解析
+		ExerciseItemAnalisi analysisVO = new ExerciseItemAnalisi();
+		analysisVO.setAnalysis(analysis);
+		analysisVO.setAccuracy(BigDecimal.ZERO);
+		analysisVO.setSubmitCorrectNumber(BigInteger.ZERO);
+		analysisVO.setSubmitNumber(BigInteger.ZERO);
+		TraceUtils.setCreateTrace(analysisVO);
+		analysisVO.setDeleteFlag(false);
+		analysisVO.setExerciseItemId(item.getExerciseId());
+		save(analysisVO);
+		
+		return new ResultJson(true);
+	}
+
+	/**
+	 * 更新习题选项图片对象结果
+	 * 
+	 * @param optionId
+	 * @param imgIds
+	 * @return
+	 */
+	private Result updateExerciseObjImgId(ExerciseItem item) {
+
+		List<ExerciseObjectImg> imgs = item.getImgs();
+		if (imgs == null || imgs.isEmpty()) {
+			return new Result(false);
+		}
+		Object[] imgIds = new Object[imgs.size()];
+		for (int i = 0; i < imgs.size(); i++) {
+			imgIds[i] = imgs.get(i).getImgId();
+		}
+		String hql = "update ExerciseObjectImg set exerciseObjectId='" + item.getExerciseId() + "' where imgId=? and deleteFlag is false";
+
+		this.bulkUpdateInLoop(hql, imgIds);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 更新习题选项图片对象结果
+	 * 
+	 * @param optionId
+	 * @param imgIds
+	 * @return
+	 */
+	private Result updateExerOptionObjImgId(ExerciseItemOption option) {
+
+		List<ExerciseObjectImg> imgs = option.getImgs();
+		if (imgs == null || imgs.isEmpty()) {
+			return new Result(false);
+		}
+		Object[] imgIds = new Object[imgs.size()];
+		for (int i = 0; i < imgs.size(); i++) {
+			imgIds[i] = imgs.get(i).getImgId();
+		}
+		String hql = "update ExerciseObjectImg set exerciseObjectId='" + option.getOptionId() + "' where imgId=? and deleteFlag is false";
+
+		this.bulkUpdateInLoop(hql, imgIds);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 处理exerciseItem
+	 * 
+	 * @param groupId
+	 * @param item
+	 */
+	private void handlerExerciseItem(ExerciseGroup group, ExerciseItem item) {
+		// 如果是章节练习,将章节写到exerciseItem
+		if (ExerciseGroup.TYPE_CHAPTER_ITEM == group.getType()) {
+			item.setChapterId(group.getAttribute2());
+		}
+		TraceUtils.setCreateTrace(item);
+	}
+
+	private int getGroupReMaxOrder(String groupId) {
+		String hql = "select max(itemOrder) from ExerciseGroupItemRe where deleteFlag is false and exerciseGroupId = ? ";
+		Integer maxOrder = this.findUnique(hql, CollectionUtils.newList(groupId), Integer.class);
+		if (null == maxOrder) {
+			maxOrder = 0;
+		}
+		return maxOrder + 1;
+	}
+
+	/**
+	 * 刪除练习关联表数据
+	 * 
+	 * @param reIds
+	 * @return
+	 */
+	private Result deleteExerciseGroupRe(String[] reIds) {
+
+		String hql = "update ExerciseGroupItemRe set deleteFlag=1 where relationId=? ";
+
+		this.bulkUpdateInLoop(hql, reIds);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 删除练习题:只删除关系 (统一班级下,顺序随机 同步删除)
+	 * 
+	 * @param exerciceIds
+	 * @param reIds
+	 * @param groupId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Result deleteExerciseItems(String[] exerciceIds, String[] reIds, String groupId) {
+		ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+
+		// 1.更新组练习数量值 总量减去本次删除个数
+		group.setAllCount(group.getAllCount().subtract(new BigInteger(String.valueOf(exerciceIds.length))));
+		TraceUtils.setUpdateTrace(group);
+		this.save(group);
+
+		// 2.删除练习组关联表数据
+		deleteExerciseGroupRe(reIds);
+
+		// 3.重新排序此组的字段
+		updateExerciseItemNewNo(groupId);
+		
+		//清除缓存
+		redisTemplate.delete(groupId);
+		return new Result(true);
+	}
+
+	/**
+	 * 重新排序
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	private Result updateExerciseItemNewNo(String groupId) {
+		// 升序排序
+		String hql = "from ExerciseGroupItemRe re " + "where re.exerciseGroupId=? " + "and re.deleteFlag is false " + "order by re.itemOrder asc ";
+
+		List<ExerciseGroupItemRe> lstRe = this.find(hql, CollectionUtils.newList(groupId), ExerciseGroupItemRe.class);
+
+		if (lstRe.isEmpty()) {
+			return null;
+		}
+
+		// 重新排序
+		for (int i = 0; i < lstRe.size(); i++) {
+			lstRe.get(i).setItemOrder(i + 1);
+		}
+
+		this.saveOrUpdateAll(lstRe);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 根据groupId 和 itemId 读取 ExerciseGroupItemRe
+	 * 
+	 * @param groupId
+	 * @param itemId
+	 * @return
+	 */
+	/*
+	 * private ExerciseGroupItemRe readItemRe(String groupId,String itemId){
+	 * 
+	 * String hql = "from ExerciseGroupItemRe where exerciseGroupId = ? and exerciseItemId = ? "; ExerciseGroupItemRe itemRe = this.findUnique(hql, CollectionUtils.newList( groupId,itemId), ExerciseGroupItemRe.class);
+	 * 
+	 * return itemRe; }
+	 */
+
+	/**
+	 * 查询最近的记录
+	 * 
+	 * @param hql
+	 * @param page
+	 * @param args
+	 * @return
+	 */
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#importItems(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Result doImportItems(String groupId, File file) {
+
+		List<ExerciseItem> items = null;
+
+		try {
+			items = parseFile(file);
+		} catch (Exception e) {
+			log.error(e, e);
+			return new Result(false, "读取文档失败");
+		}
+
+		insertItems(groupId, items);
+
+		// 4.20150618:配合前台app,所有修改同时修改group表最后修改时间
+		List<ExerciseGroup> result = initExerciseGroup(groupId);
+		updateGroupUpdateTimeByList(result);
+		FileUtils.deleteQuietly(file.getParentFile());
+		return new Result(true, "已导入" + items.size() + "道习题");
+	}
+
+	/**
+	 * 插入习题
+	 * 
+	 * @param items
+	 */
+	private void insertItems(String groupId, List<ExerciseItem> items) {
+
+		int i = 0;
+
+		// 获取一个习题需要跟新的关系条数
+		List<ExerciseGroup> result = initExerciseGroup(groupId);
+
+		ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+
+		// 得到当前组题目的最大题号
+		int maxGroupItemOrder = queryExerciseGroupItemNo(groupId);
+
+		/*String hql = " from ExerciseGroup where originExerciseId = ?  and deleteFlag is false and groupId != ?";
+		List<ExerciseGroup> lstGroup = find(hql, CollectionUtils.newList(group.getOriginExerciseId(), groupId), ExerciseGroup.class);*/
+
+		for (ExerciseItem item : items) {
+
+			TraceUtils.setCreateTrace(item);
+			item.setDeleteFlag(false);
+			// 1. 习题
+			handlerExerciseItem(group, item);
+			save(item);
+
+			// 2. 保存习题组-习题关系(练习和非练习)
+			List<ExerciseGroupItemRe> groupRes = initExerciseGroupItemRe(result, item.getExerciseId(), item.getItemNo() == null ? i++ : item.getItemNo(), ++maxGroupItemOrder );
+			saveOrUpdateAll(groupRes);
+
+			if(StringUtils.isEmpty(group.getClassId())){
+				// 同步习题
+				String hql = " from ExerciseGroup where originExerciseId = ?  and deleteFlag is false and groupId != ?";
+				List<ExerciseGroup> lstGroup = find(hql, CollectionUtils.newList(group.getOriginExerciseId(), groupId), ExerciseGroup.class);
+				List<ExerciseItem> lstItems = find("from ExerciseItem where exerciseId = ?", CollectionUtils.newList(item.getExerciseId()), ExerciseItem.class);
+				for (ExerciseGroup exerciseGroup : lstGroup) {
+					exerciseGroup.setAllCount(group.getAllCount());
+					TraceUtils.setUpdateTrace(exerciseGroup);
+					this.saveExerciseGroup(exerciseGroup);
+					try {
+						this.doCopyExerciseItem(exerciseGroup.getGroupId(), groupId, lstItems, 2);
+					} catch (IllegalAccessException | InstantiationException | InvocationTargetException
+							| NoSuchMethodException e) {
+						log.error("新增练习同步到班级错误", e);
+					}
+				}
+			}
+			// 3. 保存习题解析
+			if (item.getAnalisis() != null) {
+				saveAnalysis(item);
+			}
+
+			// 4. 保存习题选项
+			for (ExerciseItemOption option : item.getOptions()) {
+				TraceUtils.setCreateTrace(option);
+				option.setDeleteFlag(false);
+				option.setExerciseItemId(item.getExerciseId());
+				save(option);
+			}
+		}
+
+	}
+
+	/**
+	 * 保存习题解析
+	 * 
+	 * @param item
+	 */
+	private void saveAnalysis(ExerciseItem item) {
+		ExerciseItemAnalisi analysis = item.getAnalisis();
+		if(StringUtils.isEmpty(analysis.getExerciseAnalisisId())){
+			TraceUtils.setCreateTrace(analysis);
+			analysis.setDeleteFlag(false);
+			analysis.setExerciseItemId(item.getExerciseId());
+			save(analysis);
+		}else{
+			TraceUtils.setUpdateTrace(analysis);
+			this.save(analysis);
+		}
+	}
+
+	/**
+	 * 解析word
+	 * 
+	 * @param groupId
+	 *            习题组id
+	 * @param file
+	 *            word文件绝对路径
+	 * @return
+	 * @throws RuntimeException
+	 */
+	private List<ExerciseItem> parseFile(File file) throws Exception {
+
+		Handler handler = new Handler();
+
+		// from office to txt,docx:自带序号无法解析出来,doc可以
+
+		String txtFilePath = transformDocToTxt(file);
+
+		FileReader reader = null;
+		BufferedReader br = null;
+		try {
+			reader = new FileReader(txtFilePath);
+			br = new BufferedReader(reader);
+
+			String currLine = "";
+			while ((currLine = br.readLine()) != null) {
+				handler.parse(currLine);
+			}
+		} catch (Exception e) {
+			throw new Exception("读取文档失败", e);
+		}  finally {
+			IOUtils.closeQuietly(br);
+			IOUtils.closeQuietly(reader);
+		}
+
+		Doc doc = handler.result();
+		return doc.convertExerciseItems();
+	}
+
+	/**
+	 * 从office转换到txt:2007转换:自带序号格式会丢失;2003会解析出来
+	 * 
+	 * @param file
+	 *            office文档
+	 * @return
+	 */
+	private String transformDocToTxt(File file) {
+		FileInputStream fis = null;
+		FileWriter writer = null;
+		String strText = "";
+
+		try {
+			String fileExtention = fileExtension(file.getName());
+			fis = new FileInputStream(file.getAbsolutePath());
+
+			if ("doc".equals(fileExtention)) {
+				WordExtractor extractor = new WordExtractor(fis);
+				// 获取Word文件中的文本+自带序号
+				strText = extractor.getText();
+				extractor.close();
+			} else if ("docx".equals(fileExtention)) {
+				OPCPackage opcPackage = POIXMLDocument.openPackage(file.getAbsolutePath());
+				POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
+				// 只能获取Word文件中的文本,不能取到office序号
+				strText = extractor.getText();
+				extractor.close();
+			} else {
+				throw new RuntimeException("文件格式错误, 请上传word文档(.doc及.docx)格式", null);
+			}
+
+			// 将得到的文本全角转半角
+			strText = formatFullToHalf(strText);
+
+			// 解决空格保存为txt的时候,乱码为?
+			byte bytes[] = { (byte) 0xC2, (byte) 0xA0 };
+			String UTFSpace = new String(bytes, "UTF-8");
+			strText = strText.replaceAll(UTFSpace, " ");
+
+			File txtFile = new File(file.getParentFile().getAbsolutePath() + "/" + file.getName().substring(0, file.getName().lastIndexOf(".")) + ".txt");
+			writer = new FileWriter(txtFile, true);
+			writer.write(strText);
+
+			return txtFile.getAbsolutePath();
+
+		} catch (FileNotFoundException e) {
+			throw new RuntimeException("office文档未找到", e);
+		} catch (IOException e) {
+			throw new RuntimeException("office文档读取失败", e);
+		} catch (Exception e) {
+			throw new RuntimeException(e.getMessage(), e);
+		} finally {
+			IOUtils.closeQuietly(writer);
+			IOUtils.closeQuietly(fis);
+		}
+	}
+
+	/**
+	 * 全角转半角
+	 * 
+	 * @param oriText
+	 * @return
+	 */
+	private String formatFullToHalf(String oriText) {
+		if (null == oriText || oriText.length() <= 0) {
+			return "";
+		}
+
+		char[] charArray = oriText.toCharArray();
+		// 对全角字符转换的char数组遍历
+		for (int i = 0; i < charArray.length; ++i) {
+			int charIntValue = (int) charArray[i];
+
+			// 如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换
+			if (charIntValue >= 65281 && charIntValue <= 65374) {
+				charArray[i] = (char) (charIntValue - 65248);
+			} else if (charIntValue == 12288) {
+				charArray[i] = (char) 32;
+			} else if (charIntValue == 58033) {
+				// 空格
+				charArray[i] = (char) 32;
+			} else if (charIntValue == 65380) {
+				// 顿号
+				charArray[i] = (char) 12289;
+			} else if (charIntValue == 65377) {
+				// 句号
+				charArray[i] = (char) 12290;
+			}
+		}
+		return new String(charArray);
+
+	}
+
+	/**
+	 * 解析文件后缀
+	 * 
+	 * @param filename
+	 * @return
+	 */
+	private String fileExtension(String filename) {
+
+		return filename.substring(filename.lastIndexOf('.') + 1, filename.length());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.iqtogether.qxueyou.exercise.service.IExerciseService#updateExerciseItem(com.iqtogether.qxueyou.exercise.model.ExerciseItem, java.util.List)
+	 */
+	@Override
+	public Result updateExerciseItem(ExerciseItem item, List<ExerciseItemOption> lstOptions, String analysis) {
+		//先删除所有的option,然后恢复已有的option
+		this.bulkUpdate("update ExerciseItemOption  set deleteFlag = true where exerciseItemId=?", new String[]{item.getExerciseId()});
+		// 保存Option
+		String answer = "";
+		if(lstOptions!=null){
+			for (ExerciseItemOption option : lstOptions) {
+				if(option.getChecked()){
+					if(item.getType()==ExerciseItem.TYPE_TRUE_OR_FALSE){
+						answer = answer.concat(option.getContent()).concat(",");
+					}else{
+						answer = answer.concat(option.getOptionOrder()).concat(",");
+					}
+				}
+				option.setExerciseItemId(item.getExerciseId());
+				
+				if(StringUtils.isNotEmpty(option.getOptionId())){
+					option.setDeleteFlag(false);
+					TraceUtils.setCreateTrace(option);
+				}else{
+					TraceUtils.setCreateTrace(option);
+				}
+				save(option);
+			}
+		}
+		
+		
+		// 保存item
+		if(StringUtils.isNotBlank(answer)){
+			item.setAnswer(answer.substring(0,answer.length()-1));
+		}
+		TraceUtils.setCreateTrace(item);
+		save(item);
+
+		// 保存解析
+		updateItemAnalysis(item, analysis);
+
+		// 配合前台app,所有修改同时修改group表最后修改时间
+//		updateGroupUpdateTimeByList(initUpdateExerciseGroup(item.getExerciseId()));
+		
+		//保存题目分数
+		List<ExerciseItemScore>  lstExerciseItemScore = item.getScores();
+		if(lstExerciseItemScore!=null && lstExerciseItemScore.size()>0){
+			for (ExerciseItemScore score : lstExerciseItemScore) {
+				TraceUtils.setCreateTrace(score);
+				score.setGroupId(item.getExerciseGroupId());
+				save(score);
+			}
+		}
+		return new Result(true, item.getExerciseId());
+	}
+
+	/*
+	 * 评价模块修改题目
+	 */
+	@Override
+	public ResultJson updateExerciseItem4Evaluate(ExerciseItem item, 
+			List<ExerciseItemOption> lstOptions, String analysis) {
+		
+		TraceUtils.setUpdateTrace(item);
+		
+		
+/*		// 先移除全部习题
+		QExerciseItemOption qOption = QExerciseItemOption.exerciseItemOption;
+		this.getQueryFactory()
+		.update(qOption)
+		.set(qOption.deleteFlag, true)
+		.where(qOption.exerciseItemId.eq(item.getExerciseId()))
+		.execute();
+		
+		// 移除全部分数
+		QExerciseItemScore qScore = QExerciseItemScore.exerciseItemScore;
+		this.getQueryFactory()
+		.update(qScore)
+		.set(qScore.deleteFlag, true)
+		.where(qScore.exerciseItemId.eq(item.getExerciseId()))
+		.execute();*/
+		
+		// 先移除全部习题
+		String hql = "update ExerciseItemOption set DELETE_FLAG = 1 where EXERCISE_ITEM_ID = ?";
+		super.bulkUpdateInLoop(hql, new String[] { item.getExerciseId() });
+		// 移除全部分数
+		String hql2 = "update ExerciseItemScore set DELETE_FLAG = 1 where EXERCISE_ITEM_ID = ?";
+		super.bulkUpdateInLoop(hql2, new String[] { item.getExerciseId() });
+		
+		// 1.保存item
+		this.save(item);
+		if(lstOptions != null && lstOptions.size() > 0) {
+			TraceUtils.setCreateTrace(lstOptions);
+			for (int i = 0; i < lstOptions.size(); i++) {
+				ExerciseItemOption option = lstOptions.get(i);
+				option.setExerciseItemId(item.getExerciseId());
+				if (StringUtils.isNotBlank(option.getOptionId()) && option.getOptionId().startsWith("#")) {
+					option.setOptionId(null);
+				}
+				option.setOptionOrder(letter[i]);
+				save(option);
+				
+				ExerciseItemScore objExerciseItemScore = new ExerciseItemScore();
+				TraceUtils.setCreateTrace(objExerciseItemScore);
+				objExerciseItemScore.setAttribute1(option.getOptionId());
+				objExerciseItemScore.setExerciseItemId(item.getExerciseId());
+				objExerciseItemScore.setExerciseItemAnswer(letter[i]);
+				objExerciseItemScore.setScore(String.valueOf(option.getScore()));
+				objExerciseItemScore.setExerciseItemScoreId(option.getExerciseItemScoreId());
+				save(objExerciseItemScore);
+			}
+		}
+		
+		// 4. 更新习题解析
+		QExerciseItemAnalisi analysisVO = QExerciseItemAnalisi.exerciseItemAnalisi;
+		this.getQueryFactory()
+		.update(analysisVO)
+		.set(analysisVO.analysis, analysis)
+		.set(analysisVO.updateTime, new Date(System.currentTimeMillis()))
+		.where(analysisVO.exerciseItemId.eq(item.getExerciseId()))
+		.execute();
+		
+		return new ResultJson(true);
+	}
+
+	/**
+	 * 更新解析
+	 * 
+	 * @param item
+	 * @param analysis
+	 */
+	private void updateItemAnalysis(ExerciseItem item, String analysis) {
+		if (item.getAnalisis() == null) {
+			ExerciseItemAnalisi analysisVO = new ExerciseItemAnalisi();
+
+			TraceUtils.setCreateTrace(analysisVO);
+			analysisVO.setDeleteFlag(false);
+
+			analysisVO.setAnalysis(analysis);
+			analysisVO.setAccuracy(BigDecimal.ZERO);
+			analysisVO.setSubmitCorrectNumber(BigInteger.ZERO);
+			analysisVO.setSubmitNumber(BigInteger.ZERO);
+
+			item.setAnalisis(analysisVO);
+
+			saveAnalysis(item);
+		} else {
+			ExerciseItemAnalisi analysisVO = item.getAnalisis();
+			TraceUtils.setCreateTrace(analysisVO);
+			analysisVO.setAnalysis(analysis);
+
+			save(analysisVO);
+		}
+	}
+
+	/**
+	 * 组装ExerciseGroup的list,传入一个groupid,得到同时需要修改的一个或者多个group对象
+	 * 
+	 * @param groupId
+	 *            主键
+	 * @return
+	 */
+	@Override
+	public List<ExerciseGroup> initExerciseGroup(String groupId) {
+		// 0.获取groupID对应的type,如果是习题(顺机序、随和章节,需要按不同情况同时更新)
+		// 1.如果是章节练习,需要同步修改顺序随机练习
+		// 2.如果是顺序,需同步修改随机;如果是随机练习亦然
+		ExerciseGroup group = read(ExerciseGroup.class, groupId);
+		List<ExerciseGroup> result = new ArrayList<ExerciseGroup>();
+		short sType = 0;
+		if (group != null) {
+			sType = group.getType();
+			String hsql = "";
+			if (sType == ExerciseGroup.TYPE_CHAPTER_ITEM || sType == ExerciseGroup.TYPE_EXERCISE_RANDOM || sType == ExerciseGroup.TYPE_EXERCISE_SEQUENCE) {
+				hsql = "from ExerciseGroup where classId = ? and (type = ? or type = ?) and deleteFlag  is false ";
+				result = find(hsql, CollectionUtils.newList(ClientUtils.getClassId(), ExerciseGroup.TYPE_EXERCISE_SEQUENCE, ExerciseGroup.TYPE_EXERCISE_RANDOM), ExerciseGroup.class);
+			}
+			if (sType != ExerciseGroup.TYPE_EXERCISE_SEQUENCE && sType != ExerciseGroup.TYPE_EXERCISE_RANDOM) {
+				result.add(group);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * 组装ExerciseGroup的list,传入一个groupid,得到同时需要修改的一个或者多个group对象
+	 * 
+	 * @param groupId
+	 *            主键
+	 * @return
+	 */
+	public List<ExerciseGroup> initUpdateExerciseGroup(String exerciseId) {
+		// 修改关联的exerciseId,deleteflag is false(暂时全部处理)
+		List<ExerciseGroup> lstGroup = new ArrayList<ExerciseGroup>();
+
+		String hql = "select e.exerciseGroupId from ExerciseGroupItemRe e where deleteFlag is false and e.exerciseItemId = ? ";
+		List<Object> groupId = find(hql, CollectionUtils.newList(exerciseId), Object.class);
+
+		if (null != groupId && !groupId.isEmpty()) {
+			String hql0 = " from ExerciseGroup e where e.deleteFlag is false and e.groupId in  (  ";
+			for (int i = 0; i < groupId.size(); i++) {
+				if (i == groupId.size() - 1) {
+					hql0 = hql0.concat(" ? ) ");
+				} else {
+					hql0 = hql0.concat(" ?, ");
+				}
+			}
+			lstGroup = find(hql0, groupId, ExerciseGroup.class);
+		}
+
+		return lstGroup;
+	}
+
+	/**
+	 * 批量删除ExerciseGroup,删除逻辑:如果是练习,顺序和随机练习时同步删除的(此处代码)
+	 * 
+	 * @param groupId
+	 *            主键,多个id时以","分隔
+	 * @return
+	 */
+	public Result deleteExerciseGroup(String groupId) {
+
+		// 逻辑删除,只需要修改exercise_group、exercise_item的删除标识即可
+		if (StringUtils.isNotBlank(groupId)) {
+			// 需要删除的练习组
+			Object[] arrGroupId = groupId.split(",");
+			// 存储顺序练习或者随机练习
+			List<ExerciseGroup> lstResults = initDeleteExerciseGroup(arrGroupId);
+
+			// 需要删除的练习类型下的练习题
+			//List<ExerciseItem> lstItem = initDeleteExerciseItem(lstResults);
+
+			// 删除习题组,修改习题组最后修改时间
+			if (lstResults != null) {
+				for (ExerciseGroup group : lstResults) {
+					group.setDeleteFlag(true);
+					
+					TraceUtils.setUpdateTrace(group);
+					this.saveExerciseGroup(group);
+					// group.setUpdateTime(new Date(System.currentTimeMillis()));
+				}
+			}
+
+			/*// 删除习题
+			if (lstItem != null) {
+				for (ExerciseItem item : lstItem) {
+					item.setDeleteFlag(true);
+				}
+				saveOrUpdateAll(lstItem);
+			}*/
+			// 20150618:配合前台app,所有修改同时修改group表最后修改时间
+			//updateGroupUpdateTimeByList(lstResults);
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * 组装练习组
+	 * 
+	 * @param name
+	 *            练习名称
+	 * @param type
+	 *            练习组类型
+	 * @param lessonId
+	 *            课程
+	 * @param chapterId
+	 *            章节
+	 * @return
+	 */
+	private List<ExerciseGroup> initExerciseGroupList(String name, short type, String lessonId, String chapterId, int iCount) {
+		List<ExerciseGroup> lstExerciseGroup = new ArrayList<ExerciseGroup>();
+		List<Short> lstType = new ArrayList<Short>();
+
+		// iCount:0、 新增三种(选择了章节),增加两种:没有选择章节;1,新增两种(顺序随机),2,新增一种(章节),3的话,不增加
+		if (type == ExerciseGroup.TYPE_EXERCISE_SEQUENCE) {
+			if (iCount == 0) {
+				lstType.add(type);
+				lstType.add(ExerciseGroup.TYPE_EXERCISE_RANDOM);
+				if (StringUtils.isNotBlank(lessonId) && StringUtils.isNotBlank(chapterId)) {
+					lstType.add(ExerciseGroup.TYPE_CHAPTER_ITEM);
+				}
+			} else if (iCount == 1) {
+				lstType.add(type);
+				lstType.add(ExerciseGroup.TYPE_EXERCISE_RANDOM);
+			} else if (iCount == 2) {
+				lstType.add(ExerciseGroup.TYPE_CHAPTER_ITEM);
+			} else if (iCount == 3 && StringUtils.isNotBlank(chapterId)) {// 等于3,章节练习,顺序练习,随机练习都有,增加章节练习
+				lstType.add(ExerciseGroup.TYPE_CHAPTER_ITEM);
+			}
+		} else {
+			lstType.add(type);
+		}
+
+		for (short iType : lstType) {
+			lstExerciseGroup.add(initExerciseGroup(name, iType, lessonId, chapterId));
+		}
+		return lstExerciseGroup;
+	}
+
+	/**
+	 * 组装练习
+	 * 
+	 * @param name
+	 *            练习名称
+	 * @param type
+	 *            练习类型
+	 * @param lessonId
+	 *            课程
+	 * @param chapterId
+	 *            章节
+	 * @return
+	 */
+	private ExerciseGroup initExerciseGroup(String name, short type, String lessonId, String chapterId) {
+		// 构建实体
+		ExerciseGroup objExerciseGroup = new ExerciseGroup();
+
+		TraceUtils.setCreateTrace(objExerciseGroup);
+		objExerciseGroup.setDeleteFlag(false);
+		objExerciseGroup.setAllCount(BigInteger.ZERO);
+		objExerciseGroup.setSubjectId(lessonId);
+		objExerciseGroup.setChapterId(chapterId);
+		if (ExerciseGroup.TYPE_EXERCISE_RANDOM == type) {
+			objExerciseGroup.setName("随机练习");
+		} else if (ExerciseGroup.TYPE_EXERCISE_SEQUENCE == type) {
+			objExerciseGroup.setName("顺序练习");
+		} else {
+			objExerciseGroup.setName(name);
+		}
+
+		objExerciseGroup.setType(type);
+		objExerciseGroup.setClassId(ClientUtils.getClassId());
+		objExerciseGroup.setOrgId(ClientUtils.getOrgId());
+		objExerciseGroup.setCollegeCourseId(ClientUtils.getCourseId());
+		// 章节练习需要存储
+		if (type == ExerciseGroup.TYPE_CHAPTER_ITEM) {
+			// 章节练习存放lessonId
+			//objExerciseGroup.setAttribute1(lessonId);
+			// 章节练习存放chapterID
+			objExerciseGroup.setAttribute2(chapterId);
+		}
+		return objExerciseGroup;
+	}
+
+	/**
+	 * 组装关联信息
+	 * 
+	 * @param lstGroup
+	 *            练习组
+	 * @param itemId
+	 *            练习题id
+	 * @param itemOrder
+	 *            练习题序号
+	 * @return
+	 */
+	private List<ExerciseGroupItemRe> initExerciseGroupItemRe(List<ExerciseGroup> lstGroup, String itemId, int docOrder,int maxGroupItemOrder) {
+
+		List<ExerciseGroupItemRe> lstExerciseGroupItemRe = new ArrayList<ExerciseGroupItemRe>();
+
+		for (ExerciseGroup group : lstGroup) {
+			ExerciseGroupItemRe re = new ExerciseGroupItemRe();
+			re.setExerciseGroupId(group.getGroupId());
+			re.setExerciseItemId(itemId);
+			re.setItemOrder(maxGroupItemOrder);
+			re.setDeleteFlag(false);
+			if (docOrder > -1) {
+				re.setDocOrder(docOrder);
+			}
+			lstExerciseGroupItemRe.add(re);
+		}
+		return lstExerciseGroupItemRe;
+	}
+
+	/**
+	 * 查询当前组的最大题号
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	private int queryExerciseGroupItemNo(String groupId) {
+
+		String hql = "select max(itemOrder) from ExerciseGroupItemRe t where deleteFlag is false and  exerciseGroupId=?";
+
+		Integer itemOrder = this.findUnique(hql, CollectionUtils.newList(groupId), Integer.class);
+
+		if (itemOrder == null) {
+			return 0;
+		}
+
+		return itemOrder;
+	}
+
+	/**
+	 * 组装需要删除的练习组
+	 * 
+	 * @param lstResult
+	 *            存储非顺序 练习非随机练习
+	 * @param lstResults
+	 *            存储顺序练习或者随机练习
+	 * @param arrGroupId
+	 *            groupid的数组
+	 */
+	private List<ExerciseGroup> initDeleteExerciseGroup(Object[] arrGroupId) {
+		List<ExerciseGroup> lstResults = new ArrayList<ExerciseGroup>();
+		List<ExerciseGroup> lstResult = new ArrayList<ExerciseGroup>();
+		String hsql = " from ExerciseGroup where groupId in ( ";
+		for (int i = 0; i < arrGroupId.length - 1; i++) {
+			hsql = hsql.concat("? , ");
+		}
+		hsql =  hsql.concat("? ) ");
+		List<ExerciseGroup> result = find(hsql, CollectionUtils.newList(arrGroupId), ExerciseGroup.class);
+		// 一个班级只有一个顺序练习和一个随机练习
+		int iNumber = 0;
+		for (ExerciseGroup group : result) {
+			if (group.getType() == ExerciseGroup.TYPE_EXERCISE_SEQUENCE || group.getType() == ExerciseGroup.TYPE_EXERCISE_RANDOM) {
+				iNumber++;
+				lstResults.add(group);
+			} else {
+				lstResult.add(group);
+			}
+		}
+		// 一个班级只选择了顺序或者只选择了随机,两个类型都需要删除
+		if (iNumber == 1) {
+			hsql = "from ExerciseGroup where type in (?,?) and classId = ? and deleteFlag is false ";
+			lstResults = find(hsql, CollectionUtils.newList(ExerciseGroup.TYPE_EXERCISE_SEQUENCE, ExerciseGroup.TYPE_EXERCISE_RANDOM, lstResults.get(0).getClassId()), ExerciseGroup.class);
+		}
+		lstResults.addAll(lstResult);
+
+		return lstResults;
+	}
+
+	/**
+	 * 获取需要删除的练习题(删除习题组时调用)
+	 * 
+	 * @param lstResults
+	 *            需要删除的练习组
+	 *//*
+	private List<ExerciseItem> initDeleteExerciseItem(List<ExerciseGroup> lstResults) {
+		String hsql = "from ExerciseItem where exerciseId in ( select exerciseItemId from ExerciseGroupItemRe " + "  where deleteFlag is false and  exerciseGroupId in ( ";
+		List<Object> arrGroupId = new ArrayList<Object>();
+		for (int i = 0; i < lstResults.size(); i++) {
+			if (i != lstResults.size() - 1) {
+				hsql = hsql.concat("? , ");
+			}
+			arrGroupId.add(lstResults.get(i).getGroupId());
+		}
+
+		// 需要删除的练习题(为练习类型时)
+		hsql = hsql.concat("? )  group by exerciseItemId having count(1) = 3 )");
+
+		// 这个SQL特别慢
+		List<ExerciseItem> lstItem = find(hsql, arrGroupId, ExerciseItem.class);
+		List<ExerciseItem> lstItems = new ArrayList<ExerciseItem>();
+
+		// 剔除顺序,随机、章节练习
+		List<Object> lstParams = new ArrayList<Object>();
+		for (ExerciseGroup group : lstResults) {
+			if (group.getType() != ExerciseGroup.TYPE_EXERCISE_SEQUENCE && group.getType() != ExerciseGroup.TYPE_CHAPTER_ITEM && group.getType() != ExerciseGroup.TYPE_EXERCISE_RANDOM) {
+				lstParams.add(group.getGroupId());
+			}
+		}
+		if (!lstParams.isEmpty()) {
+			hsql = "from ExerciseItem where exerciseId in ( select exerciseItemId from ExerciseGroupItemRe where deleteFlag is false and exerciseGroupId in ( ";
+			for (int i = 0; i < lstParams.size() - 1; i++) {
+				hsql = hsql.concat("? , ");
+			}
+			hsql =hsql.concat( "? )  )");
+			lstItems = find(hsql, lstParams, ExerciseItem.class);
+		}
+		// 需要删除的习题
+		if (lstItem != null) {
+			lstItem.addAll(lstItems);
+		}
+		return lstItem;
+	}*/
+
+	/**
+	 * :后台 插入评估模板时调用
+	 * 
+	 * @param name
+	 * @param type
+	 * @return
+	 */
+	public ExerciseGroup insertExerciseGroup(String name, short type) {
+
+		ExerciseGroup obj = new ExerciseGroup();
+		TraceUtils.setCreateTrace(obj);
+		obj.setName(name);
+		obj.setType(type);
+		obj.setClassId(ClientUtils.getClassId());
+		obj.setOrgId(ClientUtils.getOrgId());
+		save(obj);
+
+		// 保存
+		return obj;
+	}
+
+	/**
+	 * 查询练习列表,还需查询联系下面习题个数
+	 * 
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	public List<ExerciseGroup> queryExerciceGroupList(String hql, List<Object> args) {
+		return exerDAO.queryExerciceGroupList(hql, args);
+	}
+
+	/**
+	 * 所有练习修改操作需要同时修改group的updateTime
+	 * 
+	 * @param lstGroup
+	 */
+	private void updateGroupUpdateTimeByList(List<ExerciseGroup> lstGroup) {
+		if (null != lstGroup && !lstGroup.isEmpty()) {
+			for (ExerciseGroup obj : lstGroup) {
+				int iExerciseCount = this.findCount("select count(1) from ExerciseGroupItemRe where deleteFlag is false and exerciseGroupId = ?",
+						CollectionUtils.newList(obj.getGroupId()));
+				obj.setAllCount(BigInteger.valueOf(iExerciseCount));
+				obj.setUpdateTime(new Date());
+				this.saveExerciseGroup(obj);
+			}
+			//saveOrUpdateAll(lstGroup);
+		}
+	}
+
+	/**
+	 * 后台:批量删除ExerciseGroup
+	 * 
+	 * @param groupId
+	 *            主键,多个id时以","分隔
+	 * @param type
+	 *            多个type时以","分隔
+	 * @return
+	 */
+	public Result deleteExerciseGroup(String groupId, String type, String deleteType,Integer delAll, String orgIds[], String classIds[]) {
+		if (StringUtils.isBlank(groupId) || StringUtils.isBlank(type)) {
+			return new Result(true);
+		}
+		String[] groupIds = groupId.split(",");
+		String[] types = type.split(",");
+		if (groupIds.length != types.length) {
+			return new Result(false);
+		}
+		if ("org".equals(deleteType)) {
+			//管理员删除练习
+			deleteOrgGroup(groupIds,delAll,orgIds,classIds);
+			return new Result(true);
+		}
+		// 删除逻辑:练习和其他分开处理(SQL执行简单)
+		// 删除练习:随机和顺序是一致的;如果只删除随机或者顺序,只删除章节,则只删除习题组;如果只删除章节:同样只删除组
+		// 删除时:顺序或者随机+章节:删除组+章节对应的习题
+		boolean randomFlag = false;
+		boolean chapterFlag = false;
+
+		if (type.indexOf(String.valueOf(ExerciseGroup.TYPE_EXERCISE_RANDOM)) != -1
+				|| type.indexOf(String.valueOf(ExerciseGroup.TYPE_EXERCISE_SEQUENCE)) != -1) {
+			randomFlag = true;
+		}
+		if (type.indexOf(String.valueOf(ExerciseGroup.TYPE_CHAPTER_ITEM)) != -1) {
+			chapterFlag = true;
+		}
+
+		//  拆除子方法
+		Result  result = deleteChildExerciseGroup(groupIds, types, randomFlag, chapterFlag);
+		
+		if(!result.isSuccess()){
+			return result;	
+		}
+		
+		return new Result(true);
+
+	}
+	
+	/**
+	 * 拆除子方法
+	 * @param groupIds
+	 * @param types
+	 * @param randomFlag
+	 * @param chapterFlag
+	 * @return
+	 */
+	private Result deleteChildExerciseGroup(String[] groupIds, String[] types,
+			boolean randomFlag, boolean chapterFlag) {
+		// 1. 无练习
+		if (!randomFlag && !chapterFlag) {
+			return deleteExercise(groupIds, groupIds);
+		}
+		// 2. 有随机有章节
+		if (randomFlag && chapterFlag) {
+			return deleteExerciseAll(groupIds);
+		}
+		// 3.1. 随机、章节只有一种,删除组:第一种情况:保证顺序随机一致;第二种:删除章节
+		if (randomFlag) {
+			return deleteExerciseSequence(groupIds, types);
+		}
+		return deleteExerciseChapter(groupIds, types);
+	}
+	
+	private void deleteOrgGroup(String groupIds[],Integer delAll, String orgIds[], String classIds[]){
+		for (String string : groupIds) {
+			if ((orgIds != null && orgIds.length != 0)  || (classIds != null && classIds.length != 0)) {
+				//删除要回撤的练习
+				deleteAppoint(string,orgIds,classIds);
+			}else{
+				String hql = " from ExerciseReCourse where groupId = ? and deleteFlag is false and orgId = ?";
+				ExerciseReCourse erc = findUnique(hql, CollectionUtils.newList(string, ClientUtils.getOrgId()), ExerciseReCourse.class);
+				if (erc != null) {
+					erc.setDeleteFlag(true);
+					TraceUtils.setUpdateTrace(erc);
+					save(erc);
+					
+					this.courseWareService.deleteOrgCourseware(erc.getGroupId(), erc.getOrgId());
+				}
+				/*ExerciseGroup group = this.read(ExerciseGroup.class, string);
+				if(group != null){
+					TraceUtils.setUpdateTrace(group);
+					group.setDeleteFlag(true);
+					this.saveExerciseGroup(group);
+				}*/
+				if(delAll==1){
+					//删除下级
+					deleteSub(string,ClientUtils.getOrgId());
+				}
+			}
+			
+		}
+	}
+	
+	
+	@SuppressWarnings("unchecked")
+	private void deleteSub(String groupId,String currOrgId){
+		// 机构层级视频是没有重新new ,查询出机构下级ID再删关联表
+				String sql = " select oa.organization_id from organization as oa,organization ob " +
+						" where " +
+						" ob.ORGANIZATION_ID = ? " +
+						" and  " +
+						" oa.org_code like  CONCAT(ob.org_code,'%' ) " +
+						" and oa.delete_flag is false and ob.delete_flag is false "+
+						" order by oa.level,oa.org_code asc " ;
+				
+			List<String> orgIds = this.findBySql(sql, CollectionUtils.newList(currOrgId));
+			
+			String hql = " from ExerciseReCourse where groupId = :groupId and deleteFlag is false and orgId in (:orgIds)";
+			Map<String,Object> map = new HashMap<String, Object>();
+			map.put("groupId", groupId);
+			map.put("orgIds", orgIds.toArray());
+			List<ExerciseReCourse> groupCourses = findByComplexHql(hql, map, ExerciseReCourse.class);
+			for (ExerciseReCourse groupCourse : groupCourses) {
+				groupCourse.setDeleteFlag(true);
+				TraceUtils.setUpdateTrace(groupCourse);
+				this.save(groupCourse);
+			}
+			
+			// 班主任层面视频指定过后都是new 出来的,通过originVideoId 可以查出所有指定过去的视频
+			hql = "select classId from ClsClass where orgId in (:orgIds) and deleteFlag is false";
+			map = new HashMap<String, Object>();
+			map.put("orgIds", orgIds.toArray());
+			List<String> clsIds = findByComplexHql(hql, map, String.class);
+			if(!clsIds.isEmpty()){
+				hql = " from ExerciseGroup where originExerciseId = :groupId and deleteFlag is false and groupId!=originExerciseId and classId in (:classIds)";
+				map = new HashMap<String, Object>();
+				map.put("groupId", groupId);
+				map.put("classIds", clsIds.toArray());
+				List<ExerciseGroup> lstExerciseGroup = findByComplexHql(hql, map, ExerciseGroup.class);
+				for (ExerciseGroup group : lstExerciseGroup) {
+					group.setDeleteFlag(true);
+					TraceUtils.setUpdateTrace(group);
+					this.saveExerciseGroup(group);
+				}
+			}
+	}
+	
+	private Result deleteAppoint(String groupId,String orgIds[],String classIds[]){
+		Map<String, Object> args = new HashMap<String, Object>();
+		// 删除需要回撤的机构视频
+		if (orgIds.length != 0) {
+			
+			String hql = " from ExerciseReCourse where groupId = :groupId and deleteFlag is false and orgId in (:orgIds) and orgId != :currOrgId";
+			args = new HashMap<String, Object>();
+			args.put("groupId", groupId);
+			args.put("orgIds", orgIds);
+			args.put("currOrgId", ClientUtils.getOrgId());
+			List<ExerciseReCourse> courses = findByComplexHql(hql, args, ExerciseReCourse.class);
+			for (ExerciseReCourse exercise : courses) {
+				TraceUtils.setUpdateTrace(exercise);
+				exercise.setDeleteFlag(true);
+				save(exercise);
+				
+				this.courseWareService.deleteOrgCourseware(exercise.getGroupId(), exercise.getOrgId());
+			}
+		}
+
+		// 删除需要回撤的班主任视频
+		if (classIds.length != 0) {
+			args = new HashMap<String, Object>();
+			args.put("groupId", groupId);
+			args.put("classIds", classIds);
+			String hql = " from ExerciseGroup where originExerciseId = :groupId and deleteFlag is false and classId in (:classIds)";
+			List<ExerciseGroup> groups = findByComplexHql(hql, args, ExerciseGroup.class);
+			for (ExerciseGroup group : groups) {
+				TraceUtils.setUpdateTrace(group);
+				group.setDeleteFlag(true);
+				this.saveExerciseGroup(group);
+			}
+			
+		}
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 有顺序和章节练习时的删除逻辑
+	 * 
+	 * @param groupIds
+	 * @param types
+	 * @return
+	 */
+	private Result deleteExerciseAll(String[] groupIds) {
+		String hql = "select groupId from ExerciseGroup where deleteFlag is false and classId = ? and type in (?,?) ";
+		List<String> exeGroupId = find(hql, CollectionUtils.newList(ClientUtils.getClassId(), ExerciseGroup.TYPE_EXERCISE_RANDOM, ExerciseGroup.TYPE_EXERCISE_SEQUENCE), String.class);
+		// 组
+		exeGroupId.addAll(Arrays.asList(groupIds));
+
+		return deleteExercise((String[]) exeGroupId.toArray(new String[exeGroupId.size()]), groupIds);
+	}
+
+	/**
+	 * 只有順序或者随机时删除逻辑
+	 * 
+	 * @param groupIds
+	 * @param types
+	 * @return
+	 */
+	private Result deleteExerciseSequence(String[] groupIds, String[] types) {
+		String hql = "select groupId from ExerciseGroup where deleteFlag is false and classId = ? and type in (?,?) ";
+		List<String> exeGroupId = find(hql, CollectionUtils.newList(ClientUtils.getClassId(), ExerciseGroup.TYPE_EXERCISE_RANDOM, ExerciseGroup.TYPE_EXERCISE_SEQUENCE), String.class);
+		// 1.组
+		exeGroupId.addAll(Arrays.asList(groupIds));
+
+		// 2.删除题,不处理练习
+		for (int i = 0; i < types.length; i++) {
+			if (types[i] == String.valueOf(ExerciseGroup.TYPE_EXERCISE_RANDOM) || types[i] == String.valueOf(ExerciseGroup.TYPE_EXERCISE_SEQUENCE)) {
+				groupIds[i] = "";
+			}
+		}
+		return deleteExercise((String[]) exeGroupId.toArray(new String[exeGroupId.size()]), groupIds);
+	}
+
+	/**
+	 * 只有章节练习是的删除逻辑
+	 * 
+	 * @param groupIds
+	 * @param types
+	 * @return
+	 */
+	private Result deleteExerciseChapter(String[] groupIds, String[] types) {
+		// 1.组 groupIds
+		// 2.删除题,不处理练习
+		String[] groupItemIds = new String[groupIds.length];
+		for (int i = 0; i < types.length; i++) {
+			if (types[i] == String.valueOf(ExerciseGroup.TYPE_CHAPTER_ITEM)) {
+				groupItemIds[i] = "";
+			} else {
+				groupItemIds[i] = groupIds[i];
+			}
+		}
+		return deleteExercise(groupIds, groupItemIds);
+	}
+
+	/**
+	 * 后台:执行删除习题组操作
+	 * 
+	 * @param groupIds
+	 *            删除组的组id
+	 * @param groupItemIds
+	 *            需要删除题的组id
+	 * @return
+	 */
+	private Result deleteExercise(String[] groupIds, String[] groupItemIds) {
+		// 1.删除组
+		bulkUpdateInLoop("update ExerciseGroup set deleteFlag = true where groupId = ? ", groupIds);
+		// 1.删除课件
+		bulkUpdateInLoop("update SchCourseware set deleteFlag = true where id = ? ", groupIds);
+		
+		// 2.删除题
+		bulkUpdateInLoop("update ExerciseGroupItemRe set deleteFlag = true "
+				+ " where exerciseGroupId = ? and deleteFlag = false ", groupItemIds);
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 发送练习系统通知
+	 * 
+	 * @param notice
+	 * @return
+	 * 
+	 *         private Result sendSysMsg(ExerciseGroup group){
+	 * 
+	 *         ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+	 * 
+	 *         msg.put("msgType", "SYS_EXER_SAVE"); msg.put("groupId", group.getGroupId()); msg.put("classId", ClientUtils.getClassId());
+	 * 
+	 *         try {
+	 * 
+	 *         onsProducer.sendMsg(msg);
+	 * 
+	 *         return new Result(true);
+	 * 
+	 *         } catch (Exception e) { log.error("call DocdealMsgSendService fail.userId: " + group.getGroupId(), e); }
+	 * 
+	 *         return new Result(false); }
+	 */
+
+	/**
+	 * 添加练习图片
+	 * 
+	 * @param imgPath
+	 * @param imgObjId
+	 * @param imgObjType
+	 * @return
+	 */
+	public List<Map<String, Object>> doAddExerciseObjImg(String[] imgPath, String imgObjId, int imgObjType) {
+
+		String hql = "from ExerciseObjectImg where deleteFlag is false and exerciseObjectId=? and objectType=? order by imgOrder desc";
+		// 查询此练习是否已经存在记录
+		List<ExerciseObjectImg> lstObjImg = this.find(hql, CollectionUtils.newList(imgObjId, imgObjType), ExerciseObjectImg.class);
+
+		int imgOrder = 1;
+		if (!lstObjImg.isEmpty()) {
+			imgOrder = lstObjImg.get(0).getImgOrder() + 1;
+		}
+
+		List<ExerciseObjectImg> lstImg = new ArrayList<ExerciseObjectImg>(imgPath.length);
+		ExerciseObjectImg img = new ExerciseObjectImg();
+		img.setObjectType(imgObjType);
+		img.setImgPath(imgPath[0]);
+		img.setExerciseObjectId(imgObjId);
+		img.setImgOrder(imgOrder);
+		img.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(img);
+		lstImg.add(img);
+
+		for (int i = 1; i < imgPath.length; i++) {
+			img.setImgPath(imgPath[i]);
+			img.setImgOrder(imgOrder++);
+			lstImg.add(img);
+		}
+
+		this.saveOrUpdateAll(lstImg);
+
+		List<Map<String, Object>> lstResult = new ArrayList<Map<String, Object>>(lstImg.size());
+		Map<String, Object> resultMap = null;
+		for (ExerciseObjectImg obj : lstImg) {
+			resultMap = new HashMap<String, Object>(2);
+			resultMap.put("imgId", obj.getImgId());
+			resultMap.put("imgPath", obj.getImgPath());
+			lstResult.add(resultMap);
+		}
+		return lstResult;
+	}
+
+	/**
+	 * 删除图片
+	 */
+	public Result dodelExerciseObjImg(String imgId) {
+
+		ExerciseObjectImg img = this.read(ExerciseObjectImg.class, imgId);
+		img.setDeleteFlag(true);
+		TraceUtils.setUpdateTrace(img);
+		this.save(img);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 导入习题:深度解析word文档
+	 * 
+	 * @param groupId
+	 *            习题组Id
+	 * @param file
+	 * @param uuid
+	 * @return
+	 */
+	public Result doDeepAnalysisDoc(String groupId,String fullPath){
+		
+		return insertDeepAnalysis(fullPath,groupId);
+		
+	}
+
+	/**
+	 * 新增深度解析记录
+	 * 
+	 * @param destPath
+	 *            文件路径
+	 * @param groupId
+	 *            习题组ID
+	 * @return
+	 */
+	private Result insertDeepAnalysis(String destPath, String groupId) {
+		ExerciseDeepAnalysis objDeepAna = new ExerciseDeepAnalysis();
+		TraceUtils.setCreateTrace(objDeepAna);
+		objDeepAna.setDocPath(destPath);
+
+		objDeepAna.setUserId(ClientUtils.getUserId());
+		objDeepAna.setUserAccount(ClientUtils.getUserAccount());
+		objDeepAna.setOrgId(ClientUtils.getOrgId());
+		objDeepAna.setOrgName(ClientUtils.getOrgName());
+		objDeepAna.setClassId(ClientUtils.getClassId());
+		objDeepAna.setClassName(ClientUtils.getClassName());
+
+		String hql = " from OrgCharger o where o.deleteFlag  is false and o.userId = ?  ";
+		OrgCharger charger = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId()), OrgCharger.class);
+
+		objDeepAna.setChargerId(charger.getChargerId());
+		objDeepAna.setChargerName(charger.getName());
+
+		objDeepAna.setStatus(ExerciseDeepAnalysis.STATUS_TODO);
+
+		objDeepAna.setExerciseGroupId(groupId);
+		objDeepAna.setExerciseGroupName(this.read(ExerciseGroup.class, groupId).getName());
+
+		objDeepAna.setSubmitTime(new Date(System.currentTimeMillis()));
+
+		this.insert(objDeepAna);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 导入习题,将解析结果返回到前台
+	 * 
+	 * @param groupId
+	 *            习题组ID
+	 * @param file
+	 * @return
+	 */
+	public ExerciseParseResult doParseItems(String groupId, String fullPath , String module ) {
+		
+		//取得当前上传文件类型
+		String filePart[] = fullPath.split("\\.");
+		String fileType = filePart[filePart.length -1];
+		String uuid =  UUIDUtils.generateUUID();
+		String filePath = ExerciseService.class.getClassLoader().getResource("../uploads").getPath().concat("exercise/"+ uuid + "/" + uuid + "."+fileType);
+		File file = fileUploadService.doGetOssFile(fullPath, filePath, module,ClientUtils.getUserId());
+		
+		ExerciseParseResult objResult = null ;
+		
+		try {
+			objResult = parseWordFile(file);
+		} catch (Exception e) {
+			log.error(e, e);
+			if ("文件格式错误, 请上传word文档(.doc及.docx)格式".equals(e.getMessage())) {
+				return new ExerciseParseResult(false, e.getMessage());
+			}
+			return new ExerciseParseResult(false, "读取文档失败");
+		}
+		
+		//更新上传文件使用轨迹
+		fileUploadService.updateUploadTrace(fullPath, module, SysFileUploadTrace.FILE_USE, groupId);
+		
+		objResult.setItemCount(objResult.getLstItems().size());
+		objResult.setLstItems(null);
+		objResult.setParseFlag(true);
+
+		if( null != file ){
+			fileUploadService.doDeleteTempOssFile(file.getParentFile(), module, ClientUtils.getUserId());
+		}
+		
+		return objResult;
+	}
+
+	/**
+	 * 解析word
+	 * 
+	 * @param groupId
+	 *            习题组id
+	 * @param file
+	 *            word文件绝对路径
+	 * @return
+	 * @throws RuntimeException
+	 */
+	private ExerciseParseResult parseWordFile(File file) throws Exception {
+
+		ExerciseParseResult parseResult = new ExerciseParseResult();
+
+		ArrayList<ExerciseImportResult> lstResult = new ArrayList<ExerciseImportResult>();
+
+		Handler handler = new Handler();
+
+		// from office to txt,docx:自带序号无法解析出来,doc可以
+		String txtFilePath = transformDocToTxt(file);
+
+		FileReader reader = null;
+		BufferedReader br = null;
+		try {
+			reader = new FileReader(txtFilePath);
+			br = new BufferedReader(reader);
+
+			String currLine = "";
+			ExerciseImportResult objResult;
+			while ((currLine = br.readLine()) != null) {
+
+				ExerciseParse objParser = handler.parse(currLine);
+
+				int iResultType = objParser.getParseResult();
+
+				objResult = new ExerciseImportResult();
+				objResult.setLineText(objParser.getParseLine());
+				objResult.setType(iResultType);
+				if (Handler.HANDLER_RESULT_CONTINUE == iResultType) {
+					objResult.setLastParse(objParser.getParseType());
+				}
+				lstResult.add(objResult);
+
+			}
+		} catch (Exception e) {
+			throw new Exception("读取文档失败", e);
+		} finally {
+			IOUtils.closeQuietly(br);
+			IOUtils.closeQuietly(reader);
+		}
+
+		Doc doc = handler.result();
+
+		parseResult.setLstItems(doc.convertExerciseItems());
+		parseResult.setLstResult(lstResult);
+
+		return parseResult;
+	}
+
+	/**
+	 * 导入习题 校验习题,将解析结果返回到前台
+	 * 
+	 * @param content
+	 *            习题文本内容
+	 * @return
+	 */
+	public ExerciseParseResult validateExercise(String content) {
+
+		ExerciseParseResult parseResult = parsePlainText(content);
+		parseResult.setLstItems(null);
+
+		return parseResult;
+
+	}
+
+	/**
+	 * 导入习题:将传回的文本内容解析出来
+	 * 
+	 * @param content
+	 *            习题文本内容
+	 * @return
+	 */
+	private ExerciseParseResult parsePlainText(String content) {
+
+		ExerciseParseResult parseResult = new ExerciseParseResult();
+		Handler handler = new Handler();
+		ArrayList<ExerciseImportResult> lstResult = new ArrayList<ExerciseImportResult>();
+		List<ExerciseItem> items = null;
+
+		String[] arrLine = content.split("\n");
+
+		ExerciseImportResult objResult;
+		for (String line : arrLine) {
+			ExerciseParse objParser = handler.parse(line);
+
+			int iResultType = objParser.getParseResult();
+
+			objResult = new ExerciseImportResult();
+			objResult.setLineText(objParser.getParseLine());
+			objResult.setType(iResultType);
+			if (Handler.HANDLER_RESULT_CONTINUE == iResultType) {
+				objResult.setLastParse(objParser.getParseType());
+			}
+			lstResult.add(objResult);
+		}
+
+		Doc doc = handler.result();
+
+		items = doc.convertExerciseItems();
+
+		parseResult.setLstItems(items);
+		parseResult.setLstResult(lstResult);
+		parseResult.setItemCount(items.size());
+		parseResult.setParseFlag(true);
+
+		return parseResult;
+	}
+
+	/**
+	 * 导入习题模块 :导入习题,将解析结果返回到前台
+	 * 
+	 * @param content
+	 *            文本内容
+	 * @param groupId
+	 *            习题组ID
+	 * @return
+	 */
+//	public ExerciseParseResult doImportExercise(String content, String groupId) {
+//
+//		ExerciseParseResult parseResult = parsePlainText(content);
+//
+//		List<ExerciseItem> lstItems = parseResult.getLstItems();
+//
+//		if (null == lstItems || lstItems.isEmpty()) {
+//			return parseResult;
+//		}
+//
+//		insertItems(groupId, lstItems);
+//
+//		// 修改习题组最后修改时间
+//		List<ExerciseGroup> result = initExerciseGroup(groupId);
+//		updateGroupUpdateTimeByList(result);
+//
+//		// 减少返回数据
+//		parseResult.setLstItems(null);
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//		msg.put("msgType", "SYS_EXER_SAVE"); 
+//		msg.put("groupId", groupId); 
+//		msg.put("classId", ClientUtils.getClassId());
+//		msg.put("actionType", "new");
+//		try {
+//			onsProducer.sendMsg(msg);
+//		} catch (Exception e) {
+//			log.error("exercise.sendMsg.groupId: " + groupId, e);
+//		}
+//		return parseResult;
+//	}
+
+	/**
+	 * 拷贝练习题
+	 * 
+	 * @param newGroupId
+	 * @param oldGroupId
+	 */
+	public void doCopyExerciseItem(String newGroupId, String oldGroupId) {
+		//改用存储过程 
+		Session session = getCommonDAO().getSessionFactory().getCurrentSession();
+		SQLQuery query = session.createSQLQuery("{call copy_exercise_item(?,?)}");
+		query.setString(0, newGroupId);
+		query.setString(1, oldGroupId);
+		
+		//执行
+		query.executeUpdate();
+	}
+	
+	/**
+	 * 复制历史练习
+	 * 
+	 * @param fromClassId
+	 * @return
+	 */
+	public Result executeCopyExercise(String groupId, String subjectId, String subjectName, String chapterId) {
+
+		try {
+			ExerciseGroup source = this.read(ExerciseGroup.class, groupId);
+			
+			doCopyExercise(source, subjectId, subjectName, chapterId);
+		} catch (IllegalAccessException e) {
+			log.error(e, e);
+			return new Result(false);
+		} catch (InvocationTargetException e) {
+			log.error(e, e);
+			return new Result(false);
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 复制习题
+	 * 
+	 * @param sourceGroup
+	 * @param sequenceGroup
+	 * @param randomGroup
+	 * @return
+	 * @throws IllegalAccessException
+	 * @throws InvocationTargetException
+	 */
+	private Result doCopyExercise(ExerciseGroup sourceGroup, String subjectId, String subjectName, String chapterId) throws IllegalAccessException, InvocationTargetException {
+
+		ExerciseGroup targetGroup = new ExerciseGroup();
+
+		// 主表:组
+		doSaveCopyGroup(sourceGroup, targetGroup, subjectId, subjectName, chapterId);
+
+		// 关联表: 组   习题
+		doSaveCopyRe(sourceGroup, targetGroup);
+		
+		// 扩展表: extend
+		doSaveCopyExtend(sourceGroup,targetGroup);
+
+		return new Result(true);
+
+	}
+	
+	private Result doSaveCopyExtend(ExerciseGroup sourceGroup, ExerciseGroup targetGroup) throws IllegalAccessException, InvocationTargetException{
+		
+		String hql = "from ExerciseGroupExtend where deleteFlag is false and groupId = ? ";
+		List<ExerciseGroupExtend> lstSourceExtends = this.find(hql, CollectionUtils.newList(sourceGroup.getGroupId()), ExerciseGroupExtend.class);
+		int iCount = this.findCount(hql, CollectionUtils.newList(targetGroup.getGroupId()));
+		if(iCount > 0){
+			return new Result(true);
+		}		
+		List<ExerciseGroupExtend> lstTargetExtends = new ArrayList<ExerciseGroupExtend>(lstSourceExtends.size());
+		for (ExerciseGroupExtend et : lstSourceExtends) {
+
+			ExerciseGroupExtend objExtend = new ExerciseGroupExtend();
+			BeanUtils.copyProperties(objExtend, et);
+			TraceUtils.setCreateTrace(objExtend);
+			objExtend.setGroupExtendId(null);
+			objExtend.setDoCount(BigInteger.ZERO);
+			objExtend.setClassAccuracy(BigDecimal.ZERO);
+			objExtend.setCorrectCount(BigInteger.ZERO);
+			objExtend.setSubmitNumber(BigInteger.ZERO);
+			
+			objExtend.setGroupId(targetGroup.getGroupId());
+
+			lstTargetExtends.add(objExtend);
+
+		}
+
+		this.saveOrUpdateAll(lstTargetExtends);
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 复制习题时,保存习题组
+	 * 
+	 * @param sourceGroup
+	 * @param targetGroup
+	 * @throws InvocationTargetException
+	 * @throws IllegalAccessException
+	 */
+	private Result doSaveCopyGroup(ExerciseGroup sourceGroup, ExerciseGroup targetGroup, String subjectId, String subjectName, String chapterId) throws IllegalAccessException, InvocationTargetException {
+
+		BeanUtils.copyProperties(targetGroup, sourceGroup);
+
+		targetGroup.setGroupId(null);
+		targetGroup.setItems(null);
+		targetGroup.setRecords(null);
+		targetGroup.setClassId(ClientUtils.getClassId());
+		targetGroup.setSubjectId(subjectId);
+		targetGroup.setChapterId(chapterId);
+		targetGroup.setStatus(ExerciseGroup.STATUS_DRAFT);
+		targetGroup.setCollegeCourseId(ClientUtils.getCourseId());
+		TraceUtils.setCreateTrace(targetGroup);
+		targetGroup.setOrderNum(BigInteger.valueOf(SchCourseware.COURSEWARE_MAX_ORDER));
+
+		this.saveExerciseGroup(targetGroup);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 复制练习时 保存习题关联
+	 * 
+	 * @param sourceGroup
+	 * @param targetGroup
+	 * @throws IllegalAccessException
+	 * @throws InvocationTargetException
+	 */
+	private Result doSaveCopyRe(ExerciseGroup sourceGroup, ExerciseGroup targetGroup) throws IllegalAccessException, InvocationTargetException {
+
+		String hql = " from ExerciseGroupItemRe where deleteFlag is false and exerciseGroupId = ? ";
+		List<ExerciseGroupItemRe> lstSourceGroupRe = this.find(hql, CollectionUtils.newList(sourceGroup.getGroupId()), ExerciseGroupItemRe.class);
+
+		List<ExerciseGroupItemRe> lstTargetItemRe = new ArrayList<ExerciseGroupItemRe>(lstSourceGroupRe.size());
+		for (ExerciseGroupItemRe it : lstSourceGroupRe) {
+
+			ExerciseGroupItemRe ojbItemRe = new ExerciseGroupItemRe();
+			BeanUtils.copyProperties(ojbItemRe, it);
+
+			ojbItemRe.setRelationId(null);
+			ojbItemRe.setExerciseGroupId(targetGroup.getGroupId());
+			lstTargetItemRe.add(ojbItemRe);
+
+		}
+
+		this.saveOrUpdateAll(lstTargetItemRe);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 学员得分详情列表
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<Map<String, Object>> resultList(String groupId) {
+		ExerciseGroup exeGroup = read(ExerciseGroup.class, groupId);
+
+		String hql_u = " from UserRegistration where deleteFlag is false and classId = ? and status = ? ";
+		List<UserRegistration> userRegLst = find(hql_u, CollectionUtils.newList(ClientUtils.getClassId(),UserRegistration.STATUS_ACTIVE),UserRegistration.class);
+		Map<String, UserRegistration> userMap = new HashMap<String, UserRegistration>();
+		for (UserRegistration u : userRegLst) {
+			userMap.put(u.getUserId(), u);
+		}
+		
+		String hql_re = "select r.accuracy,r.update_Time,r.user_Id from (select * from Exercise_Record "
+				+ "where delete_Flag is false and accuracy <= 100 and exercise_Group_Id = ?";
+
+		if (exeGroup.getType() == ExerciseGroup.TYPE_HOMEWORK || exeGroup.getType() == ExerciseGroup.TYPE_MOCK_EXAM) {
+			hql_re = hql_re.concat(" and status=" + ExerciseRecord.STATUS_SUBMIT);
+		}
+
+		hql_re = hql_re.concat(" order by  accuracy desc ) r group by r.user_Id ");
+		
+		if (exeGroup.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM || exeGroup.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC) {
+
+			hql_re = hql_re.concat( " order by r.accuracy desc,r.status desc");
+		} else {
+
+			hql_re = hql_re.concat(" order by r.status desc,r.accuracy desc");
+		}
+		
+		List<Object[]> reLst = findBySql(hql_re, CollectionUtils.newList(groupId));
+		Map<String, Object[]> recordMap = new HashMap<String, Object[]>();
+		for (Object[] obj : reLst) {
+			recordMap.put(String.valueOf(obj[2]) , obj);
+		}
+		
+		// 组装为Map
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(userRegLst.size());
+		Map<String, Object> map = null;
+
+		int rank = 1;
+
+		for (Object[] record : reLst) {
+			map = new HashMap<String, Object>(5);
+			UserRegistration re = userMap.get(record[2]);
+			if(null != re){
+				map.put("accuracy",record[0]);
+				map.put("time", record[1]);
+				map.put("name", re.getUserName());
+				map.put("mobilePhone", re.getMobilePhone());
+				map.put("salesCode", re.getSalesCode());
+				map.put("createTime", re.getUpdateTime());
+				map.put("rank", rank);
+				rank++;
+				lstMap.add(map);
+			}
+		}
+		for (UserRegistration user : userRegLst) {
+			map = new HashMap<String, Object>(5);
+			Object[] re = recordMap.get(user.getUserId());
+			if(null == re){
+				map.put("accuracy",0);
+				map.put("time", null);
+				map.put("name", user.getUserName());
+				map.put("mobilePhone", user.getMobilePhone());
+				map.put("salesCode", user.getSalesCode());
+				map.put("createTime", user.getUpdateTime());
+				map.put("rank", rank);
+				rank++;
+				lstMap.add(map);
+			}
+		}
+		
+		return lstMap;
+	}
+
+	/**
+	 * 初始化平均成绩和最高成绩
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> initScore(String groupId) {
+
+		ExerciseGroup exeGroup = read(ExerciseGroup.class, groupId);
+
+		String hql_u = " from UserRegistration where deleteFlag is false and classId = ? and status = ? ";
+		List<UserRegistration> userRegLst = find(hql_u, CollectionUtils.newList(ClientUtils.getClassId(),UserRegistration.STATUS_ACTIVE),UserRegistration.class);
+		
+		String hql_re = "select max(accuracy) as accuracy from ExerciseRecord "
+				+ "where deleteFlag is false and accuracy <= 100 and exerciseGroupId = ?";
+		
+		if (exeGroup.getType() == ExerciseGroup.TYPE_HOMEWORK || exeGroup.getType() == ExerciseGroup.TYPE_MOCK_EXAM) {
+			hql_re = hql_re.concat( " and status=" + ExerciseRecord.STATUS_SUBMIT);
+		}
+
+		hql_re = hql_re.concat(" GROUP BY userId order by status desc,accuracy desc,updateTime");
+
+		List<BigDecimal> reLst = find(hql_re, CollectionUtils.newList(groupId), BigDecimal.class);
+		
+		Map<String, Object> map = new HashMap<String, Object>(3);
+		map.put("groupName", exeGroup.getName());
+
+		if (reLst.isEmpty()) {	
+			map.put("avg", 0.00);
+			map.put("max", 0.00);
+			return map;
+		}
+
+		BigDecimal score = BigDecimal.ZERO;
+
+		// 计算已做学员总分数
+		for (BigDecimal obj : reLst) {
+			score = score.add(obj);
+		}
+
+		// 计算班级平均成绩
+		Double scoreNew = Double.valueOf(String.valueOf(score)) / userRegLst.size();
+
+		DecimalFormat df = new DecimalFormat("0.00");
+		map.put("avg", df.format(scoreNew));
+		map.put("max", df.format(reLst.get(0)));
+
+		return map;
+	}
+
+	/**
+	 * 题目得分详情
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public List<ExerciseItemStatistics> itemDetailList(String groupId) {
+
+		String hql_itemStatis = "from ExerciseItemStatistics where deleteFlag is false and groupId = ?";
+		List<ExerciseItemStatistics> itemStatisLst = this.find(hql_itemStatis, CollectionUtils.newList(groupId), ExerciseItemStatistics.class);
+
+		if (itemStatisLst.isEmpty()) {
+			return new ArrayList<ExerciseItemStatistics>();
+		}
+
+		// 获取组
+		ExerciseGroup group = read(ExerciseGroup.class, groupId);
+		if (null == group) {
+			return new ArrayList<ExerciseItemStatistics>();
+		}
+
+		// 默认章节练习
+		String hql = "select item from ExerciseItem item,ExerciseGroupItemRe re " + "where re.exerciseGroupId=? " + "and re.exerciseItemId=item.exerciseId " + "and item.deleteFlag is false " + "and re.deleteFlag is false " + "order by re.itemOrder ";
+
+		// 随机练习,顺序练习
+		if (ExerciseGroup.TYPE_EXERCISE_RANDOM == group.getType() || ExerciseGroup.TYPE_EXERCISE_SEQUENCE == group.getType()) {
+			hql = "select item from ExerciseItem item,ExerciseGroupItemRe re " + "where re.exerciseGroupId=? and " + "re.exerciseItemId=item.exerciseId " + "and item.deleteFlag is false " + "and re.deleteFlag is false " + "order by item.chapterId, re.itemOrder ";
+		}
+
+		// 查询当前组的所有题目
+		List<ExerciseItem> itemAllLst = this.exerDAO.find(hql, CollectionUtils.newList(groupId), ExerciseItem.class);
+
+		if (itemAllLst.isEmpty()) {
+			return new ArrayList<ExerciseItemStatistics>();
+		}
+
+		// 同步编号
+		List<ExerciseItemStatistics> exeItemStatisLst = new ArrayList<ExerciseItemStatistics>(itemStatisLst.size());
+		ExerciseItemStatistics obj = null;
+		for (int j = 0; j < itemAllLst.size(); j++) {
+			for (int i = 0; i < itemStatisLst.size(); i++) {
+
+				obj = itemStatisLst.get(i);
+				if (obj.getExerciseItemId().equals(itemAllLst.get(j).getExerciseId())) {
+
+					obj.setItemNo(j + 1);
+					obj.setClassAccuracyShow(obj.getClassAccuracy() + "%");
+					obj.setOrgAccuracyShow(obj.getOrgAccuracy() + "%");
+
+					// 给类型赋值
+					setExerItemTypeNewName(obj);
+
+					exeItemStatisLst.add(obj);
+					break;
+				}
+			}
+		}
+
+		return exeItemStatisLst;
+	}
+
+	private void setExerItemTypeNewName(ExerciseItemStatistics obj) {
+		// 判断类型文字显示
+		if (obj.getExerciseItemType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+			obj.setItemTypeName("单选题");
+		} else if (obj.getExerciseItemType() == ExerciseItem.TYPE_MULTI_SELECT) {
+			obj.setItemTypeName("多选题");
+		} else if (obj.getExerciseItemType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+			obj.setItemTypeName("判断题");
+		} else if (obj.getExerciseItemType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+			obj.setItemTypeName("问答题");
+		}
+	}
+
+	/**
+	 * 加载题目选项详情 - 班级、机构
+	 * 
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> loadOptionsList(String exerciseItemId) {
+
+		String hql_option = "from ExerciseOptionStatistics where deleteFlag is false and exerciseItemId = ? and classId = ? and orgId = ? group by optionId";
+		List<ExerciseOptionStatistics> optionLst = this.find(hql_option, CollectionUtils.newList(exerciseItemId, ClientUtils.getClassId(), ClientUtils.getOrgId()), ExerciseOptionStatistics.class);
+
+		ExerciseItem item = this.read(ExerciseItem.class, exerciseItemId);
+
+		List<Map<String, Object>> lstResult = new ArrayList<Map<String, Object>>(optionLst.size());
+		Map<String, Object> map = null;
+
+		for (ExerciseOptionStatistics optionStatis : optionLst) {
+
+			map = new HashMap<String, Object>(12);
+			map.put("content", optionStatis.getContent());
+			map.put("checked", optionStatis.getChecked());
+			map.put("classCorrectNum", optionStatis.getClassCorrectNum());
+			map.put("classTotalNum", optionStatis.getClassTotalNum());
+			map.put("classAccuracy", optionStatis.getClassAccuracy());
+			map.put("orgCorrectNum", optionStatis.getOrgCorrectNum());
+			map.put("orgTotalNum", optionStatis.getOrgTotalNum());
+			map.put("orgAccuracy", optionStatis.getOrgAccuracy());
+			map.put("exerciseItemTitel", item.getTitle());
+			map.put("correctAnswer", item.getAnswer());
+
+			if (optionStatis.getOptionOrder().equals("True")) {// 为True - 正确
+				map.put("optionOrder", "正确");
+			} else if (optionStatis.getOptionOrder().equals("False")) {// 为False - 错误
+				map.put("optionOrder", "错误");
+			} else {
+				map.put("optionOrder", optionStatis.getOptionOrder());
+			}
+
+			// 判断题目的类型
+			if ((short) item.getType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+				map.put("exerciseItemType", "单选题");
+			} else if ((short) item.getType() == ExerciseItem.TYPE_MULTI_SELECT) {
+				map.put("exerciseItemType", "多选题");
+			} else if ((short) item.getType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+				map.put("exerciseItemType", "判断题");
+			} else if ((short) item.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+				map.put("exerciseItemType", "问答题");
+			}
+
+			lstResult.add(map);
+		}
+		return lstResult;
+	}
+
+	/**
+	 * 编辑练习保存
+	 */
+	@Override
+	public Result doSaveEditGroup(String groupId,String groupName) {
+		ExerciseGroup group = read(ExerciseGroup.class, groupId);
+		group.setName(groupName);
+		TraceUtils.setUpdateTrace(group);
+		
+		this.bulkUpdate("update ExerciseGroup set name = ? where originExerciseId = ?", new Object[]{groupName, group.getGroupId()});
+		this.bulkUpdate("update SchCourseware set name = ? where id in(select groupId from ExerciseGroup where originExerciseId = ?)", new Object[]{groupName, group.getGroupId()});
+		
+		return this.saveExerciseGroup(group);
+	}
+	
+	/**
+	 * 排序
+	 * 
+	 * @param ids 排序id
+	 * @param index 序号
+	 * @return
+	 */
+	public Result doOrder(List<String> ids,  List<Integer> index){
+		// 循环修改order
+		CommonDAO commonDAO = this.getCommonDAO();
+		for( int i=0;i< ids.size();i++){
+			String id = ids.get(i);
+			commonDAO.bulkUpdate("update ExerciseGroup set orderNum = " + index.get(i) + " where groupId = ?", new Object[] { id });
+			commonDAO.bulkUpdate("update SchCourseware set orderNum = " + index.get(i) + " where id = ?", new Object[] { id });
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 排序
+	 * 
+	 * @param ids 排序id
+	 * @param index 序号
+	 * @return
+	 */
+	public Result doitemOrder(List<String> ids,  List<Integer> index,String groupId){
+		// 循环修改order
+		CommonDAO commonDAO = this.getCommonDAO();
+		for( int i=0;i< ids.size();i++){
+			String id = ids.get(i);
+			commonDAO.bulkUpdate("update ExerciseGroupItemRe set itemOrder = " + index.get(i) + " where exerciseItemId = ? and exerciseGroupId = ?", new Object[] { id, groupId });
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 保存练习接口
+	 * 
+	 * @param group
+	 * @return
+	 */
+	public Result saveExerciseGroup(ExerciseGroup group){
+//		boolean isClass = StringUtils.isNotEmpty(ClientUtils.getClassId()) || StringUtils.isNotEmpty(group.getClassId());
+		boolean isClass = false;
+		Result result = new Result(false);
+		TraceUtils.setUpdateTrace(group);
+		
+		Map<String, Integer> order = courseWareService.getOrder(!isClass, group.getSubjectId(), group.getChapterId());
+		
+		//同步排序
+		int subjectOrder = order.get("subjectOrder");
+		int chapterOrder = order.get("chapterOrder");
+		int partOrder = order.get("partOrder");
+		
+		group.setSubjectOrder(subjectOrder);
+		group.setChapterOrder(chapterOrder);
+		group.setPartOrder(partOrder);
+		
+		result = this.save(group);
+		
+		short type = group.getType();
+		if(type != ExerciseGroup.TYPE_EXERCISE_RANDOM && type != ExerciseGroup.TYPE_INTERACT
+				&& type != ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE && type != ExerciseGroup.TYPE_EXERCISE_SEQUENCE
+				&& type != ExerciseGroup.TYPE_EXERCISE_FREE){
+			SchCourseware courseware = null;
+			if(isClass){
+				courseware = this.findUnique("from SchCourseware where id = ? and classId = ? and deleteFlag is false",
+						CollectionUtils.newList(group.getGroupId(), group.getClassId()), SchCourseware.class);
+			}else{
+				courseware = this.findUnique("from SchCourseware where id = ? and orgId = ? and classId is null and deleteFlag is false",
+						CollectionUtils.newList(group.getGroupId(), ClientUtils.getOrgId()), SchCourseware.class);
+				
+				this.bulkUpdate("update SchCourseware set name = ?,remark = ? where id = ?", new Object[]{group.getName(),String.valueOf(group.getAllCount()), group.getGroupId()});
+			}
+			String parentChapterId = null;
+			if(StringUtils.isNotEmpty(group.getChapterId())){
+				SubjectChapter chapter = this.read(SubjectChapter.class, group.getChapterId());
+				parentChapterId = chapter == null?null : chapter.getParentChapterId();
+			}
+			if(courseware == null){
+				courseware = new SchCourseware();
+				courseware.setChapterId(group.getChapterId());
+				courseware.setId(group.getGroupId());
+				courseware.setCollegeCourseId(group.getCollegeCourseId());
+				courseware.setcType(group.getType());
+				courseware.setType(SchCourseware.COURSEWARE_TYPE_EXERCISE);
+				courseware.setName(group.getName());
+				courseware.setRemark(String.valueOf(group.getAllCount()));
+				courseware.setDeleteFlag(group.getDeleteFlag());
+				courseware.setOrderNum(group.getOrderNum() == null?SchCourseware.COURSEWARE_MAX_ORDER:group.getOrderNum().intValue());
+				courseware.setSubjectId(group.getSubjectId());
+				courseware.setStatus(group.getStatus());
+				courseware.setOrgId(StringUtils.isEmpty(group.getOrgId())?ClientUtils.getOrgId():group.getOrgId());
+				courseware.setClassId(group.getClassId());
+				courseware.setParentChapterId(parentChapterId);
+				courseware.setSubjectOrder(group.getSubjectOrder());
+				courseware.setChapterOrder(group.getChapterOrder());
+				courseware.setPartOrder(group.getPartOrder());
+				TraceUtils.setCreateTrace(courseware);
+				
+			}else{
+				courseware.setChapterId(group.getChapterId());
+				//courseware.setCollegeCourseId(group.getCollegeCourseId());
+				courseware.setcType(group.getType());
+				courseware.setName(group.getName());
+				courseware.setRemark(String.valueOf(group.getAllCount()));
+				courseware.setDeleteFlag(group.getDeleteFlag());
+				courseware.setOrderNum(group.getOrderNum() == null?SchCourseware.COURSEWARE_MAX_ORDER:group.getOrderNum().intValue());
+				courseware.setSubjectId(group.getSubjectId());
+				courseware.setStatus(group.getStatus());
+				courseware.setParentChapterId(parentChapterId);
+				courseware.setSubjectOrder(group.getSubjectOrder());
+				courseware.setChapterOrder(group.getChapterOrder());
+				courseware.setPartOrder(group.getPartOrder());
+				
+				TraceUtils.setUpdateTrace(courseware);
+			}
+			this.save(courseware);
+		}
+		return result;
+	}
+	
+	/**
+	 * (后台管理系统)
+	 *  管理员同步习题到班级
+	 * 
+	 * @param exerciseItemId
+	 * @return
+	 * @throws InvocationTargetException 
+	 * @throws IllegalAccessException 
+	 */
+	public Result doSynExercise(String[] exerciseItemIds) throws IllegalAccessException, InvocationTargetException{
+		if(exerciseItemIds == null || exerciseItemIds.length == 0){
+			return new Result(false, "参数错误");
+		}
+		List<Object> lstSaveObject = new ArrayList<>();
+		for(String exerciseItemId : exerciseItemIds){
+			//待同步的练习
+			ExerciseItem sourceItem = this.read(ExerciseItem.class, exerciseItemId);
+			if(sourceItem == null){
+				continue;
+			}
+			
+			List<ExerciseItemOption> lstSourceOption = sourceItem.getOptions();
+			List<ExerciseItemAnalisi> lstSourceAnalisi = sourceItem.getAnalysises();
+			List<ExerciseObjectImg> lstSourceImg = this.find("from ExerciseObjectImg where exerciseObjectId = ? and deleteFlag is false and objectType = ?",
+					CollectionUtils.newList(exerciseItemId, ExerciseObjectImg.OBJECT_TYPE_ITEM), ExerciseObjectImg.class);
+			
+			//下发的练习
+			List<ExerciseItem> lstExerciseItem = this.find("from ExerciseItem where deleteFlag is false and orgiExerciseId = ?",
+					CollectionUtils.newList(exerciseItemId), ExerciseItem.class);
+			if(lstExerciseItem == null || lstExerciseItem.size() == 0){
+				continue;
+			}
+			//同步题目
+			for(ExerciseItem exerciseItem :lstExerciseItem){
+				exerciseItem.setTitle(sourceItem.getTitle());
+				exerciseItem.setAnswer(sourceItem.getAnswer());
+				TraceUtils.setUpdateTrace(exerciseItem);
+				
+				//同步更新练习组的时间
+				this.bulkUpdate("update ExerciseGroup p set p.updateTime = sysdate() where EXISTS "+
+						" (select 1 from ExerciseGroupItemRe i where i.exerciseItemId = ? and i.deleteFlag is false and i.exerciseGroupId = p.groupId)", new Object[]{exerciseItem.getExerciseId()});
+				
+				List<ExerciseItemAnalisi> lstExerciseItemAnalisi = exerciseItem.getAnalysises();
+				List<ExerciseObjectImg> lstExerciseObjectImg = this.find("from ExerciseObjectImg where exerciseObjectId = ? and deleteFlag is false and objectType = ?",
+						CollectionUtils.newList(exerciseItem.getExerciseId(), ExerciseObjectImg.OBJECT_TYPE_ITEM), ExerciseObjectImg.class);
+				//同步选项
+				if(lstSourceOption != null && lstSourceOption.size() > 0){
+					ExerciseItemOption option;
+					//删除选项的题目
+					this.bulkUpdate("update ExerciseItemOption p set p.deleteFlag = true where  exerciseItemId = ?", new Object[]{exerciseItem.getExerciseId()});
+					for(ExerciseItemOption sourceOption : lstSourceOption){
+						ExerciseObjectImg objExerciseObjectImg;
+						option = this.findUnique("from ExerciseItemOption where exerciseItemId = ? and optionOrder = ?",
+								CollectionUtils.newList(exerciseItem.getExerciseId(), sourceOption.getOptionOrder()), ExerciseItemOption.class);
+						
+						ExerciseObjectImg objSourceImg = this.findUnique("from ExerciseObjectImg where exerciseObjectId = ? and deleteFlag is false and objectType = ?",
+								CollectionUtils.newList(sourceOption.getOptionId(), ExerciseObjectImg.OBJECT_TYPE_ITEM_OPTION), ExerciseObjectImg.class);
+						if(option == null){
+							option = new ExerciseItemOption();
+							BeanUtils.copyProperties(option, sourceOption);
+							option.setExerciseItemId(exerciseItem.getExerciseId());
+							option.setOptionId(null);
+							
+							TraceUtils.setCreateTrace(option);
+							
+							if(objSourceImg != null){//选项图片
+								objExerciseObjectImg = new ExerciseObjectImg();
+								BeanUtils.copyProperties(objExerciseObjectImg, objSourceImg);
+								objExerciseObjectImg.setExerciseObjectId(option.getOptionId());
+								objExerciseObjectImg.setImgId(null);
+								
+								TraceUtils.setCreateTrace(objExerciseObjectImg);
+								
+								lstSaveObject.add(objExerciseObjectImg);
+							}
+						}else{
+							option.setContent(sourceOption.getContent());
+							option.setChecked(sourceOption.getChecked());
+							option.setDeleteFlag(false);
+							
+							TraceUtils.setUpdateTrace(option);
+							
+						    objExerciseObjectImg = this.findUnique("from ExerciseObjectImg where exerciseObjectId = ? and deleteFlag is false and objectType = ?",
+									CollectionUtils.newList(option.getOptionId(), ExerciseObjectImg.OBJECT_TYPE_ITEM_OPTION), ExerciseObjectImg.class);
+							if(objSourceImg != null){
+								if(objExerciseObjectImg != null){
+									objExerciseObjectImg.setImgPath(objSourceImg.getImgPath());
+									
+									TraceUtils.setUpdateTrace(objExerciseObjectImg);
+								}else{
+									objExerciseObjectImg = new ExerciseObjectImg();
+									BeanUtils.copyProperties(objExerciseObjectImg, objSourceImg);
+									objExerciseObjectImg.setExerciseObjectId(option.getOptionId());
+									objExerciseObjectImg.setImgId(null);
+									
+									TraceUtils.setCreateTrace(objExerciseObjectImg);
+								}
+								
+								lstSaveObject.add(objExerciseObjectImg);
+							}
+						}
+						lstSaveObject.add(option);
+					}
+				}
+				//同步解析
+				if(lstSourceAnalisi != null && lstSourceAnalisi.size() > 0){
+					ExerciseItemAnalisi objExerciseItemAnalisi;
+					if(lstExerciseItemAnalisi == null || lstExerciseItemAnalisi.size() == 0){
+					    objExerciseItemAnalisi = new ExerciseItemAnalisi();
+					    BeanUtils.copyProperties(objExerciseItemAnalisi, lstSourceAnalisi.get(0));
+					    objExerciseItemAnalisi.setExerciseItemId(exerciseItem.getExerciseId());
+					    objExerciseItemAnalisi.setExerciseAnalisisId(null);
+					
+					    TraceUtils.setCreateTrace(objExerciseItemAnalisi);
+					}else{
+					    objExerciseItemAnalisi = lstExerciseItemAnalisi.get(0);
+						TraceUtils.setUpdateTrace(objExerciseItemAnalisi);
+						objExerciseItemAnalisi.setAnalysis(lstSourceAnalisi.get(0).getAnalysis());
+					}
+					lstSaveObject.add(objExerciseItemAnalisi);
+				}
+				//同步题目图片
+				if(lstSourceImg != null && lstSourceImg.size() > 0){
+					ExerciseObjectImg objExerciseObjectImg;
+					if(lstExerciseObjectImg == null || lstExerciseObjectImg.size() == 0){
+						objExerciseObjectImg = new ExerciseObjectImg();
+						BeanUtils.copyProperties(objExerciseObjectImg, lstSourceImg.get(0));
+						objExerciseObjectImg.setExerciseObjectId(exerciseItem.getExerciseId());
+						objExerciseObjectImg.setImgId(null);
+						
+						TraceUtils.setCreateTrace(objExerciseObjectImg);
+					}else{
+						objExerciseObjectImg = lstExerciseObjectImg.get(0);
+						objExerciseObjectImg.setImgPath(lstSourceImg.get(0).getImgPath());
+						TraceUtils.setUpdateTrace(objExerciseObjectImg);
+					}
+					
+					lstSaveObject.add(objExerciseObjectImg);
+				}
+				lstSaveObject.add(exerciseItem);
+			}
+		}
+		this.saveOrUpdateAll(lstSaveObject);
+		return new Result(true);
+	}
+	
+	/**
+	 * 数据同步接口,同步下发到班级的数据
+	 * 
+	 * @param orgId
+	 * @param groupId
+	 * @return
+	 */
+	public Result doSynExerciseItem(String orgId, String groupId){
+		List<ExerciseGroup> lstGroup = null;
+		if(StringUtils.isNoneBlank(orgId)){
+			String hql = "select e from ExerciseGroup e ,OrgCollegeCourse o ,ExerciseReCourse c "
+					+ " where e.groupId = c.groupId"
+					+ " and o.collegeCourseId = c.collegeCourseId "
+					+ " and c.orgId=? "
+					+ " and o.deleteFlag is false "
+					+ " and c.deleteFlag is false "
+					+ " and e.deleteFlag is false ";
+			lstGroup = this.find(hql, CollectionUtils.newList(orgId), ExerciseGroup.class);
+		}else if(StringUtils.isNotBlank(groupId)){
+			lstGroup = this.find("from ExerciseGroup g where g.groupId = ?", CollectionUtils.newList(groupId), ExerciseGroup.class);
+		}else{
+			return new Result(false, "参数错误");
+		}
+		
+		if(lstGroup == null || lstGroup.size() == 0){
+			return new Result(false, "数据为空");
+		}
+		
+		for(ExerciseGroup group : lstGroup){
+			String id = group.getGroupId();
+			List<ExerciseGroup> subListGroup = this.find("from ExerciseGroup e where e.originExerciseId = ? and deleteFlag is false and e.groupId <> ?",
+					CollectionUtils.newList(id, id), ExerciseGroup.class);
+			
+			if(subListGroup == null || subListGroup.size() == 0){
+				continue;
+			}
+			List<ExerciseItem> orgiExerciseItem = group.getItems();
+			
+			for(ExerciseGroup subGroup : subListGroup){
+				List<ExerciseItem> subExerciseItem = subGroup.getItems();
+				for(ExerciseItem item : subExerciseItem){
+					int index = orgiExerciseItem.indexOf(item);
+					if(index > -1){
+						item.setOrgiExerciseId(orgiExerciseItem.get(index).getExerciseId());
+						
+						TraceUtils.setUpdateTrace(item);
+						this.save(item);
+					}
+				}
+				
+			}
+		}
+		return new Result(true, "成功");
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result saveExerciseItemBatch(String groupId,List<ExerciseItem> items) {
+		if (items == null || items.size() == 0) {
+			return new Result(false, "没有要保存或更新的题目数据!");
+		}
+	
+		ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+		int allCount= group.getAllCount()==null?0:group.getAllCount().intValue();
+		
+		List<String> lstExerciseItemIds = new ArrayList<String>();
+		for (ExerciseItem item : items) {
+			if (StringUtils.isEmpty(item.getExerciseId())) {
+				this.insertExerciseItem(groupId, item, item.getOptions(),
+						item.getAnalisis().getAnalysis());
+				group.setAllCount(BigInteger.valueOf(++allCount));
+				lstExerciseItemIds.add(item.getExerciseId());
+			} else {
+				this.updateExerciseItem(item, item.getOptions(), item.getAnalisis()==null?null:item.getAnalisis().getAnalysis());
+				lstExerciseItemIds.add(item.getExerciseId());
+			}
+		}
+		
+		this.save(group);
+		redisTemplate.delete(groupId);
+		return new Result(true, "成功",lstExerciseItemIds.toArray());
+	}
+	
+
+	/**
+	 * 问卷评估  复制练习
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public String doCopyExerciseByEvaluate(String groupId) {
+		
+		// 1、复制练习组
+		ExerciseGroup group = this.read(ExerciseGroup.class, groupId);
+		ExerciseGroup newGroup = new ExerciseGroup();
+		try {
+			BeanUtils.copyProperties(newGroup, group);
+			newGroup.setGroupId(null);
+			newGroup.setRecords(null);
+		} catch (Exception e) {
+			log.error("问卷复制:复制练习BeanUtils.copyProperties()方法copy失败", e);
+		} 
+		TraceUtils.setCreateTrace(newGroup);
+		this.save(newGroup);
+		
+		// 2、复制题目
+		this.doCopyEvaExerciseItem(newGroup.getGroupId(), groupId);
+		
+		return newGroup.getGroupId();
+	}
+	
+	/**
+	 * 拷贝练习题
+	 * 
+	 * @param newGroupId
+	 * @param oldGroupId
+	 */
+	public void doCopyEvaExerciseItem(String newGroupId, String oldGroupId) {
+		//改用存储过程 
+		//执行
+		this.executeProduce("{call copy_exercise_item(?,?)}", new Object[]{newGroupId, oldGroupId});
+	}
+
+	/**
+	 * 查询问卷用户练习详情
+	 * @param recordId
+	 * @param evaluateId
+	 * @return
+	 */
+	@Override
+	public ResultJson queryUserEvaExerciseDetail(String recordId, String evaluateId) {
+		ExerciseRecord objExerciseRecord = this.read(ExerciseRecord.class, recordId);
+		
+		QExerciseItem item = QExerciseItem.exerciseItem;
+		QExerciseGroupItemRe re = QExerciseGroupItemRe.exerciseGroupItemRe;
+		// 查询题目list
+		List<ExerciseItem> itemLst = this.getQueryFactory().select(item).from(item,re)
+				.where(item.exerciseId.eq(re.exerciseItemId)
+						.and(item.deleteFlag.eq(false))
+						.and(re.deleteFlag.eq(false))
+						.and(re.exerciseGroupId.eq(objExerciseRecord.getExerciseGroupId()))).fetch();
+		
+		QExerciseItemAnswerU answerU = QExerciseItemAnswerU.exerciseItemAnswerU;
+		QExerciseObjectImg objImg = QExerciseObjectImg.exerciseObjectImg;
+		QExerciseItemOption option = QExerciseItemOption.exerciseItemOption;
+		SchEvaluate objSchEvaluate = this.read(SchEvaluate.class, evaluateId);
+		List<ExerciseObjectImg> lstExerciseObjectImg = null;
+		for (ExerciseItem objExerciseItem : itemLst) {
+			if(objExerciseItem.getType() == ExerciseItem.TYPE_ATTACHMENT){//附件题读取题目的图片信息
+				
+				lstExerciseObjectImg = this.getQueryFactory().selectFrom(objImg)
+						.where(objImg.exerciseObjectId.in(
+									this.getQueryFactory().select(option.optionId).from(option)
+									.where(option.exerciseItemId.eq(objExerciseItem.getExerciseId()).and(option.deleteFlag.eq(false))))
+								.and(objImg.deleteFlag.eq(false))
+								.and(objImg.createId.eq(objExerciseRecord.getUserId()))
+								)
+						.fetch();
+				
+			}
+			
+			//查询用户答题
+			List<ExerciseItemAnswerU> lstExerciseItemAnswerU = this.getQueryFactory().selectFrom(answerU)
+					.where(answerU.deleteFlag.eq(false)
+						.and(answerU.exerciseRecordId.eq(objExerciseRecord.getRecordId()))
+						.and(answerU.exerciseItemId.eq(objExerciseItem.getExerciseId())))
+						.fetch();
+			
+			objExerciseItem.setExerciseItemAnswerU(lstExerciseItemAnswerU);
+		}
+		
+		//拼装前端所需要的数据
+		Map<String, Object> resultMap =  ExerciseUtils.packageUserExerciseDetail(itemLst, objSchEvaluate, lstExerciseObjectImg);
+		
+		return new ResultJson(true,"success",resultMap);
+	}
+	
+	/**
+	 * 删除问卷图片
+	 */
+	@Override
+	public ResultJson dodelEvaExerciseObjImg(String imgObjId) {
+		ExerciseObjectImg img = this.read(ExerciseObjectImg.class, imgObjId);
+		img.setDeleteFlag(true);
+		TraceUtils.setUpdateTrace(img);
+		
+		this.save(img);
+
+		return new ResultJson(true,"操作成功");
+	}
+
+	/**
+	 * 新增问卷图片
+	 */
+	@Override
+	public List<Map<String, Object>> doAddEvaExerciseObjImg(String[] imgPath, String imgObjId, int imgObjType) {
+		// 查询此练习是否已经存在记录
+		QExerciseObjectImg objImg = QExerciseObjectImg.exerciseObjectImg;
+		List<ExerciseObjectImg> lstObjImg = this.getQueryFactory()
+				.selectFrom(objImg)
+				.where(objImg.exerciseObjectId.eq(imgObjId)
+						.and(objImg.objectType.eq(imgObjType)
+						.and(objImg.deleteFlag.eq(false))))
+				.orderBy(objImg.imgOrder.desc())
+				.fetch();
+		
+		int imgOrder = 1;
+		if (!lstObjImg.isEmpty()) {
+			imgOrder = lstObjImg.get(0).getImgOrder() + 1;
+		}
+
+		List<ExerciseObjectImg> lstImg = new ArrayList<ExerciseObjectImg>(imgPath.length);
+		ExerciseObjectImg img = new ExerciseObjectImg();
+		img.setObjectType(imgObjType);
+		img.setImgPath(imgPath[0]);
+		img.setExerciseObjectId(imgObjId);
+		img.setImgOrder(imgOrder);
+		img.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(img);
+		lstImg.add(img);
+
+		for (int i = 1; i < imgPath.length; i++) {
+			img.setImgPath(imgPath[i]);
+			img.setImgOrder(imgOrder++);
+			lstImg.add(img);
+		}
+
+		this.saveOrUpdateAll(lstImg);
+
+		List<Map<String, Object>> lstResult = new ArrayList<Map<String, Object>>(lstImg.size());
+		Map<String, Object> resultMap = null;
+		for (ExerciseObjectImg obj : lstImg) {
+			resultMap = new HashMap<String, Object>(2);
+			resultMap.put("imgId", obj.getImgId());
+			resultMap.put("imgPath", obj.getImgPath());
+			lstResult.add(resultMap);
+		}
+		return lstResult;
+	}
+
+	/**
+	 * 查询问卷图片
+	 */
+	@Override
+	public List<Map<String, Object>> queryEvaExerciseObjImg(String imgObjId, int imgObjType) {
+		// 查询此练习是否已经存在记录
+		QExerciseObjectImg objImg = QExerciseObjectImg.exerciseObjectImg;
+		List<ExerciseObjectImg> lstObjImg = this.getQueryFactory()
+				.selectFrom(objImg)
+				.where(objImg.exerciseObjectId.eq(imgObjId)
+						.and(objImg.objectType.eq(imgObjType)
+						.eq(objImg.deleteFlag.eq(false))))
+				.orderBy(objImg.imgOrder.asc())
+				.fetch();
+		
+		if(lstObjImg.isEmpty()){
+			return null;
+		}
+		List<Map<String,Object>> lstResult = new ArrayList<Map<String,Object>>(lstObjImg.size());
+		Map<String,Object> resultMap = null;
+		for(ExerciseObjectImg obj:lstObjImg){
+			resultMap = new HashMap<String,Object>(2);
+			resultMap.put("imgId", obj.getImgId());
+			resultMap.put("imgPath", obj.getImgPath());
+			lstResult.add(resultMap);
+		}
+		return lstResult;
+	}
+	
+	/**
+	 * 更新习题选项图片对象结果
+	 * 
+	 * @param optionId
+	 * @param imgIds
+	 * @return
+	 */
+	private Result updateEvaExerciseObjImgId(JSONArray titleImgs,String exerciseId) {
+
+		if (titleImgs == null || titleImgs.isEmpty()) {
+			return new Result(false);
+		}
+		
+		List<String> imgIds = new ArrayList<String>(titleImgs.size());
+		for(int i=0;i<titleImgs.size();i++){
+			imgIds.add(String.valueOf(titleImgs.getJSONObject(i).get("imgId")));
+		}
+		
+		QExerciseObjectImg objImg = QExerciseObjectImg.exerciseObjectImg;
+		this.getQueryFactory().update(objImg).set(objImg.exerciseObjectId, exerciseId)
+		.where(objImg.imgId.in(imgIds)
+				.and(objImg.deleteFlag.eq(false))).execute();
+
+		return new Result(true);
+	}
+	
+	/**
+	 * 更新习题选项图片对象结果
+	 * 
+	 * @param optionId
+	 * @param imgIds
+	 * @return
+	 */
+	private Result updateEvaExerOptionObjImgId(ExerciseItemOption option) {
+
+		List<ExerciseObjectImg> imgs = option.getImgs();
+		if (imgs == null || imgs.isEmpty()) {
+			return new Result(false);
+		}
+		List<String> imgIds = new ArrayList<String>(imgs.size());
+		for (int i = 0; i < imgs.size(); i++) {
+			imgIds.add(imgs.get(i).getImgId());
+		}
+		
+		QExerciseObjectImg objImg = QExerciseObjectImg.exerciseObjectImg;
+		this.getQueryFactory().update(objImg).set(objImg.exerciseObjectId, option.getOptionId())
+		.where(objImg.imgId.in(imgIds)
+				.and(objImg.deleteFlag.eq(false))).execute();
+
+		return new Result(true);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java
new file mode 100644
index 0000000..73d92c8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+
+@Service("ExerciseStatisticsDealService")
+public class ExerciseStatisticsDealService{
+
+	@Autowired
+	CommonDAO dao;
+
+	@Autowired
+	ICacheService cacheService;
+	
+	@Autowired
+	IExerciseVerService exerciseService;
+
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ExerciseStatisticsDealService");
+
+	/*@PostConstruct
+	void init() {
+
+		CommonONSConsumer.registerHandler("EXER_STATIS_SAVE", "ExerciseStatisticsDealService");
+
+	}
+
+	
+	@Override
+	public void doHandle(Message msg, ConsumeContext context) {
+		try {
+			
+			String classId = msg.getUserProperties("classId");
+			String orgId = msg.getUserProperties("orgId");
+			String groupId = msg.getUserProperties("groupId");
+			
+			exerciseService.updateRefreshStatistical(groupId, orgId, classId,Constants.BOOLEAN_FLAG_TRUE);
+			
+		} catch (Exception e) {
+
+			log.error("更新成绩统计失败:" + e, e);
+
+			throw e;
+
+		}
+	}
+*/
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java
new file mode 100644
index 0000000..0220f43
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java
@@ -0,0 +1,143 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+
+@Service("ExerciseSysMsgDealService")
+public class ExerciseSysMsgDealService {
+
+	@Autowired
+	CommonDAO dao;
+/*
+	@Autowired
+	IMsgVenderService  easemobService;*/
+	
+	@Autowired
+	IONSExceptionLogService onsExceptionLogService;
+	
+	/*@Autowired
+	protected IConfigService cfg;*/
+	
+	//private static Logger log = LogManager.getLogger("ONSExceptionLogService");
+	
+//	@PostConstruct
+//	void init() {
+//		CommonONSConsumer.registerHandler("SYS_EXER_SAVE", "ExerciseSysMsgDealService");
+//	}
+//
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+		
+		/*try {
+
+//			String groupId = msg.getUserProperties("groupId");
+//			String classId = msg.getUserProperties("classId");
+//			String actionType = msg.getUserProperties("actionType");
+			// 练习不再发系统通知 by cyq 20160823
+			//sendSysNotice(groupId, classId, actionType);
+
+		} catch (Exception e) {
+
+			String businessId = cfg.getConfigByEnv("ons-common-topic") + "-" + UUIDUtils.generateUUID();
+			String desp = "classId:" + msg.getUserProperties("classId") +
+					";groupId:" + msg.getUserProperties("groupId") + 
+					";actionType:" + msg.getUserProperties("actionType") ;
+
+			log.error( businessId + " :更新练习系统消息发送失败:" + e , e);
+			onsExceptionLogService.doSaveExceptionLog(cfg.getConfigByEnv("ons-common-topic"), "SYS_EXER_SAVE", businessId , desp );
+
+		}*/
+	}
+	
+	/**
+	 * 发送消息
+	 * @param groupId
+	 * @param classId
+	 * @param actionType
+	 *//*
+	private void sendSysNotice(String groupId, String classId, String actionType) {
+		ExerciseGroup group = dao.read(ExerciseGroup.class, groupId);
+		String hql = "from UserRegistration u where u.classId = ? and deleteFlag is false";
+		
+		List<UserRegistration> userList = dao.find(hql, CollectionUtils.newList(classId), UserRegistration.class);
+		List<String> userIdList = new ArrayList<>();
+		for (UserRegistration ur : userList) {
+			userIdList.add(ur.getUserId());
+		}
+		OrgClass cls = dao.read(OrgClass.class, classId);
+		String content = null;
+			
+		Map<String,String> extra = new HashMap<String,String>();
+		extra.put("classId", classId);
+		extra.put("className", cls.getName());
+		if ("new".equalsIgnoreCase(actionType)) {
+			extra.put("title", "有新的习题啦");
+			content = cls.getName() + "班有新的习题哦,赶快去瞄瞄吧!";
+		} else if ("update".equalsIgnoreCase(actionType)) {
+			extra.put("title", "习题有更新啦");
+			content = cls.getName() + "班习题有更新哦,赶快去瞄瞄吧!";
+		}
+		// add cyq 
+		JSONObject androidParam = new JSONObject();
+		JSONObject iOSParam = new JSONObject();
+		if (group.getType() == ExerciseGroup.TYPE_HOMEWORK) {
+			
+			extra.put("type", SysNoticeConfigMetadata.TYPE_EXERCISE_HOMEWORK);
+			androidParam.put("key_exercise_type_name", "家庭作业");
+			androidParam.put("key_exercise_list_url", "http://www.qxueyou.com/qxueyou/exercise/Exercise/homeWorkListNew");
+			androidParam.put("key_exercise_type", "1");
+			iOSParam.put("Titlename", "家庭作业");
+			
+		} else if (group.getType() == ExerciseGroup.TYPE_MOCK_EXAM) {
+			
+			extra.put("type", SysNoticeConfigMetadata.TYPE_EXERCISE_ANALOGY);
+			androidParam.put("key_exercise_type_name", "模拟考试");
+			androidParam.put("key_exercise_list_url", "http://www.qxueyou.com/qxueyou/exercise/Exercise/examsListNew");
+			androidParam.put("key_exercise_type", "4");
+			iOSParam.put("Titlename", "模拟考试");
+			
+		} else if (group.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM) {
+			
+			extra.put("type", SysNoticeConfigMetadata.TYPE_EXERCISE_CHAPTER);
+			androidParam.put("key_exercise_type_name", "章节练习");
+			androidParam.put("key_exercise_list_url", "http://www.qxueyou.com/qxueyou/exercise/Exercise/chapterListNew");
+			androidParam.put("key_exercise_type", "6");
+			iOSParam.put("Titlename", "章节练习");
+			
+		} else if (group.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC) {
+			
+			extra.put("type", SysNoticeConfigMetadata.TYPE_EXERCISE_CHAPTER);
+			androidParam.put("key_exercise_type_name", "专项练习");
+			androidParam.put("key_exercise_list_url", "http://www.qxueyou.com/qxueyou/exercise/Exercise/topicListNew");
+			androidParam.put("key_exercise_type", "9");
+			iOSParam.put("Titlename", "专项练习");
+			
+		} else if (group.getType() == ExerciseGroup.TYPE_EXERCISE_FREE) {
+			
+			extra.put("type", SysNoticeConfigMetadata.TYPE_EXERCISE_FREEDOM);
+			androidParam.put("key_exercise_type_name", "自由练习");
+			androidParam.put("key_exercise_list_url", "http://www.qxueyou.com/qxueyou/exercise/Exercise/freeListNew");
+			androidParam.put("key_exercise_type", "10");
+			iOSParam.put("Titlename", "自由练习");
+			
+		}
+		
+		extra.put("androidParams", androidParam.toString());
+		extra.put("iosParams", iOSParam.toString());
+		if (StringUtils.isNotEmpty(content)) {
+			// 对消息接收人按每批最多20人分批发送
+			String[] receivers;
+			int loop = (userIdList.size() + 19) / 20;
+			for (int i = 0; i < loop; i ++) {
+				int len = (i == (loop - 1)) ? userIdList.size() - 20 * i : 20;
+				receivers = new String[len];
+				userIdList.subList(i * 20,  i * 20 + len).toArray(receivers);
+				easemobService.doSendTextMsgToUsers("notice-sys", receivers, content, extra);
+			}
+		}
+	}*/
+//}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java
new file mode 100644
index 0000000..37bb6d3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java
@@ -0,0 +1,3158 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.BoundValueOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import com.hankcs.hanlp.HanLP;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.DateTimeUtils;
+import com.qxueyou.scc.base.util.DateUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exam.model.ExamBatchInfo;
+import com.qxueyou.scc.exam.model.ExamInfo;
+import com.qxueyou.scc.exercise.model.ExerGroupResponseData;
+import com.qxueyou.scc.exercise.model.ExerItemResponseData;
+import com.qxueyou.scc.exercise.model.ExerciseAnalisisResult;
+import com.qxueyou.scc.exercise.model.ExerciseDataSubmitLog;
+import com.qxueyou.scc.exercise.model.ExerciseExamItemType;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupExtend;
+import com.qxueyou.scc.exercise.model.ExerciseGroupItemRe;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisiU;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerData;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemSet;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatis;
+import com.qxueyou.scc.exercise.model.ExerciseItemStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseOptionStatistics;
+import com.qxueyou.scc.exercise.model.ExerciseRecentRecord;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.model.ExerciseSubmitAnswerData;
+import com.qxueyou.scc.exercise.service.IExerciseExtendService;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.exercise.service.IExerciseVerService;
+import com.qxueyou.scc.exercise.util.ExerciseUtils;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.school.model.SchRank;
+import com.qxueyou.scc.school.service.IRankService;
+
+/**
+ * 练习  实现service  APP V2.0接口
+ * @author zhiyong
+ *
+ */
+@Service
+public class ExerciseVerService extends CommonAppService implements IExerciseVerService {
+	/** ons生产者 */
+//	@Autowired
+//	CommonONSProducer onsProducer;
+
+	private static final String FILL_BLANKS_ANSWER_SPLIT_STR="\\$\\$";
+
+	private static final double  SIMILARITY_PASS_LINE =0.8;
+
+	/** 缓存service */
+	@Autowired
+	ICacheService cacheService;
+
+	/** 排名service */
+	@Autowired
+	IRankService  rankService;
+
+	/** 扩展练习service */
+	@Autowired
+	private IExerciseExtendService exerciseExtendService;
+
+	/** 扩展练习service */
+	@Autowired
+	private IExerciseService exerciseService;
+
+	@SuppressWarnings("rawtypes")
+	@Autowired
+	private RedisTemplate redisTemplate;
+
+	@Autowired
+	IMsgInfoService msgInfoService;
+
+	/** 日志 */
+	private static Logger log = LogManager.getLogger("ExerciseVerService");
+
+	/**    ---------------练习成绩统计  start---------------- */
+
+	/**
+	 * 更新统计 - 提交数据调用、单击统计按钮调用
+	 * @param groupId       习题组Id
+	 * @param orgId         机构Id
+	 * @param classId       班级Id
+	 * @param btnFlag       调用入口(true)
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result updateRefreshStatistical(String groupId, String orgId, String classId,boolean btnFlag) {
+
+		// 结果Map
+		Map<String, Object> resultMap = packageMapValue(groupId, orgId, classId, btnFlag);
+
+		if(null == resultMap){
+			return new Result(true);
+		}
+
+		List<ExerciseItemStatistics> newOrgIStaLst = new ArrayList<ExerciseItemStatistics>();
+		List<ExerciseOptionStatistics> newOrgOStaLst = new ArrayList<ExerciseOptionStatistics>();
+		for (ExerciseItem item : (List<ExerciseItem>) resultMap.get("itemLst")) {
+
+			// 获取当前机构该题目的所有记录
+			for (ExerciseItemStatistics orgItemSta : (List<ExerciseItemStatistics>) resultMap.get("orgIStaLst")) {
+				if (orgItemSta.getExerciseItemId().equals(item.getExerciseId())) {
+					newOrgIStaLst.add(orgItemSta);
+				}
+			}
+			// 获取当前机构该题目选项的所有记录
+			for (ExerciseOptionStatistics orgOptionSta : (List<ExerciseOptionStatistics>)resultMap.get("orgOStaLst")) {
+				if (orgOptionSta.getExerciseItemId().equals(item.getExerciseId())) {
+					newOrgOStaLst.add(orgOptionSta);
+				}
+			}
+
+			updateExerciseStatis(item, newOrgIStaLst, newOrgOStaLst, resultMap);
+			newOrgIStaLst.clear();
+			newOrgOStaLst.clear();
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 组装数据返回Map值
+	 * @param groupId
+	 * @param orgId
+	 * @param classId
+	 * @param btnFlag
+	 * @return
+	 */
+	private Map<String, Object> packageMapValue(String groupId,String orgId,String classId,boolean btnFlag){
+
+		// 组装参数 - 练习组Id、机构Id、班级Id
+		Map<String, String> paramsMap = new HashMap<String, String>();
+		paramsMap.put("groupId", groupId);
+		paramsMap.put("orgId", orgId);
+		paramsMap.put("classIdTo", classId);
+
+		// 组装习题组下所有题目的编号
+		Map<String, Object> exerciseItemMap = new HashMap<String, Object>();
+
+		List<ExerciseItem> itemLst = packageMapValue1(paramsMap, exerciseItemMap, btnFlag);
+		if(null == itemLst){
+			return null;
+		}
+
+		// 组装当前班级的ExerciseItemStatistics数据
+		Map<String, ExerciseItemStatistics> itemStatisMap = new HashMap<String, ExerciseItemStatistics>();
+
+		// 组装当前习题组所有题目的所有做题记录
+		Map<String, Object> answerUMap = new HashMap<String, Object>();
+		// 组装当前习题组所有题目当前班级的做题记录
+		Map<String, Object> classAnswerUMap = new HashMap<String, Object>();
+		// 组装所有题目的当前班级统计记录
+		Map<String, Object> optionStatisMap = new HashMap<String, Object>();
+		// 组装所有题目的选项
+		Map<String, Object> itemOptionMap = new HashMap<String, Object>();
+
+		// 组装所有题目的所有做题记录
+		String hql_answerUorg = "from ExerciseItemAnswerU where deleteFlag is false and exerciseItemId in (:exerciseItemIds) order by exerciseItemId";
+		List<ExerciseItemAnswerU> answerULstO = this.findByComplexHql(hql_answerUorg, exerciseItemMap, ExerciseItemAnswerU.class);
+		if(answerULstO.isEmpty()){
+			return null;
+		}
+		ExerciseUtils.packageExerciseItemAnswerStatis(answerULstO, answerUMap);
+
+		// 查询当前题目当前班级的所有做题记录
+		String hql_answerUclass = "select u from ExerciseRecord r,ExerciseItemAnswerU u where r.deleteFlag is false "
+				+ "and u.deleteFlag is false and r.recordId = u.exerciseRecordId and r.exerciseGroupId = ? order by u.exerciseItemId";
+		List<ExerciseItemAnswerU> answerULstC = this.find(hql_answerUclass, CollectionUtils.newList(groupId), ExerciseItemAnswerU.class);
+		ExerciseUtils.packageExerciseItemAnswerStatis(answerULstC, classAnswerUMap);
+
+		// 组装所有题目的选项
+		String hql_option = "from ExerciseItemOption where deleteFlag is false and exerciseItemId in (:exerciseItemIds) order by exerciseItemId";
+		List<ExerciseItemOption> itemOptionLst = this.findByComplexHql(hql_option, exerciseItemMap, ExerciseItemOption.class);
+		ExerciseUtils.packageExerciseItemOption(itemOptionLst, itemOptionMap);
+
+		// 当前机构的所有题目统计 —— 题目的全站统计
+		exerciseItemMap.put("orgId", paramsMap.get("orgId"));
+		String hql_orgItemStatis = "from ExerciseItemStatistics where exerciseItemId in (:exerciseItemIds) and orgId=:orgId and deleteFlag is false";
+		List<ExerciseItemStatistics> orgItemStatisLst = this.findByComplexHql(hql_orgItemStatis, exerciseItemMap, ExerciseItemStatistics.class);
+		List<ExerciseItemStatistics> claItemStatisLst = new ArrayList<ExerciseItemStatistics>(orgItemStatisLst.size());
+		for (ExerciseItemStatistics itemSta : orgItemStatisLst) {
+			if(paramsMap.get("classIdTo").equals(itemSta.getClassId())){
+				claItemStatisLst.add(itemSta);
+			}
+		}
+		for (ExerciseItemStatistics item : claItemStatisLst) {
+			itemStatisMap.put(item.getExerciseItemId(), item);
+		}
+
+		// 当前机构的所有题目选项统计 —— 题目选项的全站统计
+		String hql_optionStatisO = "from ExerciseOptionStatistics where deleteFlag is false and exerciseItemId in (:exerciseItemIds) and orgId=:orgId";
+		List<ExerciseOptionStatistics> orgOptionStatisLst = this.findByComplexHql(hql_optionStatisO, exerciseItemMap, ExerciseOptionStatistics.class);
+		List<ExerciseOptionStatistics> claOptionStatisLst = new ArrayList<ExerciseOptionStatistics>(orgOptionStatisLst.size());
+		for (ExerciseOptionStatistics optionSta : orgOptionStatisLst) {
+			if(paramsMap.get("classIdTo").equals(optionSta.getClassId())){
+				claOptionStatisLst.add(optionSta);
+			}
+		}
+		ExerciseUtils.packageExerciseOptionStatis(claOptionStatisLst, optionStatisMap);
+
+		Map<String, Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put("itemLst", itemLst);
+		resultMap.put("paramsMap", paramsMap);
+		resultMap.put("orgIStaLst", orgItemStatisLst);
+		resultMap.put("orgOStaLst", orgOptionStatisLst);
+
+		resultMap.put("itemStatisMap", itemStatisMap);
+		resultMap.put("answerUMap", answerUMap);
+		resultMap.put("classAnswerUMap", classAnswerUMap);
+		resultMap.put("optionStatisMap", optionStatisMap);
+		resultMap.put("itemOptionMap", itemOptionMap);
+
+		return resultMap;
+	}
+
+	/**
+	 * 组装数据返回Map值
+	 * @param paramsMap
+	 * @param exerciseItemMap
+	 * @param btnFlag
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private List<ExerciseItem> packageMapValue1(Map<String, String> paramsMap,Map<String, Object> exerciseItemMap,boolean btnFlag){
+
+		String groupId = paramsMap.get("groupId");
+		// 组装习题组下所有题目的编号
+		Object[] itemArgs = null;
+		List<ExerciseItem> itemLst = null;
+
+		if(btnFlag){
+			List<ExerciseItemAnswerU> lstAnswerU = cacheService.get(Constants.REFRESH_STATIS_GROUPID_LSTNEWANSWERU_CACHE_KEY + groupId, List.class);
+			if(lstAnswerU.isEmpty()){
+				return null;
+			}
+			itemArgs = new Object[lstAnswerU.size()];
+			for (int i = 0; i < lstAnswerU.size(); i++) {
+				itemArgs[i] = lstAnswerU.get(i).getExerciseItemId();
+			}
+			exerciseItemMap.put("exerciseItemIds", itemArgs);
+			String hql = "from ExerciseItem where exerciseId in (:exerciseItemIds) and deleteFlag is false";
+			itemLst = findByComplexHql(hql, exerciseItemMap, ExerciseItem.class);
+		}else{
+			// 判断5分钟内 是否有当前组ID的缓存
+			String cache = cacheService.get(Constants.REFRESH_STATIS_GROUPID_CACHE_KEY + groupId , String.class);
+			if (cache != null) {
+				return null;
+			}
+
+			// 将当前组ID放在缓存中
+			cacheService.set(Constants.REFRESH_STATIS_GROUPID_CACHE_KEY + groupId , Constants.EXE_STATIS_UPDATE_MINUTES, groupId);
+			String hql = "select g.items from ExerciseGroup g where g.groupId=? and g.deleteFlag is false";
+			itemLst = find(hql, CollectionUtils.newList(groupId), ExerciseItem.class);
+			if(itemLst.isEmpty()){
+				return null;
+			}
+
+			itemArgs = new Object[itemLst.size()];
+			for (int i = 0; i < itemLst.size(); i++) {
+				itemArgs[i] = itemLst.get(i).getExerciseId();
+			}
+			exerciseItemMap.put("exerciseItemIds", itemArgs);
+		}
+
+		return itemLst;
+	}
+
+
+	/**
+	 * 刷新更新统计
+	 * @param exerciseItem     练习
+	 * @param newOrgIStaLst
+	 * @param newOrgOStaLst
+	 * @param resultMap
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Result updateExerciseStatis(ExerciseItem exerciseItem, List<ExerciseItemStatistics> newOrgIStaLst,
+			List<ExerciseOptionStatistics> newOrgOStaLst, Map<String, Object> resultMap) {
+
+		// 所有题目的所有做题记录
+		Map<String, Object> answerUMap = (Map<String, Object>) resultMap.get("answerUMap");
+		// 当前习题组所有题目当前班级的做题记录
+		Map<String, Object> classAnswerUMap = (Map<String, Object>) resultMap.get("classAnswerUMap");
+		// 所有题目的当前班级统计记录
+		Map<String, Object> optionStatisMap = (Map<String, Object>)resultMap.get("optionStatisMap");
+		// 所有题目的选项
+		Map<String, Object> itemOptionMap = (Map<String, Object>) resultMap.get("itemOptionMap");
+		// 当前班级的ExerciseItemStatistics数据
+		Map<String, ExerciseItemStatistics> itemStatisMap = (Map<String, ExerciseItemStatistics>) resultMap.get("itemStatisMap");
+		// 组装参数 - 练习组Id、机构Id、班级Id
+		Map<String, String> paramsMap = (Map<String, String>)resultMap.get("paramsMap");
+
+		// 查询当前题目的所有做题记录
+		List<ExerciseItemAnswerU> answerULstO = (List<ExerciseItemAnswerU>) answerUMap.get(exerciseItem.getExerciseId());
+		if(null == answerULstO){
+			return null;
+		}
+		String orgAnswer = "";// 组装已选的答案 - 机构
+		int orgCorrectNum = 0;// 组装正确的次数 - 机构
+		for (ExerciseItemAnswerU item : answerULstO) {
+			if (item.getCorrect() == 1) {
+				orgCorrectNum++;
+			}
+			orgAnswer = orgAnswer.concat(item.getAnswer()).concat(",");
+		}
+
+		// 查询当前题目的当前班级做题记录
+		List<ExerciseItemAnswerU> answerULstC = (List<ExerciseItemAnswerU>) classAnswerUMap.get(exerciseItem.getExerciseId());
+		if(null == answerULstC){
+			return null;
+		}
+		String classAnswer = "";// 组装已选的答案 - 班级
+		int classCorrectNum = 0;// 组装正确的次数 - 班级
+		for (ExerciseItemAnswerU item : answerULstC) {
+			if (item.getCorrect() == 1) {
+				classCorrectNum++;
+			}
+			classAnswer = classAnswer.concat(item.getAnswer()).concat(",") ;
+		}
+
+		// 查询当前班级是否有当前题目的统计记录
+		List<ExerciseOptionStatistics> optionStatisLst = (List<ExerciseOptionStatistics>) optionStatisMap.get(exerciseItem.getExerciseId());
+		// 查询当前题目的选项
+		List<ExerciseItemOption> itemOptionLst = (List<ExerciseItemOption>) itemOptionMap.get(exerciseItem.getExerciseId());
+
+		// 更新数据 - 题目
+		updateItemStatistics(itemStatisMap.get(exerciseItem.getExerciseId()), exerciseItem, paramsMap, orgCorrectNum, classCorrectNum, answerULstO.size(), answerULstC.size());
+		// 更新数据 - 题目的选项
+		updateOptionStatistics(optionStatisLst, itemOptionLst, newOrgOStaLst, paramsMap, orgAnswer, classAnswer, answerULstO.size(), answerULstC.size());
+
+		// 更新全站数据 - 题目
+		for (ExerciseItemStatistics itemStatis : newOrgIStaLst) {
+			itemStatis.setOrgCorrectNum(new BigInteger(String.valueOf(orgCorrectNum)));
+			itemStatis.setOrgTotalNum(new BigInteger(String.valueOf(answerULstO.size())));
+			itemStatis.setOrgAccuracy(new BigDecimal(itemStatis.getOrgCorrectNum().doubleValue() / itemStatis.getOrgTotalNum().doubleValue() * 100));
+			TraceUtils.setUpdateTrace(itemStatis);
+			save(itemStatis);
+		}
+
+		// 更新全站数据 - 题目的选项
+		for (ExerciseOptionStatistics optionSta : newOrgOStaLst) {
+			optionSta.setOrgTotalNum(new BigInteger(String.valueOf(answerULstO.size())));
+			optionSta.setOrgAccuracy(new BigDecimal(optionSta.getOrgCorrectNum().doubleValue() / optionSta.getOrgTotalNum().doubleValue() * 100));
+			TraceUtils.setUpdateTrace(optionSta);
+			save(optionSta);
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 新增或修改ExerciseOptionStatistics记录
+	 *
+	 * @param itemStatis       练习题目
+	 * @param exerciseItem     练习
+	 * @param paramsMap        参数map - 练习组Id、机构Id、班级Id
+	 * @param orgCorrectNum
+	 * @param classCorrectNum
+	 * @param answerULstO
+	 * @param answerULstC
+	 * @return
+	 */
+	public Result updateItemStatistics(ExerciseItemStatistics itemStatis, ExerciseItem exerciseItem, Map<String, String> paramsMap,
+			int orgCorrectNum, int classCorrectNum, int answerULstO, int answerULstC) {
+		Result result = null;
+		if (itemStatis != null && StringUtils.isNoneBlank(itemStatis.getItemStatisticsId())) { // 有记录 更新
+
+			itemStatis.setClassTotalNum(new BigInteger(String.valueOf(answerULstC)));
+			itemStatis.setClassCorrectNum(new BigInteger(String.valueOf(classCorrectNum)));
+			itemStatis.setClassAccuracy(new BigDecimal(itemStatis.getClassCorrectNum().doubleValue() / itemStatis.getClassTotalNum().doubleValue() * 100));
+			TraceUtils.setUpdateTrace(itemStatis);
+			save(itemStatis);
+		} else {// 否则新增
+
+			ExerciseItemStatistics newItemStatis = new ExerciseItemStatistics();
+
+			newItemStatis.setClassId(paramsMap.get("classIdTo"));
+			newItemStatis.setOrgId(paramsMap.get("orgId"));
+			newItemStatis.setGroupId(paramsMap.get("groupId"));
+			newItemStatis.setClassCorrectNum(new BigInteger(String.valueOf(classCorrectNum)));
+			newItemStatis.setClassTotalNum(new BigInteger(String.valueOf(answerULstC)));
+			newItemStatis.setClassAccuracy(new BigDecimal(newItemStatis.getClassCorrectNum().doubleValue() / newItemStatis.getClassTotalNum().doubleValue() * 100));
+			newItemStatis.setOrgCorrectNum(new BigInteger(String.valueOf(orgCorrectNum)));
+			newItemStatis.setOrgTotalNum(new BigInteger(String.valueOf(answerULstO)));
+			newItemStatis.setOrgAccuracy(new BigDecimal(newItemStatis.getOrgCorrectNum().doubleValue() / newItemStatis.getOrgTotalNum().doubleValue() * 100));
+			newItemStatis.setCorrectAnswer(exerciseItem.getAnswer());
+			newItemStatis.setExerciseItemId(exerciseItem.getExerciseId());
+			newItemStatis.setExerciseItemTitel(exerciseItem.getTitle());
+			newItemStatis.setExerciseItemType(exerciseItem.getType());
+			TraceUtils.setCreateTrace(newItemStatis);
+			save(newItemStatis);
+		}
+		return result;
+	}
+
+	/**
+	 * 新增或修改ExerciseOptionStatistics记录
+	 *
+	 * @param optionStatisLst     练习题目选项
+	 * @param itemOptionLst       练习
+	 * @param orgOptionStatisLst
+	 * @param orgOptionStatisLst  提交题目的常见错误答案map
+	 * @param paramsMap           参数map - 练习组Id、机构Id、班级Id
+	 * @param classAnswer
+	 * @param orgAnswer
+	 * @param answerULstO
+	 * @param answerULstC
+	 * @return
+	 */
+	public Result updateOptionStatistics(List<ExerciseOptionStatistics> optionStatisLst, List<ExerciseItemOption> itemOptionLst,
+			List<ExerciseOptionStatistics> orgOptionStatisLst, Map<String, String> paramsMap,
+			String orgAnswer, String classAnswer, int answerULstO, int answerULstC) {
+		Result result = null;
+		if (null != optionStatisLst) { // 有记录 更新
+
+			for (ExerciseOptionStatistics optionSta : optionStatisLst) {
+
+				optionSta.setOrgCorrectNum(new BigInteger(String.valueOf(getStrCount(orgAnswer, optionSta.getOptionOrder()))));
+				optionSta.setClassTotalNum(new BigInteger(String.valueOf(answerULstC)));
+				optionSta.setClassCorrectNum(new BigInteger(String.valueOf(getStrCount(classAnswer, optionSta.getOptionOrder()))));
+				Double accuracy = optionSta.getClassCorrectNum().doubleValue() / optionSta.getClassTotalNum().doubleValue() * 100;
+				optionSta.setClassAccuracy(new BigDecimal(String.valueOf(accuracy)));
+				TraceUtils.setUpdateTrace(optionSta);
+				save(optionSta);
+				for (ExerciseOptionStatistics item : orgOptionStatisLst) {
+					if (item.getOptionOrder().equals(optionSta.getOptionOrder())) {
+						item.setOrgCorrectNum(new BigInteger(String.valueOf(getStrCount(orgAnswer, optionSta.getOptionOrder()))));
+						item.setOrgAccuracy(new BigDecimal(item.getOrgCorrectNum().doubleValue() / item.getOrgTotalNum().doubleValue() * 100));
+						TraceUtils.setUpdateTrace(item);
+						save(item);
+					}
+				}
+			}
+		} else {// 否则新增
+
+			for (ExerciseItemOption itemOption : itemOptionLst) {
+				ExerciseOptionStatistics newOptionSta = new ExerciseOptionStatistics();
+				newOptionSta.setClassId(paramsMap.get("classIdTo"));
+				newOptionSta.setOrgId(paramsMap.get("orgId"));
+				newOptionSta.setOptionId(itemOption.getOptionId());
+				newOptionSta.setChecked(itemOption.getChecked());
+				newOptionSta.setContent(itemOption.getContent());
+				newOptionSta.setOptionOrder(itemOption.getOptionOrder());
+				newOptionSta.setExerciseItemId(itemOption.getExerciseItemId());
+				newOptionSta.setClassCorrectNum(new BigInteger(String.valueOf(getStrCount(classAnswer, itemOption.getOptionOrder()))));
+				newOptionSta.setClassTotalNum(new BigInteger(String.valueOf(answerULstC)));
+				newOptionSta.setClassAccuracy(new BigDecimal(newOptionSta.getClassCorrectNum().doubleValue() / newOptionSta.getClassTotalNum().doubleValue() * 100));
+				newOptionSta.setOrgTotalNum(new BigInteger(String.valueOf(answerULstO)));
+				newOptionSta.setOrgCorrectNum(new BigInteger(String.valueOf(getStrCount(orgAnswer, itemOption.getOptionOrder()))));
+				newOptionSta.setOrgAccuracy(new BigDecimal(newOptionSta.getOrgCorrectNum().doubleValue() / newOptionSta.getOrgTotalNum().doubleValue() * 100));
+				TraceUtils.setCreateTrace(newOptionSta);
+				save(newOptionSta);
+				for (ExerciseOptionStatistics item : orgOptionStatisLst) {
+					if (item.getOptionOrder().equals(itemOption.getOptionOrder())) {
+						item.setOrgCorrectNum(new BigInteger(String.valueOf(getStrCount(orgAnswer, itemOption.getOptionOrder()))));
+						item.setOrgAccuracy(new BigDecimal(item.getOrgCorrectNum().doubleValue() / item.getOrgTotalNum().doubleValue() * 100));
+						TraceUtils.setUpdateTrace(item);
+						save(item);
+					}
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * 获取某个字符的个数
+	 *
+	 * @return
+	 */
+	public int getStrCount(String strs, String str) {
+		int count = 0;
+		for (int i = 0; i < strs.split(",").length; i++) {
+			if (strs.split(",")[i].equals(str)) {
+				count++;
+			}
+		}
+		return count;
+	}
+
+	/**
+	 * 提交题目发送消息 - 保存成绩统计
+	 * @param notice
+	 * @return
+	 *//*
+	private Result sendMsgExerciseStatistics(List<ExerciseItemAnswerU> lstNewAnswerU,String groupId){
+
+		// 4、获取提交当前题目的客户端班级、机构
+		String classId = ClientUtils.getClassId();
+		String orgId = ClientUtils.getOrgId();
+
+		// 2、答案记录放在缓存中
+		cacheService.set(Constants.REFRESH_STATIS_GROUPID_LSTNEWANSWERU_CACHE_KEY + groupId, Constants.EXE_STATIS_UPDATE_MINUTES, lstNewAnswerU);
+
+		// 3、异步调用 发送消息
+		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+
+		msg.put("msgType", "EXER_STATIS_SAVE");
+		msg.put("classId", classId);
+		msg.put("orgId", orgId);
+		msg.put("groupId", groupId);
+
+		try {
+
+			onsProducer.sendMsg(msg);
+
+			return new Result(true);
+
+		} catch (Exception e) {
+			log.error("call ExerciseStatistiscSendService fail.userId: " , e);
+		}
+
+		return new Result(false);
+	}*/
+
+	/**    ---------------练习成绩统计  end---------------- */
+
+	/** ------------------------- APP V2.0  start------------------------------------------*/
+
+
+
+	/**
+	 * 重新组装新结果
+	 * @param answerData
+	 * @return
+	 */
+	public ExerciseSubmitAnswerData getExerciseSubmitAnswerDataNew(ExerciseSubmitAnswerData answerData){
+
+		if(answerData.getItems().isEmpty()){
+			return answerData;
+		}
+
+		// 1.组装参数
+		List<ExerciseItemAnswerData> lstAnswers = answerData.getItems();
+		Map<String, Object> argsMap = new HashMap<String, Object>(lstAnswers.size());
+
+		Object[] args = new Object[lstAnswers.size()];
+		for(int i=0; i<lstAnswers.size(); i++){
+			args[i] = lstAnswers.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+
+		// 2.查询正确答案
+		String hql_answerU = "from ExerciseItem where exerciseId in (:exerciseIds) ";
+		List<ExerciseItem> lstItem= this.findByComplexHql(hql_answerU, argsMap, ExerciseItem.class);
+
+		Map<String, ExerciseItem> itemMap = new HashMap<String, ExerciseItem>(lstAnswers.size());
+		for(ExerciseItem item:lstItem){
+			itemMap.put(item.getExerciseId(), item);
+		}
+
+		ExerciseItem item = null;
+		int correctCount=0;
+		// 2.重新组装结果
+		for(ExerciseItemAnswerData data:lstAnswers){
+			item = itemMap.get(data.getExerciseId());
+
+			if(null == item){
+				continue;
+			}
+			//简答题都需要进行主观评分,用户答案统一标识为错误
+			if(checkIsCorrect(item,data.getAnswer())){// 答案正确
+				data.setCorrect(String.valueOf(ExerciseItemAnswerU.CORRECT_RIGHT));
+				correctCount++;
+			}else{// 答案错误
+				data.setCorrect(String.valueOf(ExerciseItemAnswerU.CORRECT_ERROR));
+			}
+		}
+
+		answerData.setCorrectCount(String.valueOf(correctCount));
+		answerData.setDoCount(String.valueOf(lstAnswers.size()));
+		answerData.setItems(lstAnswers);
+		return answerData;
+	}
+
+	private boolean checkIsCorrect(ExerciseItem item,String userAnswer){
+		if(StringUtils.isEmpty(userAnswer) || StringUtils.isEmpty(item.getAnswer())){
+			return false;
+		}
+
+		if(item.getType() == ExerciseItem.TYPE_TRUE_OR_FALSE){
+			if(userAnswer.equals("A")){
+				userAnswer = "True";
+			}else if(userAnswer.equals("B")){
+				userAnswer = "False";
+			}
+			return item.getAnswer().equals(userAnswer);
+
+		}
+
+		if(item.getType() == ExerciseItem.TYPE_FILL_BLANKS){
+			return checkFillBlanksIsCorrect(item.getAnswer(),userAnswer);
+		}else {
+			return item.getAnswer().equals(userAnswer);
+		}
+
+	}
+
+	private boolean checkFillBlanksIsCorrect(String itemAnswer,String useranswer){
+		boolean result =false;
+
+		if(StringUtils.isNotEmpty(itemAnswer) && StringUtils.isNotEmpty(useranswer)){
+			String[] arrUserAnswer = useranswer.split(FILL_BLANKS_ANSWER_SPLIT_STR);
+			String[] arrItemAnswer = itemAnswer.split(FILL_BLANKS_ANSWER_SPLIT_STR);
+
+			String tmpCorrectAsw=null, tmpUsertAsw=null;
+			int tempRightFillCount =0;
+			for(int i =0 ;i<arrUserAnswer.length;i++){
+				tmpCorrectAsw = StringUtils.isEmpty(arrItemAnswer[i])?"":arrItemAnswer[i].trim().toLowerCase().replaceAll("\\s*|\t|\r|\n", "");
+				tmpUsertAsw =StringUtils.isEmpty(arrUserAnswer[i])?"":arrUserAnswer[i].trim().toLowerCase().replaceAll("\\s*|\t|\r|\n", "");
+
+				if(StringUtils.isBlank(tmpCorrectAsw)||StringUtils.isBlank(tmpUsertAsw)){
+					continue;
+				}
+
+				if(tmpCorrectAsw.equals(tmpUsertAsw)){
+					++tempRightFillCount;
+				}else{
+					//如果不完全相同,则根据hanlp计算相似度
+					if(this.checkSimilarity(tmpCorrectAsw, tmpUsertAsw)){
+						++tempRightFillCount;
+					}
+				}
+			}
+			result = tempRightFillCount==arrItemAnswer.length ;
+		}
+
+		return result;
+	}
+
+	/**
+	 * 操作用户 练习组排名信息
+	 * @param record
+	 * @return
+	 */
+	public Result doOperExerciseGroupRank(ExerciseRecord record){
+		// 查询该用户在排名表中 此组是否有值
+		String hql = "from SchRank where rankType=? and userId=? and scopeType=? and scopeId=? ";
+
+		String userId = record.getUserId();
+		SchRank rank = this.findUnique(hql,
+				CollectionUtils.newList(SchRank.RANK_TYPE_EXERCISE_SCORE,
+						userId,SchRank.SCOPE_TYPE_CLASS_GROUP,
+						record.getExerciseGroupId()), SchRank.class);
+
+		if(null == rank){// 新增记录
+			rank = new SchRank();
+
+			rank.setRankType(SchRank.RANK_TYPE_EXERCISE_SCORE);
+			rank.setValue(record.getAccuracy());
+			rank.setScopeType(SchRank.SCOPE_TYPE_CLASS_GROUP);
+			rank.setScopeId(record.getExerciseGroupId());
+			rank.setUserId(userId);
+			rank.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(rank);
+		}else{// 更新记录
+			rank.setValue(record.getAccuracy());
+
+			TraceUtils.setUpdateTrace(rank);
+		}
+
+		// 保存结果
+		this.save(rank);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 操作最近一次记录
+	 * @param record
+	 * @return
+	 */
+	public String doOperExerciseRecentRecord(ExerciseRecord record){
+
+		String hql = "from ExerciseRecentRecord where deleteFlag is false and exerciseGroupId=? and userId=?  ";
+
+		ExerciseRecentRecord rRecord = this.findUnique(hql,
+				CollectionUtils.newList(record.getExerciseGroupId(), record.getUserId()), ExerciseRecentRecord.class);
+
+		String recentRecordId = null;
+		if(null == rRecord){//新增记录
+
+			recentRecordId = insertExerciseRecentRecord(record);
+		}else{// 更新记录
+
+			updateExerciseRecentRecord(rRecord, record.getRecordId());
+
+			recentRecordId = rRecord.getRecentRecordId();
+		}
+
+		return recentRecordId;
+	}
+
+	/**
+	 * 新增记录 最近一次做题记录
+	 * @param record
+	 * @return
+	 */
+	public String insertExerciseRecentRecord(ExerciseRecord record){
+
+		ExerciseRecentRecord rRecord = new ExerciseRecentRecord();
+
+		rRecord.setExerciseRecordId(record.getRecordId());
+		rRecord.setExerciseGroupId(record.getExerciseGroupId());
+		rRecord.setUserId(record.getUserId());
+		rRecord.setClassId(record.getClassId());
+		rRecord.setCollegeCourseId(record.getCollegeCourseId());
+		rRecord.setOrgId(record.getOrgId());
+		rRecord.setSubjectId(record.getSubjectId());
+		rRecord.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(rRecord);
+
+		this.save(rRecord);
+
+		return rRecord.getRecentRecordId();
+	}
+
+	/**
+	 * 更新记录 最近一次做题记录
+	 * @param record
+	 * @return
+	 */
+	public  Result updateExerciseRecentRecord(ExerciseRecentRecord rRecord, String recordId){
+
+		rRecord.setExerciseRecordId(recordId);
+		TraceUtils.setUpdateTrace(rRecord);
+
+		this.save(rRecord);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 新增练习记录
+	 * @param groupId
+	 * @return
+	 * @throws ParseException
+	 */
+	public ExerciseRecord insertExerciseRecordMutiNew(ExerciseRecord record, String groupId,
+			String subjectId, String submitTime) {
+		record.setExerciseGroupId(groupId);
+		record.setCollegeCourseId(ClientUtils.getCourseId());
+		record.setOrgId(ClientUtils.getOrgId());
+		record.setSubjectId(subjectId);
+		record.setUserId(ClientUtils.getUserId());
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+		return record;
+	}
+
+	/**
+	 * 新增练习记录
+	 * @param groupId
+	 * @return
+	 */
+	public String insertExerciseRecordNew(ExerciseRecord record, String groupId, String subjectId) {
+		record.setExerciseGroupId(groupId);
+		record.setCollegeCourseId(ClientUtils.getCourseId());
+		record.setOrgId(ClientUtils.getOrgId());
+		record.setSubjectId(subjectId);
+		record.setUserId(ClientUtils.getUserId());
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+
+		this.save(record);
+
+		return record.getRecordId();
+	}
+
+	/**
+	 * 更新练习记录
+	 * @param groupId
+	 * @return
+	 */
+	public ExerciseRecord updateExerciseRecordNew(ExerciseRecord record,  ExerciseSubmitAnswerData answerData) {
+		if(StringUtils.isNotBlank(answerData.getCurrTitleNum())){
+			record.setTitleMaxNumber(answerData.getCurrTitleNum());
+		}
+
+		//如果是考试
+		if(String.valueOf(ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM).equals(answerData.getType())){
+			if(answerData.getScore()!=null){
+				record.setScore(answerData.getScore());
+			}else{
+				//判断是否是随机考试,如果是随机考试,则按照配置来计算得分
+				ExamInfo examInfo =  null;
+				List<ExerciseItemSet> lstItemSets = null;
+				if(StringUtils.isNotEmpty(record.getExamBatchId())&& StringUtils.isNotEmpty(record.getClassId())){
+					examInfo =  this.read(ExamBatchInfo.class,record.getExamBatchId()).getExamInfo();
+				}else {
+					//TODO 这里是因为补考考试的时候添加的记录的批次ID改成了考试ID,并且没有添加ClassID
+					examInfo =  this.read(ExamInfo.class,record.getExamBatchId());
+				}
+
+				if(ExamInfo.EXAM_TYPE_RANDOM == examInfo.getExamType() || ExamInfo.EXAM_TYPE_RANDOM_BY_GROUP == examInfo.getExamType()){
+					lstItemSets = this.find( "from ExerciseItemSet s where s.deleteFlag is false and  s.exerciseInfoId=?",
+							CollectionUtils.newList(examInfo.getExamId()) , ExerciseItemSet.class);
+					record.setScore(this.calculateScore(answerData.getExerciseGroupId(),lstItemSets ,answerData.getItems()));
+				}else{
+					record.setScore(this.calculateScore(answerData.getExerciseGroupId(),answerData.getItems()));
+				}
+			}
+		}else{
+			//如果是作业
+			record.setScore(answerData.getScore());
+		}
+
+		//设置状态,如果没有主观题,并是提交状态,则直接设置状态为已批阅
+		if(record.getSubItemCount()==0 && answerData.getStatus().equals(String.valueOf(ExerciseRecord.STATUS_SUBMIT))){
+			record.setStatus(ExerciseRecord.STATUS_CHECK);
+		}else{
+			record.setStatus(answerData.getStatus());
+		}
+
+		record.setRemainingSeconds(answerData.getRemainingSeconds());
+
+		//设置提交时间
+		if(answerData.getStatus().equals(String.valueOf(ExerciseRecord.STATUS_SUBMIT))){
+			record.setSubmitTime(new Date());
+		}
+
+		//保存客观题分数和主观题分数
+		if(answerData.getStatus().equals(String.valueOf(ExerciseRecord.STATUS_CHECK))){
+			record.setSubScore(record.getScore().subtract(record.getObjScore()));
+		}else{
+			record.setObjScore(record.getScore());
+		}
+
+		TraceUtils.setUpdateTrace(record);
+		this.save(record);
+		return record;
+	}
+
+
+	//后台计算考试得分
+	private  BigDecimal  calculateScore(String groupId,List<ExerciseItemAnswerData> items){
+		BigDecimal resultScore = BigDecimal.ZERO;
+
+		if(items==null || items.isEmpty()){
+			return BigDecimal.ZERO;
+		}
+
+		//查询题目分数信息
+		List<Object[]> lstObj =  this.find("select c.exerciseItemId,c.score,i.answer from ExerciseItemScore c,ExerciseItem i where c.exerciseItemId = i.exerciseId and c.groupId=? and c.deleteFlag is false",  CollectionUtils.newList(groupId), Object[].class);
+		if(lstObj==null || lstObj.isEmpty()){
+			return BigDecimal.ZERO;
+		}
+
+		//组装题目分数MAP
+		Map<String,Object[]> exerciseScoreMap = new HashMap<String,Object[]>(lstObj.size());
+		for(Object[] arrObj : lstObj){
+			exerciseScoreMap.put((String)arrObj[0],arrObj);
+		}
+
+		BigDecimal tempScore = null,itemScore = null;
+		String itemAnswer = "";
+		for(ExerciseItemAnswerData data : items){
+			//如果正确并且存在分数信息,则处理
+			if(exerciseScoreMap.containsKey(data.getExerciseId())){
+				itemScore = new BigDecimal((String)exerciseScoreMap.get(data.getExerciseId())[1]);
+				itemAnswer = (String)exerciseScoreMap.get(data.getExerciseId())[2];
+			}else{
+				itemScore =BigDecimal.ZERO;
+			}
+
+			if(data.getType()==ExerciseItem.TYPE_ESSAY_QUESTION){	//问答题计算分数
+				if(StringUtils.isNotEmpty(data.getTeacherScore())){
+					tempScore = new BigDecimal(data.getTeacherScore());
+				}else{
+					tempScore = BigDecimal.ZERO;
+				}
+				tempScore = tempScore.compareTo(itemScore)>0?itemScore:tempScore;
+			}else if(data.getType()==ExerciseItem.TYPE_FILL_BLANKS){ //填空题计算分数
+				tempScore  = this.calFillBlanksItemScore(itemAnswer, data.getAnswer(), itemScore.floatValue());
+				data.setTeacherScore(tempScore.toPlainString()); //设置填空题分数
+			}else{
+				tempScore = Integer.valueOf(data.getCorrect())>0?itemScore:BigDecimal.ZERO;
+			}
+			resultScore = resultScore.add(tempScore);
+		}
+
+		return resultScore;
+	}
+
+	/**
+	 * 根据随机选题配置计算题目得分
+	 * @param lstItemSet
+	 * @param items
+	 * @return
+	 */
+	private BigDecimal calculateScore(String groupId,List<ExerciseItemSet> lstItemSet,List<ExerciseItemAnswerData> items) {
+		//获取填空题答案信息
+		Map<String,String> exerciseFillItemMap= null;
+		List<Object[]> lstObj =  this.find("select i.exerciseId,i.answer from ExerciseGroupItemRe r, ExerciseItem i where r.exerciseItemId=i.exerciseId and  r.exerciseGroupId=? and r.deleteFlag is false and i.type=? and i.deleteFlag is false",
+					CollectionUtils.newList(groupId,ExerciseItem.TYPE_FILL_BLANKS), Object[].class);
+		if(lstObj!=null && lstObj.size()>0){
+			exerciseFillItemMap = new HashMap<String,String>(lstObj.size());
+			for(Object[] arrObj : lstObj){
+				exerciseFillItemMap.put((String)arrObj[0],(String)arrObj[1]);
+			}
+		}
+
+		Map<String, Double> scoreMap = new HashMap<String, Double>();
+		for (int i = 0; i < lstItemSet.size(); i++) {
+			if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+				scoreMap.put("single_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("single_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("single_noanswer", lstItemSet.get(i).getBlankScore());
+			} else if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_MULTI_SELECT) {
+				scoreMap.put("multi_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("multi_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("multi_noanswer", lstItemSet.get(i).getBlankScore());
+			} else if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+				scoreMap.put("judge_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("judge_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("judeg_noanswer", lstItemSet.get(i).getBlankScore());
+			} else if (lstItemSet.get(i).getItemType() == ExerciseItem.TYPE_FILL_BLANKS) {
+				scoreMap.put("fill_right", lstItemSet.get(i).getRightScore());
+				scoreMap.put("fill_wrong", lstItemSet.get(i).getWrongScore());
+				scoreMap.put("fill_noanswer", lstItemSet.get(i).getBlankScore());
+			}
+		}
+		double totalScore = 0.00;
+		String tempRightAnswer =null;
+		BigDecimal tempScore = BigDecimal.ZERO;
+		if (items != null && items.size() > 0) {
+			for (ExerciseItemAnswerData data : items) {
+				if (Integer.valueOf(data.getCorrect()) > 0) {
+					if (data.getType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+						totalScore += scoreMap.get("single_right");
+					} else if (data.getType() == ExerciseItem.TYPE_MULTI_SELECT) {
+						totalScore += scoreMap.get("multi_right");
+					} else if (data.getType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+						totalScore += scoreMap.get("judge_right");
+					} else if (data.getType() == ExerciseItem.TYPE_FILL_BLANKS) {
+						if(exerciseFillItemMap!=null && exerciseFillItemMap.size()>0){
+							tempRightAnswer = exerciseFillItemMap.get(data.getExerciseId());
+						}
+						tempScore = this.calFillBlanksItemScore(tempRightAnswer,data.getAnswer(), scoreMap.get("fill_right").floatValue());
+						data.setTeacherScore(tempScore.toPlainString());
+						totalScore += tempScore.doubleValue();
+					}else if (data.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+						if(StringUtils.isNotEmpty(data.getTeacherScore())){
+							tempScore = new BigDecimal(data.getTeacherScore());
+						}else{
+							tempScore = BigDecimal.ZERO;
+						}
+						totalScore += tempScore.doubleValue();
+					}
+				} else {
+					if (data.getType() == ExerciseItem.TYPE_SINGLE_SELECT) {
+						totalScore += scoreMap.get("single_wrong");
+					} else if (data.getType() == ExerciseItem.TYPE_MULTI_SELECT) {
+						totalScore += scoreMap.get("multi_wrong");
+					} else if (data.getType() == ExerciseItem.TYPE_TRUE_OR_FALSE) {
+						totalScore += scoreMap.get("judge_wrong");
+					}else if (data.getType() == ExerciseItem.TYPE_FILL_BLANKS) {
+						if(exerciseFillItemMap!=null && exerciseFillItemMap.size()>0){
+							tempRightAnswer = exerciseFillItemMap.get(data.getExerciseId());
+						}
+						tempScore = this.calFillBlanksItemScore(tempRightAnswer,data.getAnswer(), scoreMap.get("fill_right").floatValue());
+						data.setTeacherScore(tempScore.toPlainString());
+						totalScore += tempScore.doubleValue();
+					}else if (data.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {
+						if(StringUtils.isNotEmpty(data.getTeacherScore())){
+							tempScore = new BigDecimal(data.getTeacherScore());
+						}else{
+							tempScore = BigDecimal.ZERO;
+						}
+						totalScore += tempScore.doubleValue();
+					}
+				}
+			}
+		}
+		return new BigDecimal(totalScore);
+	}
+
+	@Override
+	public BigDecimal calFillBlanksItemScore(String itemAnswer,String useranswer,float itemRightScore){
+		BigDecimal resultScore = null;
+		int tempRightFillCount=0;
+		String[] arrUserAnswer = null;
+		String[] arrItemAnswer = null;
+
+		//填空题计算分数
+		tempRightFillCount =0;
+		if(StringUtils.isNotEmpty(itemAnswer) && StringUtils.isNotEmpty(useranswer)){
+			arrUserAnswer = useranswer.split(FILL_BLANKS_ANSWER_SPLIT_STR);
+			arrItemAnswer = itemAnswer.split(FILL_BLANKS_ANSWER_SPLIT_STR);
+			if(arrUserAnswer.length>arrItemAnswer.length){
+				arrItemAnswer = ArrayUtils.subarray(arrItemAnswer, 0, arrItemAnswer.length);
+			}
+
+			String tmpCorrectAsw=null, tmpUsertAsw=null;
+			for(int i =0 ;i<arrUserAnswer.length;i++){
+				tmpCorrectAsw = StringUtils.isEmpty(arrItemAnswer[i])?"":arrItemAnswer[i].trim().toLowerCase().replaceAll("\\s*|\t|\r|\n", "");
+				tmpUsertAsw =StringUtils.isEmpty(arrUserAnswer[i])?"":arrUserAnswer[i].trim().toLowerCase().replaceAll("\\s*|\t|\r|\n", "");
+
+				if(StringUtils.isBlank(tmpCorrectAsw)||StringUtils.isBlank(tmpUsertAsw)){
+					continue;
+				}
+
+				if(tmpCorrectAsw.equals(tmpUsertAsw)){
+					++tempRightFillCount;
+				}else{
+					//如果不完全相同,则根据hanlp计算相似度
+					if(this.checkSimilarity(tmpCorrectAsw, tmpUsertAsw)){
+						++tempRightFillCount;
+					}
+				}
+			}
+			resultScore = new BigDecimal(itemRightScore*tempRightFillCount/arrItemAnswer.length);
+		}else{
+			resultScore = BigDecimal.ZERO;
+		}
+
+		return resultScore;
+	}
+
+	private boolean checkSimilarity(String correctAsw,String userAsw){
+		double  matchingDegree=0.0;
+		int correctWord=0;
+
+		List<String> correctLst = HanLP.extractKeyword(StringUtils.isEmpty(correctAsw)?"":correctAsw.trim().toLowerCase().replaceAll("\\s*|\t|\r|\n", ""),100);
+		List<String> userLst = HanLP.extractKeyword(StringUtils.isEmpty(userAsw)?"":userAsw.trim().toLowerCase().replaceAll("\\s*|\t|\r|\n", ""),100);
+
+//		System.out.println(correctLst);
+//		System.out.println(userLst);
+
+		//根据正确的list进行参照,如果user中含有正确的词汇+1
+		for(String t :correctLst){
+			if(userLst.contains(t)){
+				correctWord++;
+			}
+		}
+		if(correctLst.size()>0){
+			matchingDegree = correctWord*1.0/correctLst.size();
+		}
+
+//		System.out.println("matchingDegree: "+matchingDegree);
+
+		return matchingDegree>SIMILARITY_PASS_LINE;
+	}
+
+	/**
+	 * 提交用户本次做题数据结果 以及分析结果
+	 * @return
+	 */
+	public Result doSubmitExerciseAnswerDataNew(ExerciseSubmitAnswerData answerData, String exerciseRecordId) {
+		// 1.组装参数
+		String exerciseGroupId = answerData.getExerciseGroupId();
+
+		List<ExerciseItemAnswerData> lstAnswers = answerData.getItems();
+		//TODO 添加用户做题答案时,判断提交的做题记录是否为空
+		if (lstAnswers!=null&& !lstAnswers.isEmpty()) {
+			Object[] args = new Object[lstAnswers.size()];
+			for(int i=0; i<lstAnswers.size(); i++){
+				args[i] = lstAnswers.get(i).getExerciseId();
+			}
+
+			// 1.记录练习答案  ExerciseItemAnswerU
+			this.doOperExerciseItemAnswerUNew(lstAnswers, exerciseRecordId,exerciseGroupId, CollectionUtils.newObjectMap("exerciseIds",args));
+		}
+
+		// 2.重新计算做题记录正确个数 做题个数  正确率
+		Result result = this.doCalcExericseRecordStatisData(exerciseGroupId, exerciseRecordId, answerData);
+
+		// 3.计算组已经提交人数
+		this.doCalcExericseGroupSubmitNumber(exerciseGroupId);
+
+		// 4、计算班级正确率
+		this.doUpdateExerGroupClsAccuracy(exerciseGroupId, answerData.getDoCount(), answerData.getCorrectCount());
+
+		return result;
+	}
+
+	/**
+	 * 计算组已经提交人数
+	 * @param exerciseGroupId
+	 * @return
+	 */
+	public Result doCalcExericseGroupSubmitNumber(String exerciseGroupId){
+		String hql = "select userId from ExerciseRecord where deleteFlag is false and status=? and exerciseGroupId=? group by userId";
+
+		List<String> numberLst = this.find(hql, CollectionUtils.newList(ExerciseRecord.STATUS_SUBMIT,exerciseGroupId),String.class);
+
+		ExerciseGroupExtend extend = this.findUnique("from ExerciseGroupExtend where groupId=? and deleteFlag is false ",
+				CollectionUtils.newList(exerciseGroupId), ExerciseGroupExtend.class);
+
+		if(extend == null){
+			extend = new ExerciseGroupExtend();
+			extend.setGroupId(exerciseGroupId);
+			extend.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(extend);
+		}else{
+			TraceUtils.setUpdateTrace(extend);
+		}
+
+		extend.setSubmitNumber(new BigInteger(String.valueOf(numberLst.size())));
+		this.save(extend);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 发送个人统计 全站统计消息
+	 * @param lstAnswers
+	 * @return
+	 */
+	@Override
+	public Result sendUpdateExerItemStatisticsMsg(String exerciseGroupId, ExerciseSubmitAnswerData answerData){
+
+		// 1、 获取当前时间
+		DateUtils objDateUtils = new DateUtils();
+		String currTime = objDateUtils.getDateFormat(objDateUtils.getCurrDateTime(),"yyyyMMddHHmmss");
+
+		// 2、答案记录放在缓存中   默认放入10分钟
+		cacheService.set(Constants.EXER_ITEM_STATISTICAL_CACHE_KEY
+				+ ClientUtils.getUserId() + exerciseGroupId +  currTime, 600, answerData);
+
+		// 异步调用 发送消息
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//
+//		msg.put("msgType", "USER_EXER_ITEM_STATIS");
+//		msg.put("userId", ClientUtils.getUserId());
+//		msg.put("userName", ClientUtils.getUserName());
+//		msg.put("groupId", exerciseGroupId);
+//		msg.put("currTime", currTime);
+//
+//		try {
+//
+//			onsProducer.sendMsg(msg);
+//			return new Result(true);
+//
+//		} catch (Exception e) {
+//			log.error("call sendUpdateExerItemStatisticsMsg fail"  , e);
+//		}
+
+		return new Result(false);
+	}
+
+	/**
+	 * 重新计算做题记录正确个数 做题个数  正确率
+	 * @param exerciseGroupId
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Result doCalcExericseRecordStatisData(String exerciseGroupId, String exerciseRecordId
+			, ExerciseSubmitAnswerData answerData){
+
+		// 1.计算做题个数   做题正确个数
+		String sql_answerU = "select count(1) doCount, sum(CORRECT=1) correctCount"
+				+ " from exercise_item_answer_u where DELETE_FLAG=0 and EXERCISE_RECORD_ID=? ";
+		List<Object[]> lstAnswerU = this.findBySql(sql_answerU, CollectionUtils.newList(exerciseRecordId));
+
+		String doCount = String.valueOf(lstAnswerU.get(0)[0]);
+		String correctCount = String.valueOf(lstAnswerU.get(0)[1] == null ? 0 : lstAnswerU.get(0)[1]);
+
+		// 3.查询总题目数
+		ExerciseGroup group = this.read(ExerciseGroup.class, exerciseGroupId);
+		BigInteger allCount = group.getAllCount();
+
+		if(allCount==null || allCount.intValue()==0){
+			allCount = BigInteger.valueOf(this.findCount("from ExerciseGroupItemRe  where exerciseGroupId=? and deleteFlag is false", CollectionUtils.newList(exerciseGroupId)));;
+		}
+
+		// 4.查询做题记录obj
+		ExerciseRecord record = this.read(ExerciseRecord.class, exerciseRecordId);
+
+		BigDecimal accuracy = ExerciseUtils.parseStrToBigDecimal(correctCount, String.valueOf(allCount));
+		BigDecimal completionRate =  ExerciseUtils.parseStrToBigDecimal(doCount,  String.valueOf(allCount));
+
+		// 更新最新值
+		record.setAccuracy(accuracy);
+		record.setCompletionRate(completionRate);
+		record.setStatus(answerData.getStatus());
+		record.setCorrectCount(new BigInteger(correctCount));
+		record.setDoCount(new BigInteger(doCount));
+		record.setOrgId(ClientUtils.getOrgId());
+
+		this.save(record);
+
+		// 5.操作练习组此次排名情况
+//		doOperExerciseGroupRank(record);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 计算考试分数
+	 *
+	 * @param exerciseGroupId
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	@SuppressWarnings({ "unchecked", "unused" })
+	private BigDecimal getExamScore(String exerciseGroupId, String exerciseRecordId) {
+		String examId = this.findUnique("select examId from ExerciseExamReGroup where groupId = ? and deleteFlag is false", CollectionUtils.newList(exerciseGroupId), String.class);
+
+		List<ExerciseExamItemType> lstExerciseExamItemType = this.find("from ExerciseExamItemType where deleteFlag is false and examId = ?",
+				CollectionUtils.newList(examId), ExerciseExamItemType.class);
+
+		if(lstExerciseExamItemType == null || lstExerciseExamItemType.isEmpty()) {
+			return BigDecimal.ZERO;
+		}
+
+		// 1.计算做题个数   做题正确个数
+		String sql_answerU = "SELECT COUNT(1), SUM(u.CORRECT = 1), SUM(u.CORRECT = 0),"
+				+ "i.TYPE FROM exercise_item_answer_u u, exercise_item i "
+				+ "WHERE u.EXERCISE_RECORD_ID = ? AND i.EXERCISE_ID = u.EXERCISE_ITEM_ID GROUP BY i.type";
+		List<Object[]> lstAnswerU = this.findBySql(sql_answerU, CollectionUtils.newList(exerciseRecordId));
+		if(lstAnswerU == null || lstAnswerU.isEmpty()) {
+			return BigDecimal.ZERO;
+		}
+
+		Double score = 0.0;
+		for(ExerciseExamItemType objExerciseExamItemType : lstExerciseExamItemType) {
+			for(Object[] answerU : lstAnswerU) {
+				Short itemType = (Short)answerU[3];
+				Integer correctCount = ((BigDecimal)answerU[1]).intValue();
+				Integer notCorrectCount = ((BigDecimal)answerU[2]).intValue();
+				Integer totalCount = ((BigInteger)answerU[0]).intValue();
+
+				if(itemType == objExerciseExamItemType.getItemType()) {
+					score += correctCount*objExerciseExamItemType.getRightScore();
+					score += notCorrectCount*objExerciseExamItemType.getWrongScore();
+					score += (objExerciseExamItemType.getItemCount()-totalCount)*objExerciseExamItemType.getBlankScore();
+				}
+			}
+		}
+
+		return BigDecimal.valueOf(score);
+	}
+
+	/**
+	 * 操作练习答案结果
+	 * @param answer
+	 * @param userId
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	public Result doOperExerciseItemAnswerUNew(List<ExerciseItemAnswerData> lstAnswers,
+			String exerciseRecordId, String exerciseGroupId, Map<String, Object> argsMap) {
+		// 记录练习答案  ExerciseItemAnswerU
+		String hql_answerU = "from ExerciseItemAnswerU where exerciseItemId in (:exerciseIds) and "
+				+ " exerciseRecordId=:exerciseRecordId and  deleteFlag is false ";
+		argsMap.put("exerciseRecordId",exerciseRecordId);
+		List<ExerciseItemAnswerU> lstAnswerU = this.findByComplexHql(hql_answerU, argsMap, ExerciseItemAnswerU.class);
+
+		Map<String, ExerciseItemAnswerU> answerUMap = new HashMap<String, ExerciseItemAnswerU>();
+		for(ExerciseItemAnswerU answerU:lstAnswerU){
+			answerUMap.put(answerU.getExerciseItemId(), answerU);
+		}
+
+		String userId = ClientUtils.getUserId();
+		List<ExerciseItemAnswerU> lstNewAnswerU = new ArrayList<ExerciseItemAnswerU>(lstAnswers.size());
+		ExerciseItemAnswerU answerU = null;
+		byte currCorrect;
+		// 批量操作
+		for(ExerciseItemAnswerData answer:lstAnswers){
+			answerU=answerUMap.get(answer.getExerciseId());
+			// 1.组装批量练习答案
+			if(answerU == null){
+				//为空 新增一个
+//				if(StringUtils.isBlank(answer.getAnswer())){//答案为空 跳过
+//					continue;
+//				}
+
+				// 组装答案记录
+				answerU = new ExerciseItemAnswerU();
+				answerU.setExerciseItemId(answer.getExerciseId());
+				answerU.setExerciseRecordId(exerciseRecordId);
+				answerU.setAnswer(answer.getAnswer());
+				answerU.setCorrect(Byte.valueOf(answer.getCorrect()));
+				answerU.setUserId(userId);
+				answerU.setDeleteFlag(false);
+				answerU.setTeacherScore(answer.getTeacherScore());
+				answerU.setUpdateStatus(ExerciseItemAnswerU.STATUS_ADD);
+				TraceUtils.setCreateTrace(answerU);
+			}else{//更新
+				// 本次修改结果
+				currCorrect = Byte.valueOf(answer.getCorrect());
+				if(answerU.getCorrect() == ExerciseItemAnswerU.CORRECT_ERROR &&
+						currCorrect == ExerciseItemAnswerU.CORRECT_RIGHT){//上次错误本次修改为正确 统计正确结果 +1
+					answerU.setUpdateStatus(ExerciseItemAnswerU.STATUS_UPDATE_CORRECT);
+				}else if(answerU.getCorrect() == ExerciseItemAnswerU.CORRECT_RIGHT &&
+						currCorrect == ExerciseItemAnswerU.CORRECT_ERROR){// 上次正确本次修改为错误 统计正确结果 -1
+					answerU.setUpdateStatus(ExerciseItemAnswerU.STATUS_UPDATE_ERROR);
+				}
+
+				answerU.setLastAnswer(answerU.getAnswer());// 存储上一次答案
+				answerU.setAnswer(answer.getAnswer());
+				answerU.setCorrect(currCorrect);
+				answerU.setTeacherScore(answer.getTeacherScore());
+
+				if(StringUtils.isBlank(answer.getAnswer())){// 取消答案 删除
+					answerU.setDeleteFlag(true);
+				}
+
+				TraceUtils.setUpdateTrace(answerU);
+			}
+
+			lstNewAnswerU.add(answerU);
+		}
+
+		//批量保存
+		this.saveOrUpdateAll(lstNewAnswerU);
+//		this.flush();
+
+		// -----------------开始答题结果统计-------------------
+//		sendMsgExerciseStatistics(lstNewAnswerU, exerciseGroupId);
+
+		return new Result(true);
+
+	}
+
+	/**
+	 *
+	 * 统计用户做题结果数据
+	 * @return
+	 */
+	@Override
+	public Result doStatisUserExerciseItemData(String userId, String userName, ExerciseSubmitAnswerData answerData) {
+
+		// 数据统计
+		List<ExerciseItemAnswerData> lstAnswers = answerData.getItems();
+
+		if(lstAnswers.isEmpty()){
+			return new Result(false,"数据为空");
+		}
+
+		ExerciseItemAnalisi analisis = null;
+		ExerciseItemAnalisiU analisisU = null;
+		String exerciseItemId = null;
+		int number = 0;
+		Result result;
+		String hql_analisis;
+		String hql_analisisU;
+
+		for(ExerciseItemAnswerData answer:lstAnswers){
+			number = 0;
+			exerciseItemId = answer.getExerciseId();
+
+			if(ExerciseItemAnswerU.CORRECT_RIGHT_STR.equals(answer.getCorrect())){// 答案正确
+				number = 1;
+			}
+
+			// 1、全站统计
+			hql_analisis = "update ExerciseItemAnalisi"
+					+ " set submitNumber=IFNULL(submitNumber,0)+1"
+					+ ",submitCorrectNumber=IFNULL(submitCorrectNumber,0)+"+number
+					+ ",updateId='" + userId
+					+ "',updator='" + userName
+					+ "',accuracy=round(submitCorrectNumber/submitNumber*100, 2)"
+					+ " where exerciseItemId=? and deleteFlag is false";
+
+			result = this.bulkUpdate(hql_analisis, new String[]{exerciseItemId});
+
+			if(Integer.parseInt(String.valueOf(result.getData("doCount"))) < 1){// 为空 新增记录
+				analisis = new ExerciseItemAnalisi();
+				analisis.setDeleteFlag(false);
+				analisis.setExerciseItemId(exerciseItemId);
+				analisis.setCreateId(userId);
+				analisis.setCreateTime(DateUtils.getCurrTime());
+				analisis.setCreator(userName);
+				analisis.setUpdateId(userId);
+				analisis.setUpdateTime(DateUtils.getCurrTime());
+				analisis.setUpdator(userName);
+				analisis.setSubmitNumber(BigInteger.ONE);
+				analisis.setSubmitCorrectNumber(new BigInteger(String.valueOf(number)));
+				analisis.setAccuracy(ExerciseUtils.parseStrToBigDecimal(
+						String.valueOf(analisis.getSubmitCorrectNumber()), String.valueOf(analisis.getSubmitNumber())));
+
+				this.save(analisis);
+			}
+
+			// 2、个人统计
+			hql_analisisU = "update ExerciseItemAnalisiU"
+					+ " set submitNumber=IFNULL(submitNumber,0)+1"
+					+ ",submitCorrectNumber=IFNULL(submitCorrectNumber,0)+"+number
+					+ ",updateId='" + userId
+					+ "',updator='" + userName
+					+ "',accuracy=round(submitCorrectNumber/submitNumber*100, 2)"
+					+ " where exerciseItemId=?"
+					+ " and userId='"+userId
+					+ "' and deleteFlag is false";
+
+			result = this.bulkUpdate(hql_analisisU, new String[]{exerciseItemId});
+
+			if(Integer.parseInt(String.valueOf(result.getData("doCount"))) < 1){// 为空 新增记录
+				analisisU = new ExerciseItemAnalisiU();
+				analisisU.setDeleteFlag(false);
+				analisisU.setExerciseItemId(exerciseItemId);
+				analisisU.setUserId(userId);
+				analisisU.setCreateId(userId);
+				analisisU.setCreateTime(DateUtils.getCurrTime());
+				analisisU.setCreator(userName);
+				analisisU.setUpdateId(userId);
+				analisisU.setUpdateTime(DateUtils.getCurrTime());
+				analisisU.setUpdator(userName);
+				analisisU.setSubmitNumber(BigInteger.ONE);
+				analisisU.setSubmitCorrectNumber(new BigInteger(String.valueOf(number)));
+				analisisU.setAccuracy(ExerciseUtils.parseStrToBigDecimal(
+						String.valueOf(analisisU.getSubmitCorrectNumber()), String.valueOf(analisisU.getSubmitNumber())));
+
+				this.save(analisisU);
+			}
+		}
+
+		return new Result(true);
+	}
+
+
+	/**
+	 * 查询每道题 做题个数,正确个数
+	 * @return
+	 */
+	private Map<String,ExerciseItemStatis> getExerciseItemAnalisisResultDataList(Map<String, Object> argsMap){
+
+		String sql = "select tmp.EXERCISE_ITEM_ID,sum(allCount),sum(correctCount) from ("
+					+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_item_answer_u t"// 1.(公共答案表)查询每道题 做题个数,正确个数
+					+ " 		where t.EXERCISE_ITEM_ID in (:exerciseIds) and t.DELETE_FLAG=0"
+					+ " 		group by t.EXERCISE_ITEM_ID "
+					+ " 	union all "
+					+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_fault t"	// 2.错题本
+					+ " 		where t.EXERCISE_ITEM_ID in (:exerciseIds) and t.answer is not null and t.DELETE_FLAG=0"
+					+ " 		group by t.EXERCISE_ITEM_ID "
+					+ " 	union all "
+					+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_fault_his t"// 3.错题本历史
+					+ " 		where t.EXERCISE_ITEM_ID in (:exerciseIds) and t.answer is not null and t.DELETE_FLAG=0"
+					+ " 		group by t.EXERCISE_ITEM_ID "
+					+ " 	union all "
+					+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_favorite t"// 4.收藏本
+					+ " 		where t.EXERCISE_ITEM_ID in (:exerciseIds) and t.answer is not null and t.DELETE_FLAG=0"
+					+ " 		group by t.EXERCISE_ITEM_ID "
+					+ " 	union all "
+					+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_favorite_his t"// 5.收藏本历史
+					+ " 		where t.EXERCISE_ITEM_ID in (:exerciseIds) and t.answer is not null and t.DELETE_FLAG=0"
+					+ " 		group by t.EXERCISE_ITEM_ID "
+					+ ") tmp group by tmp.EXERCISE_ITEM_ID ";
+
+		List<Object[]> lstResult = this.findByComplexSql(sql, argsMap, Object[].class);
+
+		if(lstResult.isEmpty()){
+			return null;
+		}
+
+		Map<String,ExerciseItemStatis> resultMap = new HashMap<String, ExerciseItemStatis>(lstResult.size());
+		ExerciseItemStatis statis = null;
+		for(Object[] obj:lstResult){
+			statis = new ExerciseItemStatis();
+			statis.setExerciseId(String.valueOf(obj[0]));
+			statis.setAllCount(Integer.parseInt(String.valueOf(obj[1])));// 总个数
+			statis.setCorrectCount(Integer.parseInt(String.valueOf(obj[2])));// 正确个数
+
+			resultMap.put(String.valueOf(obj[0]), statis);// 练习id
+		}
+
+		return resultMap;
+	}
+
+	/**
+	 * 练习题目的全站统计
+	 * @param answer
+	 * @return
+	 */
+	public Result doOperExerciseItemAnalisisNew(String userId, String userName,Map<String, Object> argsMap){
+		Object[] exerIds = (Object[]) argsMap.get("exerciseIds");
+
+		if(exerIds.length<1){
+			return new Result(false,"数据为空");
+		}
+
+		// 1.查询每道题 做题个数,正确个数
+		Map<String,ExerciseItemStatis> analisResultMap = getExerciseItemAnalisisResultDataList(argsMap);
+
+		if(analisResultMap.isEmpty()){
+			return new Result(false,"查询全站统计数据为空,异常");
+		}
+
+		// 2.题目的全站统计  ExerciseItemAnalisi
+
+		String hql_analisis = "from ExerciseItemAnalisi where deleteFlag is false and exerciseItemId in (:exerciseIds) ";
+		List<ExerciseItemAnalisi> lstAnalisis = this.findByComplexHql(hql_analisis, argsMap, ExerciseItemAnalisi.class);
+		Map<String, ExerciseItemAnalisi> analisisMap = new HashMap<String, ExerciseItemAnalisi>();
+		for(ExerciseItemAnalisi analisis:lstAnalisis){
+			analisisMap.put(analisis.getExerciseItemId(), analisis);
+		}
+
+		List<ExerciseItemAnalisi> lstNewAnalisis = new ArrayList<ExerciseItemAnalisi>(exerIds.length);
+		ExerciseItemAnalisi analisis = null;
+		String exerciseItemId = null;
+
+		ExerciseItemStatis statis = null;
+		// 批量操作
+		for(Object obj:exerIds){
+
+			exerciseItemId = String.valueOf(obj);
+			// 1.组装批量练习答案
+			if(analisisMap.get(exerciseItemId) == null){//为空 新增一个
+				// 组装答案记录
+				analisis = new ExerciseItemAnalisi();
+				analisis.setDeleteFlag(false);
+				analisis.setExerciseItemId(exerciseItemId);
+
+				analisis.setCreateId(userId);
+				analisis.setCreateTime(DateUtils.getCurrTime());
+				analisis.setCreator(userName);
+
+			}else{
+				analisis = analisisMap.get(exerciseItemId);
+			}
+
+			analisis.setUpdateId(userId);
+			analisis.setUpdateTime(DateUtils.getCurrTime());
+			analisis.setUpdator(userName);
+
+			// 更新统计数据
+			statis = analisResultMap.get(exerciseItemId);
+			if(null != statis){
+				analisis.setSubmitNumber(new BigInteger(String.valueOf(statis.getAllCount())));
+				analisis.setSubmitCorrectNumber(new BigInteger(String.valueOf(statis.getCorrectCount())));
+				analisis.setAccuracy(ExerciseUtils.parseStrToBigDecimal(
+						String.valueOf(statis.getCorrectCount()), String.valueOf(statis.getAllCount())));
+			}else{
+				analisis.setSubmitNumber(BigInteger.ZERO);
+				analisis.setSubmitCorrectNumber(BigInteger.ZERO);
+				analisis.setAccuracy(BigDecimal.ZERO);
+			}
+
+			lstNewAnalisis.add(analisis);
+		}
+
+		//批量保存
+		this.saveOrUpdateAll(lstNewAnalisis);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 练习题目的个人统计
+	 * @param answer
+	 * @return
+	 */
+	public Result doOperExerciseItemAnalisisUNew(String userId, String userName, Map<String, Object> argsMap){
+		Map<String, Object> argsAnalisiMap = argsMap;
+		Object[] exerIds =   (Object[]) argsMap.get("exerciseIds");
+
+		if(exerIds.length<1){
+			return new Result(false,"数据为空");
+		}
+
+		// 1. 查询个人 每道题 做题个数,正确个数
+		Map<String,ExerciseItemStatis> analisUResultMap = getExerciseItemAnalisisUResultDataList(userId, argsMap);
+
+		if(analisUResultMap.isEmpty()){
+			return new Result(false,"查询全站统计数据为空,异常");
+		}
+
+		// 2.题目的个人统计  ExerciseItemAnalisiU
+		String hql_analisisU = "from ExerciseItemAnalisiU where deleteFlag is false "
+				+ " and exerciseItemId in (:exerciseIds) and userId=:userId ";
+		argsAnalisiMap.put("userId", userId);
+		List<ExerciseItemAnalisiU> lstAnalisiU = this.findByComplexHql(hql_analisisU, argsAnalisiMap, ExerciseItemAnalisiU.class);
+		Map<String, ExerciseItemAnalisiU> analisisUMap = new HashMap<String, ExerciseItemAnalisiU>();
+		for(ExerciseItemAnalisiU analisiU:lstAnalisiU){
+			analisisUMap.put(analisiU.getExerciseItemId(), analisiU);
+		}
+
+		List<ExerciseItemAnalisiU> lstNewAnalisiU = new ArrayList<ExerciseItemAnalisiU>(argsMap.size());
+		ExerciseItemAnalisiU analisisU = null;
+		ExerciseItemStatis statis = null;
+
+		String exerciseItemId = null;
+		// 批量操作
+		for(Object obj:exerIds){
+
+			exerciseItemId = String.valueOf(obj);
+
+			// 1.组装批量练习答案
+			if(analisisUMap.get(exerciseItemId) == null){//为空 新增一个
+				// 组装答案记录
+				analisisU = new ExerciseItemAnalisiU();
+				analisisU.setDeleteFlag(false);
+				analisisU.setExerciseItemId(exerciseItemId);
+				analisisU.setUserId(userId);
+
+				analisisU.setCreateId(userId);
+				analisisU.setCreateTime(DateUtils.getCurrTime());
+				analisisU.setCreator(userName);
+			}else{
+				analisisU = analisisUMap.get(exerciseItemId);
+			}
+
+			// 更新统计数据
+			statis = analisUResultMap.get(exerciseItemId);
+			if(null != statis){
+				analisisU.setSubmitNumber(new BigInteger(String.valueOf(statis.getAllCount())));
+				analisisU.setSubmitCorrectNumber(new BigInteger(String.valueOf(statis.getCorrectCount())));
+				analisisU.setAccuracy(ExerciseUtils.parseStrToBigDecimal(
+						String.valueOf(statis.getCorrectCount()), String.valueOf(statis.getAllCount())));
+			}else{
+				analisisU.setSubmitNumber(BigInteger.ZERO);
+				analisisU.setSubmitCorrectNumber(BigInteger.ZERO);
+				analisisU.setAccuracy(BigDecimal.ZERO);
+			}
+
+			analisisU.setUpdateId(userId);
+			analisisU.setUpdateTime(DateUtils.getCurrTime());
+			analisisU.setUpdator(userName);
+
+			lstNewAnalisiU.add(analisisU);
+		}
+
+		//批量保存
+		this.saveOrUpdateAll(lstNewAnalisiU);
+
+		return new Result(true);
+	}
+
+
+	/**
+	 * 查询个人 每道题 做题个数,正确个数
+	 * @return
+	 */
+	private Map<String,ExerciseItemStatis> getExerciseItemAnalisisUResultDataList(String userId, Map<String, Object> argsMap){
+
+		argsMap.put("userId", userId);
+
+		String sql = "select tmp.EXERCISE_ITEM_ID,sum(allCount),sum(correctCount) from ("
+				+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_item_answer_u t"// 1.(公共答案表)查询每道题 做题个数,正确个数
+				+ " 		where t.EXERCISE_ITEM_ID in (:exerciseIds) and t.user_id=:userId  and t.DELETE_FLAG=0"
+				+ " 		group by t.EXERCISE_ITEM_ID "
+				+ " 	union all "
+				+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_fault t, exercise_fault_book b "// 2.错题本
+				+ " 		where t.RESUME_BOOK_ID=b.RESUME_BOOK_ID and t.EXERCISE_ITEM_ID in (:exerciseIds) and b.user_id=:userId"
+				+ " 		and t.answer is not null and t.DELETE_FLAG=0"
+				+ "			group by t.EXERCISE_ITEM_ID "
+				+ " 	union all "
+				+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_fault_his t, exercise_fault_book b "// 3.错题本历史
+				+ " 		where t.RESUME_BOOK_ID=b.RESUME_BOOK_ID and t.EXERCISE_ITEM_ID in (:exerciseIds) and b.user_id=:userId"
+				+ " 		and t.answer is not null and t.DELETE_FLAG=0"
+				+ "			group by t.EXERCISE_ITEM_ID "
+				+ " 	union all "
+				+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_favorite t, exercise_favorite_book b "// 4.收藏本
+				+ "	 		where t.FAVORITE_BOOK_ID=b.FAVORITE_BOOK_ID and t.EXERCISE_ITEM_ID in (:exerciseIds) and b.user_id=:userId"
+				+ " 		and t.answer is not null and t.DELETE_FLAG=0 "
+				+ "			group by t.EXERCISE_ITEM_ID "
+				+ " 	union all "
+				+ "		select t.EXERCISE_ITEM_ID,count(1) allCount,sum(t.CORRECT=1) correctCount from exercise_favorite_his t, exercise_favorite_book b "// 5.收藏本历史
+				+ "	 		where t.FAVORITE_BOOK_ID=b.FAVORITE_BOOK_ID and t.EXERCISE_ITEM_ID in (:exerciseIds) and b.user_id=:userId"
+				+ " 		and t.answer is not null and t.DELETE_FLAG=0 "
+				+ "			group by t.EXERCISE_ITEM_ID "
+				+ ") tmp group by tmp.EXERCISE_ITEM_ID ";
+
+		List<Object[]> lstResult = this.findByComplexSql(sql, argsMap, Object[].class);
+
+		if(lstResult.isEmpty()){
+			return null;
+		}
+
+		Map<String,ExerciseItemStatis> resultMap = new HashMap<String, ExerciseItemStatis>(lstResult.size());
+		ExerciseItemStatis statis = null;
+		for(Object[] obj:lstResult){
+			statis = new ExerciseItemStatis();
+			statis.setExerciseId(String.valueOf(obj[0]));
+			statis.setAllCount(Integer.parseInt(String.valueOf(obj[1])));// 总个数
+			statis.setCorrectCount(Integer.parseInt(String.valueOf(obj[2])));// 正确个数
+
+			resultMap.put(String.valueOf(obj[0]), statis);// 练习id
+		}
+
+		return resultMap;
+	}
+
+	/**
+	 *  查询自由练习练习做题组
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @param selected
+	 * @return
+	 */
+	private List<ExerciseGroup> queryFreeExerciseGroupList(short exerType,
+			String subjectId, Pager pager, int selected){
+
+		StringBuffer hql = new StringBuffer(512);
+		hql.append("select g from ExerciseGroup g, ExerciseRecord r,ExerciseRecentRecord rr "
+				+ " where g.groupId = r. exerciseGroupId"
+				+ " and r.recordId=rr.exerciseRecordId"
+				+ " and g.deleteFlag is false "
+				+ " and r.deleteFlag is false "
+				+ " and g.type=?"
+				+ " and g.classId=? "
+				+ " and r.userId=? and g.status = ?");
+
+		List<Object> args = CollectionUtils.newList((short)exerType, ClientUtils.getClassId(),ClientUtils.getUserId(), ExerciseGroup.STATUS_PUBLISHED);
+
+		if(selected == 1){//未开始
+			hql.append(" and r.status=? and (r.doCount=0 or r.doCount is null) ");
+			args.add(ExerciseRecord.STATUS_NOT_SUBMIT);
+
+		}else if(selected == 2){//做题中
+
+			hql.append(" and r.status=? and r.doCount>0 ");
+			args.add(ExerciseRecord.STATUS_NOT_SUBMIT);
+
+		}else if(selected == 3){//已提交
+
+			hql.append( " and r.status=? ");
+			args.add(ExerciseRecord.STATUS_SUBMIT);
+		}
+
+//		if(StringUtils.isNotBlank(subjectId)){// 高校  课程id
+//			hql.append("  and g.subjectId=? ");
+//			args.add(subjectId);
+//		}
+
+		hql.append( "  order by g.orderNum asc,g.updateTime desc ");
+
+		List<ExerciseGroup> lstGroup = this.findList(hql.toString(), pager, args, ExerciseGroup.class);
+
+		return lstGroup;
+	}
+
+	/**
+	 * 查询通用练习做题组
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @param selected
+	 * @return
+	 */
+	private List<ExerciseGroup> queryCommonExerciseGroupList(short exerType,
+			String subjectId, Pager pager, int selected, String chapterId){
+		StringBuffer hql = new StringBuffer(512);
+		hql.append("from ExerciseGroup g "
+				+ " where g.deleteFlag is false "
+				+ " and g.type=?"
+				+ " and g.classId=? and g.status = ? ");
+
+		List<Object> args = CollectionUtils.newList((short)exerType, ClientUtils.getClassId(), ExerciseGroup.STATUS_PUBLISHED);
+
+		if(selected == 1){//未开始
+			hql.append(" and not EXISTS" +
+					" (select 1 from ExerciseRecord r,ExerciseRecentRecord rr " +
+					" where r.recordId=rr.exerciseRecordId " +
+					" and r.exerciseGroupId=g.groupId " +
+					" and r.userId = ?" +
+					" and (r.status = ? or r.doCount > 0)" +
+					" )");
+
+			args.add(ClientUtils.getUserId());
+			args.add(ExerciseRecord.STATUS_SUBMIT);
+
+		}else if(selected == 2){//做题中
+			hql.append(" and EXISTS" +
+					" (select 1 from ExerciseRecord r,ExerciseRecentRecord rr " +
+					" where r.recordId=rr.exerciseRecordId " +
+					" and r.exerciseGroupId=g.groupId " +
+					" and r.userId = ?" +
+					" and (r.status = ? and r.doCount > 0)" +
+					" )");
+
+			args.add(ClientUtils.getUserId());
+			args.add(ExerciseRecord.STATUS_NOT_SUBMIT);
+
+		}else if(selected == 3){//已提交
+			hql.append(" and EXISTS" +
+					" (select 1 from ExerciseRecord r,ExerciseRecentRecord rr " +
+					" where r.recordId=rr.exerciseRecordId " +
+					" and r.exerciseGroupId=g.groupId " +
+					" and r.userId = ?" +
+					" and r.status = ? " +
+					" )");
+
+			args.add(ClientUtils.getUserId());
+			args.add(ExerciseRecord.STATUS_SUBMIT);
+
+		}
+
+		if(StringUtils.isNotBlank(subjectId)){// 高校  课程id
+			hql.append("  and g.subjectId=? ");
+			args.add(subjectId);
+		}
+		if(StringUtils.isNotBlank(chapterId)){// 章节id
+			hql.append("  and (g.chapterId=? or g.chapterId in(select c.chapterId from SchChapter c where c.parentChapterId = ? and c.deleteFlag is false)) ");
+			args.add(chapterId);
+			args.add(chapterId);
+		}
+
+		if(exerType == ExerciseGroup.TYPE_EXERCISE_FREE){
+
+			hql.append("  order by g.updateTime desc ");
+
+		}else{
+
+			hql.append("  order by g.subjectOrder asc,g.chapterOrder asc,g.partOrder asc, g.orderNum asc,  g.createTime desc ");
+		}
+
+		List<ExerciseGroup> lstGroup = this.findList(hql.toString(), pager, args, ExerciseGroup.class);
+
+		return lstGroup;
+	}
+
+	/**
+	 * 查询练习列表数据
+	 * @param exerType
+	 * @param subjectId
+	 * @param pager
+	 * @param selected // 0:全部  1:未开始 2:做题中 3:已提交
+	 * @return
+	 */
+	@Override
+	public List<ExerGroupResponseData> queryExericseListData(short exerType,
+			String subjectId, Pager pager, Integer selected, String chapterId) {
+
+		List<ExerciseGroup> lstGroup = null;
+
+		// 1.查询当前用户所在班级的练习组
+		if(exerType == ExerciseGroup.TYPE_EXERCISE_FREE){//自由练习
+
+			lstGroup = queryFreeExerciseGroupList(exerType, subjectId, pager, selected);
+
+		}else{// 非自由练习
+
+			lstGroup = queryCommonExerciseGroupList(exerType, subjectId, pager, selected, chapterId);
+		}
+
+		if(lstGroup.isEmpty()){
+			return null;
+		}
+
+		// 3.组装参数
+		Map<String, Object> argsMap = new HashMap<String, Object>(2);
+		Object[] argss = new Object[lstGroup.size()];
+		for(int i=0; i<lstGroup.size(); i++){
+			argss[i] = lstGroup.get(i).getGroupId();
+		}
+		argsMap.put("groupIds", argss);
+
+		// 4.0查询练习组extend
+		String hql_extend = "from ExerciseGroupExtend "
+				+ " where groupId in (:groupIds) and deleteFlag is false ";
+		List<ExerciseGroupExtend> lstExtend = this.findByComplexHql(hql_extend, argsMap, ExerciseGroupExtend.class);
+		Map<String, ExerciseGroupExtend> extendMap = new HashMap<String, ExerciseGroupExtend>(lstExtend.size());
+		for(ExerciseGroupExtend record:lstExtend){
+			extendMap.put(record.getGroupId(), record);
+		}
+
+		// 4.查询做题记录集合
+		argsMap.put("userId", ClientUtils.getUserId());
+		String hql_record = "select r from ExerciseRecord r,ExerciseRecentRecord rd "
+				+ " where r.recordId=rd.exerciseRecordId and rd.exerciseGroupId in (:groupIds) and rd.userId=:userId ";
+		List<ExerciseRecord> lstRecord = this.findByComplexHql(hql_record, argsMap, ExerciseRecord.class);
+		Map<String, ExerciseRecord> recordMap = new HashMap<String, ExerciseRecord>(lstRecord.size());
+		for(ExerciseRecord record:lstRecord){
+			recordMap.put(record.getExerciseGroupId(), record);
+		}
+
+		// 4.2获取该用户组内排名
+		Map<String, String> groupRankMap = getUserExerGroupRank(argss);
+
+		// 4.3获取个人用户组对应的错题记录 题目更新时间
+		Map<String, Map<String, Object>> faultMap = exerciseExtendService.queryFaultRecordByGroup(subjectId, argss);
+
+		// 4.4获取个人用户组对应的收藏记录 题目更新时间
+		Map<String, Map<String, Object>> favorMap = exerciseExtendService.queryFavorRecordByGroup(subjectId, argss);
+
+		// 5.组装参数
+		List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size());
+
+		ExerGroupResponseData result;
+		for(ExerciseGroup g:lstGroup){
+			// 组装练习列表返回数据
+			result = packagingExerciseListData(exerType, extendMap, recordMap,
+					groupRankMap, faultMap, favorMap, g);
+
+			lstResult.add(result);
+		}
+
+		return lstResult;
+	}
+
+	/**
+	 * 组装练习列表返回数据
+	 * @param exerType
+	 * @param extendMap
+	 * @param recordMap
+	 * @param groupRankMap
+	 * @param faultMap
+	 * @param favorMap
+	 * @param g
+	 * @return
+	 */
+	private ExerGroupResponseData packagingExerciseListData(short exerType,
+			Map<String, ExerciseGroupExtend> extendMap,
+			Map<String, ExerciseRecord> recordMap,
+			Map<String, String> groupRankMap,
+			Map<String, Map<String, Object>> faultMap,
+			Map<String, Map<String, Object>> favorMap, ExerciseGroup g) {
+
+		String groupId = g.getGroupId();
+		ExerGroupResponseData result = new ExerGroupResponseData();
+
+		// 5.1.赋值练习记录字段
+		ExerciseRecord record=recordMap.get(groupId);
+		if(null != record){
+			BeanUtils.copyProperties(record, result);
+
+			result.setAnswerUpdateTime(record.getUpdateTime());
+			result.setCurrTitleNumber(record.getTitleMaxNumber());
+			result.setExerciseRecordId(record.getRecordId());
+		}else{
+			result.setAccuracy(BigDecimal.ZERO);
+			result.setCompletionRate(BigDecimal.ZERO);
+			result.setDoCount(BigInteger.ZERO);
+			result.setCurrTitleNumber("0");
+			result.setCorrectCount(BigInteger.ZERO);
+			result.setScore(BigDecimal.ZERO);
+			result.setStatus("0");
+		}
+
+		// 5.3.赋值练习组字段
+		BeanUtils.copyProperties(g, result);
+
+		// 5.4 获取练习组扩展表
+		ExerciseGroupExtend extend = extendMap.get(groupId);
+		if(null != extend){// 扩展表字段
+			result.setExerciseTime(extend.getExerciseTime());
+			result.setExerciseMode(extend.getExerciseMode());
+			result.setExerciseStrategy(extend.getExerciseStrategy());
+			result.setExerciseSource(extend.getExerciseSource());
+			result.setRepeatFlag(!extend.getRepeatFlag());// true 可以重做 false不能重做
+			result.setClassAccuracy(extend.getClassAccuracy() == null ? "--" : extend.getClassAccuracy()+"%");
+			result.setSubmitNumber(extend.getSubmitNumber());
+		}else{
+			result.setClassAccuracy("--");
+			if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业
+				result.setRepeatFlag(false);
+			}else{
+				result.setRepeatFlag(true);
+			}
+		}
+
+		// 5.5  获取用户组内排名
+		result.setClassRank(groupRankMap.get(groupId) == null ? "--" : groupRankMap.get(groupId));
+
+		// 5.6更新个人用户组对应的错题时间
+		if(faultMap != null && faultMap.get(groupId) !=null){
+			result.setFaultUpdateTime((Timestamp)faultMap.get(groupId).get("updateTime"));
+			result.setFaultCount((BigInteger)faultMap.get(groupId).get("allCount"));
+		}
+
+		// 5.7更新个人用户组对应的收藏时间
+		if(favorMap != null && favorMap.get(groupId) !=null){
+			result.setFavorUpdateTime((Timestamp)favorMap.get(groupId).get("updateTime"));
+			result.setFavorCount((BigInteger)favorMap.get(groupId).get("allCount"));
+		}
+		return result;
+	}
+
+
+
+	/**
+	 * 根据groupid得出该用户的组内排名
+	 * @param argss
+	 * @return
+	 */
+	public Map<String, String> getUserExerGroupRank(Object[] argss) {
+		Map<String, Object> argsMap = new HashMap<String, Object>(4);
+
+		argsMap.put("groupIds", argss);
+		argsMap.put("rankType", SchRank.RANK_TYPE_EXERCISE_SCORE);
+		argsMap.put("scopeType", SchRank.SCOPE_TYPE_CLASS_GROUP);
+		argsMap.put("userId", ClientUtils.getUserId());
+
+		String hql = "select ver.scopeId, his.rank from SchRankHis his,SchRankVer ver " +
+				"where his.versionId=ver.versionId " +
+				"and ver.latest is true " +
+				"and ver.scopeId in (:groupIds) " +
+				"and ver.rankType =:rankType " +
+				"and ver.scopeType =:scopeType " +
+				"and his.userId =:userId ";
+
+		List<Object[]> lstRanks = this.findByComplexHql(hql, argsMap, Object[].class);
+
+
+		Map<String, String> resultMap = new HashMap<String, String>(lstRanks.size());
+		for(Object[] objs:lstRanks){
+			resultMap.put(String.valueOf(objs[0]),
+					StringUtils.isBlank(String.valueOf(objs[1])) ? "--" : String.valueOf(objs[1]));
+		}
+
+		return resultMap;
+	}
+
+	@Override
+	public ExerItemResponseData queryExerItemResponseData(String groupId,
+			String exerciseRecordId, boolean getExercise, boolean getAnswer,
+			short exerType) {
+
+		// 1.获取练习题目
+		List<ExerciseItem> lstItem = null;
+		if(getExercise){
+			lstItem = queryExerciseItemList(groupId);
+		}
+
+		// 2.获取练习答案
+		List<ExerciseItemAnswerU> lstAnswer = null;
+		if(getAnswer && StringUtils.isNotBlank(exerciseRecordId)){
+			lstAnswer = queryExerciseItemAnswerList(exerciseRecordId);
+		}
+
+		// 3.组装返回参数
+		ExerItemResponseData result = new ExerItemResponseData();
+
+		result.setItems(lstItem);
+
+		result.setAnswers(lstAnswer);
+
+		return result;
+	}
+
+	/**
+	 * 查询练习答案list
+	 * @param groupId
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	private  List<ExerciseItemAnswerU> queryExerciseItemAnswerList(String exerciseRecordId){
+
+		//3.1 查询个人做题答案
+		String sql_answerU = "from ExerciseItemAnswerU where exerciseRecordId=?  and deleteFlag is false order by createTime asc ";
+
+		List<ExerciseItemAnswerU> lstAnswerU = this.find(sql_answerU,
+				CollectionUtils.newList(exerciseRecordId), ExerciseItemAnswerU.class);
+
+		return lstAnswerU;
+	}
+
+	/**
+	 * 查询练习题目list
+	 * @param groupId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public  List<ExerciseItem> queryExerciseItemList(String groupId){
+		BoundValueOperations<String, List<ExerciseItem>> boundValueOperations = redisTemplate.boundValueOps(groupId);
+		List<ExerciseItem> lstItems = boundValueOperations.get();
+
+		if(lstItems==null){
+			// 1.查询练习题目信息
+			String hql = "select item from ExerciseItem item, ExerciseGroupItemRe re, ExerciseGroup g"
+					+ " where item.exerciseId=re.exerciseItemId "
+					+ "	and re.exerciseGroupId=g.groupId"
+					+ " and g.groupId = ? "
+					+ " and item.deleteFlag is false "
+					+ " and g.deleteFlag is false"
+					+ " and re.deleteFlag is false"
+					+ " order by re.itemOrder";
+
+			lstItems = this.find(hql, CollectionUtils.newList(groupId), ExerciseItem.class);
+
+			// 为空
+			if(lstItems.isEmpty()){
+				return lstItems;
+			}
+			// 2.组装答案
+			lstItems = getCommonExerItemDetail(lstItems, groupId);
+
+			boundValueOperations.setIfAbsent(lstItems);
+			boundValueOperations.expire(10, TimeUnit.DAYS);
+		}
+
+		return lstItems;
+	}
+
+	/**
+	 * 重新组装练习题 加入分析结果
+	 * @param lstItems
+	 * @param exerciseGroupId
+	 * @param currTitleNumber
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<ExerciseItem> getCommonExerItemDetail(List<ExerciseItem> lstItems, String exerciseGroupId){
+		String userId = ClientUtils.getUserId();
+
+		// 0.组装参数
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Object[] args = new Object[lstItems.size()];
+		for(int i=0; i<lstItems.size(); i++){
+			args[i] = lstItems.get(i).getExerciseId();
+		}
+		argsMap.put("exerciseIds", args);
+
+		// 1.查询练习题目全站分析
+		String hql_analisis = "from ExerciseItemAnalisi  where exerciseItemId in (:exerciseIds)  and deleteFlag is false ";
+		List<ExerciseItemAnalisi> lstAnalisis = this.findByComplexHql(hql_analisis, argsMap, ExerciseItemAnalisi.class);
+		Map<String, ExerciseItemAnalisi> analisiMap = new HashMap<String, ExerciseItemAnalisi>(lstAnalisis.size());
+		for(ExerciseItemAnalisi analisis:lstAnalisis){
+			analisiMap.put(analisis.getExerciseItemId(), analisis);
+		}
+
+		// 2.查询练习题目答案选项
+		Map<String, List<ExerciseItemOption>> optionsMap = new HashMap<String, List<ExerciseItemOption>>(lstItems.size());
+		Map<String, String> answerMap = new HashMap<String, String>();
+		String hql_options = "from ExerciseItemOption where exerciseItemId in (:exerciseIds) and deleteFlag is false order by exerciseItemId, optionOrder ";
+		List<ExerciseItemOption> lstAllOptions = this.findByComplexHql(hql_options, argsMap, ExerciseItemOption.class);
+		// 2.1.组装参数 用于查询练习选项图片
+		Map<String, Object> argsImgMap = new HashMap<String, Object>();
+		Object[] argImgs = new Object[lstAllOptions.size()];
+		for(int i=0; i<lstAllOptions.size(); i++){
+			argImgs[i] = lstAllOptions.get(i).getOptionId();
+		}
+		argsImgMap.put("optionIds", argImgs);
+
+		// 2-3-1查询题目是否关联图片
+//		String hql_itemImgs = "from ExerciseObjectImg where exerciseObjectId in (:exerciseIds) and deleteFlag is false and objectType=1 order by exerciseObjectId,imgOrder ";
+//		List<ExerciseObjectImg> lstItemImgs = this.findByComplexHql(hql_itemImgs, argsMap, ExerciseObjectImg.class);
+//		Map<String, List<ExerciseObjectImg>> imgItemMap = ExerciseUtils.packageExerciseItemImg(lstItemImgs);
+
+		// 2-3-2查询题目选项是否关联图片
+//		String hql_optionImgs = "from ExerciseObjectImg where exerciseObjectId in (:optionIds) and deleteFlag is false and objectType=2 order by exerciseObjectId,imgOrder ";
+//		List<ExerciseObjectImg> lstOptionImgs = this.findByComplexHql(hql_optionImgs, argsImgMap, ExerciseObjectImg.class);
+//		Map<String, List<ExerciseObjectImg>> imgOptionMap = ExerciseUtils.packageExerciseItemImg(lstOptionImgs);
+
+		// 重新组装练习
+		ExerciseUtils.packageExerciseItem(optionsMap, answerMap, lstAllOptions, Collections.EMPTY_MAP);
+
+		// 3.查询练习题目个人分析
+		String hql_analisisU = "from ExerciseItemAnalisiU where exerciseItemId in (:exerciseIds) and userId=:userId and deleteFlag is false ";
+		argsMap.put("userId", userId);
+		List<ExerciseItemAnalisiU> lstAnalisisU = this.findByComplexHql(hql_analisisU, argsMap, ExerciseItemAnalisiU.class);
+		Map<String, ExerciseItemAnalisiU> analisiUMap = new HashMap<String, ExerciseItemAnalisiU>(lstAnalisisU.size());
+		for(ExerciseItemAnalisiU analisisU:lstAnalisisU){
+			analisiUMap.put(analisisU.getExerciseItemId(), analisisU);
+		}
+
+
+		// 4.重新组装返回结果
+		ExerciseAnalisisResult analisiResult = null;
+		ExerciseItemAnalisi analisis = null;
+		ExerciseItemAnalisiU analisiU = null;
+		String exerciseId = null;
+		for(ExerciseItem item:lstItems){
+			analisiResult = new ExerciseAnalisisResult();
+
+			// 4.0  分析结果
+			exerciseId = item.getExerciseId();
+
+			// 得到练习组id
+			if(StringUtils.isNotBlank(exerciseGroupId)){
+				item.setExerciseGroupId(exerciseGroupId);
+			}
+
+			// 4.1 全站分析结果
+			analisis = analisiMap.get(exerciseId);
+			if(null != analisis){
+				analisiResult.setAllAccuracy(analisis.getAccuracy());
+				analisiResult.setSubmitAllNumber(analisis.getSubmitNumber());
+				analisiResult.setAnalysis(analisis.getAnalysis());
+				analisiResult.setUsualFaultAnswers(analisis.getUsualFaultAnswers());
+			}else{
+				analisiResult.setAllAccuracy(BigDecimal.ZERO);
+				analisiResult.setSubmitAllNumber(BigInteger.ZERO);
+			}
+
+			// 4.2 个人分析结果
+			analisiU = analisiUMap.get(exerciseId);
+			if(analisiU != null){
+				analisiResult.setAccuracy(analisiU.getAccuracy());
+				analisiResult.setSubmitNumber(analisiU.getSubmitNumber());
+				analisiResult.setSubmitErrorNumber(analisiU.
+						getSubmitNumber().subtract(analisiU.getSubmitCorrectNumber()));
+			}else{
+				analisiResult.setAccuracy(BigDecimal.ZERO);
+				analisiResult.setSubmitNumber(BigInteger.ZERO);
+				analisiResult.setSubmitErrorNumber(BigInteger.ZERO);
+			}
+
+			// 4.3 题目选项
+			item.setOptions(optionsMap.get(exerciseId));
+
+//			// 4.5题目中是否有图片
+//			if(imgItemMap.get(exerciseId) != null){
+//				item.setImgs(imgItemMap.get(exerciseId));
+//			}
+
+			item.setAnalisisResult(analisiResult);
+
+			item.setAnalysises(null);
+
+			item.setScores(null);
+
+		}
+
+		return lstItems;
+	}
+
+	/**
+	 * 根据条件获取自由练习
+	 *
+	 *  * {
+	 * 	source: 练习来源(1:练习题库 2:考试题库  3:家庭作业)   多个以逗号分开
+		strategy:做题方式(1:未做题优先  2:错题优先)
+		mode:做题模式(1:练习模式 2:考试模式)
+		count:数量(30 50 100 200)
+		exerciseTime:练习时间
+	 * }
+	 *
+	 * @return
+	 */
+	@Override
+	public ExerItemResponseData doGetFreeExercise(String subjectId, String source,
+			String strategy, String mode, int count, String exerciseTime) {
+
+		Result resultMsg = new Result(false);
+		ExerItemResponseData result = new ExerItemResponseData();
+		/** 1.得到练习题目  */
+		List<ExerciseItem> lstItems = getExerciseItemListForFree(subjectId, source, strategy, count);
+
+		if(lstItems.isEmpty()){
+			resultMsg.setMsg("当前题库中题目数量为空");
+			result.setResult(resultMsg);
+			return result;
+		}
+
+		if(lstItems.size() < count){//题库中题目不够
+			resultMsg.setMsg("当前题库中题目数量少于"+count+",请重新组合");
+			result.setResult(resultMsg);
+			return result;
+		}
+
+		/** 2.生成此次做题练习组  */
+		ExerciseGroup group = generateExerciseGroupByFree(subjectId, source,
+				strategy, mode, count, exerciseTime);
+
+		String exerciseGroupId = group.getGroupId();
+
+		/** 3.生成此次做题record  */
+		ExerciseRecord record = generateExerciseRecordByFree(subjectId, exerciseGroupId);
+
+		/** 4.根据题练习组生成练习组关联表数据  */
+		generateExerciseGroupItemRe(lstItems, exerciseGroupId);
+
+		/** 5.组装练习数据  */
+		lstItems = getCommonExerItemDetail(lstItems, exerciseGroupId);
+
+		/** 6.返回结果  */
+		result.setItems(lstItems);
+		result.setExerciseGroupId(exerciseGroupId);
+		result.setExerciseRecordId(record.getRecordId());
+		resultMsg.setResult(true);
+
+		Map<String, Object> resultMap = new HashMap<String, Object>(2);
+		resultMap.put("exerciseName", group.getName());
+		resultMap.put("updateTime", record.getUpdateTime());
+
+		resultMsg.setData(resultMap);
+		resultMsg.setMsg(group.getName());
+		result.setResult(resultMsg);
+
+		return result;
+	}
+
+	/**
+	 * 得到练习类型
+	 * @param source
+	 * @return
+	 */
+	private Object[] getExerciseTypeForFree(String source){
+		//  练习来源(1:练习题库 2:考试题库  3:家庭作业)   多个以逗号分开
+		String[] types = source.split(",");
+		Object[] groupTypes = new Object[4];
+
+
+		int i = 0;
+		for(String type:types){
+
+			if(type.equals(Constants.EXERCISE_SOURCE_EXERICSE)){//练习题库  -章节、专题
+
+				groupTypes[i]= ExerciseGroup.TYPE_CHAPTER_ITEM;
+
+				i++;
+
+				groupTypes[i]= ExerciseGroup.TYPE_EXERCISE_TOPIC;
+
+				i++;
+
+			}else if(type.equals(Constants.EXERCISE_SOURCE_EXAMS)){// 考试题库 - 模拟考试
+
+				groupTypes[i]= ExerciseGroup.TYPE_MOCK_EXAM;
+
+				i++;
+
+			}else if(type.equals(Constants.EXERCISE_SOURCE_HOMEWORK)){// 家庭作业
+
+				groupTypes[i]= ExerciseGroup.TYPE_HOMEWORK;
+
+				i++;
+			}
+
+		}
+
+		return groupTypes;
+	}
+
+	/**
+	 * 得到练习题
+	 * @param subjectId
+	 * @param source
+	 * @param strategy
+	 * @param count
+	 * @return
+	 */
+	private List<ExerciseItem> getExerciseItemListForFree(String subjectId,
+				String source, String strategy, int count){
+
+		// 得到组类型集合
+		Object[] groupTypes = getExerciseTypeForFree(source);
+
+		// 查询结果练习item list
+		List<ExerciseItem> lstItems = null;
+
+		// 查询结果不够时,新增练习item list
+		List<ExerciseItem> lstAddItems = null;
+
+		/** 1.获取题目  */
+		if(Constants.EXERCISE_STRATEGY_NO_DO.equals(strategy)){// 未做题
+
+			// 1.获取未做题
+			lstItems = getFreeExerciseForNoDo(subjectId, count, groupTypes);
+
+		}else if(Constants.EXERCISE_STRATEGY_FAULT.equals(strategy)){// 错题
+
+			// 1.获取错题
+			lstItems = getFreeExerciseForFault(subjectId, count, groupTypes);
+
+		}
+
+		// 2.错题不够,从普通题目中挑选
+		if(lstItems.size() < count){
+
+			Object[] exerciseIds = new Object[lstItems.size()];
+			for(int i=0; i<lstItems.size(); i++){
+				exerciseIds[i]=lstItems.get(i).getExerciseId();
+			}
+
+			lstAddItems = getFreeExerciseForCommon(subjectId,
+					count-exerciseIds.length, groupTypes,exerciseIds);
+
+
+			// 3.组合为最新的一个练习 item list
+			lstItems.addAll(lstAddItems);
+		}
+
+		// 打乱顺序
+		Collections.shuffle(lstItems);
+
+		return lstItems;
+	}
+
+	/**
+	 * 生成练习组关联关系
+	 * @param lstItems
+	 * @param groupId
+	 * @return
+	 */
+	private Result generateExerciseGroupItemRe(List<ExerciseItem> lstItems, String exerciseGroupId){
+
+		List<ExerciseGroupItemRe> lstRe = new ArrayList<ExerciseGroupItemRe>(lstItems.size());
+		ExerciseGroupItemRe re;
+		for(int i=0; i<lstItems.size(); i++){
+			re = new ExerciseGroupItemRe();
+
+			re.setExerciseGroupId(exerciseGroupId);
+			re.setExerciseItemId(lstItems.get(i).getExerciseId());
+			re.setDeleteFlag(false);
+			re.setItemOrder(i+1);
+			re.setDocOrder(i+1);
+
+			lstRe.add(re);
+		}
+
+		this.saveOrUpdateAll(lstRe);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 生成练习record数据
+	 *
+	 * @param subjectId
+	 * @param exerciseGroupId
+	 * @return
+	 */
+	private ExerciseRecord generateExerciseRecordByFree(String subjectId, String exerciseGroupId){
+
+		ExerciseRecord record = new ExerciseRecord();
+		record.setStatus(ExerciseRecord.STATUS_NOT_SUBMIT);
+
+		this.insertExerciseRecordNew(record, exerciseGroupId, subjectId);
+
+		// 操作最近一次做题记录
+		doOperExerciseRecentRecord(record);
+
+		return record;
+	}
+
+	/**
+	 * 生成 练习组以及扩展数据
+	 * @param subjectId
+	 * @param source
+	 * @param strategy
+	 * @param mode
+	 * @param count
+	 * @param exerciseTime
+	 * @return
+	 */
+	private ExerciseGroup generateExerciseGroupByFree(String subjectId, String source,
+			String strategy, String mode, int count, String exerciseTime){
+
+		// 1.练习组
+		ExerciseGroup group = new ExerciseGroup();
+
+		group.setClassId(ClientUtils.getClassId());
+		group.setCollegeCourseId(ClientUtils.getCourseId());
+		group.setOrgId(ClientUtils.getOrgId());
+		group.setSubjectId(subjectId);
+		group.setAllCount(new BigInteger(String.valueOf(count)));
+		group.setType(ExerciseGroup.TYPE_EXERCISE_FREE);
+		group.setDeleteFlag(false);
+		group.setStatus(ExerciseGroup.STATUS_PUBLISHED);
+		TraceUtils.setCreateTrace(group);
+		group.setName("自由练习-"+DateTimeUtils.formatDate(group.getCreateTime(),"MMdd_HHmmss"));
+
+		this.exerciseService.saveExerciseGroup(group);
+
+		// 2.练习组扩展表
+		ExerciseGroupExtend extend = new ExerciseGroupExtend();
+		extend.setGroupId(group.getGroupId());
+		extend.setExerciseSource(source);
+		extend.setExerciseStrategy(strategy);
+		extend.setExerciseMode(mode);
+		extend.setExerciseTime(exerciseTime);
+		extend.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(extend);
+
+		this.save(extend);
+
+		return group;
+	}
+
+	/**
+	 * 得到已经做完的题目 个人
+	 * @param subjectId
+	 * @return
+	 */
+	private Object[] getExerciseIsHasDo(String subjectId){
+		StringBuffer hql = new StringBuffer(512);
+		hql.append(" 	select distinct u.exerciseItemId from ExerciseItemAnswerU u, ExerciseRecord r"
+				+ "    	where u.exerciseRecordId=r.recordId"
+				+ "		and u.deleteFlag is false"
+				+ " 	and r.classId=? "
+				+ " 	and r.userId=? ");
+
+		List<Object> args =  CollectionUtils.newList(ClientUtils.getClassId(), ClientUtils.getUserId());
+
+		if(StringUtils.isNotBlank(subjectId)){
+			hql.append(" and r.subjectId=?");
+			args.add(subjectId);
+		}
+
+
+		List<Object[]> lstObjs = this.findwithRawResult(hql.toString(), args);
+
+		// 组装练习ids
+		Object[] exerciseIds = new Object[lstObjs.size()];
+
+		for(int i=0; i<lstObjs.size(); i++){
+
+			exerciseIds[i] = lstObjs.get(i);
+
+		}
+
+		return exerciseIds;
+	}
+
+	/**
+	 * 根据条件获取错题练习   未做题
+	 * @param subjectId
+	 * @param count
+	 * @param groupTypes
+	 * @return
+	 */
+	private List<ExerciseItem> getFreeExerciseForNoDo(String subjectId, int count, Object[] groupTypes){
+		// 获取已经做完的题目
+		Object[] exerciseIds = getExerciseIsHasDo(subjectId);
+
+		StringBuffer hql = new StringBuffer(512);
+		hql.append(" from ExerciseItem i, ExerciseGroup g, ExerciseGroupItemRe re"
+				+ " where i.exerciseId = re.exerciseItemId"
+				+ " and g.groupId = re.exerciseGroupId"
+				+ " and g.type in (:groupTypes) "
+				+ " and g.classId = :classId "
+				+ " and i.deleteFlag is false"
+				+ " and re.deleteFlag is false ");
+
+		Map<String, Object> argsMap = new HashMap<String, Object>(4);
+		argsMap.put("groupTypes", groupTypes);
+		argsMap.put("classId", ClientUtils.getClassId());
+
+
+		if(exerciseIds.length > 0){
+			hql.append(" and i.exerciseId not in (:exerciseIds)");
+			argsMap.put("exerciseIds", exerciseIds);
+		}
+
+		if(StringUtils.isNotBlank(subjectId)){
+			hql.append(" and g.subjectId=:subjectId");
+			argsMap.put("subjectId", subjectId);
+		}
+
+		// 1.查询分页数据
+		Pager pager = getFreeExercisePagerData("select count(distinct i.exerciseId) " + hql.toString(),
+				argsMap, count);
+
+		// 2.分页查询结果list
+		List<ExerciseItem> lstItems = this.findByComplexHql("select distinct i " + hql.toString(),
+				pager, argsMap, ExerciseItem.class);
+
+		return lstItems;
+	}
+
+	/**
+	 * 得到自由练习分页数据
+	 * @param hql
+	 * @param argsMap
+	 * @param count
+	 * @return
+	 */
+	private Pager getFreeExercisePagerData(String hql, Map<String, Object> argsMap, int pageSize){
+
+		int iAllCount = this.findCountByComplexHql(hql, argsMap);
+
+		// 总页数
+		int allPage = iAllCount / pageSize;
+
+		// 页码
+		int pageNum = 0;
+
+		if(allPage < 1){
+			pageNum = 1;
+		}else{
+			pageNum = new Random().nextInt(allPage);//随机取页数
+		}
+
+		// 分页
+		Pager page = new Pager();
+		page.setPageNum(pageNum);
+		page.setPageSize(pageSize);
+
+		return page;
+	}
+
+	/**
+	 * 获取题目 根据题目类型
+	 * @param subjectId
+	 * @param count
+	 * @param groupTypes
+	 * @return
+	 */
+	private List<ExerciseItem> getFreeExerciseForCommon(String subjectId,
+				int count, Object[] groupTypes, Object[] exerciseIds){
+
+		// 获取题目
+		Pager page = new Pager();
+		page.setPageNum(1);
+		page.setPageSize(count);
+
+		StringBuffer hql = new StringBuffer(512);
+		hql.append("select distinct i from ExerciseItem i, ExerciseGroup g, ExerciseGroupItemRe re"
+				+ " where i.exerciseId = re.exerciseItemId"
+				+ " and g.groupId = re.exerciseGroupId"
+				+ " and g.type in (:groupTypes) "
+				+ " and g.classId = :classId "
+				+ " and i.deleteFlag is false"
+				+ " and re.deleteFlag is false");
+
+		Map<String, Object> argsMap = new HashMap<String, Object>(4);
+
+		argsMap.put("groupTypes", groupTypes);
+		argsMap.put("classId", ClientUtils.getClassId());
+
+		if(exerciseIds.length > 0){
+			hql.append("  and i.exerciseId not in (:exerciseIds) ");
+			argsMap.put("exerciseIds", exerciseIds);
+		}
+
+		if(StringUtils.isNotBlank(subjectId)){
+			hql.append(" and g.subjectId=:subjectId");
+			argsMap.put("subjectId", subjectId);
+		}
+
+
+		// 获取题目
+		List<ExerciseItem> lstItem = this.findByComplexHql(hql.toString(), page, argsMap, ExerciseItem.class);
+
+
+		return lstItem;
+	}
+
+	/**
+	 * 根据条件获取错题练习  错题
+	 * @param subjectId
+	 * @param count
+	 * @param groupTypes
+	 * @return
+	 */
+	private List<ExerciseItem> getFreeExerciseForFault(String subjectId, int count, Object[] groupTypes){
+		StringBuffer hql = new StringBuffer(512);
+		hql.append(" from ExerciseItem i ,ExerciseFault f "
+				+ " where i.exerciseId = f.exerciseItemId "
+				+ " and f.faultRecord.exerciseGroupType in (:groupTypes) "
+				+ " and f.faultRecord.faultBook.userId=:userId "
+				+ " and f.faultRecord.faultBook.classId=:classId "
+				+ " and f.answer is null "
+				+ " and i.deleteFlag is false "
+				+ " and f.deleteFlag is false ");
+
+		Map<String, Object> argsMap = new HashMap<String, Object>(4);
+
+		argsMap.put("groupTypes", groupTypes);
+		argsMap.put("userId", ClientUtils.getUserId());
+		argsMap.put("classId", ClientUtils.getClassId());
+
+		if(StringUtils.isNotBlank(subjectId)){
+			hql.append(" and f.faultRecord.faultBook.subjectId=:subjectId");
+			argsMap.put("subjectId", subjectId);
+		}
+
+		// 1.查询分页数据
+		Pager pager = getFreeExercisePagerData("select count(distinct i.exerciseId) " + hql.toString(),
+				argsMap, count);
+
+		// 2.获取题目list
+		List<ExerciseItem> lstItems = this.findByComplexHql("select distinct i " + hql.toString(),
+				pager, argsMap, ExerciseItem.class);
+
+		return lstItems;
+	}
+
+	/**
+	 * 查询题目统计分析结果 个人统计 全站统计
+	 * @param groupId
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> queryExerciseItemStatisics(String groupId) {
+		// 1.查询个人统计
+		String hql_analisisU = "select a from ExerciseItemAnalisiU a,ExerciseGroupItemRe re"
+				+ " where a.exerciseItemId=re.exerciseItemId and re.exerciseGroupId=? "
+				+ " and a.userId=? and a.deleteFlag is false and re.deleteFlag is false ";
+		List<ExerciseItemAnalisiU> lstAnalisiU = this.find(hql_analisisU,
+				CollectionUtils.newList(groupId, ClientUtils.getUserId()), ExerciseItemAnalisiU.class);
+
+		Map<String, ExerciseItemAnalisiU> anasisUMap = new HashMap<String, ExerciseItemAnalisiU>(lstAnalisiU.size());
+		for(ExerciseItemAnalisiU analisisU:lstAnalisiU){
+			anasisUMap.put(analisisU.getExerciseItemId(), analisisU);
+		}
+
+		// 2.查询全站统计
+		String hql_analisis = "select a from ExerciseItemAnalisi a,ExerciseGroupItemRe re"
+				+ " where a.exerciseItemId=re.exerciseItemId and re.exerciseGroupId=? "
+				+ " and a.deleteFlag is false and re.deleteFlag is false ";
+		List<ExerciseItemAnalisi> lstAnalisi = this.find(hql_analisis,
+				CollectionUtils.newList(groupId), ExerciseItemAnalisi.class);
+		Map<String, ExerciseItemAnalisi> anasisMap = new HashMap<String, ExerciseItemAnalisi>(lstAnalisi.size());
+		for(ExerciseItemAnalisi analisi:lstAnalisi){
+			anasisMap.put(analisi.getExerciseItemId(), analisi);
+		}
+
+		if(lstAnalisiU.isEmpty() && lstAnalisi.isEmpty()){
+			return null;
+		}
+
+		// 3.查询此组所有题目
+		String hql_group = "from ExerciseGroupItemRe re where re.deleteFlag is false and re.exerciseGroupId = ? order by re.itemOrder";
+		List<ExerciseGroupItemRe> lstGroup = this.find(hql_group,
+				CollectionUtils.newList(groupId), ExerciseGroupItemRe.class);
+
+		List<Map<String, Object>> lstResult = new ArrayList<Map<String, Object>>(lstGroup.size());
+		Map<String, Object> resultMap = null;
+		String exerciseItemId;
+		ExerciseItemAnalisi analisis;
+		ExerciseItemAnalisiU analisisU;
+
+		// 3.组装结果
+
+		// 循坏组所有题目
+		for(ExerciseGroupItemRe group:lstGroup){
+			// 结果map
+			resultMap = new HashMap<String, Object>(10);
+
+			exerciseItemId = group.getExerciseItemId();
+			// 1.个人分析结果
+			analisisU = anasisUMap.get(exerciseItemId);
+			// 2.全站分析结果
+			analisis = anasisMap.get(exerciseItemId);
+
+			resultMap.put("exerciseId", exerciseItemId);
+
+			// 3.个人统计
+			if(null == analisisU){// 为空
+				resultMap.put("doAll_u", 0);
+				resultMap.put("doError_u", 0);
+				resultMap.put("doAccuracy_u", 0);
+			}else{
+				resultMap.put("doAll_u", analisisU.getSubmitNumber());
+				resultMap.put("doError_u", analisisU.getSubmitNumber().subtract(analisisU.getSubmitCorrectNumber()));
+				resultMap.put("doAccuracy_u", analisisU.getAccuracy());
+			}
+
+			// 4.全站统计
+			if(null == analisis){// 为空
+				resultMap.put("doAll", 0);
+				resultMap.put("doAccuracy", 0);
+			}else{
+				resultMap.put("doAll", analisis.getSubmitNumber());
+				resultMap.put("doAccuracy", analisis.getAccuracy());
+			}
+
+			lstResult.add(resultMap);
+		}
+
+
+		return lstResult;
+	}
+
+	/**
+	 * 操作本次做题记录
+	 * @return
+	 */
+	@Override
+	public Map<String,Object> doInsertExerRecord(String groupId) {
+		ExerciseRecord record = new ExerciseRecord();
+		record.setDeleteFlag(false);
+		record.setExerciseGroupId(groupId);
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		record.setScore(BigDecimal.ZERO);
+		record.setUserId(ClientUtils.getUserId());
+//		record.setClassId(ClientUtils.getClassId());
+		record.setOrgId(ClientUtils.getOrgId());
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+
+		// 操作最近一次做题记录
+		doOperExerciseRecentRecord(record);
+
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put("exerciseRecordId", record.getRecordId());
+		resultMap.put("updateTime", DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		resultMap.put("exerciseGroupId", groupId);
+		resultMap.put("record", record);
+
+		return resultMap;
+	}
+
+	/**
+	 * 操作本次做题记录
+	 * @return
+	 */
+	@Deprecated
+	@Override
+	public Map<String,Object> doInsertExerRecord(String groupId,String examBatchId,String classId,int remainingSeconds) {
+		ExerciseRecord record = new ExerciseRecord();
+		record.setDeleteFlag(false);
+		record.setExerciseGroupId(groupId);
+		record.setExamBatchId(examBatchId);
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setTitleMaxNumber("0");
+		record.setStatus("0");
+		record.setClassId(classId);
+		record.setRemainingSeconds(remainingSeconds);
+		record.setScore(BigDecimal.ZERO);
+		record.setUserId(ClientUtils.getUserId());
+		record.setOrgId(ClientUtils.getOrgId());
+		TraceUtils.setCreateTrace(record);
+		this.save(record);
+
+		// 操作最近一次做题记录
+		doOperExerciseRecentRecord(record);
+
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put("exerciseRecordId", record.getRecordId());
+		resultMap.put("updateTime", DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		resultMap.put("exerciseGroupId", groupId);
+		resultMap.put("record", record);
+
+		return resultMap;
+	}
+
+
+	/**
+	 * 更新练习组班级正确率信息
+	 * @return
+	 */
+	@Override
+	public Result doUpdateExerGroupClsAccuracy(String groupId, String doCount, String correctCount) {
+
+		String hql_record = "update ExerciseGroupExtend set doCount=IFNULL(doCount,0)+"+doCount+", correctCount=IFNULL(correctCount,0)+"+correctCount
+				+ ", classAccuracy=round(correctCount/doCount*100,2)"
+				+ "  where groupId=? and deleteFlag is false";
+
+		this.bulkUpdateInLoop(hql_record, new String[]{groupId});
+
+		return new Result(true);
+	}
+
+	/**
+	 * 发送班级排名请求消息
+	 * @return
+	 */
+	@Override
+	public Result sendUpdateClassRankMsg(String groupId) {
+		// 更新练习得分排名
+		rankService.reqUpdateRank(ClientUtils.getUserId(), SchRank.RANK_TYPE_EXERCISE_SCORE,
+				SchRank.SCOPE_TYPE_CLASS_GROUP, groupId);
+
+		return new Result(true);
+	}
+
+
+	/**
+	 * 请求修改该组班级正确率
+	 * @param record
+	 * @return
+	 */
+	@Override
+	public Result sendUpdateClassAccuracyMsg(String exerciseGroupId, String doCount, String correctCount){
+
+		// 异步调用 发送消息
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//
+//		msg.put("msgType", "EXER_GROUP_ACCURACY");
+//		msg.put("groupId", exerciseGroupId);
+//		msg.put("doCount", doCount);
+//		msg.put("correctCount", correctCount);
+//
+//		try {
+//
+//			onsProducer.sendMsg(msg);
+//
+//			return new Result(true);
+//
+//		} catch (Exception e) {
+//			log.error("call sendUpdateClassAccuracyMsg fail.groupId: " + exerciseGroupId , e);
+//		}
+
+		return new Result(false);
+	}
+
+	@Override
+	public Result doUpdateExerciseRecord(String exerciseRecordId,
+			String groupId, String currTitleNum) {
+
+		if(StringUtils.isBlank(exerciseRecordId)){ // 记录ID为空
+			return new Result(false, "记录id为空");
+		}
+
+		ExerciseRecord record = this.read(ExerciseRecord.class, exerciseRecordId);
+
+		if(record == null
+				|| !ClientUtils.getUserId().equals(record.getUserId())){
+			return new Result(false, "非法操作,不是当前用户更新题号");
+		}
+
+		if(StringUtils.isNotBlank(currTitleNum)){// 当前题号
+			record.setTitleMaxNumber(currTitleNum);
+		}
+
+		this.updateExerciseRecordObj(record);
+
+		return new Result(true);
+
+		/*// 2.重新生成新的记录    ios导致重做  先关闭此段代码
+		ExerciseRecord record = new ExerciseRecord();
+		record.setAccuracy(BigDecimal.ZERO);
+		record.setCompletionRate(BigDecimal.ZERO);
+		record.setScore(BigDecimal.ZERO);
+		record.setDoCount(BigInteger.ZERO);
+		record.setCorrectCount(BigInteger.ZERO);
+		record.setStatus(ExerciseRecord.STATUS_NOT_SUBMIT);
+		record.setTitleMaxNumber(currTitleNum);
+		record.setExerciseGroupId(groupId);
+		record.setClassId(ClientUtils.getClassId());
+		record.setCollegeCourseId(ClientUtils.getCourseId());
+		record.setOrgId(ClientUtils.getOrgId());
+		record.setUserId(ClientUtils.getUserId());
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+
+		this.save(record);
+
+		// 3.操作最近一次做题记录
+		doOperExerciseRecentRecord(record);*/
+	}
+
+	@Override
+	public Result updateExerciseRecordObj(ExerciseRecord record) {
+		// TraceUtils.setUpdateTrace(record); ---不更新时间
+		this.save(record);
+		return new Result(true);
+	}
+
+	/**
+	 *
+	 * 保存app端请求保存的数据
+	 * @return
+	 */
+	@Override
+	public String doSaveExerciseDataSubmitLog(String data,
+			String exerBussinessId, short type, int status, String url) {
+		ExerciseDataSubmitLog log = new ExerciseDataSubmitLog();
+
+		log.setExerciseBussinessId(exerBussinessId);
+		log.setData(data);
+		log.setType(type);
+		log.setUpdateId(ClientUtils.getUserId());
+		log.setUpdateTime(DateUtils.getCurrTime());
+		log.setUpdator(ClientUtils.getUserName());
+		log.setStatus(status);
+		log.setUrl(url);
+
+
+		this.save(log);
+
+		return log.getExerciseDataLogId();
+	}
+
+	@Override
+	public Result doUpdateExerciseDataSubmitLog(String exerciseDataLogId,
+			String exerBussinessId) {
+		ExerciseDataSubmitLog log = this.read(ExerciseDataSubmitLog.class, exerciseDataLogId);
+
+		if(log == null){
+			return new Result(false);
+		}
+
+		log.setExerciseBussinessId(exerBussinessId);
+
+		this.save(log);
+
+		return new Result(false);
+	}
+
+
+	/**
+	 * 操作练习答案数据同步
+	 */
+	public Map<String,Object> doOperExerciseAnswerData(ExerciseSubmitAnswerData clientAnswerData) {
+
+		// 0.重新整理答题数据
+		ExerciseSubmitAnswerData answerData = this.getExerciseSubmitAnswerDataNew(clientAnswerData);
+
+		//  1.当前练习组 判断 是否新纪录   提交的为同一个组  ExerciseRecord
+		Map<String,Object> resultMap = doOperExerciseRecordNew(answerData);
+
+		//  2.提交练习答案
+		Result result = doSubmitExerciseAnswerDataNew(answerData, String.valueOf(resultMap.get("exerciseRecordId")));
+
+		//如果是是阅卷,发布消息
+		if(answerData.getStatus().equals(String.valueOf(ExerciseRecord.STATUS_CHECK))){
+			this.doCheckMsg(answerData);
+		}
+
+		// 该套题总做题个数、正确个数
+		resultMap.put("doCount", result.getData("doCount"));
+		resultMap.put("correctCount", result.getData("correctCount"));
+
+		return resultMap;
+	}
+
+	private void doCheckMsg(ExerciseSubmitAnswerData answerData){
+		String msg = null;
+		Map<String,String> attrs = null;
+
+		//答题记录
+		ExerciseRecord record= this.read(ExerciseRecord.class, answerData.getExerciseRecordId());
+
+		//考试
+		if(StringUtils.isNotEmpty(record.getExamBatchId())){
+			ExamBatchInfo batchInfo = this.read(ExamBatchInfo.class,record.getExamBatchId());
+			attrs = CollectionUtils.newStringMap("examBatchId",record.getExamBatchId(),"examName",batchInfo.getExamInfo().getExamName(),
+					    "subjectId",batchInfo.getExamInfo().getSubjectId(),
+						"subjectName",batchInfo.getExamInfo().getSubject().getName());
+			msg = "老师批改了考试";
+		}else{
+			ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class,answerData.getExerciseInfoId());
+			attrs = CollectionUtils.newStringMap("exerciseInfoId",exerciseInfo.getExerciseInfoId(),"exerciseName",exerciseInfo.getName(),
+					"subjectId",exerciseInfo.getSubjectId(),
+					"subjectName",exerciseInfo.getSubject().getName(),"creator",exerciseInfo.getCreator(),"exerciseType",String.valueOf(exerciseInfo.getType()));
+			msg = "老师批改了答题作业";
+		}
+
+		msgInfoService.doSendTextMsgToUsers(new String[]{record.getUserId()}, MsgInfo.TYPE_CHECK, msg, attrs);
+	}
+
+	/**
+	 * 操作练习记录
+	 * @param answerData
+	 * @return
+	 */
+	public Map<String,Object> doUpdateExerciseRecordStatus(ExerciseSubmitAnswerData answerData){
+		String recordId = answerData.getExerciseRecordId();
+
+		ExerciseRecord record = this.read(ExerciseRecord.class, recordId);
+
+		//如果是作业需要处理
+		if(record == null){// 第一次做题
+			record = new ExerciseRecord();
+			record.setStatus(answerData.getStatus());
+			record = this.insertExerciseRecordMutiNew(record,
+					answerData.getExerciseGroupId(), answerData.getSubjectId(), answerData.getSubmitTime());
+
+			doOperExerciseRecentRecord(record);
+		}else{
+			// 更新做题记录
+			record = this.updateExerciseRecordNew(record, answerData);
+		}
+
+		Map<String,Object> resultMap = new HashMap<String, Object>(3);
+		resultMap.put("exerciseRecordId", recordId);
+		resultMap.put("updateTime", record.getUpdateTime());
+		resultMap.put("exerciseGroupId", record.getExerciseGroupId());
+
+		return resultMap;
+	}
+
+
+	/**
+	 * 操作练习记录
+	 * @param answerData
+	 * @return
+	 */
+	public Map<String,Object> doOperExerciseRecordNew(ExerciseSubmitAnswerData answerData){
+		ExerciseRecord record = null;
+		String recordId = answerData.getExerciseRecordId();
+		String exerciseGroupId = answerData.getExerciseGroupId();
+
+		if(StringUtils.isNotEmpty(recordId)){
+			record = this.read(ExerciseRecord.class, recordId);
+		}
+
+		// 2.操作做题记录
+		if(record != null){
+			// 更新做题记录
+			record = this.updateExerciseRecordNew(record, answerData);
+		}else{
+			record = new ExerciseRecord();
+			record.setStatus(answerData.getStatus());
+			record.setTitleMaxNumber(answerData.getCurrTitleNum());
+			// 新增做题记录
+			record = this.insertExerciseRecordMutiNew(record, exerciseGroupId,
+					answerData.getSubjectId(),answerData.getSubmitTime());
+			recordId =record.getRecordId();
+		}
+
+		// 3.操作最近一次做题记录
+		doOperExerciseRecentRecord(record);
+
+		// 4.返回结果
+		Map<String,Object> resultMap = new HashMap<String, Object>(4);
+
+		resultMap.put("exerciseRecordId", record.getRecordId());
+		resultMap.put("exerciseGroupId", record.getExerciseGroupId());
+		resultMap.put("updateTime", DateTimeUtils.getCurrDateTime(record.getUpdateTime()));
+		if(null != record && StringUtils.isNotBlank(recordId)){
+			resultMap.put("clientExerRecordId", recordId);
+		}else{
+			resultMap.put("clientExerRecordId", null);
+		}
+
+		resultMap.put("recordId", record.getRecordId());
+		resultMap.put("accuracy",record.getAccuracy());
+		resultMap.put("doCount", record.getDoCount());
+		resultMap.put("correctCount", record.getCorrectCount());
+		resultMap.put("totalScore", record.getTotalScore());
+		resultMap.put("passingScore", record.getPassingScore());
+		resultMap.put("objTotalScore", record.getObjTotalScore());
+		resultMap.put("subTotalScore", record.getSubTotalScore());
+		resultMap.put("objScore", record.getObjScore());
+		resultMap.put("subScore", record.getSubScore());
+		resultMap.put("objItemCount", record.getObjItemCount());
+		resultMap.put("subItemCount", record.getSubItemCount());
+
+		return resultMap;
+	}
+
+//	public static void main(String [] args){
+//		ExerciseVerService s = new ExerciseVerService();
+//		s.checkSimilarity("1981年", "1981");
+//		s.checkSimilarity("教与学系统", "教与学的系统");
+//		s.checkSimilarity("教与学的系统", "教与学系统");
+//		System.out.println(HanLP.extractKeyword("中国人", 100));
+//		System.out.println(HanLP.extractKeyword("中国  人  def", 100));
+//		System.out.println(HanLP.segment("中国人"));
+//		s.checkSimilarity("中国人", "中国");
+//	}
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java
new file mode 100644
index 0000000..185d785
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java
@@ -0,0 +1,227 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.model.ExerciseParse;
+import com.qxueyou.scc.exercise.service.impl.node.Doc;
+import com.qxueyou.scc.exercise.service.impl.node.Item;
+import com.qxueyou.scc.exercise.service.impl.node.ItemType;
+import com.qxueyou.scc.exercise.service.impl.node.Option;
+import com.qxueyou.scc.exercise.service.impl.parser.ItemParser;
+import com.qxueyou.scc.exercise.service.impl.parser.OptionParser;
+
+public class Handler {
+	
+	private Doc doc;
+	
+	private Node currentNode;
+	
+	/** 失败 */
+	public static final Integer HANDLER_RESULT_FAIL = 1 ;
+	
+	/** 上一类型 */
+	public static final Integer HANDLER_RESULT_CONTINUE = 2;
+	
+	/** 成功*/
+	public static final Integer HANDLER_RESULT_SUCCESS = 3;
+	
+	/** 校验是否有中文 */
+	private static String regEx = "[\u4e00-\u9fa5]"; 
+	private static Pattern pat = Pattern.compile(regEx); 
+	
+	public Handler(){
+		doc = new Doc();
+		currentNode = doc;
+	}
+	
+	/**
+	 * 解析文本,每次读取一个段落
+	 * @param content 段落文本内容
+	 */
+	public ExerciseParse parse(String content){
+		
+		ParseResult result = null;
+		
+		content = content.replace((char)12288, (char)32);
+		content = content.replace((char)160, (char)32);
+		
+		//将得到的文本全角转半角
+		//content = formatFullToHalf(content);
+		content = content.replace('(', '(');
+		content = content.replace(')', ')');
+		
+		// 非全部英文题   非全部空格,  需要将空格替换掉
+		if(isContentContainsChinese(content) || content.trim().isEmpty()){
+			content = content.replace(" ", "");
+		}
+		
+		content = content.replace("\t", "");
+		
+		if(StringUtils.isEmpty(content)||content.equals("\r")){
+			return new ExerciseParse(HANDLER_RESULT_SUCCESS,content);
+		}
+		
+		//是否需要人为去掉回车
+		content = content.replace("\r", "");
+
+		int count = 0;
+		
+		do{
+			result = currentNode.getParser().parse(currentNode, content);
+			
+			if(result.isSuccess()){
+				if(ParseResult.STEP_CUR.equals(result.getNextStep())){
+					//成功后,取得当前parser
+					generateLastSuccessType(doc,currentNode,result.getNextNode());
+					return new ExerciseParse(HANDLER_RESULT_SUCCESS,content);
+				}
+				if(ParseResult.STEP_PRE.equals(result.getNextStep())){
+					currentNode = currentNode.getParent();
+					return new ExerciseParse(HANDLER_RESULT_SUCCESS,content);
+				}
+				if(ParseResult.STEP_NEXT.equals(result.getNextStep())){
+					currentNode = result.getNextNode();
+					return new ExerciseParse(HANDLER_RESULT_SUCCESS,content);
+				}
+			}else{
+				if(ParseResult.STEP_CUR.equals(result.getNextStep())){
+					//20150907 修改;抛到最上层doc解析器仍然无法定位,直接将文本内容添加到上一个解析成功的位置
+					appendTextToLastPosition(doc,content);
+					return new ExerciseParse(HANDLER_RESULT_CONTINUE,doc.getLastSuccessType(),content);
+				}
+				if(ParseResult.STEP_PRE.equals(result.getNextStep())){
+					if(currentNode.getParent()==null){
+						return new ExerciseParse(HANDLER_RESULT_FAIL,content);
+					}
+					currentNode = currentNode.getParent();
+				}
+				if(ParseResult.STEP_NEXT.equals(result.getNextStep())){
+					if(result.getNextNode()==null){
+						return new ExerciseParse(HANDLER_RESULT_FAIL,content);
+					}
+					currentNode = result.getNextNode();
+				}
+			}
+			
+		}while( count++ < 15);
+		
+		return new ExerciseParse(HANDLER_RESULT_FAIL,content);
+		
+	}
+	
+	public Doc result(){
+		return doc;
+	}
+	
+	
+	/**
+	 * 得到最新成功的解析类型
+	 * 
+	 * @param doc doc
+	 * @param currNode 当前节点
+	 * @param analysisNode 如果是解析  部分的解析器,返回非空数据,用于获取解析器类型
+	 */
+	private void generateLastSuccessType(Doc doc,Node currNode,Node analysisNode){
+		Parser currParser = currNode.getParser();
+		if(null != analysisNode){
+			doc.setLastSuccessType(Doc.CURR_SUCCESS_ANALYSIS);
+			return ;
+		}
+		if(currParser instanceof OptionParser){
+			doc.setLastSuccessType(Doc.CURR_SUCCESS_OPTION);
+			return ;
+		}
+		if(currParser instanceof ItemParser){
+			doc.setLastSuccessType(Doc.CURR_SUCCESS_CONTENT);
+			return ;
+		}
+	}
+	
+	/**
+	 * 得到当前解析成功的最新位置:如果是题目的:题干、选项或者解析,将他们组装对应位置
+	 * 
+	 * @param doc
+	 * @param content
+	 */
+	private void appendTextToLastPosition(Doc doc,String content){
+		String currSuccessType = doc.getLastSuccessType();
+		
+		//第一层 ItemType
+		List<Node>  lstItemType = doc.getChildren();
+		if(null == lstItemType || lstItemType.isEmpty()){
+			return ;
+		}
+		
+		//第二层Item
+		ItemType objItemType = (ItemType)lstItemType.get(lstItemType.size() - 1);
+		List<Node>  lstItem = objItemType.getChildren();
+		if(null == lstItem || lstItem.isEmpty()){
+			return ;
+		}
+		
+		//取到最新位置的Item
+		Item objItem = (Item)lstItem.get(lstItem.size() - 1);
+		if(null != objItem){
+			appendTextToCurrPosition(objItem,currSuccessType,content);
+		}
+	}
+	
+	/**
+	 * 将当前没有归档的内容加入到对应的位置
+	 * 
+	 * @param objItem
+	 * @param currSuccessType
+	 * @param content
+	 */
+	private void appendTextToCurrPosition(Item objItem,String currSuccessType,String content){
+		if(Doc.CURR_SUCCESS_CONTENT == currSuccessType){
+			objItem.setTitle(objItem.getTitle()+ content);
+			currentNode = objItem;
+			
+		}else if(Doc.CURR_SUCCESS_ANALYSIS == currSuccessType){
+			objItem.setAnalysis(objItem.getAnalysis() + content);
+			currentNode = objItem;
+			
+		}else if(Doc.CURR_SUCCESS_OPTION == currSuccessType){
+			
+			List<Option> lstOptions = objItem.getOptions();
+			if(null == lstOptions || lstOptions.isEmpty()){
+				return ;
+			}
+			
+			Option opt = null ;
+			for(int i = lstOptions.size() -1 ; i>=0 ; i --){
+				opt = lstOptions.get(i);
+				if(null == opt){
+					return ;
+				}
+				//将选项添加到最新位置
+				if(StringUtils.isNotBlank(opt.getNo())){
+					opt.setContent(opt.getContent() + content);
+					currentNode = objItem;
+					return ;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * 字符串是否包含中文
+	 * @param content
+	 * @return
+	 */
+	private boolean isContentContainsChinese( String content ){
+		
+		Matcher matcher = pat.matcher(content);
+		boolean flg = false;
+		if (matcher.find())    {
+			flg = true;
+		}
+		return flg;		
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/Node.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/Node.java
new file mode 100644
index 0000000..bdec601
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/Node.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public abstract class Node {
+
+	private String name;
+	
+	private Node parent;
+	
+	private List<Node> children = new ArrayList<Node>(5);;
+	
+	private Map<String,Object> attributes = new HashMap<String,Object>(5);;
+	
+	private Parser parser;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Node getParent() {
+		return parent;
+	}
+
+	public void setParent(Node parent) {
+		this.parent = parent;
+	}
+
+	public Parser getParser() {
+		return parser;
+	}
+
+	public void setParser(Parser parser) {
+		this.parser = parser;
+	}
+
+	public List<Node> getChildren() {
+		return children;
+	}
+	
+	public Node getChild(String attributeName,Object attribute) {
+		for(Node node:children){
+			if(attribute.equals(node.getAttribute(attributeName))){
+				return node;
+			}
+		}
+		return null;
+	}
+	
+	public void addNode(Node node){
+		node.setParent(this);
+		children.add(node);
+	}
+
+	public Map<String, Object> getAttributes() {
+		return attributes;
+	}
+	
+	public Object getAttribute(String name) {
+		return attributes.get(name);
+	}
+	
+	public void setAttribute(String name,Object value) {
+		attributes.put(name, value);
+	}
+	
+	public abstract boolean isComplete();	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java
new file mode 100644
index 0000000..a3befd0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java
@@ -0,0 +1,60 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+public class ParseResult {
+
+	private boolean success;
+	
+	/**
+	 * 下一步尝试:
+	 * PRE: 往上尝试
+	 * CUR: 当前
+	 * NEXT: 有新的子节点
+	 */
+	private String nextStep;
+	
+	public static final String STEP_PRE="PRE";
+	
+	public static final String STEP_CUR="CUR";
+	
+	public static final String STEP_NEXT="NEXT";
+	
+	public ParseResult(boolean success,String nextStep,Node nextNode){
+		this.success=success;
+		this.nextStep = nextStep;
+		this.nextNode = nextNode;
+		
+	}
+	
+	
+	/**
+	 * 有新的节点时新节点引用
+	 */
+	private Node nextNode;
+
+	public boolean isSuccess() {
+		return success;
+	}
+
+	public void setSuccess(boolean success) {
+		this.success = success;
+	}
+
+	public String getNextStep() {
+		return nextStep;
+	}
+
+	public void setNextStep(String nextStep) {
+		this.nextStep = nextStep;
+	}
+
+	public Node getNextNode() {
+		return nextNode;
+	}
+
+	public void setNextNode(Node nextNode) {
+		this.nextNode = nextNode;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/Parser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/Parser.java
new file mode 100644
index 0000000..2a91b35
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/Parser.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.exercise.service.impl;
+
+import java.util.regex.Matcher;
+
+public abstract class Parser {
+	
+	public abstract ParseResult parse(Node node,String str);
+	
+	protected boolean matchBegin(Matcher match){
+		boolean result =  match.find()&&match.start()==0;
+		match.reset();
+		return result;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java
new file mode 100644
index 0000000..b899907
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java
@@ -0,0 +1,93 @@
+package com.qxueyou.scc.exercise.service.impl.node;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.parser.DocParser;
+import com.qxueyou.scc.exercise.service.impl.parser.ItemAnswerParser;
+
+/**
+ * 带解析的文档
+ * @author 德虎
+ *
+ */
+public class Doc extends Node {
+	
+	public static final String CURR_SUCCESS_CONTENT ="CONTENT";
+	
+	public static final String CURR_SUCCESS_OPTION ="OPTION";
+	
+	public static final String CURR_SUCCESS_ANALYSIS ="ANALYSIS";
+	
+	//上一次解析成功的类型
+	private String lastSuccessType;
+	
+	public String getLastSuccessType() {
+		return lastSuccessType;
+	}
+
+	public void setLastSuccessType(String lastSuccessType) {
+		this.lastSuccessType = lastSuccessType;
+	}
+	
+	public Doc(){
+		setName("DOC");
+		setParser(new DocParser());
+	}
+
+	@Override
+	public boolean isComplete() {
+		return false;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<ItemType> getItemTypes(){
+		List<Node> children = getChildren();
+		
+		if(children.isEmpty()){
+			return Collections.EMPTY_LIST;
+		}
+		
+		List<ItemType> itemTypes = new ArrayList<ItemType>(children.size());
+		
+		for(Node node:children){
+			itemTypes.add((ItemType) node);
+		}
+		
+		return itemTypes;
+		
+	}
+	
+	public List<ExerciseItem> convertExerciseItems(){
+		List<ItemType> itemTypes = getItemTypes();
+		
+		List<ExerciseItem> exerciseItems = new ArrayList<ExerciseItem>(12);
+		
+		for(ItemType type:itemTypes){
+			List<Item> items = type.getItems();
+			for(Item item:items){
+				if(!item.isComplete()){
+					continue;
+				}
+				if(StringUtils.isBlank(item.getAnswer())){
+					generateItemAnswerAgain(item);
+				}
+				exerciseItems.add(item.convertExerciseItem());	
+			}
+		}
+		
+		return exerciseItems;
+	}
+	
+	//如果没有答案,重新解析一遍答案
+	private void generateItemAnswerAgain(Item item){
+		ItemAnswerParser parser = new ItemAnswerParser();
+		parser.parse(item, item.getTitle());
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java
new file mode 100644
index 0000000..0583796
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java
@@ -0,0 +1,243 @@
+package com.qxueyou.scc.exercise.service.impl.node;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnalisi;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.parser.ItemParser;
+
+public class Item extends Node {
+	
+	public Item(){
+		setName("ITEM");
+		setParser(new ItemParser());
+	}
+
+	@Override
+	public boolean isComplete() {
+		
+		ItemType type = (ItemType) getParent();
+		
+		if(type.getType()!=ItemType.TYPE_TRUE_OR_FALSE){
+			if(getChildren().isEmpty()){
+				return false;
+			}
+		}
+		
+		return getTitle().length()>4;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<Option> getOptions(){
+		List<Node> children = getChildren();
+		
+		if(children.isEmpty()){
+			return Collections.EMPTY_LIST;
+		}
+		
+		List<Option> options = new ArrayList<Option>(children.size());
+		
+		for(Node node:children){
+			options.add((Option) node);
+		}
+		
+		return options;
+	}
+	
+	public Option getOption(String no){
+		
+		Node node = getChild("NO", no);
+		
+		return node==null?null:(Option)node;
+	}
+	
+	public void setNo(String no){
+		setAttribute("NO",no);
+	}
+	
+	public void setTitle(String title){
+		setAttribute("TITLE",title);
+	}
+	
+	public void setAnalysis(String analysis){
+		setAttribute("ANALYSIS",analysis);
+	}
+	
+	public String getNo(){
+		return (String) getAttribute("NO");
+	}
+	
+	public String getAnswer(){
+		return (String) getAttribute("ANSWER");
+	}
+	
+	public void setAnswer(String answer){
+		setAttribute("ANSWER",answer);
+	}
+	
+	public String getTitle(){
+		return (String) getAttribute("TITLE");
+	}
+	
+	public String getAnalysis(){
+		return (String) getAttribute("ANALYSIS");
+	}
+
+	/**
+	 * 转换为数据模型
+	 * @return
+	 */
+	public ExerciseItem convertExerciseItem() {
+		
+		//new ExerciseItem
+		ExerciseItem item = new ExerciseItem();
+		
+		//转换 ExerciseItemOption
+		List<ExerciseItemOption> options = new ArrayList<ExerciseItemOption>();
+		
+		//确保判断题的OPTION
+		ensureTrueOrFalseOpt();
+		
+		//更新参考答案 最终的答案 格式如A,B,C
+		String resultAnswer = updateAnswer();
+		
+		for(Option opt:getOptions()){
+			if(!opt.isComplete()){
+				continue;
+			}
+			options.add(opt.convertExerciseItemOption());
+		}
+		
+		// 设置正确答案
+		item.setAnswer(resultAnswer);
+		item.setTitle(this.getTitle());
+		item.setType(getExerciseType());
+		item.setOptions(options);
+		item.setItemNo(Integer.valueOf(getNo()));
+		
+		//转换解析内容
+		addAnalysis(item);
+		
+		//返回
+		return item;
+	}
+	
+	/**
+	 * 增加解析实体
+	 * @param item
+	 */
+	private void addAnalysis(ExerciseItem item) {
+		
+		if(StringUtils.isEmpty(getAnalysis())){
+			return;
+		}
+		
+		ExerciseItemAnalisi analysis = new ExerciseItemAnalisi();
+		analysis.setAnalysis(getAnalysis());
+		analysis.setAccuracy(BigDecimal.ZERO);
+		analysis.setSubmitCorrectNumber(BigInteger.ZERO);
+		analysis.setSubmitNumber(BigInteger.ZERO);
+		
+		item.setAnalisis(analysis);
+	}
+
+	/**
+	 * 更新参考答案
+	 */
+	private String updateAnswer() {
+		
+		String answer = getAnswer();
+		String resultAnswer = "";
+		if(StringUtils.isEmpty(answer)){
+			return resultAnswer;
+		}
+		
+		//判断题
+		if(answer.equals("True")||answer.equals("False")){
+			Node node = getChild("NO", answer);
+			if(node==null){
+				return resultAnswer;
+			}
+			Option opt = (Option) node;
+			opt.setCheck(true);
+			resultAnswer = answer;
+		}else{//单选或多选题
+			for(int i=0;i<answer.length();i++){
+				String optAnswer = String.valueOf(answer.charAt(i));
+				Node node = getChild("NO", optAnswer);
+				if(node==null){
+					return resultAnswer;
+				}
+				Option opt = (Option) node;
+				opt.setCheck(true);
+				
+				// 拼接答案
+				resultAnswer += answer.charAt(i);
+				if(i < answer.length()-1){//最后一次不添加
+					resultAnswer += ",";
+				}
+				
+			}
+		}
+		
+		return resultAnswer;
+		
+	}
+
+	/**
+	 * 特殊处理判断题的 option,自动添加 True 和 False 选项
+	 */
+	private void ensureTrueOrFalseOpt(){
+		ItemType type = (ItemType) getParent();
+		
+		if(type.getType()==ItemType.TYPE_TRUE_OR_FALSE){
+			
+			getChildren().clear();
+			
+			Option optTrue = new Option();
+			optTrue.setContent("True");
+			optTrue.setNo("True");
+			
+			Option optFalse = new Option();
+			optFalse.setContent("False");
+			optFalse.setNo("False");
+			
+			addNode(optTrue);
+			addNode(optFalse);
+		}
+	}
+	
+	/**
+	 * 获取习题类型
+	 * @return
+	 */
+	public short getExerciseType(){
+		ItemType type = (ItemType) (this.getParent());
+		
+		String typeStr = type.getType();
+		
+		if(ItemType.TYPE_SINGLE.equals(typeStr)){
+			return ExerciseItem.TYPE_SINGLE_SELECT;
+		}
+		
+		if(ItemType.TYPE_MULTI.equals(typeStr)){
+			return ExerciseItem.TYPE_MULTI_SELECT;
+		}
+		
+		if(ItemType.TYPE_TRUE_OR_FALSE.equals(typeStr)){
+			return ExerciseItem.TYPE_TRUE_OR_FALSE;
+		}
+		
+		return ExerciseItem.TYPE_SINGLE_SELECT;
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/node/ItemType.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/ItemType.java
new file mode 100644
index 0000000..9023e67
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/ItemType.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.exercise.service.impl.node;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.parser.ItemTypeParser;
+
+public class ItemType extends Node {
+	
+	public ItemType(String type){
+		setName("ITEM_TYPE");
+		setParser(new ItemTypeParser());
+		setType(type);
+	}
+	
+	public static final String TYPE_SINGLE="SINGLE";
+	
+	public static final String TYPE_MULTI="MULTI";
+	
+	public static final String TYPE_TRUE_OR_FALSE="TRUE_OR_FALSE";
+
+	@Override
+	public boolean isComplete() {
+		return false;
+	}
+	
+	public void setType(String type){
+		setAttribute("TYPE",type);
+	}
+	
+	public String getType(){
+		return (String) getAttribute("TYPE");
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<Item> getItems(){
+		List<Node> children = getChildren();
+		
+		if(children.isEmpty()){
+			return Collections.EMPTY_LIST;
+		}
+		
+		List<Item> items = new ArrayList<Item>(children.size());
+		
+		for(Node node:children){
+			items.add((Item) node);
+		}
+		
+		return items;
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Option.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Option.java
new file mode 100644
index 0000000..09a5a82
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/node/Option.java
@@ -0,0 +1,66 @@
+package com.qxueyou.scc.exercise.service.impl.node;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.parser.OptionParser;
+
+public class Option extends Node {
+	
+	public Option(){
+		setName("OPTION");
+		setCheck(Boolean.FALSE);
+		setParser(new OptionParser());
+	}
+
+	@Override
+	public boolean isComplete() {
+		
+		if(StringUtils.isEmpty(getNo())){
+			return false;
+		}
+		
+		if(StringUtils.isEmpty(getContent())){
+			return false;
+		}
+		
+		return true;
+	}
+	
+	public void setNo(String no){
+		setAttribute("NO",no);
+	}
+	
+	public void setContent(String content){
+		setAttribute("CONTENT",content);
+	}
+	
+	public void setCheck(Boolean check){
+		setAttribute("CHECK",check);
+	}
+	
+	public String getNo(){
+		return (String) getAttribute("NO");
+	}
+	
+	public String getContent(){
+		return (String) getAttribute("CONTENT");
+	}
+	
+	public Boolean getCheck(){
+		return (Boolean) getAttribute("CHECK");
+	}
+
+	public ExerciseItemOption convertExerciseItemOption() {
+		
+		ExerciseItemOption opt = new ExerciseItemOption();
+		
+		opt.setContent(getContent());
+		opt.setOptionOrder(getNo());
+		opt.setChecked(getCheck());
+		
+		return opt;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java
new file mode 100644
index 0000000..ef591fc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.exercise.service.impl.parser;
+
+import java.util.List;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.ParseResult;
+import com.qxueyou.scc.exercise.service.impl.Parser;
+import com.qxueyou.scc.exercise.service.impl.node.Doc;
+import com.qxueyou.scc.exercise.service.impl.node.ItemType;
+
+/**
+ * 文档解析器
+ * @author 德虎
+ *
+ */
+public class DocParser extends Parser {
+
+	@Override
+	public ParseResult parse(Node node, String str) {
+		return parse((Doc)node,str);
+	}
+	
+	/**
+	 * 解析 Doc
+	 * @param doc
+	 * @param str
+	 * @return
+	 */
+	private ParseResult parse(Doc doc, String str) {
+
+		if(str.contains("单选")||str.contains("单项选择")){
+			return tryNextNodeParser(doc,ItemType.TYPE_SINGLE);
+		}
+		
+		if(str.contains("多选")||str.contains("多项选择")){
+			return tryNextNodeParser(doc,ItemType.TYPE_MULTI);
+		}
+		
+		if(str.contains("判断")){
+			return tryNextNodeParser(doc,ItemType.TYPE_TRUE_OR_FALSE);
+		}
+		
+		return new ParseResult(false,ParseResult.STEP_CUR,null);
+	}
+
+	private ParseResult tryNextNodeParser(Doc doc,String type) {
+		
+		List<Node> children = doc.getChildren();
+		Node child = null;
+		
+		if(children!=null && !children.isEmpty()){
+			child = doc.getChild("TYPE",type);
+		}
+		
+		if(child==null){
+			child = new ItemType(type);
+			doc.addNode(child);
+		}
+		
+		return new ParseResult(false,ParseResult.STEP_NEXT,child);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java
new file mode 100644
index 0000000..d0eaa30
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java
@@ -0,0 +1,82 @@
+package com.qxueyou.scc.exercise.service.impl.parser;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.ParseResult;
+import com.qxueyou.scc.exercise.service.impl.Parser;
+import com.qxueyou.scc.exercise.service.impl.node.Item;
+
+public class ItemAnalysisParser extends Parser {
+	
+	/**
+	 * 解析字符串
+	 */
+	private String analysisStr = "解析";
+	
+	/**
+	 * 解析字符串正则模式
+	 */
+	private Pattern analysis = Pattern.compile(analysisStr);
+	
+
+	@Override
+	public ParseResult parse(Node node, String str) {
+		return parseAnalysis((Item)node,str);
+	}
+	
+	/**
+	 * 解析 Item 参考答案
+	 * 1.解析出类似  *** ( ab ) 这样的参考答案
+	 * 2.将类似参考答案 ( ab ) 替换成 ( )
+	 * @param item
+	 * @param str
+	 * @return
+	 */
+	private ParseResult parseAnalysis(Item item, String str) {
+		
+		//习题选项
+		Matcher analysisMatch = analysis.matcher(str);
+		
+		//返回
+		if(!matchBegin(analysisMatch)){
+			return new ParseResult(false,ParseResult.STEP_CUR,null);
+		}
+		
+		analysisMatch.reset();
+		if(analysisMatch.find()){
+			
+			String group = analysisMatch.group();
+			
+			String analysisS = str.substring(group.length());
+			
+			if(StringUtils.isEmpty(item.getAnalysis())){
+				item.setAnalysis(beautyContent(analysisS));
+			}else{
+				item.setAnalysis(item.getAnalysis().concat(beautyContent(analysisS)));
+			}
+			
+		}
+		
+		//20150907修改:本来返回true,没有解析到一个类型,抛到上层
+		return new ParseResult(false,ParseResult.STEP_CUR,null);
+		
+	}
+	
+	/**
+	 * 去除文本中多余字符
+	 * @param content
+	 * @return
+	 */
+	private String beautyContent(String str){
+		String prefix = "::.。~、、..";
+		String content = str;
+		while(content.length()>0 && prefix.contains(content.substring(0, 1))){
+			content = content.substring(1);
+		}
+		return content;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java
new file mode 100644
index 0000000..5bc62c4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.exercise.service.impl.parser;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.ParseResult;
+import com.qxueyou.scc.exercise.service.impl.Parser;
+import com.qxueyou.scc.exercise.service.impl.node.Item;
+
+public class ItemAnswerParser extends Parser {
+	
+	/**
+	 * 参考答案[带括号]
+	 */
+	private static final String answerWithBracketsStr = "\\([ABCDEFGHIJKLMNOabcdefghijklmno√╳×TFtf]+\\)";
+	
+	/**
+	 * 参考答案
+	 */
+	private static final String answerStr = "[ABCDEFGHIJKLMNOabcdefghijklmno√╳×TFtf]+";
+	
+	/**
+	 * 参考答案模式[带括号]
+	 */
+	private static final Pattern answerWithBrackets = Pattern.compile(answerWithBracketsStr);
+	
+	/**
+	 * 参考答案模式
+	 */
+	private static final Pattern answer = Pattern.compile(answerStr);
+
+	@Override
+	public ParseResult parse(Node node, String str) {
+		return parseAnswer((Item)node,str);
+	}
+	
+	/**
+	 * 解析 Item 参考答案
+	 * 1.解析出类似  *** ( ab ) 这样的参考答案
+	 * 2.将类似参考答案 ( ab ) 替换成 ( )
+	 * @param item
+	 * @param str
+	 * @return
+	 */
+	private ParseResult parseAnswer(Item item, String str) {
+		
+		//习题选项
+		Matcher answerBracketsMatch = answerWithBrackets.matcher(str);
+		
+		//返回
+		if(!answerBracketsMatch.find() || answerBracketsMatch.start()==0){
+			return new ParseResult(false,ParseResult.STEP_CUR,null);
+		}
+		
+		Matcher answerMatch = null;
+		
+		answerBracketsMatch.reset();
+		if(answerBracketsMatch.find()){
+			
+			String answerBrackets = answerBracketsMatch.group();
+			answerMatch = answer.matcher(answerBrackets);
+			answerMatch.find();
+			
+			String answer = answerMatch.group();
+			
+			item.setAnswer(dealAnswer(answer.toUpperCase()));
+			item.setTitle(item.getTitle().replaceAll(answerWithBracketsStr, "( )"));
+		}
+		
+		//20150907修改:本来返回true,没有解析到一个类型,抛到上层
+		return new ParseResult(false,ParseResult.STEP_PRE,null);
+		
+	}
+	
+	/**
+	 * 处理answer
+	 * @param answer
+	 * @return
+	 */
+	private String dealAnswer(String answer){
+		if(StringUtils.equalsIgnoreCase("√",answer)||StringUtils.equalsIgnoreCase("√",answer)||StringUtils.equalsIgnoreCase("T",answer)){
+			return "True";
+		}
+		if(StringUtils.equalsIgnoreCase("×",answer)||StringUtils.equalsIgnoreCase("╳",answer)||StringUtils.equalsIgnoreCase("F",answer)){
+			return "False";
+		}
+		return answer;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java
new file mode 100644
index 0000000..d2e0658
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java
@@ -0,0 +1,118 @@
+package com.qxueyou.scc.exercise.service.impl.parser;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.ParseResult;
+import com.qxueyou.scc.exercise.service.impl.Parser;
+import com.qxueyou.scc.exercise.service.impl.node.Item;
+import com.qxueyou.scc.exercise.service.impl.node.Option;
+
+public class ItemParser extends Parser {
+	
+	/**
+	 * 习题开始模式匹配
+	 */
+	Pattern patternItem = Pattern.compile("\\d+");
+	
+	private Pattern analysis = Pattern.compile("解析");
+	
+	/**
+	 * 习题选项编号模式[带括号]
+	 */
+	//Pattern optNoWithBrackets = Pattern.compile("\\(?[ABCDEFabcdef]\\)?[、..]");
+	
+	/**
+	 * 习题选项  word自带的格式的 a.a、a)	这三种较为普遍,目前03可以解析成功,07解析失败*[\t]
+	 */
+	Pattern optNoWithBrackets = Pattern.compile("\\(?[ABCDEFabcdef]\\)?[..、]");
+	
+	ItemAnswerParser answerParser = new ItemAnswerParser();
+	
+	ItemAnalysisParser analysisParser = new ItemAnalysisParser();
+	
+	@Override
+	public ParseResult parse(Node node, String str) {
+		return parse((Item)node,str);
+	}
+	
+	/**
+	 * 解析 Item
+	 * @param item
+	 * @param str
+	 * @return
+	 */
+	private ParseResult parse(Item item, String str) {
+		
+		//习题
+		Matcher itemNoMatch = patternItem.matcher(str);
+		Matcher optNoWithBracketsMatch = optNoWithBrackets.matcher(str);
+		Matcher analysisMatch = analysis.matcher(str);
+		
+		//尝试调用上级解析器继续解析
+		if(!matchBegin(itemNoMatch) && !matchBegin(optNoWithBracketsMatch) && !matchBegin(analysisMatch)){
+			return new ParseResult(false,ParseResult.STEP_PRE,null);
+		}
+		
+		
+		//解析 no,title
+		if(matchBegin(itemNoMatch)){
+			itemNoMatch.find();
+			String no = itemNoMatch.group();
+			if(!StringUtils.isEmpty(item.getNo())){
+				return new ParseResult(false,ParseResult.STEP_PRE,null);
+			}
+			if(itemNoMatch.start()==0){
+				
+				String title = str.substring(itemNoMatch.end(),str.length());
+				item.setNo(no);
+				item.setTitle(beautyTitle(title));
+				
+				//解析参考答案
+				answerParser.parse(item, str);
+				
+				return new ParseResult(true,ParseResult.STEP_CUR,null);
+			}
+		}
+		
+		//习题选项
+		if(matchBegin(optNoWithBracketsMatch)){
+			Option opt = new Option();
+			item.addNode(opt);
+			return new ParseResult(false,ParseResult.STEP_NEXT,opt);
+		}
+		
+		//解析  习题分析
+		if(matchBegin(analysisMatch)){
+			analysisParser.parse(item,str);
+			//20150907修改:返回item
+			return new ParseResult(true,ParseResult.STEP_CUR,item);
+		}
+		
+		//20150907修改:本来返回true,没有解析到一个类型,抛到上层
+		return new ParseResult(false,ParseResult.STEP_PRE,null);
+		
+	}
+	
+	/**
+	 * 去除习题标题多余字符
+	 * @param title
+	 * @return
+	 */
+	private String beautyTitle(String title){
+		String prefix = ".。~、.";
+		while(title.length()>0 && prefix.contains(title.substring(0, 1))){
+			title = title.substring(1);
+		}
+		return title;
+	}
+	
+	public static void main(String[] args){
+		ItemParser parser  = new ItemParser();
+		parser.parse(null, "59、在培训效果评估的指标中,技能转换指标通常通过()来判断。");
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java
new file mode 100644
index 0000000..2c32010
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.exercise.service.impl.parser;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.ParseResult;
+import com.qxueyou.scc.exercise.service.impl.Parser;
+import com.qxueyou.scc.exercise.service.impl.node.Item;
+import com.qxueyou.scc.exercise.service.impl.node.ItemType;
+
+public class ItemTypeParser extends Parser {
+
+	/**
+	 * 习题类型关键字
+	 */
+	private static Map<String,String> typeMap = new HashMap<String,String>();
+	
+	static{
+		typeMap.put("单选", ItemType.TYPE_SINGLE);
+		typeMap.put("单项选择", ItemType.TYPE_SINGLE);
+		typeMap.put("多选", ItemType.TYPE_MULTI);
+		typeMap.put("多项选择", ItemType.TYPE_MULTI);
+		typeMap.put("判断", ItemType.TYPE_TRUE_OR_FALSE);
+	}
+
+	/**
+	 * 习题开始模式匹配
+	 */
+	Pattern itemPattern = Pattern.compile("\\d+");
+
+	@Override
+	public ParseResult parse(Node node, String str) {
+		return parse((ItemType) node, str);
+	}
+
+	/**
+	 * 解析 ItemType
+	 * 
+	 * @param doc
+	 * @param str
+	 * @return
+	 */
+	private ParseResult parse(ItemType itemType, String str) {
+		
+		// 习题
+		Matcher matcher = itemPattern.matcher(str);
+
+		if (matchBegin(matcher) && StringUtils.isNotEmpty(itemType.getType())) {
+			Item item = new Item();
+			itemType.addNode(item);
+			return new ParseResult(false, ParseResult.STEP_NEXT, item);
+		}
+		
+		// 题目类型
+		for (String keyword : typeMap.keySet()) {
+			if (str.contains(keyword)) {
+				if(itemType.getType().equals(typeMap.get(keyword))){
+					return new ParseResult(true, ParseResult.STEP_CUR, null);
+				}else{
+					return new ParseResult(false, ParseResult.STEP_PRE, null);
+				}
+			}
+		}
+
+		//20150907修改:本来返回true,没有解析到一个类型,抛到上层
+		return new ParseResult(false, ParseResult.STEP_PRE, null);
+
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java
new file mode 100644
index 0000000..095882a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java
@@ -0,0 +1,122 @@
+package com.qxueyou.scc.exercise.service.impl.parser;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.qxueyou.scc.exercise.service.impl.Node;
+import com.qxueyou.scc.exercise.service.impl.ParseResult;
+import com.qxueyou.scc.exercise.service.impl.Parser;
+import com.qxueyou.scc.exercise.service.impl.node.Item;
+import com.qxueyou.scc.exercise.service.impl.node.Option;
+
+
+
+public class OptionParser extends Parser {
+	
+	/**
+	 * 习题选项编号模式[带括号]
+	 */
+	//Pattern optNoWithBrackets = Pattern.compile("\\(?[ABCDEFabcdef]\\)?[、..]");
+	
+	/**
+	 * 习题选项  word自带的格式的 a.a、a)	这三种较为普遍,目前03可以解析成功,07解析失败*[\t]
+	 */
+	Pattern optNoWithBrackets = Pattern.compile("\\(?[ABCDEFGHIJKLMNOabcdefghijklmno]\\)?[..、]");
+	
+	/**
+	 * 习题选项编号模式
+	 */
+	Pattern optNo = Pattern.compile("[ABCDEFGHIJKLMNOabcdefghijklmno]");
+	
+
+	@Override
+	public ParseResult parse(Node node, String str) {
+		return parse((Option)node,str);
+	}
+	
+	/**
+	 * 解析 Item
+	 * @param item
+	 * @param str
+	 * @return
+	 */
+	private ParseResult parse(Option option, String str) {
+		
+		//习题选项
+		Matcher optNoWithBracketsMatch = optNoWithBrackets.matcher(str);
+		
+		//尝试调用上级解析器继续解析
+		if(!matchBegin(optNoWithBracketsMatch)){
+			return new ParseResult(false,ParseResult.STEP_PRE,null);
+		}
+		
+		Matcher optNoMatch = null;
+		
+		int start = 0;
+		Option preOpt = null;
+		
+		optNoWithBracketsMatch.reset();
+		while(optNoWithBracketsMatch.find()){
+			
+			String noWithBrackets = optNoWithBracketsMatch.group();
+			optNoMatch = optNo.matcher(noWithBrackets);
+			optNoMatch.find();
+			String no = optNoMatch.group();
+
+			Option opt = getOpt(no.toUpperCase(),(Item)option.getParent());
+			
+			if(start!=optNoWithBracketsMatch.start() && preOpt!=null){
+				preOpt.setContent(
+						beautyContent(
+								str.substring(start, optNoWithBracketsMatch.start())
+								)
+						);	
+			}
+			preOpt = opt;
+			start = optNoWithBracketsMatch.end();
+			
+			// 在最开始匹配成功即跳出循环
+			//break ;
+		}
+		
+		preOpt.setContent(beautyContent(str.substring(start, str.length())));
+		
+		return new ParseResult(true,ParseResult.STEP_CUR,null);
+		
+	}
+	
+	/**
+	 * 去除文本中多余字符
+	 * @param content
+	 * @return
+	 */
+	private String beautyContent(String str){
+		String prefix = ".。~、、..)";
+		String content = str;
+		while(content.length()>0 && prefix.contains(content.substring(0, 1))){
+			content = content.substring(1);
+		}
+		return content;
+	}
+	
+	/**
+	 * 获取题目选项
+	 * @param no
+	 * @param item
+	 * @return
+	 */
+	private Option getOpt(String no,Item item){
+		Option opt = item.getOption(no);
+		if(opt==null){
+			
+			opt = item.getOption("");
+			
+			if(opt==null){
+				opt = new Option();
+				item.addNode(opt);
+				opt.setNo(no);
+			}
+		}
+		return opt;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java b/src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java
new file mode 100644
index 0000000..b9a7815
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java
@@ -0,0 +1,24 @@
+package com.qxueyou.scc.exercise.timer;
+
+import com.qxueyou.scc.base.util.SpringUtil;
+import com.qxueyou.scc.exercise.service.IExerciseExtendService;
+
+/**
+ * 练习定时器
+ * @author zhiyong
+ *
+ */
+public class ExerciseTimer {
+	
+	/**
+	 * 练习错题本错误率统计
+	 */
+	public void exerciseFaultStatisTask() {
+		
+		IExerciseExtendService exerciseExtendService = SpringUtil.getBean("exerciseExtendService", IExerciseExtendService.class);
+	
+		// 开始计算结果
+		exerciseExtendService.doCalcExerFaultStatisticsByDay();
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java b/src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java
new file mode 100644
index 0000000..bfbc6f2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java
@@ -0,0 +1,650 @@
+package com.qxueyou.scc.exercise.util;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.CommonUtils;
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+import com.qxueyou.scc.exercise.model.ExerciseItemScore;
+import com.qxueyou.scc.exercise.model.ExerciseObjectImg;
+import com.qxueyou.scc.exercise.model.ExerciseOptionStatistics;
+import com.qxueyou.scc.school.model.SchEvaluate;
+
+/**
+ * 练习工具类
+ * 
+ * @author zhiyong
+ *
+ */
+public class ExerciseUtils {
+
+	/**
+	 * 重新组装练习item
+	 * 
+	 * @param lstItems
+	 * @return
+	 */
+	public static void packageExerciseItem(List<ExerciseItem> lstItems, List<ExerciseItemAnswerU> lstUserAnswer,
+			List<ExerciseObjectImg> lstOptionImgs) {
+		for (ExerciseItem objExerciseItem : lstItems) {
+			// 选项
+			List<ExerciseItemOption> options = objExerciseItem.getOptions();
+			// 选项分数
+			List<ExerciseItemScore> scores = objExerciseItem.getScores();
+			ExerciseUtils.packOption(options, scores, lstOptionImgs);
+			if (lstUserAnswer == null || lstUserAnswer.isEmpty()) {
+				continue;
+			}
+			for (ExerciseItemAnswerU answerU : lstUserAnswer) {
+				// 获用户答案
+				if (answerU.getExerciseItemId().equals(objExerciseItem.getExerciseId())) {
+					objExerciseItem.setAnswer(answerU.getAnswer());
+					break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * 为选项组装分数和图片
+	 * 
+	 * @return
+	 */
+	private static List<ExerciseItemOption> packOption(List<ExerciseItemOption> options, List<ExerciseItemScore> scores,
+			List<ExerciseObjectImg> lstOptionImgs) {
+		if (options == null || options.isEmpty()) {
+			return options;
+		}
+		if (scores == null || scores.isEmpty()) {
+			return options;
+		}
+		for (ExerciseItemOption objExerciseItemOption : options) {
+			for (ExerciseItemScore objExerciseItemScore : scores) {
+				if (objExerciseItemScore.getAttribute1().equals(objExerciseItemOption.getOptionId())) {
+					objExerciseItemOption.setScore((int) (Double.parseDouble(objExerciseItemScore.getScore())));
+					break;
+				}
+			}
+			// 图片
+			if (lstOptionImgs == null || lstOptionImgs.isEmpty()) {
+				continue;
+			}
+			for (ExerciseObjectImg objExerciseObjectImg : lstOptionImgs) {
+				if (objExerciseObjectImg.getExerciseObjectId().equals(objExerciseItemOption.getOptionId())) {
+					List<ExerciseObjectImg> lstImgs = new ArrayList<>();
+					lstImgs.add(objExerciseObjectImg);
+					objExerciseItemOption.setImgPath(objExerciseObjectImg.getImgPath());
+					objExerciseItemOption.setImgs(lstImgs);
+					break;
+				}
+			}
+		}
+		return options;
+	}
+
+	/**
+	 * 组装问卷详细统计情况
+	 * 
+	 * @param lstItems
+	 * @param objSchEvaluate
+	 * @return
+	 */
+	public static Map<String, Object> packageExerciseDetail(List<ExerciseItem> lstItems, SchEvaluate objSchEvaluate) {
+		Map<String, Object> mResult = new HashMap<String, Object>();
+		double iTotalAverageScore = 0;
+		double iTotalScore = 0;
+		for (ExerciseItem objExerciseItem : lstItems) {
+			// 选项
+			List<ExerciseItemOption> options = objExerciseItem.getOptions();
+			// 选项分数
+			List<ExerciseItemScore> scores = objExerciseItem.getScores();
+
+			ExerciseUtils.packOption(options, scores, null);
+			List<ExerciseItemAnswerU> exerciseItemAnswerU = objExerciseItem.getExerciseItemAnswerU();
+			// 平均分数
+			double dAverageScore = 0;
+			double dUserScore = 0;
+			// 是否存在答题学员
+			boolean hasAnswerU = exerciseItemAnswerU != null && !exerciseItemAnswerU.isEmpty();
+			if (options == null || options.isEmpty()) {
+				continue;
+			}
+			// 统计每个选项的情况
+			LinkedHashMap<String, Integer> mOptionsDetail = new LinkedHashMap<String, Integer>();
+			LinkedHashMap<String, Integer> mOptionOrderDetail = new LinkedHashMap<String, Integer>();
+			if (!hasAnswerU) {
+				continue;
+			}
+			for (ExerciseItemAnswerU objExerciseItemAnswerU : exerciseItemAnswerU) {
+				String strAnswer = objExerciseItemAnswerU.getAnswer();
+				if (StringUtils.isEmpty(strAnswer)) {// 为空自动跳出循环
+					break;
+				}
+				Map<String, Object> mResult2 = packageItemOption(objExerciseItem, strAnswer, mOptionsDetail, mOptionOrderDetail);
+				objExerciseItemAnswerU.setAnswerValue((String) mResult2.get("userAnswerContent"));
+				objExerciseItem.setMaxScore((Double) mResult2.get("dMaxScore"));
+				dUserScore += (Double) mResult2.get("dUserScore");
+			}
+			// 计算平均值
+			if (hasAnswerU) {
+				dAverageScore = dUserScore / exerciseItemAnswerU.size();
+			}
+			// 最大值
+			iTotalScore += objExerciseItem.getMaxScore();
+			objExerciseItem.setOptionsDetail(mOptionsDetail);
+			if(!mOptionOrderDetail.isEmpty()) {
+				List<Map<String, Object>> optionsOrderDetail = new ArrayList<>();
+				for (String key : mOptionOrderDetail.keySet()) { 
+					optionsOrderDetail.add(CollectionUtils.newObjectMap("optionsOrder", key, "count", mOptionOrderDetail.get(key)));
+				} 
+				objExerciseItem.setOptionsOrderDetail(optionsOrderDetail);
+			}
+			objExerciseItem.setAverageScore(dAverageScore);
+			iTotalAverageScore += dAverageScore;
+			objExerciseItem.setScores(null);
+		}
+		mResult.put("iTotalAverageScore", iTotalAverageScore);
+		mResult.put("iTotalScore", iTotalScore);
+		mResult.put("lstExerciseItem", lstItems);
+		mResult.put("objSchEvaluate", objSchEvaluate);
+		return mResult;
+	}
+
+	/**
+	 * 组装问卷详细统计情况
+	 * 
+	 * @param lstItems
+	 * @param objSchEvaluate
+	 * @return
+	 */
+	public static Map<String, Object> packageUserExerciseDetail(List<ExerciseItem> result, SchEvaluate objSchEvaluate,
+			List<ExerciseObjectImg> lstExerciseObjectImg) {
+		Map<String, Object> mResult = new HashMap<String, Object>();
+		double iTotalScore = 0;
+		List<ExerciseItem> lstItems = new ArrayList<>();
+		double dTotalScoreU = 0;
+		String strCreator = "";
+		for (ExerciseItem objExerciseItem : result) {
+			lstItems.add(objExerciseItem);
+			List<ExerciseItemAnswerU> lstExerciseItemAnswerU = objExerciseItem.getExerciseItemAnswerU();
+			// 选项
+			List<ExerciseItemOption> options = objExerciseItem.getOptions();
+			// 选项分数
+			List<ExerciseItemScore> scores = objExerciseItem.getScores();
+			// 组装选项和分数
+			ExerciseUtils.packOption(options, scores, lstExerciseObjectImg);
+			if (lstExerciseItemAnswerU == null || lstExerciseItemAnswerU.isEmpty()) {
+				continue;
+			}
+			// 用户答案
+			String strAnswer = lstExerciseItemAnswerU.get(0).getAnswer();
+			if (StringUtils.isEmpty(strAnswer)) {// 为空自动跳出循环
+				break;
+			}
+			strCreator = lstExerciseItemAnswerU.get(0).getCreator();
+			if (objExerciseItem.getType() == ExerciseItem.TYPE_ESSAY_QUESTION) {// 问答题
+				objExerciseItem.setAnswer(strAnswer);
+			} else {
+				if (options == null || options.isEmpty()) {
+					continue;
+				}
+				Map<String, Object> mResult2 = packageItemOption(objExerciseItem, strAnswer,
+						new LinkedHashMap<String, Integer>(), new LinkedHashMap<String, Integer>());
+				objExerciseItem.setMaxScore((Double) mResult2.get("dUserScore"));
+				iTotalScore += (Double) mResult2.get("dMaxScore");
+				dTotalScoreU += (Double) mResult2.get("dUserScore");
+				objExerciseItem.setScores(null);
+				objExerciseItem.setAnswer((String) mResult2.get("userAnswerContent"));
+			}
+		}
+		mResult.put("iTotalScore", iTotalScore);
+		mResult.put("dTotalScoreU", dTotalScoreU);
+		mResult.put("lstExerciseItem", lstItems);
+		mResult.put("objSchEvaluate", objSchEvaluate);
+		mResult.put("strUserName", strCreator);
+		return mResult;
+	}
+
+	/**
+	 * 判断题目类型
+	 * 
+	 * @param objExerciseItem
+	 *            题目
+	 * @param strAnswer
+	 *            用户选择答案
+	 * @param mOptionsDetail
+	 *            统计值
+	 * @return
+	 */
+	public static Map<String, Object> packageItemOption(ExerciseItem objExerciseItem, String strAnswer,
+			LinkedHashMap<String, Integer> mOptionsDetail, LinkedHashMap<String, Integer> mOptionOrderDetail) {
+		Map<String, Object> mResult = new HashMap<String, Object>();
+		// 选项
+		List<ExerciseItemOption> options = objExerciseItem.getOptions();
+		double dMaxScore = 0;
+		double dUserScore = 0;
+		String[] c = "A B C D E F G H I J K L M N".split(" ");
+		// 题目类型
+		int iType = objExerciseItem.getType();
+		int index = 0;
+		StringBuffer userAnswerContent = new StringBuffer(256);
+		for (ExerciseItemOption objExerciseItemOption : options) {
+			double dScore = Double.valueOf(objExerciseItemOption.getScore());
+			// 获取最大值
+			dMaxScore = iType == 2 ? dMaxScore + dScore : dScore > dMaxScore ? dScore : dMaxScore;
+			if (iType == ExerciseItem.TYPE_SINGLE_SELECT
+					&& strAnswer.substring(0, 1).equals(objExerciseItemOption.getOptionOrder())) {// 单选A或B或C或D_补充xxxxxx
+				dUserScore += dScore;
+				userAnswerContent.append(strAnswer.length() > 2
+						? objExerciseItemOption.getContent() + strAnswer.substring(1, strAnswer.length()) : // 拼接补充内容
+						objExerciseItemOption.getContent());
+				mOptionsDetail.put(ExerciseUtils.getOptionsContent(objExerciseItemOption),
+						ExerciseUtils.getValue(ExerciseUtils.getOptionsContent(objExerciseItemOption), mOptionsDetail));
+				mOptionOrderDetail.put(objExerciseItemOption.getOptionOrder(),mOptionsDetail.get(ExerciseUtils.getOptionsContent(objExerciseItemOption)));
+			} else if (iType == ExerciseItem.TYPE_MULTI_SELECT) {// 多选A,B,C,D_补充xxxxxx
+				String[] arrAnswer = strAnswer.split("_");
+				String[] strAnswerOrder = arrAnswer[0].split(",");
+				for (int i = 0; i < strAnswerOrder.length; i++) {
+					if (strAnswerOrder[i].equals(objExerciseItemOption.getOptionOrder())) {
+						dUserScore += dScore;
+						// 拼接补充的内容
+						if (index == options.size() - 1) {
+							userAnswerContent.append(objExerciseItemOption.getContent());
+							userAnswerContent.append(arrAnswer.length > 1 && arrAnswer[1].length() > 2
+									? "_" + strAnswer.substring(arrAnswer[0].length() + 1, strAnswer.length()) : "");
+						} else {
+							userAnswerContent.append(objExerciseItemOption.getContent()).append(';');
+						}
+						mOptionsDetail.put(ExerciseUtils.getOptionsContent(objExerciseItemOption), ExerciseUtils
+								.getValue(ExerciseUtils.getOptionsContent(objExerciseItemOption), mOptionsDetail));
+						mOptionOrderDetail.put(objExerciseItemOption.getOptionOrder(),mOptionsDetail.get(ExerciseUtils.getOptionsContent(objExerciseItemOption)));
+					}
+				}
+			} else if (iType == ExerciseItem.TYPE_SCORE
+					&& c[Integer.valueOf(strAnswer) - 1].equals(objExerciseItemOption.getOptionOrder())) {// 分值,1,2,3,4,5颗星
+				dUserScore += dScore;
+				userAnswerContent.append(ExerciseUtils.getOptionsContent(objExerciseItemOption));// 给答案文字赋值
+				mOptionsDetail.put(ExerciseUtils.getOptionsContent(objExerciseItemOption),
+						ExerciseUtils.getValue(ExerciseUtils.getOptionsContent(objExerciseItemOption), mOptionsDetail));
+				mOptionOrderDetail.put(objExerciseItemOption.getOptionOrder(),mOptionsDetail.get(ExerciseUtils.getOptionsContent(objExerciseItemOption)));
+			} else if (iType == ExerciseItem.TYPE_MEASUREMENT && index == 0) {// 量值,直接存分数
+				dUserScore += Integer.valueOf(strAnswer);
+				userAnswerContent.append(strAnswer).append("分");
+				mOptionsDetail.put(strAnswer + "分",
+						mOptionsDetail.get(strAnswer + "分") == null ? 1 : mOptionsDetail.get(strAnswer + "分") + 1);
+				mOptionOrderDetail.put(strAnswer,mOptionsDetail.get(strAnswer + "分"));
+			}
+			index++;
+		}
+		mResult.put("dMaxScore", dMaxScore);
+		mResult.put("userAnswerContent", userAnswerContent.toString());
+		mResult.put("dUserScore", dUserScore);
+		return mResult;
+	}
+
+	/**
+	 * 获取值
+	 * 
+	 * @param content
+	 * @param mOptionsDetail
+	 * @param Content
+	 * @return
+	 */
+	public static Integer getValue(String content, Map<String, Integer> mOptionsDetail) {
+		return mOptionsDetail.get(content) == null ? 1 : mOptionsDetail.get(content) + 1;
+	}
+
+	/**
+	 * 获取选项的值和分数
+	 * 
+	 * @param objExerciseItemOption
+	 * @return
+	 */
+	public static String getOptionsContent(ExerciseItemOption objExerciseItemOption) {
+		return objExerciseItemOption.getContent().concat("(").concat(String.valueOf(objExerciseItemOption.getScore()))
+				.concat("分)");
+	}
+
+	/**
+	 * 重新组装练习item
+	 * 
+	 * @param lstAllOptions
+	 * @return
+	 */
+	public static void packageExerciseItem(Map<String, List<ExerciseItemOption>> optionsMap,
+			Map<String, String> answerMap, List<ExerciseItemOption> lstAllOptions,
+			Map<String, List<ExerciseObjectImg>> imgOptionMap) {
+		// 上一次练习id
+		String lastExerciseId = "";
+		ExerciseItemOption option = null;
+		List<ExerciseItemOption> lstOptions = null;
+		StringBuffer correctAnswers = new StringBuffer(128); // 正确答案
+		// 4.3 题目选项
+		for (int i = 0; i < lstAllOptions.size(); i++) {
+			option = lstAllOptions.get(i);
+
+			if (imgOptionMap != null && imgOptionMap.get(option.getOptionId()) != null) {
+				option.setImgs(imgOptionMap.get(option.getOptionId()));
+			}
+
+			if (i == 0) {// 第一次
+				lstOptions = new ArrayList<ExerciseItemOption>();
+				lstOptions.add(option);
+
+				if (option.getChecked()) {// 正确答案
+					correctAnswers.append(option.getOptionOrder()).append(',');
+				}
+			} else {// 第二次开始
+				if (lastExerciseId.equals(option.getExerciseItemId())) {// 相同
+					lstOptions.add(option);
+
+					if (option.getChecked()) {// 正确答案
+						correctAnswers.append(option.getOptionOrder()).append(',');
+					}
+				} else {// 不相同
+						// 添加到map
+					optionsMap.put(lastExerciseId, lstOptions);
+					answerMap.put(lastExerciseId, correctAnswers.toString());
+
+					correctAnswers = new StringBuffer(128);
+					if (option.getChecked()) {// 正确答案
+						correctAnswers.append(option.getOptionOrder()).append(',');
+					}
+					lstOptions = new ArrayList<ExerciseItemOption>();
+					lstOptions.add(option);
+				}
+			}
+
+			if (i == lstAllOptions.size() - 1) {// 最后一次
+				answerMap.put(option.getExerciseItemId(), correctAnswers.toString());
+				optionsMap.put(option.getExerciseItemId(), lstOptions);
+			}
+
+			// 上一次练习id
+			lastExerciseId = option.getExerciseItemId();
+		}
+	}
+
+	/**
+	 * 重新组装练习item 题目图片
+	 * 
+	 * @param lstAllOptions
+	 * @return
+	 */
+	public static Map<String, List<ExerciseObjectImg>> packageExerciseItemImg(List<ExerciseObjectImg> lstImgs) {
+		Map<String, List<ExerciseObjectImg>> imgMap = new HashMap<String, List<ExerciseObjectImg>>();
+		// 上一次练习id
+		String lastExerciseId = "";
+		ExerciseObjectImg objImg = null;
+		List<ExerciseObjectImg> lstImg = null;
+		// 4.3 题目选项
+		for (int i = 0; i < lstImgs.size(); i++) {
+			objImg = lstImgs.get(i);
+
+			if (i == 0) {// 第一次
+				lstImg = new ArrayList<ExerciseObjectImg>();
+				lstImg.add(objImg);
+			} else {// 第二次开始
+				if (lastExerciseId.equals(objImg.getExerciseObjectId())) {// 相同
+					lstImg.add(objImg);
+				} else {// 不相同
+						// 添加到map
+					imgMap.put(lastExerciseId, lstImg);
+
+					lstImg = new ArrayList<ExerciseObjectImg>();
+					lstImg.add(objImg);
+				}
+			}
+
+			if (i == lstImgs.size() - 1) {// 最后一次
+				imgMap.put(objImg.getExerciseObjectId(), lstImg);
+			}
+
+			// 上一次练习id
+			lastExerciseId = objImg.getExerciseObjectId();
+		}
+
+		return imgMap;
+	}
+
+	/**
+	 * 重新组装练习item
+	 * 
+	 * @param lstAllOptions
+	 * @return
+	 */
+	public static void packageExerciseItemScore(Map<String, List<ExerciseItemScore>> scoreMap,
+			List<ExerciseItemScore> lstAllscores) {
+		// 上一次练习id
+		String lastExerciseId = "";
+		ExerciseItemScore score = null;
+		List<ExerciseItemScore> lstscore = null;
+		// 4.3 题目选项
+		for (int i = 0; i < lstAllscores.size(); i++) {
+			score = lstAllscores.get(i);
+
+			if (i == 0) {// 第一次
+				lstscore = new ArrayList<ExerciseItemScore>();
+				lstscore.add(score);
+			} else {// 第二次开始
+				if (lastExerciseId.equals(score.getExerciseItemId())) {// 相同
+					lstscore.add(score);
+				} else {// 不相同
+						// 添加到map
+					scoreMap.put(lastExerciseId, lstscore);
+
+					lstscore = new ArrayList<ExerciseItemScore>();
+					lstscore.add(score);
+				}
+			}
+
+			if (i == lstAllscores.size() - 1) {// 最后一次
+				scoreMap.put(score.getExerciseItemId(), lstscore);
+			}
+
+			// 上一次练习id
+			lastExerciseId = score.getExerciseItemId();
+		}
+	}
+
+	/**
+	 * 重新组装做题记录 ExerciseItemAnswer —— 成绩统计
+	 * 
+	 * @param lstAllOptions
+	 * @return
+	 */
+	public static void packageExerciseItemAnswerStatis(List<ExerciseItemAnswerU> answers,
+			Map<String, Object> answerUMap) {
+		// 上一次练习id
+		String lastExerciseId = "";
+		ExerciseItemAnswerU answer = null;
+		List<ExerciseItemAnswerU> lstAnswers = null;
+		// 做题记录
+		for (int i = 0; i < answers.size(); i++) {
+			answer = answers.get(i);
+
+			if (i == 0) {// 第一次
+				lstAnswers = new ArrayList<ExerciseItemAnswerU>();
+				lstAnswers.add(answer);
+			} else {// 第二次开始
+				if (lastExerciseId.equals(answer.getExerciseItemId())) {// 相同
+					lstAnswers.add(answer);
+
+				} else {// 不相同
+						// 添加到map
+					answerUMap.put(lastExerciseId, lstAnswers);
+
+					lstAnswers = new ArrayList<ExerciseItemAnswerU>();
+					lstAnswers.add(answer);
+				}
+			}
+
+			if (i == answers.size() - 1) {// 最后一次
+				answerUMap.put(answer.getExerciseItemId(), lstAnswers);
+			}
+
+			// 上一次练习id
+			lastExerciseId = answer.getExerciseItemId();
+		}
+	}
+
+	/**
+	 * 重新组装题目选项ExerciseItemOption —— 成绩统计
+	 * 
+	 * @param lstAllOptions
+	 * @return
+	 */
+	public static void packageExerciseItemOption(List<ExerciseItemOption> itemOptionLst,
+			Map<String, Object> itemOptionMap) {
+		// 上一次练习id
+		String lastExerciseId = "";
+		ExerciseItemOption option = null;
+		List<ExerciseItemOption> lstOptions = null;
+		// 题目选项
+		for (int i = 0; i < itemOptionLst.size(); i++) {
+			option = itemOptionLst.get(i);
+
+			if (i == 0) {// 第一次
+				lstOptions = new ArrayList<ExerciseItemOption>();
+				lstOptions.add(option);
+			} else {// 第二次开始
+				if (lastExerciseId.equals(option.getExerciseItemId())) {// 相同
+					lstOptions.add(option);
+
+				} else {// 不相同
+						// 添加到map
+					itemOptionMap.put(lastExerciseId, lstOptions);
+
+					lstOptions = new ArrayList<ExerciseItemOption>();
+					lstOptions.add(option);
+				}
+			}
+
+			if (i == itemOptionLst.size() - 1) {// 最后一次
+				itemOptionMap.put(option.getExerciseItemId(), lstOptions);
+			}
+
+			// 上一次练习id
+			lastExerciseId = option.getExerciseItemId();
+		}
+	}
+
+	/**
+	 * 重新组装题目选项统计ExerciseOptionStatistics —— 成绩统计
+	 * 
+	 * @param lstAllOptions
+	 * @return
+	 */
+	public static void packageExerciseOptionStatis(List<ExerciseOptionStatistics> claOptionStatisLst,
+			Map<String, Object> optionStatisMap) {
+		// 上一次练习id
+		String lastExerciseId = "";
+		ExerciseOptionStatistics optionSta = null;
+		List<ExerciseOptionStatistics> lstOptionStas = null;
+		// 题目选项
+		for (int i = 0; i < claOptionStatisLst.size(); i++) {
+			optionSta = claOptionStatisLst.get(i);
+
+			if (i == 0) {// 第一次
+				lstOptionStas = new ArrayList<ExerciseOptionStatistics>();
+				lstOptionStas.add(optionSta);
+			} else {// 第二次开始
+				if (lastExerciseId.equals(optionSta.getExerciseItemId())) {// 相同
+					lstOptionStas.add(optionSta);
+
+				} else {// 不相同
+						// 添加到map
+					optionStatisMap.put(lastExerciseId, lstOptionStas);
+
+					lstOptionStas = new ArrayList<ExerciseOptionStatistics>();
+					lstOptionStas.add(optionSta);
+				}
+			}
+
+			if (i == claOptionStatisLst.size() - 1) {// 最后一次
+				optionStatisMap.put(optionSta.getExerciseItemId(), lstOptionStas);
+			}
+
+			// 上一次练习id
+			lastExerciseId = optionSta.getExerciseItemId();
+		}
+	}
+
+	/**
+	 * 获取转换结果
+	 * 
+	 * @param count
+	 * @param allCount
+	 * @return
+	 */
+	public static String getFormatValue(long count, long allCount) {
+		double value = Double.valueOf(count) / Double.valueOf(allCount) * 100;
+
+		return CommonUtils.formatDecimalFormat(value, CommonUtils.PARTEN_ONE);
+	}
+
+	/**
+	 * 获取转换结果
+	 * 
+	 * @param count
+	 * @param allCount
+	 * @return
+	 */
+	public static String getFormatValue(int count, int allCount) {
+		double value = Double.valueOf(count) / Double.valueOf(allCount) * 100;
+
+		return CommonUtils.formatDecimalFormat(value, CommonUtils.PARTEN_ONE);
+	}
+
+	/**
+	 * 设置新增轨迹信息
+	 * 
+	 * @param trace
+	 */
+	public static void setCreateTrace(ITrace trace, Map<String, String> userMap) {
+		trace.setCreateId(userMap.get("userId"));
+		trace.setCreateTime(new Date(System.currentTimeMillis()));
+		trace.setCreator(userMap.get("userName"));
+		trace.setUpdateId(userMap.get("userId"));
+		trace.setUpdateTime(new Date(System.currentTimeMillis()));
+		trace.setUpdator(userMap.get("userName"));
+
+	}
+
+	/**
+	 * 设置更新轨迹信息
+	 * 
+	 * @param trace
+	 */
+	public static void setUpdateTrace(ITrace trace, Map<String, String> userMap) {
+
+		trace.setUpdateId(userMap.get("userId"));
+		trace.setUpdateTime(new Date(System.currentTimeMillis()));
+		trace.setUpdator(userMap.get("userName"));
+
+	}
+
+	/**
+	 * 转换为BigDecimal
+	 * 
+	 * @param str1
+	 * @param str2
+	 * @return
+	 */
+	public static BigDecimal parseStrToBigDecimal(String str1, String str2) {
+
+		return new BigDecimal(
+				CommonUtils.formatDecimalFormat(Double.parseDouble(str1) / Double.parseDouble(str2) * 100, "#.##"));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java b/src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java
new file mode 100644
index 0000000..bd5284f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java
@@ -0,0 +1,191 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.media.dao;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.springframework.orm.hibernate4.HibernateCallback;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.MediaVideoTrans;
+import com.qxueyou.scc.media.model.MediaVideoViewVO;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+import com.qxueyou.scc.school.model.SchReLessonVideo;
+
+
+
+/**
+ * 
+ * @author ody.yuan
+ *
+ */
+@Repository(value="mediaVideoDAO")
+public class MediaVideoDAO extends BaseDAO {
+
+	private Logger log = LogManager.getLogger(MediaVideoDAO.class);
+	
+	/**
+	 *查询错题 收藏对应的练习记录
+	 * @return
+	 * @throws ParseException 
+	 */
+	@SuppressWarnings({ "unchecked"})
+	public List<MediaVideoViewVO> queryMediaVideoList(String hql,List<Object> args){
+        List<MediaVideoViewVO> lstViewVOs = new ArrayList<MediaVideoViewVO>();
+        MediaVideoViewVO viewVO;
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+		try {
+	        for (Object[] obj : lst) {
+	        	viewVO = new MediaVideoViewVO();
+	        	
+	        	viewVO.setVideoId(String.valueOf(obj[0]));
+	        	
+	        	String tempName = String.valueOf(obj[1]);
+	        	if(StringUtils.isNotBlank(tempName) && tempName.indexOf(".") != -1){
+	        		viewVO.setName(tempName.substring(0, tempName.lastIndexOf(".")));
+	        	}else{
+	        		viewVO.setName("");
+	        	}
+	        	
+	        	viewVO.setUrl(String.valueOf(obj[2]));
+	        	viewVO.setOrigUrl(String.valueOf(obj[3]));
+	        	viewVO.setSize( null != obj[4] ? Integer.parseInt(String.valueOf(obj[4])) : 0 );
+	        	viewVO.setPlayTime( null != obj[5] ? Integer.parseInt(String.valueOf(obj[5])) : 0 );
+	        	viewVO.setCoverPageUrl(String.valueOf(obj[6]));
+	        	viewVO.setPlayTimes( null != obj[7] ? Integer.parseInt(String.valueOf(obj[7])) : 0 );
+	        	viewVO.setRemark(String.valueOf(obj[8]));
+	        	viewVO.setFormat(String.valueOf(obj[9]));
+	        	
+	        	viewVO.setTeacherId(String.valueOf(obj[10]));
+	        	viewVO.setTeacherName(String.valueOf(obj[11]));
+	        	
+	        	viewVO.setCacheFlag(false);
+	        	viewVO.setDownloadFlag(false);
+	        	
+	        	lstViewVOs.add(viewVO);
+	        }
+		} catch (Exception e) {
+			log.error("APP视频列表出错:", e);
+		}
+        
+        return lstViewVOs;
+	}
+	
+	/**
+	 * 组装查询转码记录
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<MediaVideoTrans> queryTransItem(String hql,
+			List<Object> args) {
+        List<MediaVideoTrans> lstitems = new ArrayList<MediaVideoTrans>();
+        MediaVideoTrans item;
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	
+        	item = (MediaVideoTrans) obj[0];
+        	item.setOrgName(String.valueOf(obj[1]));
+        	
+        	lstitems.add(item);
+        }
+        
+        return lstitems;
+	}
+	
+	/**
+	 * 组装查询转码记录
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<MediaVideo> queryVideoItem(String hql,List<Object> args) {
+        List<MediaVideo> lstitems = new ArrayList<MediaVideo>();
+        MediaVideo item;
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	
+        	item = (MediaVideo) obj[0];
+        	item.setClassScheduleName(String.valueOf(obj[1]));
+        	item.setClassScheduleId(String.valueOf(obj[2]));
+        	
+        	lstitems.add(item);
+        }
+        
+        return lstitems;
+	}
+	
+	/**
+	 * 组装查询转码记录
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Map<String,SchClassSchedule> queryInitMap(String hql,List<Object> args) {
+		
+		Map<String,SchClassSchedule> result = new HashMap<String,SchClassSchedule>();
+		
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	result.put(String.valueOf(obj[0]), (SchClassSchedule) obj[2]);
+        }
+        
+        return result;
+	}
+	
+	/**
+	 * 组装查询转码记录
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public boolean queryInitDoubleMap(String hql,List<Object> args,Map<SchReLessonVideo,MediaVideo> reMap,Map<SchReLessonVideo,SchClassSchedule> scheMap ) {
+		
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	
+        	reMap.put((SchReLessonVideo) obj[1], (MediaVideo) obj[0]);
+        	scheMap.put((SchReLessonVideo) obj[1], (SchClassSchedule) obj[2]);
+        	
+        }
+        
+        return true;
+	}
+	
+	/**
+	 * 新增视频观看次数
+	 * @param videoId
+	 * @return true 新增成功 false 新增失败
+	 */
+	public boolean addPlayTimes(final String videoId){
+		
+		return getHibernateTemplate().execute(new HibernateCallback<Boolean>(){
+
+			@Override
+			public Boolean doInHibernate(Session session) throws HibernateException {
+				
+				String hql = "update MediaVideo set playTimes = playTimes+1 where videoId=:videoId and deleteFlag is false";
+				Query qry = session.createQuery(hql);
+				qry.setParameter("videoId", videoId);
+				int count = qry.executeUpdate();
+				
+				return count>0;
+			}
+			
+		});
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideo.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideo.java
new file mode 100644
index 0000000..82b7964
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideo.java
@@ -0,0 +1,767 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 视频表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="MEDIA_VIDEO")
+@NamedQuery(name="MediaVideo.findAll", query="SELECT m FROM MediaVideo m")
+public class MediaVideo implements Serializable, ITrace {
+	
+	private static final long serialVersionUID = -1143123781656219900L;
+	
+	public static final String  MEDIA_VIDEO="video";
+	public static final String  MEDIA_AUDIO="audio";
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_ID", unique=true, nullable=false, length=32)
+	private String videoId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  名称 */
+	@Column(name="NAME", length=128)
+	private String name;
+	
+	/**  状态 */
+	@Column(name="STATUS")
+	private short status;
+	
+	/*
+	 * 草稿
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	/*
+	 * 转码中
+	 */
+	public static final short STATUS_TRANSFORMING = 1;
+	
+	/*
+	 * 已发布
+	 */
+	public static final short STATUS_PUBLISHED = 2;
+	
+	/*
+	 * 已下架
+	 */
+	public static final short STATUS_TAKEOFF = 3;
+	
+	/*
+	 * 转码失败
+	 */
+	public static final short STATUS_TRANSFAILED = 4;
+	
+	/*
+	 * 排队中
+	 */
+	public static final short STATUS_LINEUP = 5;
+	
+	/**  url */
+	@Column(name="URL", length=2048)
+	private String url;
+	
+	/**  原始url */
+	@Column(name="ORIG_URL", length=2048)
+	private String origUrl;
+	
+	/**  视频托管供应商 */
+	@Column(name="VIDEO_VENDER", length=50)
+	private String videoVender;
+	
+	/**  视频在托管商的唯一编码 */
+	@Column(name="VIDEO_CODE", length=128)
+	private String videoCode;
+	
+	/**  视频提交人ID */
+	@Column(name="SUBMITOR_ID", nullable=false, length=32)
+	private String submitorId;
+	
+	/**  视频提交人 */
+	@Column(name="SUBMITOR",  length=100)
+	private String submitor;
+	
+	/**  视频大小,单位KB */
+	@Column(name="SIZE")
+	private int size;
+	
+	/**  时长 */
+	@Column(name="PLAY_TIME")
+	private int playTime;
+	
+	/**  原始宽度 */
+	@Column(name="VIDEO_ORIG_WIDTH")
+	private int videoOrigWidth;
+	
+	/**  原始高度 */
+	@Column(name="VIDEO_ORIG_HEIGHT")
+	private int videoOrigHeight;
+	
+	/**  视频格式: AVI,MP4... */
+	@Column(name="FORMAT",length=32)
+	private String format;
+	
+	/**  封面图片URL  */
+	@Column(name="COVER_PAGE_URL",length=218)
+	private String coverPageUrl;
+	
+	/**  播放次数  */
+	@Column(name="PLAY_TIMES")
+	private Integer playTimes;
+	
+	/**  备注详情 */
+	@Column(name="REMARK", length=16777215)
+	private String remark;
+	
+	/**  MP4 高清,安卓使用 */
+	@Column(name="ANDROID_HD")
+	private String androidHD;
+	
+	/**  MP4 标清,安卓使用 */
+	@Column(name="ANDROID_SD")
+	private String androidSD;
+	
+	/**  MP4 流畅,安卓使用 */
+	@Column(name="ANDROID_LD")
+	private String androidLD;
+	
+	/**  M3U8 高清,IOS使用 */
+	@Column(name="IOS_HD")
+	private String iosHD;
+	
+	/**  M3U8 标清,IOS使用 */
+	@Column(name="IOS_SD")
+	private String iosSD;
+	
+	/**  M3U8 流畅,IOS使用 */
+	@Column(name="IOS_LD")
+	private String iosLD;
+	
+	/**  班级ID  */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/**  讲师  */
+	@Column(name="TEACHER_NAME", length=32)
+	private String teacherName;
+	
+	/**  视频原始ID  */
+	@Column(name="ORIGIN_VIDEO_ID", length=32)
+	private String originVideoId;
+	
+	/**  资源ID 高清  */
+	@Column(name="OBJECT_HD")
+	private String objectHd;
+	
+	/**  资源ID 标清  */
+	@Column(name="OBJECT_SD")
+	private String objectSd;
+	
+	/**  资源ID 流畅  */
+	@Column(name="OBJECT_LD")
+	private String objectLd;
+	
+	/**  课程ID */
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	/**  科目ID */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/**  课程名称 */
+	@Column(name="SUBJECT_NAME", length=150)
+	private String subjectName;
+	
+	/** 视频管理 视频管理  班主任排序字段 */
+	@Column(name="VIDEO_ORDER")
+	private Integer videoOrder;
+	
+	/**  有效期开始日期*/
+	@Column(name="START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	/**  有效期结束日期 */
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+	
+	/**  有效期 */
+	@Column(name="VALIDITY", length=32)
+	private String validity;
+	
+	/** 密钥 */
+	@Column(name="SECRET_KEY")
+	private String secretKey;
+	
+	/** md5 */
+	@Column(name="md5")
+	private String md5;
+
+	/** md5 */
+	@Column(name="mp4_hd_md5")
+	private String mp4HdMd5;
+
+	/** md5 */
+	@Column(name="mp4_sd_md5")
+	private String mp4SdMd5;
+
+	/** md5 */
+	@Column(name="mp4_ld_md5")
+	private String mp4LdMd5;
+	
+	/**  M3U8解密文件key的OSS键 */
+	@Column(name="m3u8_key_path")
+	private String m3u8KeyPath;
+
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+	
+	@Transient
+	private String classScheduleId ;
+	
+	/*自定义名称*/
+	@Transient
+	private String definedName;
+	
+	@Transient
+	private String classScheduleName ;
+	
+	//视频来源(直播)
+	@Transient
+	private String videoSource;
+	
+
+	//课件学分
+	@Transient
+	private BigDecimal score;
+	
+	/**  类型:视频,音频 */
+	private String type;
+	
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getDefinedName() {
+		return definedName;
+	}
+
+	public void setDefinedName(String definedName) {
+		this.definedName = definedName;
+	}
+
+	public String getVideoSource() {
+		return videoSource;
+	}
+
+	public void setVideoSource(String videoSource) {
+		this.videoSource = videoSource;
+	}
+	
+	
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+	
+	public String getMd5() {
+		return md5;
+	}
+
+	public void setMd5(String md5) {
+		this.md5 = md5;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getVideoVender() {
+		return videoVender;
+	}
+
+	public void setVideoVender(String videoVender) {
+		this.videoVender = videoVender;
+	}
+
+	public String getVideoCode() {
+		return videoCode;
+	}
+
+	public void setVideoCode(String videoCode) {
+		this.videoCode = videoCode;
+	}
+
+	public String getSubmitorId() {
+		return submitorId;
+	}
+
+	public void setSubmitorId(String submitorId) {
+		this.submitorId = submitorId;
+	}
+
+	public String getSubmitor() {
+		return submitor;
+	}
+
+	public void setSubmitor(String submitor) {
+		this.submitor = submitor;
+	}
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	public int getVideoOrigWidth() {
+		return videoOrigWidth;
+	}
+
+	public void setVideoOrigWidth(int videoOrigWidth) {
+		this.videoOrigWidth = videoOrigWidth;
+	}
+
+	public int getVideoOrigHeight() {
+		return videoOrigHeight;
+	}
+
+	public void setVideoOrigHeight(int videoOrigHeight) {
+		this.videoOrigHeight = videoOrigHeight;
+	}
+
+	public String getFormat() {
+		return format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	public String getOrigUrl() {
+		return origUrl;
+	}
+
+	public void setOrigUrl(String origUrl) {
+		this.origUrl = origUrl;
+	}
+
+	public int getPlayTime() {
+		return playTime;
+	}
+
+	public void setPlayTime(int playTime) {
+		this.playTime = playTime;
+	}
+	
+	public String getPlayTimeFormat() {
+		
+		int hours = playTime/3600;
+		
+		int minutes = (playTime%3600)/60;
+		
+		int seconds = playTime%60;
+		
+		StringBuffer sb = new StringBuffer();
+		
+		if(hours>0){
+			sb.append(String.valueOf(hours)).append('时');
+		}
+		if(minutes>0){
+			sb.append(String.valueOf(minutes)).append('分');
+		}
+		sb.append(String.valueOf(seconds)).append('秒');
+		
+		return sb.toString();
+	}
+
+	public Integer getPlayTimes() {
+		return playTimes;
+	}
+
+	public void setPlayTimes(Integer playTimes) {
+		this.playTimes = playTimes;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getAndroidHD() {
+		return androidHD;
+	}
+
+	public void setAndroidHD(String androidHD) {
+		this.androidHD = androidHD;
+	}
+
+	public String getAndroidSD() {
+		return androidSD;
+	}
+
+	public void setAndroidSD(String androidSD) {
+		this.androidSD = androidSD;
+	}
+
+	public String getAndroidLD() {
+		return androidLD;
+	}
+
+	public void setAndroidLD(String androidLD) {
+		this.androidLD = androidLD;
+	}
+
+	public String getIosHD() {
+		return iosHD;
+	}
+
+	public void setIosHD(String iosHD) {
+		this.iosHD = iosHD;
+	}
+
+	public String getIosSD() {
+		return iosSD;
+	}
+
+	public void setIosSD(String iosSD) {
+		this.iosSD = iosSD;
+	}
+
+	public String getIosLD() {
+		return iosLD;
+	}
+
+	public void setIosLD(String iosLD) {
+		this.iosLD = iosLD;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public String getOriginVideoId() {
+		return originVideoId;
+	}
+
+	public void setOriginVideoId(String originVideoId) {
+		this.originVideoId = originVideoId;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public String getClassScheduleName() {
+		return classScheduleName;
+	}
+
+	public void setClassScheduleName(String classScheduleName) {
+		this.classScheduleName = classScheduleName;
+	}
+
+	public String getObjectHd() {
+		return objectHd;
+	}
+
+	public void setObjectHd(String objectHd) {
+		this.objectHd = objectHd;
+	}
+
+	public String getObjectSd() {
+		return objectSd;
+	}
+
+	public void setObjectSd(String objectSd) {
+		this.objectSd = objectSd;
+	}
+
+	public String getObjectLd() {
+		return objectLd;
+	}
+
+	public void setObjectLd(String objectLd) {
+		this.objectLd = objectLd;
+	}
+
+	
+
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public Integer getVideoOrder() {
+		return videoOrder;
+	}
+
+	public void setVideoOrder(Integer videoOrder) {
+		this.videoOrder = videoOrder;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getValidity() {
+		return validity;
+	}
+
+	public void setValidity(String validity) {
+		this.validity = validity;
+	}
+	
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getSecretKey() {
+		return secretKey;
+	}
+
+	public void setSecretKey(String secretKey) {
+		this.secretKey = secretKey;
+	}
+
+	public String getMp4HdMd5() {
+		return mp4HdMd5;
+	}
+
+	public void setMp4HdMd5(String mp4HdMd5) {
+		this.mp4HdMd5 = mp4HdMd5;
+	}
+
+	public String getMp4SdMd5() {
+		return mp4SdMd5;
+	}
+
+	public void setMp4SdMd5(String mp4SdMd5) {
+		this.mp4SdMd5 = mp4SdMd5;
+	}
+
+	public String getMp4LdMd5() {
+		return mp4LdMd5;
+	}
+
+	public void setMp4LdMd5(String mp4LdMd5) {
+		this.mp4LdMd5 = mp4LdMd5;
+	}
+
+	public String getM3u8KeyPath() {
+		return m3u8KeyPath;
+	}
+
+	public void setM3u8KeyPath(String m3u8KeyPath) {
+		this.m3u8KeyPath = m3u8KeyPath;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java
new file mode 100644
index 0000000..57bd80b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java
@@ -0,0 +1,294 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 视频-用户缓存表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="MEDIA_VIDEO_CACHE")
+@NamedQuery(name="MediaVideoCache.findAll", query="SELECT m FROM MediaVideoCache m")
+public class MediaVideoCache implements Serializable, ITrace {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2669435870254829526L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CACHE_ID", unique=true, nullable=false, length=32)
+	private String cacheId;
+	
+	/**  缓冲的视频ID */
+	@Column(name="VIDEO_ID", length=32)
+	private String videoId;
+	
+	/**  缓冲视频用户ID */
+	@Column(name="CACHED_USER_ID", nullable=false, length=32)
+	private String cachedUserId;
+	
+	/**  缓冲时长 */
+	@Column(name="CACHED_TIME")
+	private int cachedTime;
+	
+	/**  缓冲完成时间 */
+	@Column(name="SUBMIT_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date submitTime;
+	
+	/**  缓冲成功标志 */
+	@Column(name="CACHED_FLAG")
+	private boolean cachedFlag;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/**  班级ID */
+	@Column(name="CLASS_ID",length=32)
+	private String classId;
+	
+	/**  网络 */
+	@Column(name="NETWORK",length=15)
+	private String network;
+	
+	/**  平台 */
+	@Column(name="PLATFORM",length=15)
+	private String platform;
+	
+	/**  版本 */
+	@Column(name="VERSION",length=15)
+	private String version;
+	
+	/**  机型 */
+	@Column(name="model",length=15)
+	private String model;
+	
+	/**  app版本 */
+	@Column(name="APP_VERSION",length=15)
+	private String appVersion;
+	
+	/**  运营商 */
+	@Column(name="OPERATOR",length=15)
+	private String operator;
+
+	public String getCacheId() {
+		return cacheId;
+	}
+
+	public void setCacheId(String cacheId) {
+		this.cacheId = cacheId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getCachedUserId() {
+		return cachedUserId;
+	}
+
+	public void setCachedUserId(String cachedUserId) {
+		this.cachedUserId = cachedUserId;
+	}
+
+	public int getCachedTime() {
+		return cachedTime;
+	}
+
+	public void setCachedTime(int cachedTime) {
+		this.cachedTime = cachedTime;
+	}
+
+	public boolean getCachedFlag() {
+		return cachedFlag;
+	}
+
+	public void setCachedFlag(boolean cachedFlag) {
+		this.cachedFlag = cachedFlag;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getNetwork() {
+		return network;
+	}
+
+	public void setNetwork(String network) {
+		this.network = network;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getAppVersion() {
+		return appVersion;
+	}
+
+	public void setAppVersion(String appVersion) {
+		this.appVersion = appVersion;
+	}
+
+	public String getOperator() {
+		return operator;
+	}
+
+	public void setOperator(String operator) {
+		this.operator = operator;
+	}
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java
new file mode 100644
index 0000000..a9629f9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java
@@ -0,0 +1,182 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+@Entity
+@Table(name="media_video_re_course")
+public class MediaVideoReCourse implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_RE_COURSE_ID", unique=true, nullable=false, length=32)
+	private String videoReCourseId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  科目ID */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/**  视频ID  */
+	@Column(name="VIDEO_ID", length=32)
+	private String videoId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/** 课件管理 视频管理  中的视频排序,视频拷贝关联,排序字段在关联表中 */
+	@Column(name="VIDEO_ORDER")
+	private Integer videoOrder;
+
+	public String getVideoReCourseId() {
+		return videoReCourseId;
+	}
+
+	public void setVideoReCourseId(String videoReCourseId) {
+		this.videoReCourseId = videoReCourseId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public Integer getVideoOrder() {
+		return videoOrder;
+	}
+
+	public void setVideoOrder(Integer videoOrder) {
+		this.videoOrder = videoOrder;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java
new file mode 100644
index 0000000..f744f1b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java
@@ -0,0 +1,301 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="MEDIA_VIDEO_RECORD")
+public class MediaVideoRecord implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_RECORD_ID", unique=true, nullable=false, length=32)
+	private String videoRecordId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/**  班级ID */
+	@Column(name="CLASS_ID",length=32)
+	private String classId;
+	
+	/**  视频ID */
+	@Column(name="VIDEO_ID",length=32)
+	private String videoId;
+	
+	/**  用户ID */
+	@Column(name="USER_ID",length=32)
+	private String userId;
+	
+	/**  视频时长 */
+	@Column(name="VIDEO_TIME",length=11)
+	private Integer videoTime;
+	/**  观看进度 (观看视频的进度) */
+	@Column(name="WATCH_TIME",length=11)
+	private Integer watchTime;
+	
+	/** 离开时间 */
+	@Column(name="LEAVE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date leaveTime;
+	
+	/** 播放时间()*/
+	@Column(name="PLAY_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date playTime;
+	
+	/**  网络 */
+	@Column(name="NETWORK",length=15)
+	private String network;
+	
+	/**  平台 */
+	@Column(name="PLATFORM",length=15)
+	private String platform;
+	
+	/**  版本 */
+	@Column(name="VERSION",length=15)
+	private String version;
+	
+	/**  机型 */
+	@Column(name="model",length=15)
+	private String model;
+	
+	/**  app版本 */
+	@Column(name="APP_VERSION",length=15)
+	private String appVersion;
+	
+	/**  运营商 */
+	@Column(name="OPERATOR",length=15)
+	private String operator;
+
+	public String getVideoRecordId() {
+		return videoRecordId;
+	}
+
+	public void setVideoRecordId(String videoRecordId) {
+		this.videoRecordId = videoRecordId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public Integer getVideoTime() {
+		return videoTime;
+	}
+
+	public void setVideoTime(Integer videoTime) {
+		this.videoTime = videoTime;
+	}
+
+	public Integer getWatchTime() {
+		return watchTime;
+	}
+
+	public void setWatchTime(Integer watchTime) {
+		this.watchTime = watchTime;
+	}
+
+
+
+	public Date getLeaveTime() {
+		return leaveTime;
+	}
+
+	public void setLeaveTime(Date leaveTime) {
+		this.leaveTime = leaveTime;
+	}
+
+	public Date getPlayTime() {
+		return playTime;
+	}
+
+	public void setPlayTime(Date playTime) {
+		this.playTime = playTime;
+	}
+
+	public String getNetwork() {
+		return network;
+	}
+
+	public void setNetwork(String network) {
+		this.network = network;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getAppVersion() {
+		return appVersion;
+	}
+
+	public void setAppVersion(String appVersion) {
+		this.appVersion = appVersion;
+	}
+
+	public String getOperator() {
+		return operator;
+	}
+
+	public void setOperator(String operator) {
+		this.operator = operator;
+	}
+	
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java
new file mode 100644
index 0000000..33d4434
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java
@@ -0,0 +1,229 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+@Entity
+@Table(name="media_vedio_statistic")
+public class MediaVideoStatistic implements Serializable, ITrace {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_STATISTIC_ID", unique=true, nullable=false, length=32)
+	private String videoStatisticId;
+	
+	/**上次播放的位置*/
+	@Column(name="VIDEO_LAST_TIME")
+	private Integer videoLastTime ;
+	
+	/** vedioID */
+	@Column(name="VIDEO_ID", length=32)
+	private String videoId;
+	
+	/** vedioName */
+	@Column(name="VIDEO_NAME", length=255)
+	private String videoName;
+	
+	/** userID */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** userName */
+	@Column(name="USER_NAME", length=255)
+	private String userName;
+	
+	/** COMP_DEGREE */
+	@Column(name="COMP_DEGREE", length=4)
+	private BigDecimal compDegree;
+	
+	/** classID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name = "DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Transient
+	private String degree;
+	
+	
+
+	public String getDegree() {
+		return degree;
+	}
+
+	public void setDegree(String degree) {
+		this.degree = degree;
+	}
+
+	public String getVideoStatisticId() {
+		return videoStatisticId;
+	}
+
+	public void setVideoStatisticId(String videoStatisticId) {
+		this.videoStatisticId = videoStatisticId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getVideoName() {
+		return videoName;
+	}
+
+	public void setVideoName(String videoName) {
+		this.videoName = videoName;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public BigDecimal getCompDegree() {
+		if(compDegree != null && compDegree.compareTo(BigDecimal.ONE) == 1){
+			return BigDecimal.ONE;
+		}
+		return compDegree;
+	}
+
+	public void setCompDegree(BigDecimal compDegree) {
+		this.compDegree = compDegree;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Integer getVideoLastTime() {
+		return videoLastTime;
+	}
+
+	public void setVideoLastTime(Integer videoLastTime) {
+		this.videoLastTime = videoLastTime;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java
new file mode 100644
index 0000000..ab15366
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java
@@ -0,0 +1,389 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 视频转码表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="MEDIA_VIDEO_TRANS")
+@NamedQuery(name="MediaVideoTrans.findAll", query="SELECT m FROM MediaVideoTrans m")
+public class MediaVideoTrans implements Serializable, ITrace {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/** 1.上传oss服务器    2.下载到转码服务器   3.截图成功   4.转码MP4成功    5.转码M3U8成功      6.转码结果失败   7.转码结果成功  */
+	public static final Integer TRANS_PROCESS_UPLOAD_SUCCESS = 1 ;
+	
+	public static final Integer TRANS_PROCESS_DOWNLOAD_SUCCESS = 2 ;
+	
+	public static final Integer TRANS_PROCESS_SNAPSHOT_SUCCESS = 3 ;
+	
+	public static final Integer TRANS_PROCESS_MP4_SUCCESS = 4 ;
+	
+	public static final Integer TRANS_PROCESS_M3U8_SUCCESS = 5 ;
+	
+	public static final Integer TRANS_PROCESS_RESULT_FAIL = 6 ;
+	
+	public static final Integer TRANS_PROCESS_RESULT_SUCCESS = 7 ;
+	
+	public static final Short TRANS_RESULT_FAIL = 1 ;
+	
+	public static final Short TRANS_RESULT_SUCCESS = 2 ;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_TRANSCODE_ID", unique=true, nullable=false, length=32)
+	private String videoTranscodeId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**  班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/**  视频ID */
+	@Column(name="VIDEO_ID", length=32)
+	private String videoId;
+	
+	/**  视频名称 */
+	@Column(name="VIDEO_NAME", length=255)
+	private String videoName;
+	
+	/**  视频名称 */
+	@Column(name="UPLOAD_SERVER", length=64)
+	private String uploadServer;
+	
+	/**  视频名称 */
+	@Column(name="TRANS_SERVER", length=64)
+	private String transServer;
+	
+	/**  进度 */
+	@Column(name="PROCESS")
+	private Integer process;
+	
+	/**  备注 */
+	@Column(name="REMARK")
+	private String remark;
+	
+	/**  上传成功时间 */
+	@Column(name="UPLOAD_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date uploadTime;
+	
+	/**  下载成功时间 */
+	@Column(name="DOWNLOAD_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date downloadTime;
+	
+	/**  获取媒体信息成功时间 */
+	@Column(name="MEDIA_INFO_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date mediaInfoTime;
+	
+	/**  截图成功时间 */
+	@Column(name="SNAPSHOT_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date snapshotTime;
+	
+	/**  转mp4成功时间 */
+	@Column(name="ANDROID_SD_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date androidSdTime;
+	
+	/**  转m3u8成功时间 */
+	@Column(name="IOS_SD_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date iosSdTime;
+	
+	/**  最后一次操作结束时间  */
+	@Column(name="RESULT_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date resultTime;
+	
+	/**  最后一次操作结果  */
+	@Column(name="RESULT")
+	private short result;
+	
+	/**  操作次数  */
+	@Column(name="TRANS_TIMES")
+	private short transTimes;
+	
+	@Transient
+	private String orgName ;
+	
+	@Transient
+	private String className ;
+
+	public String getVideoTranscodeId() {
+		return videoTranscodeId;
+	}
+
+	public void setVideoTranscodeId(String videoTranscodeId) {
+		this.videoTranscodeId = videoTranscodeId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getVideoName() {
+		return videoName;
+	}
+
+	public void setVideoName(String videoName) {
+		this.videoName = videoName;
+	}
+
+	public String getUploadServer() {
+		return uploadServer;
+	}
+
+	public void setUploadServer(String uploadServer) {
+		this.uploadServer = uploadServer;
+	}
+
+	public String getTransServer() {
+		return transServer;
+	}
+
+	public void setTransServer(String transServer) {
+		this.transServer = transServer;
+	}
+
+	public Integer getProcess() {
+		return process;
+	}
+
+	public void setProcess(Integer process) {
+		this.process = process;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public Date getUploadTime() {
+		return uploadTime;
+	}
+
+	public void setUploadTime(Date uploadTime) {
+		this.uploadTime = uploadTime;
+	}
+
+	public Date getDownloadTime() {
+		return downloadTime;
+	}
+
+	public void setDownloadTime(Date downloadTime) {
+		this.downloadTime = downloadTime;
+	}
+
+	public Date getMediaInfoTime() {
+		return mediaInfoTime;
+	}
+
+	public void setMediaInfoTime(Date mediaInfoTime) {
+		this.mediaInfoTime = mediaInfoTime;
+	}
+
+	public Date getSnapshotTime() {
+		return snapshotTime;
+	}
+
+	public void setSnapshotTime(Date snapshotTime) {
+		this.snapshotTime = snapshotTime;
+	}
+
+	public Date getAndroidSdTime() {
+		return androidSdTime;
+	}
+
+	public void setAndroidSdTime(Date androidSdTime) {
+		this.androidSdTime = androidSdTime;
+	}
+
+	public Date getIosSdTime() {
+		return iosSdTime;
+	}
+
+	public void setIosSdTime(Date iosSdTime) {
+		this.iosSdTime = iosSdTime;
+	}
+
+	public Date getResultTime() {
+		return resultTime;
+	}
+
+	public void setResultTime(Date resultTime) {
+		this.resultTime = resultTime;
+	}
+
+	public short getResult() {
+		return result;
+	}
+
+	public void setResult(short result) {
+		this.result = result;
+	}
+
+	public short getTransTimes() {
+		return transTimes;
+	}
+
+	public void setTransTimes(short transTimes) {
+		this.transTimes = transTimes;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java b/src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java
new file mode 100644
index 0000000..e3e9ce5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java
@@ -0,0 +1,524 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 提供给App端的视频信息   封装类
+ * @author ody.yuan
+ *
+ */
+public class MediaVideoViewVO implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5942057185153392368L;
+
+	/**  主键 */
+	private String videoId;
+	
+	/**  名称 */
+	private String name;
+	
+	/**  url */
+	private String url;
+	
+	/**  origUrl */
+	private String origUrl;
+	
+	/**  视频大小,单位KB */
+	private int size;
+	
+	/**  视频格式: AVI,MP4... */
+	private String format;
+	
+	/**  时长 */
+	private int playTime;
+	
+	/**  封面图片URL  */
+	private String coverPageUrl;
+	
+	/**  播放次数 */
+	private Integer playTimes;
+	
+	/**  评分*/
+	@Deprecated
+	private BigDecimal score;
+	
+	/**  是否缓存 */
+	private boolean cacheFlag;
+	
+	/**  是否下载 */
+	private boolean downloadFlag;
+	
+	/**  讲师ID */
+	private String teacherId;
+	
+	/**  讲师名称 */
+	private String teacherName;
+	
+	/**  描述 */
+	private String remark ;
+	
+	/**  MP4 高清,安卓使用 */
+	private String androidHD;
+	
+	/**  MP4 标清,安卓使用 */
+	private String androidSD;
+	
+	/**  MP4 流畅,安卓使用 */
+	private String androidLD;
+	
+	/**  M3U8 高清,IOS使用 */
+	private String iosHD;
+	
+	/**  M3U8 标清,IOS使用 */
+	private String iosSD;
+	
+	/**  M3U8 流畅,IOS使用 */
+	private String iosLD;
+	
+	/**  资源ID 高清  */
+	private String objectHd;
+	
+	/**  资源ID 标清  */
+	private String objectSd;
+	
+	/**  资源ID 流畅  */
+	private String objectLd;
+
+	/**  是否有资源ID*/
+	private boolean objectFlag;
+	
+	/**  视频完成度*/
+	private BigDecimal compDegree;
+	
+	/** 视频创建时间 */
+	private Object createTime;
+	
+	/** 视频更新时间 */
+	private Object updateTime;
+	
+	/**  课程ID */
+	private String subjectId;
+	
+	/**  课程名称 */
+	private String subjectName;
+	
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Object getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Object updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the videoCreateTime
+	 */
+	public Object getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param videoCreateTime the videoCreateTime to set
+	 */
+	public void setCreateTime(Object createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public BigDecimal getCompDegree() {
+		return compDegree;
+	}
+	
+	/**
+	 * @param compDegree the compDegree to set
+	 */
+	public void setCompDegree(BigDecimal compDegree) {
+		this.compDegree = compDegree;
+	}
+	
+	/**
+	 * @return the videoId
+	 */
+	public String getVideoId() {
+		return videoId;
+	}
+
+	/**
+	 * @param videoId the videoId to set
+	 */
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the url
+	 */
+	public String getUrl() {
+		return url;
+	}
+
+	/**
+	 * @param url the url to set
+	 */
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	/**
+	 * @return the origUrl
+	 */
+	public String getOrigUrl() {
+		return origUrl;
+	}
+
+	/**
+	 * @param origUrl the origUrl to set
+	 */
+	public void setOrigUrl(String origUrl) {
+		this.origUrl = origUrl;
+	}
+
+	/**
+	 * @return the size
+	 */
+	public int getSize() {
+		return size;
+	}
+
+	/**
+	 * @param size the size to set
+	 */
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	/**
+	 * @return the format
+	 */
+	public String getFormat() {
+		return format;
+	}
+
+	/**
+	 * @param format the format to set
+	 */
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	/**
+	 * @return the playTime
+	 */
+	public int getPlayTime() {
+		return playTime;
+	}
+
+	/**
+	 * @param playTime the playTime to set
+	 */
+	public void setPlayTime(int playTime) {
+		this.playTime = playTime;
+	}
+
+	/**
+	 * @return the coverPageUrl
+	 */
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	/**
+	 * @param coverPageUrl the coverPageUrl to set
+	 */
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	/**
+	 * @return the playTimes
+	 */
+	public Integer getPlayTimes() {
+		return playTimes;
+	}
+
+	/**
+	 * @param playTimes the playTimes to set
+	 */
+	public void setPlayTimes(Integer playTimes) {
+		this.playTimes = playTimes;
+	}
+
+	/**
+	 * @return the score
+	 */
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	/**
+	 * @param score the score to set
+	 */
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	/**
+	 * @return the cacheFlag
+	 */
+	public boolean isCacheFlag() {
+		return cacheFlag;
+	}
+
+	/**
+	 * @param cacheFlag the cacheFlag to set
+	 */
+	public void setCacheFlag(boolean cacheFlag) {
+		this.cacheFlag = cacheFlag;
+	}
+
+	/**
+	 * @return the downloadFlag
+	 */
+	public boolean isDownloadFlag() {
+		return downloadFlag;
+	}
+
+	/**
+	 * @param downloadFlag the downloadFlag to set
+	 */
+	public void setDownloadFlag(boolean downloadFlag) {
+		this.downloadFlag = downloadFlag;
+	}
+
+	/**
+	 * @return the teacherId
+	 */
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	/**
+	 * @param teacherId the teacherId to set
+	 */
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	/**
+	 * @return the teacherName
+	 */
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	/**
+	 * @param teacherName the teacherName to set
+	 */
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	/**
+	 * @return the remark
+	 */
+	public String getRemark() {
+		return remark;
+	}
+
+	/**
+	 * @param remark the remark to set
+	 */
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	/**
+	 * @return the androidHD
+	 */
+	public String getAndroidHD() {
+		return androidHD;
+	}
+
+	/**
+	 * @param androidHD the androidHD to set
+	 */
+	public void setAndroidHD(String androidHD) {
+		this.androidHD = androidHD;
+	}
+
+	/**
+	 * @return the androidSD
+	 */
+	public String getAndroidSD() {
+		return androidSD;
+	}
+
+	/**
+	 * @param androidSD the androidSD to set
+	 */
+	public void setAndroidSD(String androidSD) {
+		this.androidSD = androidSD;
+	}
+
+	/**
+	 * @return the androidLD
+	 */
+	public String getAndroidLD() {
+		return androidLD;
+	}
+
+	/**
+	 * @param androidLD the androidLD to set
+	 */
+	public void setAndroidLD(String androidLD) {
+		this.androidLD = androidLD;
+	}
+
+	/**
+	 * @return the iosHD
+	 */
+	public String getIosHD() {
+		return iosHD;
+	}
+
+	/**
+	 * @param iosHD the iosHD to set
+	 */
+	public void setIosHD(String iosHD) {
+		this.iosHD = iosHD;
+	}
+
+	/**
+	 * @return the iosSD
+	 */
+	public String getIosSD() {
+		return iosSD;
+	}
+
+	/**
+	 * @param iosSD the iosSD to set
+	 */
+	public void setIosSD(String iosSD) {
+		this.iosSD = iosSD;
+	}
+
+	/**
+	 * @return the iosLD
+	 */
+	public String getIosLD() {
+		return iosLD;
+	}
+
+	/**
+	 * @param iosLD the iosLD to set
+	 */
+	public void setIosLD(String iosLD) {
+		this.iosLD = iosLD;
+	}
+
+	/**
+	 * @return the objectHd
+	 */
+	public String getObjectHd() {
+		return objectHd;
+	}
+
+	/**
+	 * @param objectHd the objectHd to set
+	 */
+	public void setObjectHd(String objectHd) {
+		this.objectHd = objectHd;
+	}
+
+	/**
+	 * @return the objectSd
+	 */
+	public String getObjectSd() {
+		return objectSd;
+	}
+
+	/**
+	 * @param objectSd the objectSd to set
+	 */
+	public void setObjectSd(String objectSd) {
+		this.objectSd = objectSd;
+	}
+
+	/**
+	 * @return the objectLd
+	 */
+	public String getObjectLd() {
+		return objectLd;
+	}
+
+	/**
+	 * @param objectLd the objectLd to set
+	 */
+	public void setObjectLd(String objectLd) {
+		this.objectLd = objectLd;
+	}
+
+	/**
+	 * @return the objectFlag
+	 */
+	public boolean isObjectFlag() {
+		return objectFlag;
+	}
+
+	/**
+	 * @param objectFlag the objectFlag to set
+	 */
+	public void setObjectFlag(boolean objectFlag) {
+		this.objectFlag = objectFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java b/src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java
new file mode 100644
index 0000000..83c2a5c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java
@@ -0,0 +1,205 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 直播-视频关系表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_LIVE_RE_VIDEO")
+public class SchLiveReVideo implements Serializable,ITrace {
+
+	private static final long serialVersionUID = -2045122427393134676L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  直播ID  */
+	@Column(name="LIVE_VIDEO_ID", length=32)
+	private String liveVideoId;
+	
+	/**  关联片段id  */
+	@Column(name="OBJECT_ID", length=32)
+	private String objectId;
+	
+	/**  关联片段type  */
+	@Column(name="OBJECT_TYPE", length=32)
+	private String objectType;
+
+	/**  视频ID  */
+	@Column(name="VIDEO_ID", length=32)
+	private String videoId;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "VIDEO_LIVE_ID",referencedColumnName="VIDEO_LIVE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private MediaVideoLive videoLive;
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public String getObjectId() {
+		return objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	public String getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(String objectType) {
+		this.objectType = objectType;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getLiveVideoId() {
+		return liveVideoId;
+	}
+
+	public void setLiveVideoId(String liveVideoId) {
+		this.liveVideoId = liveVideoId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public MediaVideoLive getVideoLive() {
+		return videoLive;
+	}
+
+	public void setVideoLive(MediaVideoLive videoLive) {
+		this.videoLive = videoLive;
+	}
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java b/src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java
new file mode 100644
index 0000000..46d7d6d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java
@@ -0,0 +1,178 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+
+/**
+ * 视频表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="VIDEO_CONVER_TASK")
+@NamedQuery(name="VideoConverTask.findAll", query="SELECT v FROM VideoConverTask v")
+public class VideoConverTask implements Serializable {
+	
+	private static final long serialVersionUID = -1143123781656219900L;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="TASK_ID", unique=true, nullable=false, length=32)
+	private String taskId;
+	
+	/**  视频ID */
+	@Column(name="VIDEO_ID")
+	private String videoId;
+	
+	/**  视频ID */
+	@Column(name="VIDEO_URL")
+	private String videoUrl;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  视频ID */
+	@Column(name="NEED_SNAPSHOT")
+	private Integer needSnapshot;
+	
+	/**  转码 */
+	@Column(name="CONVER_LD_LOCK")
+	private Integer converLdLock;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  优先级 */
+	@Column(name="PRIORITY")
+	private Integer priority;
+	
+	/**  类型:视频,音频 */
+	private String type;
+	
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public Integer getConverLdLock() {
+		return converLdLock;
+	}
+
+	public void setConverLdLock(Integer converLdLock) {
+		this.converLdLock = converLdLock;
+	}
+
+	public boolean isDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the taskId
+	 */
+	public String getTaskId() {
+		return taskId;
+	}
+
+	/**
+	 * @param taskId the taskId to set
+	 */
+	public void setTaskId(String taskId) {
+		this.taskId = taskId;
+	}
+
+	/**
+	 * @return the videoId
+	 */
+	public String getVideoId() {
+		return videoId;
+	}
+
+	/**
+	 * @param videoId the videoId to set
+	 */
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	/**
+	 * @return the videoUrl
+	 */
+	public String getVideoUrl() {
+		return videoUrl;
+	}
+
+	/**
+	 * @param videoUrl the videoUrl to set
+	 */
+	public void setVideoUrl(String videoUrl) {
+		this.videoUrl = videoUrl;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the needSnapshot
+	 */
+	public Integer getNeedSnapshot() {
+		return needSnapshot;
+	}
+
+	/**
+	 * @param needSnapshot the needSnapshot to set
+	 */
+	public void setNeedSnapshot(Integer needSnapshot) {
+		this.needSnapshot = needSnapshot;
+	}
+
+	/**
+	 * @return the priority
+	 */
+	public Integer getPriority() {
+		return priority;
+	}
+
+	/**
+	 * @param priority the priority to set
+	 */
+	public void setPriority(Integer priority) {
+		this.priority = priority;
+	}
+
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/media/model/VideoInf.java b/src/main/java/com/qxueyou/scc/media/model/VideoInf.java
new file mode 100644
index 0000000..bed84ef
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/VideoInf.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.media.model;
+
+/**
+ * 视频信息
+ * @author ody.yuan
+ *
+ */
+public class VideoInf {
+
+	/** 格式  */
+	String format;
+
+	/** 文件大小 字节  */
+	long size;
+
+	/** 播放时长 微秒  */
+	long duration;
+
+	/** 高度  */
+	int height;
+
+	/**  宽度  */
+	int width;
+
+	float frameRate;
+
+	int bitRate;
+
+	public String getFormat() {
+		return format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	public long getSize() {
+		return size;
+	}
+
+	public void setSize(long size) {
+		this.size = size;
+	}
+
+	public long getDuration() {
+		return duration;
+	}
+
+	public void setDuration(long duration) {
+		this.duration = duration;
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public float getFrameRate() {
+		return frameRate;
+	}
+
+	public void setFrameRate(float frameRate) {
+		this.frameRate = frameRate;
+	}
+
+	public int getBitRate() {
+		return bitRate;
+	}
+
+	public void setBitRate(int bitRate) {
+		this.bitRate = bitRate;
+	}
+
+	public String toString() {
+		return "format:" + format + "\n" + "size:" + size + "\n" + "duration:"
+				+ duration + "\n" + "height:" + height + "\n" + "width:"
+				+ width + "\n" + "frameRate:" + frameRate + "\n" + "bitRate:"
+				+ bitRate + "\n";
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java b/src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java
new file mode 100644
index 0000000..f3d4889
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java
@@ -0,0 +1,263 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 视频直播互动表(聊天室)  实体
+ * @author Delin
+ *
+ */
+/**
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="video_live_chatroom")
+public class VideoLiveChatroom implements Serializable, ITrace {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7855625613240090523L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CHATROOM_ID", unique=true, nullable=false, length=32)
+	private String chatroomId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  聊天室名称  */
+	@Column(name="NAME", length=128)
+	private String name;
+	
+	/**  聊天室描述 */
+	@Column(name="DESCRIPTION", length=225)
+	private String description;
+
+	/**  聊天室成员上限   */
+	@Column(name="MAXUSERS")
+	private Integer maxusers;
+	
+	/**  现有成员总数  */
+	@Column(name="AFFILIATIONS_COUNT")
+	private Integer affiliationsCount;
+	
+	/** 聊天室创建者的 username  */
+	@Column(name="OWNER", length=128)
+	private String owner;
+	
+	/** 聊天室创建者ID  */
+	@Column(name="OWNER_ID", length=128)
+	private String ownerId;
+	
+	/** 聊天室成员的 username  */
+	@Column(name="MEMBER", length=128)
+	private String member;
+	
+	/** 聊天室ID  */
+	@Column(name="ROOM_ID", length=128)
+	private String roomId;
+	
+	/** 直播ID   */
+	@Column(name="VIDEO_LIVE_ID", length=128)
+	private String videoLiveId;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "VIDEO_LIVE_ID",referencedColumnName="VIDEO_LIVE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private MediaVideoLive mediaVideoLive;
+	
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getChatroomId() {
+		return chatroomId;
+	}
+
+	public void setChatroomId(String chatroomId) {
+		this.chatroomId = chatroomId;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Integer getMaxusers() {
+		return maxusers;
+	}
+
+	public void setMaxusers(Integer maxusers) {
+		this.maxusers = maxusers;
+	}
+
+	public Integer getAffiliationsCount() {
+		return affiliationsCount;
+	}
+
+	public void setAffiliationsCount(Integer affiliationsCount) {
+		this.affiliationsCount = affiliationsCount;
+	}
+
+	public String getOwner() {
+		return owner;
+	}
+
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+
+	public String getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(String ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public String getMember() {
+		return member;
+	}
+
+	public void setMember(String member) {
+		this.member = member;
+	}
+
+	public String getVideoLiveId() {
+		return videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+	public MediaVideoLive getMediaVideoLive() {
+		return mediaVideoLive;
+	}
+
+	public void setMediaVideoLive(MediaVideoLive mediaVideoLive) {
+		this.mediaVideoLive = mediaVideoLive;
+	}
+
+	public String getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(String roomId) {
+		this.roomId = roomId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java b/src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java
new file mode 100644
index 0000000..dc8525b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java
@@ -0,0 +1,369 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 提供给App端的直播信息   封装类
+ * @author ody.yuan
+ *
+ */
+public class VideoLiveViewVO implements Serializable {
+
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4609946637774926660L ;
+
+	/**  主键 */
+	private String liveVideoId;
+	
+	/**  名称 */
+	private String name;
+	
+	/**  状态 1:预告 2 直播  3 回放 4 废弃 */
+	private short status;
+	
+	/**  直播人ID */
+	private String anchorId;
+	
+	/**  直播人 */
+	private String anchor;
+	
+	/**  预告图片URL  */
+	private String previewImgUrl;
+	
+	/**  预告片视频URL  */
+	private String previewVideoUrl;
+	
+	/**  预约次数  */
+	private Integer orderTimes;
+	
+	/**  直播观看人次  */
+	private Integer watchTimes;
+	
+	/**  直播观看人次  */
+	private Integer watchOnlineTimes;
+	
+	/**  回放次数  */
+	private Integer reviewTimes;
+	
+	/**  备注详情 */
+	private String remark;
+	
+	/** 直播预计开始时间  */
+	private Date startTime;
+	
+	/** 直播预计结束时间  */
+	private Date endTime;
+	
+	/**  直播对应的回放视频个数   */
+	private Integer videoCounts ;
+	
+	/**  直播对应的回放,有可能直播时间很长,后台会分段拆分,里面的url对应的是点播同一个viewvo  */
+	private List<MediaVideoViewVO> lstVideoVO;
+	
+	/** 网易云信房间号码  */
+	private String wyLiveNumber;
+	
+	/** 网易云信直播拉流:rtmpPullUrl   */
+	private String wyRtmpPullUrl;
+	
+	/** 网易云信直播推流url 慧眼端实际写反了=拉流地址  兼顾1.0慧眼  */
+	private String wyPushUrl;
+	
+	/** 聊天室ID   */
+	private String chatroomId;
+	
+	/** 聊天室人数   */
+	private Integer chatroomUserCount;
+	
+	/** 清晰度  LD:流畅  SD:标清   HD:高清  */
+	private String definition;
+	
+	/**  权限:limitClass:仅限班级  public:公开  orderWatch:预约观看  limitOrg:仅限机构  */
+	private String permission;
+	
+	/** 预计时长  单位:分钟  */
+	private Integer expectedTimes;
+	
+	/** 二维码模板地址  */
+	private String qrUrl;
+	
+	/** 二维码模板id  */
+	private String qrTemplateId;
+	
+	/** 文档地址 id集合  */
+	private List<String> fileIds;
+	
+	/** 文档下载地址  */
+	private List<Map<String,String>> filePaths;
+
+	/** 当前用户是否预约  */
+	private boolean orderFlag;
+	
+	/** 唐桥  meetingId  */
+	private String meetingId;
+	
+	/** 唐桥  meetingpwd  */
+	private String meetingPwd;
+	
+	public String getLiveVideoId() {
+		return liveVideoId;
+	}
+
+	public void setLiveVideoId(String liveVideoId) {
+		this.liveVideoId = liveVideoId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getAnchorId() {
+		return anchorId;
+	}
+
+	public void setAnchorId(String anchorId) {
+		this.anchorId = anchorId;
+	}
+
+	public String getAnchor() {
+		return anchor;
+	}
+
+	public void setAnchor(String anchor) {
+		this.anchor = anchor;
+	}
+
+	public String getPreviewImgUrl() {
+		return previewImgUrl;
+	}
+
+	public void setPreviewImgUrl(String previewImgUrl) {
+		this.previewImgUrl = previewImgUrl;
+	}
+
+	public String getPreviewVideoUrl() {
+		return previewVideoUrl;
+	}
+
+	public void setPreviewVideoUrl(String previewVideoUrl) {
+		this.previewVideoUrl = previewVideoUrl;
+	}
+
+	public Integer getOrderTimes() {
+		return orderTimes;
+	}
+
+	public void setOrderTimes(Integer orderTimes) {
+		this.orderTimes = orderTimes;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public List<MediaVideoViewVO> getLstVideoVO() {
+		return lstVideoVO;
+	}
+
+	public void setLstVideoVO(List<MediaVideoViewVO> lstVideoVO) {
+		this.lstVideoVO = lstVideoVO;
+	}
+
+	public Integer getVideoCounts() {
+		return videoCounts;
+	}
+
+	public void setVideoCounts(Integer videoCounts) {
+		this.videoCounts = videoCounts;
+	}
+
+	public String getWyLiveNumber() {
+		return wyLiveNumber;
+	}
+
+	public void setWyLiveNumber(String wyLiveNumber) {
+		this.wyLiveNumber = wyLiveNumber;
+	}
+
+	public String getWyRtmpPullUrl() {
+		return wyRtmpPullUrl;
+	}
+
+	public void setWyRtmpPullUrl(String wyRtmpPullUrl) {
+		this.wyRtmpPullUrl = wyRtmpPullUrl;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Integer getWatchTimes() {
+		return watchTimes;
+	}
+
+	public void setWatchTimes(Integer watchTimes) {
+		this.watchTimes = watchTimes;
+	}
+
+	public Integer getReviewTimes() {
+		return reviewTimes;
+	}
+
+	public void setReviewTimes(Integer reviewTimes) {
+		this.reviewTimes = reviewTimes;
+	}
+
+	public String getChatroomId() {
+		return chatroomId;
+	}
+
+	public void setChatroomId(String chatroomId) {
+		this.chatroomId = chatroomId;
+	}
+
+	public Integer getChatroomUserCount() {
+		return chatroomUserCount;
+	}
+
+	public void setChatroomUserCount(Integer chatroomUserCount) {
+		this.chatroomUserCount = chatroomUserCount;
+	}
+
+	public String getDefinition() {
+		return definition;
+	}
+
+	public void setDefinition(String definition) {
+		this.definition = definition;
+	}
+
+	public String getPermission() {
+		return permission;
+	}
+
+	public void setPermission(String permission) {
+		this.permission = permission;
+	}
+
+	public Integer getExpectedTimes() {
+		return expectedTimes;
+	}
+
+	public void setExpectedTimes(Integer expectedTimes) {
+		this.expectedTimes = expectedTimes;
+	}
+
+	public String getWyPushUrl() {
+		return wyPushUrl;
+	}
+
+	public void setWyPushUrl(String wyPushUrl) {
+		this.wyPushUrl = wyPushUrl;
+	}
+
+	public String getQrUrl() {
+		return qrUrl;
+	}
+
+	public void setQrUrl(String qrUrl) {
+		this.qrUrl = qrUrl;
+	}
+
+	public List<String> getFileIds() {
+		return fileIds;
+	}
+
+	public void setFileIds(List<String> fileIds) {
+		this.fileIds = fileIds;
+	}
+
+	public Integer getWatchOnlineTimes() {
+		return watchOnlineTimes;
+	}
+
+	public void setWatchOnlineTimes(Integer watchOnlineTimes) {
+		this.watchOnlineTimes = watchOnlineTimes;
+	}
+
+	public boolean getOrderFlag() {
+		return orderFlag;
+	}
+
+	public void setOrderFlag(boolean orderFlag) {
+		this.orderFlag = orderFlag;
+	}
+
+	public String getQrTemplateId() {
+		return qrTemplateId;
+	}
+
+	public void setQrTemplateId(String qrTemplateId) {
+		this.qrTemplateId = qrTemplateId;
+	}
+
+	public String getMeetingId() {
+		return meetingId;
+	}
+
+	public void setMeetingId(String meetingId) {
+		this.meetingId = meetingId;
+	}
+
+	public String getMeetingPwd() {
+		return meetingPwd;
+	}
+
+	public void setMeetingPwd(String meetingPwd) {
+		this.meetingPwd = meetingPwd;
+	}
+
+	public List<Map<String, String>> getFilePaths() {
+		return filePaths;
+	}
+
+	public void setFilePaths(List<Map<String, String>> filePaths) {
+		this.filePaths = filePaths;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/VideoPlay.java b/src/main/java/com/qxueyou/scc/media/model/VideoPlay.java
new file mode 100644
index 0000000..29957c0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/VideoPlay.java
@@ -0,0 +1,86 @@
+package com.qxueyou.scc.media.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+
+@Entity
+@Table(name="video_play")
+@NamedQuery(name="VideoPlay.findAll", query="SELECT m FROM VideoPlay m")
+public class VideoPlay implements Serializable {
+
+	private static final long serialVersionUID = 5377239966386327023L;
+	
+	@Id
+	@Column(name="video_play_id", unique=true, nullable=false, length=65)
+	private String videoPlayId;
+	
+	@Column(name="video_id")
+	private String videoId;
+	
+	@Column(name="user_id")
+	private String userId;
+	
+	private Integer progress;
+	
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+	
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	public String getVideoPlayId() {
+		return videoPlayId;
+	}
+
+	public void setVideoPlayId(String videoPlayId) {
+		this.videoPlayId = videoPlayId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public Integer getProgress() {
+		return progress;
+	}
+
+	public void setProgress(Integer progress) {
+		this.progress = progress;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java b/src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java
new file mode 100644
index 0000000..c9e5266
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java
@@ -0,0 +1,106 @@
+package com.qxueyou.scc.media.model;
+
+/**
+ * 视频信息
+ * @author ody.yuan
+ *[{"uid":25078,"video_name":"297ebe0e56250d10015625190133006d_20160726-115350_20160726-115530",
+ *	"orig_video_key":"1_c3663191947347ee9902e5554116e24d_1469505230352_1469505330224_79952-00000.mp4","vid":61178}]
+ */
+public class VideoRecordDTO {
+
+	/** 用户ID  */
+	private String uid;
+	
+	/** 录制后文件名,格式为filename_YYYYMMDD-HHmmssYYYYMMDD-HHmmss, 文件名录制起始时间(年月日时分秒) -录制结束时间(年月日时分秒)  */
+	private String video_name;
+	
+	/** 视频文件在点播桶中的存储路径  */
+	private String orig_video_key;
+	
+	/** 视频文件ID  */
+	private String vid;
+	
+	/** 视频名称  */
+	private String name;
+
+	/** 路径 */
+	private String url;
+
+	/** 录制开始时间  */
+	private long beginTime;
+
+	/** 录制结束时间  */
+	private long endTime;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public long getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(long beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public long getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(long endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getUid() {
+		return uid;
+	}
+
+	public void setUid(String uid) {
+		this.uid = uid;
+	}
+
+	public String getVideo_name() {
+		return video_name;
+	}
+
+	public void setVideo_name(String video_name) {
+		this.video_name = video_name;
+	}
+
+	public String getOrig_video_key() {
+		return orig_video_key;
+	}
+
+	public void setOrig_video_key(String orig_video_key) {
+		this.orig_video_key = orig_video_key;
+	}
+
+	public String getVid() {
+		return vid;
+	}
+
+	public void setVid(String vid) {
+		this.vid = vid;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		VideoRecordDTO objVideoRecordDTO = (VideoRecordDTO)obj;
+		return objVideoRecordDTO.getVid().equals(this.getVid());
+	}
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java b/src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java
new file mode 100644
index 0000000..c92b2e3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java
@@ -0,0 +1,201 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.media.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.MediaVideoCache;
+import com.qxueyou.scc.media.model.MediaVideoRecord;
+import com.qxueyou.scc.media.model.MediaVideoTrans;
+import com.qxueyou.scc.media.model.MediaVideoViewVO;
+import com.qxueyou.scc.media.model.VideoConverTask;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.Organization;
+
+
+/**
+ * 视频service接口
+ * @author ody.yuan
+ *
+ */
+public interface IMediaVideoService {
+	
+	/**
+	 * APP获取视频列表
+	 * @param sql       查询语句
+	 * @param args      参数
+	 * @return
+	 */
+	List<MediaVideoViewVO> queryMediaVideoList(String sql,List<Object> args,Pager pager);
+	
+	/**
+	 * APP提交缓冲视频
+	 * 
+	 * @param    videoId    videoId,多个以“,”分隔
+	 * @return   result     true为成功,false时,msg为错误描述
+	 */
+	Result doSubmitCacheVideo(MediaVideoCache cache);
+	
+	/**
+	 * APP提交播放视频
+	 * 
+	 * @param    
+	 * @return   result     true为成功,false时,msg为错误描述
+	 */
+	Result doSubmitPlayVideo(MediaVideoRecord mvr);
+	
+	/**
+	 * APP播放完视频
+	 * 
+	 * @param   
+	 * @return   result     true为成功,false时,msg为错误描述
+	 */
+	Result doSubmitPlayFinish(MediaVideoRecord mvr);
+	
+	/**
+	 * 发送消息:调用本地转码服务,使用消息队列来控制
+	 * 
+	 * @param videoId 视频ID 
+	 */
+	Result doFfmpegMediaTrascode( String videoId , String videoName ) ;
+	
+	
+	
+	/**
+	 * 查询转码结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<MediaVideoTrans> queryTransItem(String hql,List<Object> args);
+	
+	/**
+	 * 得到服务器IP地址
+	 * @return
+	 */
+	String getConfusionIp();
+	
+	/**
+	 * 修改视频
+	 * @param video
+	 * @return
+	 */
+	Result doSaveUpdateMedia( MediaVideo video ,String classScheduleId );
+	
+	/**
+	 * 查询班主任下的pc端视频列表
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<MediaVideo> queryVideoItem(String hql,List<Object> args);
+	
+	/**
+	 * 将视频从班主任拿到最上层机构,然后机构指定到各个层级之后,新建班级,所有视频都出现在公共课程,这里要初始化成最开始的 课程-视频 结构
+	 * @param collegeCourse
+	 * @return
+	 */
+	Result doInitClassOrgVideo(OrgCollegeCourse collegeCourse);
+	
+	/**
+	 * 初始化该科目下(班主任角色上传的视频,非指定过去的视频);视频链接:视频课程   map对象
+	 * @param collegeCourse
+	 * @param map
+	 * @return
+	 */
+	Result doInitVideoObject(MediaVideo video);
+	
+	
+	/**
+	 * 增加播放次数
+	 * @param videoId
+	 * @return
+	 */
+	boolean addPlayTimes(String videoId);
+	
+	/**
+	 * 编排数据
+	 * @param data 需要编排的数据
+	 */
+	Result doReOrderVideo(List<String> ids, List<Integer> index);
+	
+	/**
+	 * 创建转码记录
+	 * 
+	 * @param videoId
+	 * @param videoName
+	 */
+	void saveMediaVideoTrans(String videoId);
+	
+
+	
+	/********************************************************************* 初始化数据的方法开始  ************************************************************************/
+	
+	Result doInitCourseReVideoOrder(Organization org);
+	
+	Result doInitClassSubject(ClsClass cls);
+	
+	Result doInitSubjectClass(ClsClass cls);
+	
+	Result doInitClassMediaInfo(ClsClass cls);
+	
+	Result doInitOrgVideoSubject(Organization org);
+	
+	Result doInitOrgVideoLeft(MediaVideo video);
+	
+	Result doInitClassVideoLeft(MediaVideo video);
+	
+	Result doInitClassOrgSubject(OrgCollegeCourse course);
+	
+	/********************************************************************* 初始化数据的方法结束  ************************************************************************/
+	
+	/**
+	 * 需要转码的视频,插入转码队列记录表
+	 * @param video
+	 * @return
+	 */
+	Result insertVideoConverTask(MediaVideo video);
+	
+	/**
+	 * 统计视频的进度
+	 * 
+	 * @param userId
+	 * @param videoId
+	 */
+	void statisticCompDegree(String userId, String videoId);
+	
+	/**
+	 * 选择历史视频
+	 * 
+	 * @param subjectId
+	 * @param subjectName
+	 * @param videoId
+	 * @return
+	 */
+	Result insertChooseVideo(String subjectId, String subjectName, String videoId, String chapterId);
+	
+	/**
+	 * 转码队列
+	 * 
+	 * @return
+	 */
+	List<VideoConverTask> getVideoConverTaskList();
+	
+	/**
+	 * 保存视频接口
+	 * 
+	 * @param video
+	 * @return
+	 */
+	Result saveVideo(MediaVideo video);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/media/service/impl/MediaVideoService.java b/src/main/java/com/qxueyou/scc/media/service/impl/MediaVideoService.java
new file mode 100644
index 0000000..af42a29
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/media/service/impl/MediaVideoService.java
@@ -0,0 +1,1558 @@
+/******************************************************************************
+. * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.media.service.impl;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.FilePathConstants;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.RequestClientUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.config.AliOssConfig;
+import com.qxueyou.scc.media.dao.MediaVideoDAO;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.MediaVideoCache;
+import com.qxueyou.scc.media.model.MediaVideoReCourse;
+import com.qxueyou.scc.media.model.MediaVideoRecord;
+import com.qxueyou.scc.media.model.MediaVideoStatistic;
+import com.qxueyou.scc.media.model.MediaVideoTrans;
+import com.qxueyou.scc.media.model.MediaVideoViewVO;
+import com.qxueyou.scc.media.model.VideoConverTask;
+import com.qxueyou.scc.media.service.IMediaVideoService;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchCourseware;
+import com.qxueyou.scc.school.model.SchReLessonVideo;
+import com.qxueyou.scc.statistic.model.SchFlowStatisticDetail;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.sys.service.IOssVideoService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+
+/**
+ * 
+ * @author cyq
+ *
+ */
+
+@Service
+@EnableConfigurationProperties(AliOssConfig.class)
+public class MediaVideoService extends CommonAppService implements IMediaVideoService{
+	
+	/**
+	 * 实例化log
+	 */
+	private final Logger log = LogManager.getLogger(MediaVideoService.class);
+	
+	/**
+	 * oss服务
+	 */
+	@Autowired
+	IOssService ossService;
+	
+	@Autowired
+	private AliOssConfig aliOssConfig;
+	
+	/**
+	 * oss视频服务
+	 */
+	@Autowired
+	IOssVideoService ossVideoService ;
+	
+	/**
+	 * 视频DAO
+	 */
+	private MediaVideoDAO mediaVideoDAO;
+	
+	/**
+	 * 默认日期时间格式
+	 */
+	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINESE);
+	/**
+	 * 公共课程名称
+	 */
+	private final static String publicSubjectName = "公共课程";
+	
+	/**
+	 * m3u8文件后缀名
+	 */
+	private final static String m3u8Suffix = ".m3u8";
+	/**
+	 * 视频目录分割标记
+	 */
+	private final static String videoDirFlag = "com/video";
+	
+	/**
+	 * 
+	 * @return
+	 */
+	public MediaVideoDAO getMediaVideoDAO() {
+		return mediaVideoDAO;
+	}
+	
+	/**
+	 * 依赖注入
+	 * @param exerDAO
+	 */
+	@Autowired(required = false)
+	public void setMediaVideoDAO(@Qualifier("mediaVideoDAO") MediaVideoDAO mediaVideoDAO) {
+		this.mediaVideoDAO = mediaVideoDAO;
+	}
+
+	/**
+	 * APP获取视频列表
+	 * @param sql       查询语句
+	 * @param args      参数
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<MediaVideoViewVO> queryMediaVideoList(String sql,List<Object> args,Pager pager){
+		
+		List<Object[]> lst = this.findByPageSql(sql, args, pager);
+		
+		List<MediaVideoViewVO> resultLst = new ArrayList<MediaVideoViewVO>(lst.size());
+		MediaVideoViewVO vo = null ;
+    	for (Object[] obj : lst) {
+    		
+    		vo = new MediaVideoViewVO();
+    		vo.setVideoId(String.valueOf(obj[0]));
+    		vo.setName(String.valueOf(obj[1]));
+    		
+    		vo.setUrl("");
+    		vo.setOrigUrl("");
+    		
+    		vo.setSize(checkIntegerObject(obj[4]));
+    		vo.setPlayTime(checkIntegerObject(obj[5]));
+    		
+    		vo.setCoverPageUrl( obj[6] == null || StringUtils.isBlank(String.valueOf(obj[6]))
+    				? FilePathConstants.VIDEO_DEFAULT_IMG : String.valueOf(obj[6]) );
+    		
+    		vo.setPlayTimes(checkIntegerObject(obj[7]));
+    		vo.setRemark(String.valueOf(obj[8]));
+    		vo.setFormat(String.valueOf(obj[9]));
+    		
+    		vo.setAndroidHD(String.valueOf(obj[10]));
+    		vo.setAndroidSD(String.valueOf(obj[11]));
+    		vo.setAndroidLD(String.valueOf(obj[12]));
+    		vo.setIosHD(String.valueOf(obj[13]));
+    		vo.setIosSD(String.valueOf(obj[14]));
+    		vo.setIosLD(String.valueOf(obj[15]));
+    		
+    		// obj[3]  internal    use obj[2]
+    		if( null==obj[10] && null==obj[11] && null==obj[12] ){
+    			vo.setAndroidLD(String.valueOf(obj[2]));
+    		}
+    		if( null==obj[13] && null==obj[14] && null==obj[15] ){
+    			vo.setIosLD(String.valueOf(obj[2]));
+    		}
+    		
+    		vo.setTeacherName(String.valueOf(obj[16]));
+    		
+    		vo.setCacheFlag(false);
+    		vo.setDownloadFlag(false);
+    		
+    		// 增加返回资源ID
+    		vo.setObjectFlag(null!=obj[17] || null!=obj[18] || null!=obj[19]);
+    		
+    		vo.setObjectHd(checkStringObject(obj[17]));
+    		vo.setObjectSd(checkStringObject(obj[18]));
+    		vo.setObjectLd(checkStringObject(obj[19]));
+    		vo.setCreateTime(obj[20]);
+    		vo.setUpdateTime(obj[21]);
+    		vo.setSubjectId(checkStringObject(obj[22]));
+    		vo.setSubjectName(checkStringObject(obj[23]));
+    		resultLst.add(vo);
+        }
+		
+		return resultLst ;
+	}
+	private String checkStringObject(Object obj) {
+		return null != obj ? String.valueOf(obj) : null;
+	}
+	private int checkIntegerObject(Object obj) {
+		if (null != obj && StringUtils.isNotEmpty(String.valueOf(obj))) {
+			return Integer.valueOf(String.valueOf(obj));
+		}
+		return 0;
+	}
+	
+	/**
+	 * APP提交缓冲视频
+	 * 
+	 * @param    videoId    videoId,多个以“,”分隔
+	 * @return   result     true为成功,false时,msg为错误描述
+	 */
+	public Result doSubmitCacheVideo(MediaVideoCache cache){
+		List<MediaVideoCache> lstCacheVO = new ArrayList<MediaVideoCache>(2);
+		TraceUtils.setCreateActiveTrace(cache);
+		cache.setOrgId(ClientUtils.getOrgId());
+		cache.setClassId(ClientUtils.getClassId());
+		cache.setCachedUserId(ClientUtils.getUserId());
+		cache.setCachedFlag(true);
+		cache.setCachedTime(0);
+		cache.setCachedUserId(ClientUtils.getUserId());
+		cache.setSubmitTime(new Date(System.currentTimeMillis()));
+			
+		lstCacheVO.add(cache);
+			
+		if(!lstCacheVO.isEmpty()){
+			this.saveOrUpdateAll(lstCacheVO);
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * APP提交播放视频
+	 * 
+	 * @param    videoId    videoId,多个以“,”分隔
+	 * @return   result     true为成功,false时,msg为错误描述
+	 */
+	public Result doSubmitPlayVideo(MediaVideoRecord mvr){
+
+			MediaVideo videoVO = this.read(MediaVideo.class, mvr.getVideoId());
+			
+			if(null != videoVO){
+				mvr.setVideoTime(videoVO.getPlayTime()==0?mvr.getVideoTime():videoVO.getPlayTime());
+				mvr.setDeleteFlag(false);
+				mvr.setPlayTime(new Date(System.currentTimeMillis()));
+				mvr.setOrgId(ClientUtils.getOrgId());
+				mvr.setClassId(ClientUtils.getClassId());
+				mvr.setUserId(ClientUtils.getUserId());
+				
+				mvr.setWatchTime(0);
+				TraceUtils.setCreateTrace(mvr);
+				save(mvr);
+				
+				videoVO.setPlayTimes(videoVO.getPlayTimes() + 1) ;
+				//不取APP发送过来的视频时长
+				//videoVO.setPlayTime(videoVO.getPlayTime()==0?mvr.getVideoTime():videoVO.getPlayTime());
+				TraceUtils.setUpdateTrace(videoVO);
+				this.saveVideo(videoVO);
+				
+				return new Result(true,mvr.getVideoRecordId());
+			}
+			
+		return new Result(false,"提交参数不正确");
+	}
+	
+	
+	/**
+	 * APP播放完成
+	 * 
+	 * @param   
+	 * @return   result     true为成功,false时,msg为错误描述
+	 */
+	public Result doSubmitPlayFinish(MediaVideoRecord mvr){
+		MediaVideoRecord mv = read(MediaVideoRecord.class, mvr.getVideoRecordId());
+		/*if(mv==null){
+			mv = read(MediaVideoRecord.class, mvr.getVideoId());
+		}*/
+		mv.setLeaveTime(new Date(System.currentTimeMillis()));
+		mv.setWatchTime(mvr.getWatchTime());
+		TraceUtils.setUpdateTrace(mv);
+		save(mv);
+		return new Result(true);
+	}
+	
+	/**
+	 * 统计视频的进度
+	 * 
+	 * @param userId
+	 * @param videoId
+	 */
+	public void statisticCompDegree(String userId, String videoId){
+		//获取视频的播放记录,过滤下载视频的时长
+		List<SchFlowStatisticDetail> lstSchFlowStatisticDetail = this.find("from SchFlowStatisticDetail d where d.videoId = ? and d.userId = ? and d.businessType <> ?",
+				CollectionUtils.newList(videoId, userId, SchFlowStatisticDetail.BUSINESS_TYPE_VIDEO_DOWNLOAD), SchFlowStatisticDetail.class);
+		if(lstSchFlowStatisticDetail == null || lstSchFlowStatisticDetail.isEmpty()){
+			return;
+		}
+		Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
+		for(SchFlowStatisticDetail objSchFlowStatisticDetail : lstSchFlowStatisticDetail){
+			Integer startTime = objSchFlowStatisticDetail.getVideoStartTime();
+			Integer endTime = objSchFlowStatisticDetail.getVideoEndTime();
+			for(int i=startTime;i<endTime;i++){
+				map.put(i, true);
+			}
+		}
+		MediaVideo objMediaVideo = this.read(MediaVideo.class, videoId);
+		BigDecimal compDegree = objMediaVideo.getPlayTime() == 0?BigDecimal.ZERO:BigDecimal.valueOf(Double.valueOf(map.size())/objMediaVideo.getPlayTime());
+		if(compDegree.compareTo(BigDecimal.ONE) == 1){
+			compDegree = BigDecimal.ONE;
+		}
+		String hql = " from MediaVideoStatistic where userId =? and videoId=?";
+		MediaVideoStatistic mvs = findUnique(hql, CollectionUtils.newList(userId,videoId), MediaVideoStatistic.class);
+		if(null==mvs){
+			mvs = new MediaVideoStatistic();
+			mvs.setClassId(objMediaVideo.getClassId());
+			mvs.setDeleteFlag(false);
+			mvs.setUserId(userId);
+			mvs.setVideoId(videoId);
+			
+			mvs.setVideoName(objMediaVideo.getName());
+			mvs.setCompDegree(compDegree);
+			TraceUtils.setCreateTrace(mvs);
+			save(mvs);
+		}else{
+			this.bulkUpdate("update MediaVideoStatistic set compDegree = ? where userId = ? and videoId = ? and compDegree < ?", new Object[]{compDegree, userId, videoId, compDegree});
+		}
+	}
+	
+
+	
+	/**
+	 * 创建转码记录
+	 * 
+	 * @param videoId
+	 */
+	public void saveMediaVideoTrans(String videoId){
+		MediaVideo video = this.read(MediaVideo.class, videoId);
+		
+		// 1.保存转码记录
+		MediaVideoTrans trans = new MediaVideoTrans();
+		TraceUtils.setCreateTrace(trans);
+		trans.setDeleteFlag(false);
+		trans.setOrgId(ClientUtils.getOrgId());
+		trans.setClassId(ClientUtils.getClassId());
+		trans.setVideoId(videoId);
+		trans.setVideoName(video.getName());
+		trans.setProcess(MediaVideoTrans.TRANS_PROCESS_UPLOAD_SUCCESS);
+		trans.setResult((short)0);
+		trans.setTransTimes((short)1);
+		
+		Date nowTime=new Date() ; 
+		trans.setRemark(format.format(nowTime) + ":1.上传到oss服务器;") ;
+		trans.setUploadTime(nowTime);
+		
+		String ip = getConfusionIp() ;
+		trans.setUploadServer(ip);
+		
+		this.save(trans);
+	}
+	
+	
+	
+	
+	@SuppressWarnings("unused")
+	private File getOssVideo(MediaVideo video, MediaVideoTrans trans, String uuid, String ip){
+		// 增加一次调用存储过程
+		Date startTime=new Date() ; 
+		trans.setDownloadTime(startTime);
+		trans.setRemark(trans.getRemark() + format.format(startTime) + ":2.0:开始下载视频;视频下载中>>>") ;
+		doUpdateTransCodeProcess(trans);
+		
+		// 3.2.internal hangzhou
+		File origVideo = ossVideoService.getObject(
+				video.getOrigUrl().substring(video.getOrigUrl().indexOf(videoDirFlag) + 3  ), Constants.FFMPEG_VIDEO_FILE_DIR + uuid + "/origVideo" 
+		+ video.getOrigUrl().substring(video.getOrigUrl().lastIndexOf(".")) );
+		
+		// 第一次调用存储过程
+		Date downloadTime=new Date() ; 
+		trans.setTransServer(ip);
+		trans.setDownloadTime(downloadTime);
+		trans.setRemark(trans.getRemark() + format.format(downloadTime) + ":2.下载文件成功;") ;
+		
+		doUpdateTransCodeProcess(trans);
+		return origVideo;
+	}
+	
+	/**
+	 * 复制的视频修改状态
+	 * @param video
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private Result doSaveCopyVideoTranscode(MediaVideo video){
+		
+		String hql = " from MediaVideo where originVideoId = ? and deleteFlag is false";
+		List<MediaVideo> originVideo = find(hql, CollectionUtils.newList(video.getVideoId()), MediaVideo.class);
+		
+		if(video.getStatus()== MediaVideo.STATUS_PUBLISHED){
+			//修改所有指定数据的视频状态
+			for (MediaVideo mediaVideo : originVideo) {
+				mediaVideo.setCoverPageUrl(video.getCoverPageUrl());
+				mediaVideo.setAndroidSD(video.getAndroidSD());
+				mediaVideo.setUrl(video.getUrl());
+				mediaVideo.setIosSD(video.getIosSD());
+				mediaVideo.setObjectSd(video.getObjectSd());
+				mediaVideo.setStatus(MediaVideo.STATUS_PUBLISHED);
+				this.saveVideo(mediaVideo);
+			}
+		}else if(video.getStatus()==MediaVideo.STATUS_TRANSFAILED){
+			//修改所有指定数据的视频状态
+			for (MediaVideo mediaVideo : originVideo) {
+				mediaVideo.setCoverPageUrl(video.getCoverPageUrl());
+				mediaVideo.setAndroidSD(video.getAndroidSD());
+				mediaVideo.setUrl(video.getUrl());
+				mediaVideo.setIosSD(video.getIosSD());
+				mediaVideo.setObjectSd(video.getObjectSd());
+				mediaVideo.setStatus(MediaVideo.STATUS_TRANSFAILED);
+				this.saveVideo(mediaVideo);
+			}
+		}
+		
+		return new Result(true);
+	}
+	
+	
+	/**
+	 * 使用存储过程处理的原因:service接收队列的转码消息后,通过存储过程实现一个serverce中,实时更新状态,而非一个service一个整体
+	 * 
+	 * @param trans
+	 */
+	private void doUpdateTransCodeProcess( MediaVideoTrans trans  ){
+		
+		String remark = StringUtils.isNotBlank(trans.getRemark()) && trans.getRemark().length() >= 1024 
+				? trans.getRemark().substring(1000) : trans.getRemark();
+		
+		//改用存储过程 
+		Session session = getCommonDAO().getSessionFactory().getCurrentSession();
+		SQLQuery query = session.createSQLQuery("{call INSERT_FFMPEG_TRANSCODE_PROCESS(?,?,?,?,?,?,?,?,?,?,?,?,?)}");
+		query.setString(0, trans.getVideoTranscodeId());
+		query.setString(1, trans.getTransServer());
+		query.setString(2, remark );
+		query.setInteger(3, trans.getProcess() );
+		
+		query.setTimestamp(4, trans.getUploadTime());
+		query.setTimestamp(5, trans.getDownloadTime());
+		query.setTimestamp(6, trans.getMediaInfoTime());
+		query.setTimestamp(7, trans.getSnapshotTime());
+		query.setTimestamp(8, trans.getAndroidSdTime());
+		query.setTimestamp(9, trans.getIosSdTime());
+		query.setTimestamp(10, trans.getResultTime());
+		
+		query.setShort(11, trans.getResult());
+		query.setShort(12, trans.getTransTimes());
+		
+		//执行
+		query.executeUpdate();
+		
+		log.debug("更新转码过程:params:transCodeId=" + trans.getVideoTranscodeId() + ";process=" + trans.getProcess() + ";transRemark=" + trans.getRemark() ) ;
+		
+	}
+	
+	/**
+	 * 获取混淆IP
+	 */
+	public String getConfusionIp(){
+		
+		String origIp = RequestClientUtils.getLocalIP();
+		
+		String ip = origIp.substring(origIp.indexOf('.')+1) + '.' + origIp.substring(0,origIp.indexOf('.'));
+		
+		return ip ;
+	}
+	
+	/**
+	 * 查询转码结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	public List<MediaVideoTrans> queryTransItem(String hql,List<Object> args){
+		return mediaVideoDAO.queryTransItem(hql, args);
+	}
+	/******ffmpeg转码代码结束*******/
+	
+	/**
+	 * 修改视频
+	 * @param video
+	 * @return
+	 */
+	public Result doSaveUpdateMedia( MediaVideo video ,String classScheduleId){
+		
+		if(null == video || StringUtils.isBlank(video.getVideoId()) || StringUtils.isBlank(classScheduleId) ){
+			return new Result(false,"参数不正确");
+		}
+		
+		MediaVideo v = this.read(MediaVideo.class, video.getVideoId());
+		
+		if( null == v ){
+			return new Result(false,"参数不正确");
+		}
+		
+		v.setCoverPageUrl(video.getCoverPageUrl());
+		v.setName(video.getName());
+		v.setRemark(video.getRemark());
+		v.setTeacherName(video.getTeacherName());
+		v.setStartTime(video.getStartTime());
+		v.setEndTime(video.getEndTime());
+		v.setValidity(video.getValidity());
+		
+		this.save(v);
+		
+		//关联课程信息
+		String hql = "select l from SchReLessonVideo l, SchClassSchedule s where l.classScheduleId = s.classScheduleId and s.deleteFlag is false and l.videoId = ? and s.classId = ? and l.deleteFlag is false  ";
+		List<SchReLessonVideo> res = this.find(hql, CollectionUtils.newList(v.getVideoId(),ClientUtils.getClassId()) , SchReLessonVideo.class);
+		
+		
+		// 如果有垃圾数据
+		if(!res.isEmpty() && res.size() > 1 ){
+			
+			for(int i=1 ; i < res.size() ; i++ ){
+				res.get(i).setDeleteFlag(true);
+			}
+			
+		}
+		
+		SchReLessonVideo rel = res.get(0);
+		
+		this.saveOrUpdateAll(res);
+		
+		// 需要修改
+		if(null == rel || !classScheduleId.equals(rel.getClassScheduleId()) ){
+			
+			SchReLessonVideo re = new SchReLessonVideo();
+			TraceUtils.setCreateTrace(re);
+			re.setDeleteFlag(false);
+			re.setClassScheduleId(classScheduleId);
+			re.setVideoId(v.getVideoId());
+			this.save(re);
+			
+			if(null != rel){
+				rel.setDeleteFlag(true);
+				this.save(rel);
+			}
+			
+		}
+		
+		return new Result(true);
+		
+	}
+	
+	/**
+	 * 查询班主任下的pc端视频列表
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	public List<MediaVideo> queryVideoItem(String hql,List<Object> args){
+		
+		return this.mediaVideoDAO.queryVideoItem(hql, args);
+		
+	}
+	
+	/**
+	 * 将视频从班主任拿到最上层机构,然后机构指定到各个层级之后,新建班级,所有视频都出现在公共课程,这里要初始化成最开始的 课程-视频 结构
+	 * @param collegeCourse
+	 * @return
+	 * @throws InvocationTargetException 
+	 * @throws IllegalAccessException 
+	 */
+	public Result doInitClassOrgVideo(OrgCollegeCourse collegeCourse){
+		
+		Map<String,SchClassSchedule> map = new HashMap<String,SchClassSchedule>();
+		
+		// 1.初始化该科目下(班主任角色上传的视频,非指定过去的视频);视频链接:视频课程   map对象
+		doInitClassVideoScheduleMap(collegeCourse,map);
+		
+		
+		// 2.对每一个视频链接,查出来所有指定到班主任角色的关联
+		
+		// classId + scheduleName 来保证每个班级下面的课程不重复添加
+	    //Map<String,SchClassSchedule> repeatScheduleMap = new HashMap<String,SchClassSchedule>();
+		Map<String,String> repeatScheduleMap = new HashMap<String,String>();
+	    
+		Entry<String,SchClassSchedule> entry; 
+		for(Iterator<Entry<String, SchClassSchedule>> iterator = map.entrySet().iterator(); iterator.hasNext();) {
+		    entry = (Entry<String,SchClassSchedule>)iterator.next();
+		    
+		    String origUrl = entry.getKey();
+		    // 原始班主任视频的课程
+		    SchClassSchedule origSchedule = entry.getValue();
+		    
+		    Map<SchReLessonVideo,MediaVideo> reMap =  new HashMap<SchReLessonVideo,MediaVideo>();
+		    Map<SchReLessonVideo,SchClassSchedule> scheMap = new HashMap<SchReLessonVideo,SchClassSchedule>();
+		    
+		    //第一部分,指定视频到班级生成的数据,只生成关联 new SchReLessonVideo
+		    String hql = "select v,r,s from MediaVideo v , SchReLessonVideo r ,SchClassSchedule s  " +
+				"where v.videoId = r.videoId " +
+				"and s.classScheduleId = r.classScheduleId " +
+				"and v.origUrl = ? " +
+				"and s.deleteFlag is false " +
+				"and v.deleteFlag is false " +
+				"and r.deleteFlag is false " +
+				"and v.classId is null  " ;
+		    
+		    this.mediaVideoDAO.queryInitDoubleMap(hql, CollectionUtils.newList(origUrl), reMap, scheMap);
+		    
+		    if(!reMap.isEmpty() ){
+		    	
+		    	SchReLessonVideo reKey = null  ;
+		    	for (Object obj : reMap.keySet()) {
+		    		reKey = (SchReLessonVideo) obj;
+		    		if(null != reKey ){
+		    			break ;
+		    		}
+		        }
+		    	
+		    	if(null != reKey ){
+		    		
+		    		//第二部分,新增班级直接新增的数据,首先要找到  new mediaVideo
+				    String hql0 = "select v,r,s from MediaVideo v , SchReLessonVideo r ,SchClassSchedule s  " +
+							"where v.videoId = r.videoId " +
+							"and s.classScheduleId = r.classScheduleId " +
+							"and v.origUrl = ? " +
+							"and s.deleteFlag is false " +
+							"and v.deleteFlag is false " +
+							"and r.deleteFlag is false " +
+							"and v.originVideoId = ?  " ;
+				    
+				    this.mediaVideoDAO.queryInitDoubleMap(hql0, CollectionUtils.newList(origUrl,reKey.getVideoId()), reMap, scheMap);
+		    	}
+			    
+		    }
+		    
+		    // 循环每一个视频-关联-课程,修改关联的课表信息
+		    Entry<SchReLessonVideo,MediaVideo> reEntry; 
+			for(Iterator<Entry<SchReLessonVideo, MediaVideo>> reIterator = reMap.entrySet().iterator(); reIterator.hasNext();) {
+				reEntry = (Entry<SchReLessonVideo,MediaVideo>)reIterator.next();
+			
+				SchReLessonVideo CurrRe = reEntry.getKey();
+				MediaVideo currVideo = reEntry.getValue();
+				SchClassSchedule currSchedule = scheMap.get(CurrRe);
+				
+				doInsertRegLog("查询视频 videoId ClassScheduleId ",CurrRe.getVideoId(), CurrRe.getClassScheduleId());
+				
+				String flag = currSchedule.getClassId().concat(origSchedule.getName());
+				//SchClassSchedule newSchedule = new SchClassSchedule() ;
+				
+				String currScheduleClassId = null ;
+				
+				// 没有
+				if(!repeatScheduleMap.containsValue(flag)){
+					
+					doInsertRegLog("Map中无数据 videoId ClassScheduleId " + flag ,CurrRe.getVideoId(), CurrRe.getClassScheduleId());
+					
+					// 首先查询当前班级下有无 和原始视频课程同名的课程
+					String hql0 = "from SchClassSchedule s where s.deleteFlag is false and s.classId = ? and s.name = ? ";
+					SchClassSchedule querySch = this.findUnique(hql0, CollectionUtils.newList(currSchedule.getClassId(),origSchedule.getName()), SchClassSchedule.class);
+					
+					if( null != querySch ){
+						
+						doInsertRegLog("Map中无数据但是sql中有数据 videoId ClassScheduleId " + flag ,CurrRe.getVideoId(), CurrRe.getClassScheduleId());
+						
+						currScheduleClassId = querySch.getClassScheduleId() ;
+						repeatScheduleMap.put(flag, currScheduleClassId);
+					}else{
+						
+						doInsertRegLog("Map中无数据但是sql中无数据 videoId ClassScheduleId " + flag ,CurrRe.getVideoId(), CurrRe.getClassScheduleId());
+						
+						// 没有查询到的话,第一次需要保存进去
+						SchClassSchedule newSchedule = new SchClassSchedule() ;
+						
+						newSchedule.setClassId(currSchedule.getClassId());
+						newSchedule.setCollegeCourseId(currSchedule.getCollegeCourseId());
+						newSchedule.setDeleteFlag(false);
+						newSchedule.setTeacher(currSchedule.getTeacher());
+						newSchedule.setTeacherId(currSchedule.getTeacherId());
+						
+						newSchedule.setEndTime(origSchedule.getEndTime());
+						newSchedule.setImgPath(origSchedule.getImgPath());
+						newSchedule.setStartTime(origSchedule.getStartTime());
+						newSchedule.setStatus(origSchedule.getStatus());
+						newSchedule.setType(origSchedule.getType());
+						
+						TraceUtils.setCreateTrace(newSchedule);
+						newSchedule.setClassScheduleId(null);
+						newSchedule.setName(origSchedule.getName());
+						
+						this.save(newSchedule);
+						
+						
+						currScheduleClassId = newSchedule.getClassScheduleId() ;
+						repeatScheduleMap.put(flag, newSchedule.getClassScheduleId());
+					}
+					
+				}else{
+					
+					doInsertRegLog("Map中有数据 videoId ClassScheduleId " + flag ,CurrRe.getVideoId(), CurrRe.getClassScheduleId());
+					
+					// 从map中拿
+					currScheduleClassId = repeatScheduleMap.get(flag);
+					
+				}
+				
+				// 修改关联关系,将以前的关联记录删除,新增关联记录
+				String hql2 = "select r from SchReLessonVideo r,SchClassSchedule s where " +
+						" s.deleteFlag is false " +
+						" and r.classScheduleId = s.classScheduleId " +
+						" and r.videoId = ? and s.classId = ?  ";
+				List<SchReLessonVideo> lstRes = this.find(hql2, CollectionUtils.newList(CurrRe.getVideoId(),currSchedule.getClassId()), SchReLessonVideo.class);
+				for(SchReLessonVideo re:  lstRes){
+					re.setDeleteFlag(true);
+				}
+				this.saveOrUpdateAll(lstRes);
+				
+				SchReLessonVideo newRe = new SchReLessonVideo();
+				TraceUtils.setCreateTrace(newRe);
+				
+				newRe.setDeleteFlag(false);
+				newRe.setVideoId(currVideo.getVideoId());
+				newRe.setClassScheduleId(currScheduleClassId);
+				
+				this.save(newRe);
+				
+			}
+		    
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 初始化该科目下(班主任角色上传的视频,非指定过去的视频);视频链接:视频课程   map对象
+	 * @param collegeCourse
+	 * @param map
+	 * @return
+	 */
+	
+	private boolean doInitClassVideoScheduleMap(OrgCollegeCourse collegeCourse,Map<String,SchClassSchedule> map){
+		
+		// 当前科目对应的班级
+		String hql0 = "from ClsClass o where o.deleteFlag is false and o.collegeCourseId = ? ";
+		
+		List<ClsClass> myList = this.find(hql0, CollectionUtils.newList(collegeCourse.getCollegeCourseId()), ClsClass.class);
+		
+		if(myList.isEmpty()){
+			return false ;
+		}
+		
+		String hql = "select v.origUrl,v.classId,l from MediaVideo v,SchReLessonVideo r,SchClassSchedule l " +
+				"where l.deleteFlag is false " +
+				"and r.classScheduleId=l.classScheduleId " +
+				"and r.videoId=v.videoId " +
+				"and v.deleteFlag is false " +
+				"and v.classId is not null " +
+				"and v.classId <> '' " +				
+				"and v.originVideoId = null " +				
+				"and l.classId in ( ";
+		
+		List<Object> lstParams = new ArrayList<Object>();
+		
+		for(int i = 0 ; i < ( myList.size()-1 ) ; i++){
+			
+			hql = hql.concat("? , ") ;
+			lstParams.add(myList.get(i).getClassId());
+			
+			doInsertRegLog("0查询班级 classID CollegeCourseId ",myList.get(i).getClassId(),collegeCourse.getCollegeCourseId());
+			
+		}
+		
+		hql = hql.concat(" ? ) ") ;
+		lstParams.add(myList.get(myList.size()-1).getClassId());
+		
+		doInsertRegLog("1查询班级 classID CollegeCourseId",myList.get(myList.size()-1).getClassId(),collegeCourse.getCollegeCourseId());
+		
+		Map<String,SchClassSchedule> resultMap = this.mediaVideoDAO.queryInitMap(hql, lstParams);
+		
+		Entry<String,SchClassSchedule> entry; 
+		for(Iterator<Entry<String, SchClassSchedule>> iterator = resultMap.entrySet().iterator(); iterator.hasNext();) {
+		    entry = (Entry<String,SchClassSchedule>)iterator.next();
+		    map.put(entry.getKey(), entry.getValue());
+		    
+		}
+		
+		return true ;
+	}
+	
+	/**
+	 * 初始化该科目下(班主任角色上传的视频,非指定过去的视频);视频链接:视频课程   map对象
+	 * @param collegeCourse
+	 * @param map
+	 * @return
+	 */
+	public Result doInitVideoObject(MediaVideo video){
+		
+		// m3u8前缀
+		String prefixVideoPath = aliOssConfig.getVideoOssAddress() + "/" +aliOssConfig.getVideoOssDomain()+ "/" ;
+		
+		if(StringUtils.isNotBlank(video.getIosHD()) &&
+				video.getIosHD().startsWith(prefixVideoPath) &&
+				video.getIosHD().endsWith(m3u8Suffix) ){
+			video.setObjectHd(video.getIosHD().substring(prefixVideoPath.length()));
+		}
+		
+		if(StringUtils.isNotBlank(video.getIosSD()) &&
+				video.getIosSD().startsWith(prefixVideoPath) &&
+				video.getIosSD().endsWith(m3u8Suffix) ){
+			video.setObjectSd(video.getIosSD().substring(prefixVideoPath.length()));
+		}
+
+		if(StringUtils.isNotBlank(video.getIosLD()) &&
+				video.getIosLD().startsWith(prefixVideoPath) &&
+				video.getIosLD().endsWith(m3u8Suffix) ){
+			video.setObjectLd(video.getIosLD().substring(prefixVideoPath.length()));
+		}
+		
+		TraceUtils.setCreateTrace(video);
+		this.saveVideo(video);
+		
+		return new Result(true) ;
+	}
+	
+	/**
+	 * 日志记录
+	 * @param operator
+	 * @param classId
+	 * @param collegeCourseId
+	 * @return
+	 */
+	private Result doInsertRegLog(String operator,String classId,String collegeCourseId  ){
+		
+		SysLog lg = new SysLog();
+
+		TraceUtils.setCreateActiveTrace(lg);
+		lg.setDeleteFlag(false);
+		lg.setContent(operator + ":" + classId );
+		lg.setDesp(collegeCourseId);
+		lg.setModule("ORG_VIDEO_SCHEULE_INIT");
+		lg.setType(SysLog.LOG_TYPE_BUSINESS);
+		
+		
+		if( null != ClientUtils.getUserInfo()){
+			lg.setUserId(ClientUtils.getUserId());
+			lg.setUserName(ClientUtils.getUserName());
+		}else{
+			lg.setUserId("admin");
+			lg.setUserName("admin");
+		}
+		
+		save(lg);
+		
+		return new Result(true);
+		
+	}
+	/**
+	 * 添加播放次数
+	 */
+	@Override
+	public boolean addPlayTimes(String videoId) {
+		return mediaVideoDAO.addPlayTimes(videoId);
+	}
+	
+	/**
+	 * 编排数据
+	 * @param data 需要编排的数据
+	 */
+	public Result doReOrderVideo(List<String> ids, List<Integer> index){
+		// 循环修改order
+		CommonDAO commonDAO = this.getCommonDAO();
+		for( int i=0;i< ids.size();i++){
+			String videoId = ids.get(i);
+			if(UserInfoWrapper.ROLE_TEACHER.equals(ClientUtils.getCurrentRole()) || UserInfoWrapper.ROLE_CHARGER.equals(ClientUtils.getCurrentRole())){
+				commonDAO.bulkUpdate("update MediaVideo set videoOrder = " + index.get(i) + " where videoId = ?", new Object[] { videoId });
+			}else{
+				commonDAO.bulkUpdate("update MediaVideoReCourse set videoOrder = " + index.get(i) + " where videoId = ?", new Object[] { videoId });
+			}
+			commonDAO.bulkUpdate("update SchCourseware set orderNum = " + index.get(i) + " where id = ?", new Object[] { videoId });
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 判断是否数字
+	 * @param str
+	 * @return
+	 */
+	public boolean isNumeric(String str){
+	   Pattern pattern = Pattern.compile("[0-9]*");
+	   Matcher isNum = pattern.matcher(str);
+	   return isNum.matches();
+	}
+	
+
+
+	/**************************** 初始化数据的方法开始 ******************/
+	@Override
+	public Result doInitCourseReVideoOrder(Organization org){
+		
+		// 获取每个机构下有哪些科目
+		String hql = "select distinct r.collegeCourseId from MediaVideoReCourse r where r.deleteFlag is false and r.orgId = ? ";
+		List<String> re = this.find(hql, CollectionUtils.newList(org.getOrganizationId()), String.class);
+		
+		if(re.isEmpty()){
+			return new Result(true);
+		}
+		
+		// 循环机构,科目下的视频  编排序号,两层循环逻辑清晰
+		for( String  collegeCourseId :  re ){
+			this.doInitCourseReVideoOrder(org.getOrganizationId(),collegeCourseId);
+		}
+		
+		return new Result(true);
+	}
+	
+	private Result doInitCourseReVideoOrder(String orgId, String collegeCourseId){
+		
+		String hql = "from MediaVideoReCourse r where r.deleteFlag is false and r.orgId = ? and r.collegeCourseId = ? ";
+		List<MediaVideoReCourse> lstMediaVideoReCourse = this.find(hql, CollectionUtils.newList(orgId,collegeCourseId), MediaVideoReCourse.class);
+		
+		if(lstMediaVideoReCourse.isEmpty()){
+			return new Result(true);
+		}
+		
+		int iOrder = 1;
+		for(MediaVideoReCourse obj : lstMediaVideoReCourse){
+			obj.setVideoOrder(iOrder);
+			iOrder++;
+		}
+		
+		this.saveOrUpdateAll(lstMediaVideoReCourse);
+		
+		return new Result(true);
+	}
+	/**
+	 * 初始化班级课程
+	 */
+	@Override
+	public Result doInitClassSubject(ClsClass cls){
+		
+		// 1. init SchClassSubject
+		Map<String,String> map = this.doInitClassSubject(cls.getClassId(),cls.getCollegeCourseId());
+		
+		// 2. init mediavideo 的  subjectId, subjectName
+		if(null == map || map.isEmpty()){
+			return new Result(true);
+		}
+		
+		doInitMediaSubject(map,cls.getClassId());
+		
+		
+		return new Result(true);
+		
+	}
+	
+	private Map<String,String> doInitClassSubject(String classId,String collegeCourseId){
+		// 拿有视频的课程
+		String videoHql = "select distinct s.name from SchClassSchedule s, SchReLessonVideo r, MediaVideo v where " +
+				"s.deleteFlag is false and r.deleteFlag is false and  v.deleteFlag is false " +
+				"and s.classScheduleId = r.classScheduleId  and  r.videoId = v.videoId " +
+				"and s.classId = ? " ;
+		
+		// 拿有讲义的课程
+		String handoutHql = "select distinct s.name from SchHandout h,SchClassSchedule s " +
+				"where s.deleteFlag is false and h.deleteFlag is false " +
+				"and s.classScheduleId = h.classScheduleId " +
+				"and s.classId = ?  "; 
+		
+		List<String> videoNames = this.find(videoHql, CollectionUtils.newList(classId), String.class);
+		List<String> handoutNames = this.find(handoutHql, CollectionUtils.newList(classId), String.class);
+		
+		// 去重
+		HashSet<String> nameSet =new HashSet<String>();
+		for(String video : videoNames){
+			nameSet.add(video);
+		}
+		for(String video : handoutNames){
+			nameSet.add(video);
+		}
+		
+		if(nameSet.isEmpty()){
+			return null ;
+		}
+		
+		// 构造   SchClassSubject  的 List
+		List<SchClassSubject> lstSubjects = new ArrayList<SchClassSubject>(nameSet.size());
+		SchClassSubject classSubject ;
+		for (String name : nameSet) {  
+		      
+			classSubject = new  SchClassSubject();
+			TraceUtils.setCreateTrace(classSubject);
+			classSubject.setClassId(classId);
+			classSubject.setCourseId(collegeCourseId);
+			classSubject.setName(name);
+			
+			lstSubjects.add(classSubject);
+			
+		}
+		
+		if(!lstSubjects.isEmpty()){
+			this.saveOrUpdateAll(lstSubjects);
+			
+			Map<String,String> map =  new HashMap<String,String>();
+			for(SchClassSubject subject : lstSubjects){
+				map.put(subject.getName(), subject.getClassSubjectId());
+			}
+			
+			return map;
+		}
+		
+		return null ;
+	}
+	
+	private Result doInitMediaSubject(Map<String,String> map,String classId){
+		
+		String hql = "select v,s.name,s.classScheduleId from SchClassSchedule s, SchReLessonVideo r, MediaVideo v where " +
+				"s.deleteFlag is false and r.deleteFlag is false and v.deleteFlag is false " +
+				"and s.classScheduleId = r.classScheduleId and r.videoId = v.videoId " +
+				"and s.classId = ? " ;
+		List<MediaVideo> lstVideos = mediaVideoDAO.queryVideoItem(hql,CollectionUtils.newList(classId));
+		
+		if(lstVideos.isEmpty()){
+			return new Result(true);
+		}
+		
+		for( MediaVideo video : lstVideos ){
+			video.setSubjectId(map.get(video.getClassScheduleName()));
+			video.setSubjectName(video.getClassScheduleName());
+			
+			this.saveVideo(video);
+		}
+		
+		//this.saveOrUpdateAll(lstVideos);
+		
+		return new Result(true);
+	}
+	/**
+	 * 初始化班级媒体信息
+	 */
+	@Override
+	public Result doInitClassMediaInfo(ClsClass cls){
+		
+		String hql = "select v,s.teacher,s.classScheduleId from SchClassSchedule s, SchReLessonVideo r, MediaVideo v where " +
+				"s.deleteFlag is false and r.deleteFlag is false and v.deleteFlag is false " +
+				"and s.classScheduleId = r.classScheduleId and r.videoId = v.videoId " +
+				"and s.classId = ? " +
+				"order by v.subjectId " ;
+		
+		List<MediaVideo> lstVideos = mediaVideoDAO.queryVideoItem(hql, CollectionUtils.newList(cls.getClassId()));
+		
+		if(lstVideos.isEmpty()){
+			return  new Result(true);
+		}
+		
+		int index = 1;
+		for( MediaVideo video : lstVideos ){
+			
+			video.setClassId(cls.getClassId());
+			if(StringUtils.isBlank(video.getTeacherName())){
+				video.setTeacherName(video.getClassScheduleName());
+			}
+			video.setVideoOrder(index);
+			index++;
+			
+			this.saveVideo(video);
+		}
+		
+		//this.saveOrUpdateAll(lstVideos);
+		
+		return new Result(true);
+	}
+	/**
+	 * 初始化班级课程
+	 */
+	@Override
+	public Result doInitSubjectClass(ClsClass cls){
+		
+		String hql = "from SchClassSchedule s where s.deleteFlag is false and s.classId = ? ";
+		List<SchClassSchedule> lstSchedules = this.find(hql, CollectionUtils.newList(cls.getClassId()), SchClassSchedule.class);
+		
+		if(lstSchedules.isEmpty()){
+			return new Result(true);
+		}
+		
+		String hql0 = "from SchClassSubject s where s.deleteFlag is false and s.classId = ? ";
+		List<SchClassSubject> lstSubjects = this.find(hql0, CollectionUtils.newList(cls.getClassId()), SchClassSubject.class);
+		
+		Map<String,String> map = new HashMap<String,String>(lstSubjects.size());
+		//组装map,按照名字匹配
+		for(SchClassSubject subject : lstSubjects){
+			map.put(subject.getName(), subject.getClassSubjectId());
+		}
+		
+		for(SchClassSchedule schedule : lstSchedules ){
+			schedule.setClassSubjectId(map.get(schedule.getName()));
+		}
+		
+		this.saveOrUpdateAll(lstSchedules);
+		
+		return new Result(true);
+	}
+	/**
+	 * 初始化机构课程视频
+	 */
+	@Override
+	public Result doInitOrgVideoSubject(Organization org){
+		
+		// 所有科目
+		String hql = "from OrgCollegeCourse where deleteFlag is false  and topOrgId = ? ";
+		List<OrgCollegeCourse> lstCourses = this.find(hql, CollectionUtils.newList(org.getOrganizationId()), OrgCollegeCourse.class);
+		
+		// 每一个科目是否需要增加课程,增加课程的话,增加课程视频关联
+		if(lstCourses.isEmpty()){
+			return new Result(true);
+		}
+		
+		for(OrgCollegeCourse course : lstCourses){
+			doInitOrgVideoSubject(course);
+		}
+		
+		return new Result(true);
+	}
+	
+	private Result doInitOrgVideoSubject(OrgCollegeCourse course){
+		
+		String hql = "from MediaVideoReCourse c where c.deleteFlag is false and collegeCourseId = ? ";
+		int iCount = this.findCount(hql, CollectionUtils.newList(course.getCollegeCourseId()));
+		
+		if(iCount <= 0){
+			return new Result(true);
+		}
+		
+		// 需要插入公共课程
+		Subject subject = new Subject();
+		subject.setCourseId(course.getCollegeCourseId());
+		subject.setName(publicSubjectName);
+		TraceUtils.setCreateTrace(subject);
+		save(subject);
+		
+		// 维护到视频
+		String hql0 = "select distinct v from MediaVideoReCourse c,MediaVideo v where " +
+				"c.deleteFlag is false and v.deleteFlag is false " +
+				"and c.collegeCourseId = ? " +
+				"and c.videoId = v.videoId ";
+		List<MediaVideo> lstVideos = this.find(hql0, CollectionUtils.newList(course.getCollegeCourseId()), MediaVideo.class);
+		
+		if(lstVideos.isEmpty()){
+			return new Result(true);
+		}
+		
+		for(MediaVideo video : lstVideos){
+			video.setSubjectId(subject.getSubjectId());
+			video.setSubjectName(subject.getName());
+			
+			this.saveVideo(video);
+		}
+		
+		//this.saveOrUpdateAll(lstVideos);
+		
+		// 维护到班级
+		String hql1 = "from ClsClass s where s.deleteFlag is false and s.collegeCourseId = ?  ";
+		List<ClsClass> lstCls = this.find(hql1, CollectionUtils.newList(course.getCollegeCourseId()), ClsClass.class);
+		
+		if(lstCls.isEmpty()){
+			return new Result(true);
+		}
+		
+		List<SchClassSubject> lstSubjects = new ArrayList<SchClassSubject>(lstCls.size());
+		SchClassSubject classSubject ;
+		
+		for(ClsClass cls : lstCls){
+			
+			//如果已经初始化过公共课程,直接将班级的公共课程和管理员的公共课程关联起来
+			String hql3 = "from SchClassSubject s where s.deleteFlag is false and s.name=? and s.classId = ? ";
+			SchClassSubject sub3 = this.findUnique(hql3, CollectionUtils.newList(publicSubjectName,cls.getClassId()), SchClassSubject.class);
+			if(null != sub3){
+				sub3.setOrigSubjectId(subject.getSubjectId());
+				
+				lstSubjects.add(sub3);
+				
+			}else{
+				// 新增公共课程
+				classSubject = new SchClassSubject();
+				
+				TraceUtils.setCreateTrace(classSubject);
+				
+				classSubject.setName(publicSubjectName);
+				classSubject.setClassId(cls.getClassId());
+				classSubject.setOrigSubjectId(subject.getSubjectId());
+				classSubject.setCourseId(course.getCollegeCourseId());
+				
+				lstSubjects.add(classSubject);
+				
+			}
+		}
+		
+		this.saveOrUpdateAll(lstSubjects);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 初始化机构视频
+	 */
+	public Result doInitOrgVideoLeft(MediaVideo video){
+		
+		// 得到科目关联
+		String hql = "select c from  MediaVideoReCourse r ,OrgCollegeCourse c where r.deleteFlag is false and c.deleteFlag is false and r.collegeCourseId = c.collegeCourseId and r.videoId = ?  ";
+		OrgCollegeCourse course = this.findUnique(hql, CollectionUtils.newList(video.getVideoId()), OrgCollegeCourse.class);
+		
+		if( null == course ){
+			return new Result(true);
+		}
+		
+		// 判断是否有  公共课程
+		String hql1 = "select s from SchSubject s where s.deleteFlag is false and s.name = ? and s.courseId = ? ";
+		Subject subject = this.findUnique(hql1, CollectionUtils.newList(publicSubjectName,course.getCollegeCourseId()), Subject.class);
+		
+		// 不存在公共课程
+		if( null == subject ){
+			
+			subject = new Subject();
+			subject.setCourseId(course.getCollegeCourseId());
+			subject.setName(publicSubjectName);
+			TraceUtils.setCreateTrace(subject);
+			save(subject);
+			
+		}
+		
+		video.setSubjectId(subject.getSubjectId());
+		video.setSubjectName(subject.getName());
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 初始化班级视频
+	 */
+	public Result doInitClassVideoLeft(MediaVideo video){
+		
+		String hql = "select s from SchClassSchedule s, SchReLessonVideo r, MediaVideo v where " +
+				"s.deleteFlag is false and r.deleteFlag is false and v.deleteFlag is false " +
+				"and s.classScheduleId = r.classScheduleId and r.videoId = v.videoId " +
+				"and v.videoId = ? " ;
+		
+		SchClassSchedule schedule = this.findUnique(hql, CollectionUtils.newList(video.getVideoId()), SchClassSchedule.class);
+		
+		if(null == schedule ){
+			return new Result(true);
+		}
+		
+		// 查找课次名  是否  存在课程名称
+		String hql1 = "from SchClassSubject s where s.deleteFlag is false and s.name = ? and s.classId = ? ";
+		SchClassSubject classSubject = this.findUnique(hql1, CollectionUtils.newList(schedule.getName(),schedule.getClassId()), SchClassSubject.class);
+		
+		if(null == classSubject){
+			
+			classSubject = new SchClassSubject();
+			TraceUtils.setCreateTrace(classSubject);
+			
+			classSubject.setName(schedule.getName());
+			classSubject.setClassId(schedule.getClassId());
+			classSubject.setCourseId(schedule.getCollegeCourseId());
+			
+			// 判断该科目下是否有该课程 有的话  增加关联
+			String hql2 = "select s from SchSubject s where s.deleteFlag is false and s.name = ? and s.courseId = ? ";
+			Subject subject = this.findUnique(hql2, CollectionUtils.newList(schedule.getName(),schedule.getCollegeCourseId()), Subject.class);
+			
+			if( null != subject ){
+				classSubject.setOrigSubjectId(subject.getSubjectId());
+			}
+			
+			this.save(classSubject);
+			
+		}
+		
+		// 保存:课次  -- 课程 关联
+		if(StringUtils.isBlank(schedule.getSubjectId())){
+			schedule.setSubjectId(classSubject.getClassSubjectId());
+			TraceUtils.setUpdateTrace(schedule);
+			this.save(schedule);
+		}
+		
+		// 保存: order
+		String hql3 = "select MAX(v.videoOrder) from MediaVideo v where v.deleteFlag is false and v.classId = ? ";
+		Integer max = this.findUnique(hql3, CollectionUtils.newList(schedule.getClassId()), Integer.class);
+		
+		if(null == max ){
+			max = 0 ;
+		}
+		
+		// 保存 视频、课程
+		TraceUtils.setUpdateTrace(video);
+		video.setSubjectId(classSubject.getClassSubjectId());
+		video.setSubjectName(classSubject.getName());
+		video.setVideoOrder(max+1);
+		
+		this.saveVideo(video);
+		
+		
+		return new Result(true);
+	}
+	/**
+	 * 初始化班级课程
+	 */
+	@Override
+	public Result doInitClassOrgSubject(OrgCollegeCourse course){
+		
+		String hql = "from ClsClass s where s.deleteFlag is false and s.collegeCourseId = ? ";
+		List<ClsClass> lstClses = this.find(hql, CollectionUtils.newList(course.getCollegeCourseId()), ClsClass.class);
+		
+		if(lstClses.isEmpty()){
+			return  new Result(true);
+		}
+		
+		//下面有班级,获取科目ID
+		String hql0 = "from SchSubject s where s.deleteFlag is false and s.courseId = ? and s.name = ? ";
+		Subject subject = this.findUnique(hql0, CollectionUtils.newList(course.getCollegeCourseId(),publicSubjectName), Subject.class);
+		
+		if(null == subject ){
+			return new Result(true);
+		}
+		
+		// 班主任:该科目 公共课程  下的视频
+		String hql1 = " select m from MediaVideo m where m.deleteFlag is false and m.originVideoId in ( select videoId from MediaVideo v where v.deleteFlag is false and v.subjectId = ? ) and m.subjectId is null  ";
+		List<MediaVideo> lstVideos = this.find(hql1, CollectionUtils.newList(subject.getSubjectId()), MediaVideo.class);
+		
+		Map<String,List<MediaVideo>> map = new HashMap<String,List<MediaVideo>>(5);
+		for( MediaVideo video : lstVideos ){
+			
+			// 包含
+			if(map.containsKey(video.getClassId())){
+				map.get(video.getClassId()).add(video);
+			}else{
+				List<MediaVideo> lstTemps = new ArrayList<MediaVideo>(5);
+				lstTemps.add(video);
+				map.put(video.getClassId(), lstTemps);
+			}
+		}
+		
+		// 循环处理班级的  公共课程关联
+		for(ClsClass cls : lstClses){
+			String schSubjectId = doInitClassOrgSubject(cls.getClassId(), subject.getSubjectId(), course.getCollegeCourseId());
+			
+			if(StringUtils.isNotBlank(schSubjectId) && null != map.get(cls.getClassId())){
+				for( MediaVideo video : map.get(cls.getClassId()) ){
+					video.setSubjectId(schSubjectId);
+				}
+				
+				this.saveOrUpdateAll(map.get(cls.getClassId()));
+			}
+		}
+		
+		return new Result(true);
+	}
+	
+	private String doInitClassOrgSubject(String classId, String subjectId,String collegeCourseId){
+		
+		String hql = "from SchClassSubject s where s.classId = ? and s.deleteFlag is false and s.origSubjectId = ? ";
+		SchClassSubject subject = this.findUnique(hql, CollectionUtils.newList(classId,subjectId), SchClassSubject.class);
+		
+		// 1. 存在公共课程的关联,直接返回
+		if(null != subject){
+			return  subject.getClassSubjectId();
+		}
+		
+		// 2. 不存在公共课程关联,但是存在公共课程
+		String hql0 = "from SchClassSubject s where s.classId = ? and s.deleteFlag is false and s.name = ? and s.origSubjectId is null  ";
+		SchClassSubject classSubject = this.findUnique(hql0, CollectionUtils.newList(classId,publicSubjectName), SchClassSubject.class);
+		
+		if(null != classSubject){
+			TraceUtils.setUpdateTrace(classSubject);
+			classSubject.setOrigSubjectId(subjectId);
+			save(classSubject);
+			
+			return classSubject.getClassSubjectId();
+		}
+		
+		// 3. 没有公共课程,增加关联
+		classSubject = new SchClassSubject();
+		TraceUtils.setCreateTrace(classSubject);
+		
+		classSubject.setName(publicSubjectName);
+		classSubject.setClassId(classId);
+		classSubject.setOrigSubjectId(subjectId);
+		classSubject.setCourseId(collegeCourseId);
+		
+		save(classSubject);
+		
+		return classSubject.getClassSubjectId();
+	}
+	
+	/*************初始化数据的方法结束*******/
+	
+	/**
+	 * 需要转码的视频,插入转码队列记录表
+	 * @param video
+	 * @return
+	 */
+	public Result insertVideoConverTask(MediaVideo video){
+		//mp3文件不转码
+//		if(video.getUrl().indexOf(".mp3") > 0 || video.getUrl().indexOf(".MP3") > 0){
+//			this.bulkUpdate("update MediaVideo v set v.status = ? where v.videoId = ?", new Object[]{MediaVideo.STATUS_DRAFT, video.getVideoId()} );
+//			return new Result(true);
+//		}
+		VideoConverTask task = new VideoConverTask();
+		task.setType(video.getType());
+		task.setVideoId(video.getVideoId());
+		task.setCreateTime(new Date(System.currentTimeMillis()));
+		int iSnapshot = 1 ;
+		if(StringUtils.isNotBlank(video.getCoverPageUrl()) && !FilePathConstants.VIDEO_DEFAULT_IMG.equals(video.getCoverPageUrl())){
+			iSnapshot = 0 ;
+		}
+		task.setNeedSnapshot(iSnapshot);
+		task.setVideoUrl(video.getUrl());
+		// 优先级比默认上传高
+		task.setPriority(5);
+		this.save(task);
+		
+		
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 选择历史视频
+	 * 
+	 */
+	public Result insertChooseVideo(String subjectId, String subjectName, String videoId, String chapterId){
+		MediaVideo objMediaVideo = this.read(MediaVideo.class, videoId);
+		
+		MediaVideo newMediaVideo = new MediaVideo();
+		try {
+			//拷贝属性到新对象
+			BeanUtils.copyProperties(newMediaVideo, objMediaVideo);
+			newMediaVideo.setVideoId(null);
+			newMediaVideo.setSubjectId(subjectId);
+			newMediaVideo.setSubjectName(subjectName);
+			newMediaVideo.setClassId(ClientUtils.getClassId());
+			newMediaVideo.setChapterId(chapterId);
+			newMediaVideo.setCollegeCourseId(ClientUtils.getCourseId());
+			newMediaVideo.setStatus(objMediaVideo.getStatus() == MediaVideo.STATUS_PUBLISHED?MediaVideo.STATUS_DRAFT:objMediaVideo.getStatus());
+			
+			TraceUtils.setCreateTrace(newMediaVideo);
+			
+			this.saveVideo(newMediaVideo);
+		} catch (Exception e) {
+			this.log.error(e);
+		}
+		
+		return new Result(true);
+	}
+	
+	
+	/**
+	 * 转码队列
+	 * 
+	 * @return
+	 */
+	public List<VideoConverTask> getVideoConverTaskList(){
+			
+		StringBuffer hql = new StringBuffer(256);
+		hql.append(" FROM ");
+		hql.append(" VideoConverTask ");
+		hql.append(" WHERE ");
+		hql.append(" status = 0 ");
+		hql.append(" AND deleteFlag = 0 ");
+		hql.append(" AND ( ");
+		hql.append(" 	converLdLock IS NULL ");
+		hql.append(" 	OR converLdLock = '' ");
+		hql.append(" ) ");
+		hql.append(" ORDER BY priority, createTime ASC ");
+			
+		return this.find(hql.toString(), CollectionUtils.newList(), VideoConverTask.class);
+	}
+	
+	/**
+	 * 保存视频接口
+	 * 
+	 * @param video
+	 * @return
+	 */
+	public Result saveVideo(MediaVideo video){
+		Result result = new Result(false);
+		result = this.save(video);
+		if(!"live".equals(video.getVideoSource())){
+			String parentChapterId = null;
+			if(StringUtils.isNotEmpty(video.getChapterId())){
+				SubjectChapter chapter = this.read(SubjectChapter.class, video.getChapterId());
+				parentChapterId = chapter == null?null : chapter.getParentChapterId();
+			}
+			boolean isClass = StringUtils.isNotEmpty(ClientUtils.getClassId()) || StringUtils.isNotEmpty(video.getClassId());
+			SchCourseware courseware = null;
+			if(isClass){
+				courseware = this.findUnique("from SchCourseware where id = ? and classId = ? and deleteFlag is false",
+						CollectionUtils.newList(video.getVideoId(), video.getClassId()), SchCourseware.class);
+			}else{
+				courseware = this.findUnique("from SchCourseware where id = ? and classId is null and deleteFlag is false",
+						CollectionUtils.newList(video.getVideoId()), SchCourseware.class);
+			}
+			
+			if(courseware == null){
+				courseware = new SchCourseware();
+				courseware.setChapterId(video.getChapterId());
+				courseware.setId(video.getVideoId());
+				courseware.setCollegeCourseId(video.getCollegeCourseId());
+				courseware.setcType(-1);
+				courseware.setType(SchCourseware.COURSEWARE_TYPE_VIDEO);
+				courseware.setName(video.getName());
+				courseware.setRemark(String.valueOf(video.getPlayTime()));
+				courseware.setDeleteFlag(video.getDeleteFlag());
+				courseware.setOrderNum(video.getVideoOrder() == null?1000:video.getVideoOrder());
+				courseware.setSubjectId(video.getSubjectId());
+				courseware.setStatus(video.getStatus());
+				courseware.setOrgId(ClientUtils.getOrgId());
+				courseware.setClassId(video.getClassId());
+				courseware.setParentChapterId(parentChapterId);
+				courseware.setScoreValue(new BigDecimal(0.0));
+				
+				TraceUtils.setCreateTrace(courseware);
+			}else{
+				courseware.setChapterId(video.getChapterId());
+				//courseware.setCollegeCourseId(video.getCollegeCourseId());
+				courseware.setcType(-1);
+				courseware.setName(video.getName());
+				courseware.setRemark(String.valueOf(video.getPlayTime()));
+				courseware.setDeleteFlag(video.getDeleteFlag());
+				courseware.setOrderNum(video.getVideoOrder() == null?1000:video.getVideoOrder());
+				courseware.setSubjectId(video.getSubjectId());
+				courseware.setStatus(video.getStatus());
+				courseware.setParentChapterId(parentChapterId);
+				courseware.setScoreValue(new BigDecimal(0.0));
+				TraceUtils.setUpdateTrace(courseware);
+			}
+			
+			this.save(courseware);
+		}
+		return result;
+	}
+
+	@Override
+	public Result doFfmpegMediaTrascode(String videoId, String videoName) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/msg/model/Message.java b/src/main/java/com/qxueyou/scc/msg/model/Message.java
new file mode 100644
index 0000000..41cf3b4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/Message.java
@@ -0,0 +1,380 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.BaseVO;
+
+
+/**
+ * 消息聊天记录表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="message")
+@NamedQuery(name="Message.findAll", query="SELECT m FROM Message m")
+public class Message extends BaseVO implements Serializable, com.qxueyou.scc.base.model.ITrace {
+	private static final long serialVersionUID = 1L;
+
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="MESSAGE_ID", unique=true, nullable=false, length=32)
+	private String messageId;
+
+	/** 内容  */
+	@Column(name="CONTENT", nullable=false, length=5000)
+	private String content;
+
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/** 创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/** 接收人ID  */
+	@Column(name="RECEIVER_ID", length=32)
+	private String receiverId;
+
+	/** 接收人  */
+	@Column(name="RECEIVER", length=64)
+	private String receiver;
+
+	/** 发送人ID  */
+	@Column(name="SENDER_ID", length=32)
+	private String senderId;
+
+	/** 发送人  */
+	@Column(name="SENDER", length=64)
+	private String sender;
+
+	/** 状态  */
+	@Column(name="STATUS", length=32)
+	private boolean status;
+
+	/** 修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/** 修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人  */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	/** 群标志:0否  1是  */
+	@Column(name="GROUP_FLAG")
+	private boolean groupFlag;
+
+	/**   */
+	@Column(name="ATTRIBUTE_1",length=256)
+	private String attribute1;
+
+	/**   */
+	@Column(name="ATTRIBUTE_2",length=128)
+	private String attribute2;
+
+	/**   */
+	@Column(name="ATTRIBUTE_3",length=128)
+	private String attribute3;
+
+	/**   */
+	@Column(name="ATTRIBUTE_4",length=128)
+	private String attribute4;
+
+	/**   */
+	@Column(name="ATTRIBUTE_5",length=128)
+	private String attribute5;
+
+	/**   */
+	@Column(name="ATTRIBUTE_6",length=256)
+	private String attribute6;
+
+	/** 消息类型:INFO,正常消息; FRIEND_REQ,加好友请求;FRIEND_RSP,好友请求答复; GROUP_REQ,加群请求;GROUP_REQ,加群请求答复;  GROUP_BREAKUP, 群解散;
+	 * SYS_MSG 系统消息;ORG机构介绍预览; CLASS 班级介绍预览 ; LESSON 课程介绍预览  ; CHAT_ROOM 聊天室消息*/
+	@Column(name="MSG_TYPE",length=32)
+	private String msgType;
+	
+	/*
+	 * 消息类型(INFO,正常消息;)
+	 */
+	public static final String TYPE_INFO = "INFO";
+	
+	/*
+	 * 消息类型(FRIEND_REQ,加好友请求;)
+	 */
+	public static final String TYPE_FRIEND_REQ = "FRIEND_REQ";
+	
+	/*
+	 * 消息类型(FRIEND_RSP,好友请求答复; )
+	 */
+	public static final String TYPE_FRIEND_RSP = "FRIEND_RSP";
+	
+	/*
+	 * 消息类型(GROUP_REQ,加群请求;)
+	 */
+	public static final String TYPE_GROUP_REQ = "GROUP_REQ";
+	
+	/*
+	 * 消息类型(GROUP_RSP,加群请求答复;)
+	 */
+	public static final String TYPE_GROUP_RSP = "GROUP_RSP";
+	
+	/*
+	 * 消息类型(GROUP_BREAKUP, 群解散)
+	 */
+	public static final String TYPE_GROUP_BREAKUP = "GROUP_BREAKUP";
+	
+	/*
+	 * 消息类型(SYS_MSG, 系统消息)
+	 */
+	public static final String TYPE_SYS_MSG = "SYS_MSG";
+	
+	/*
+	 * 消息类型(ORG_INTRODUCE, 机构介绍预览)
+	 */
+	public static final String TYPE_ORG_INTRODUCE = "ORG";
+	
+	/*
+	 * 消息类型(CLASS_INTRODUCE, 班级介绍预览)
+	 */
+	public static final String TYPE_CLASS_INTRODUCE = "CLASS";
+	
+	/*
+	 * 消息类型(LESSON_INTRODUCE, 课程介绍预览)
+	 */
+	public static final String TYPE_LESSON_INTRODUCE = "LESSON";
+	
+	/*
+	 * 消息类型(CHAT_ROOM, 聊天室消息)
+	 */
+	public static final String TYPE_CHAT_ROOM = "CHATROOM";
+	
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+
+	public boolean isGroupFlag() {
+		return groupFlag;
+	}
+
+
+
+	public void setGroupFlag(boolean groupFlag) {
+		this.groupFlag = groupFlag;
+	}
+
+
+
+	public String getMessageId() {
+		return this.messageId;
+	}
+
+	public void setMessageId(String messageId) {
+		this.messageId = messageId;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+
+	public String getReceiverId() {
+		return this.receiverId;
+	}
+
+	public void setReceiverId(String receiverId) {
+		this.receiverId = receiverId;
+	}
+
+	public String getSenderId() {
+		return this.senderId;
+	}
+
+	public void setSenderId(String senderId) {
+		this.senderId = senderId;
+	}
+
+	public boolean isStatus() {
+		return this.status;
+	}
+
+	public void setStatus(boolean status) {
+		this.status = status;
+	}
+	
+	public String getReceiver() {
+		return receiver;
+	}
+
+	public void setReceiver(String receiver) {
+		this.receiver = receiver;
+	}
+
+	public String getSender() {
+		return sender;
+	}
+
+	public void setSender(String sender) {
+		this.sender = sender;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	@Override
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag=deleteFlag;
+		
+	}
+
+	@Override
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime=updateTime;
+	}
+
+
+	public String getMsgType() {
+		return msgType;
+	}
+
+
+	public void setMsgType(String msgType) {
+		this.msgType = msgType;
+	}
+
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+
+
+	public String getAttribute3() {
+		return attribute3;
+	}
+
+
+	public void setAttribute3(String attribute3) {
+		this.attribute3 = attribute3;
+	}
+	
+	public String getAttribute4() {
+		return attribute4;
+	}
+
+
+	public void setAttribute4(String attribute4) {
+		this.attribute4 = attribute4;
+	}
+
+
+	public String getAttribute5() {
+		return attribute5;
+	}
+
+
+	public void setAttribute5(String attribute5) {
+		this.attribute5 = attribute5;
+	}
+	
+	public String getAttribute6() {
+		return attribute6;
+	}
+
+	public void setAttribute6(String attribute6) {
+		this.attribute6 = attribute6;
+	}
+	
+	public String toString(){
+		return ToStringBuilder.reflectionToString(this);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java b/src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java
new file mode 100644
index 0000000..92d8bd1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java
@@ -0,0 +1,184 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+
+/**
+ * 消息用户表  实体
+ * @author ody.yuan
+ *
+ */
+public class MsgChatroomMsg implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/****0、正常消息,1、进入消息,2、退出消息,3、点赞消息,4、签到消息,5、抽奖消息(中奖名单),7、文档,8、赏,9、咨询***/
+	public static final int TYPE_NORMAL = 0, TYPE_ENTER = 1, TYPE_EXIT = 2, TYPE_PRAISE = 3, TYPE_LOTTERY = 4, TYPE_LOTTERY_RESULT = 5, TYPE_DOC = 7, TYPE_REWARD = 8, TYPE_CONSULT = 9;
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="MSG_ID", unique=true, nullable=false, length=32)
+	private Long msgId;
+	
+	/** 房间ID */
+	@Column(name="CHATROOM_ID")
+	private String chatroomId;
+	
+	/** 消息类型 */
+	@Column(name="TYPE")
+	private Integer type;
+	
+	/** 消息内容 */
+	@Column(name="CONTENT")
+	private String content;
+	
+	/** 创建者ID  */
+	@Column(name="SENDER_ID", length=32)
+	private String senderId;
+	
+	/** 发送者昵称 */
+	@Column(name="ALIAS")
+	private String alias;
+	
+	/** 发送者头像 */
+	@Column(name="IMG_PATH")
+	private String imgPath;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+	
+	public static final String USER_TYPE_TEACHER = "1";
+	
+	public static final String USER_TYPE_USER = "0";
+	
+	/** 用户类型 */
+	@Column(name="USER_TYPE")
+	private String userType;
+
+	public Long getMsgId() {
+		return msgId;
+	}
+
+	public void setMsgId(Long msgId) {
+		this.msgId = msgId;
+	}
+
+	public String getChatroomId() {
+		return chatroomId;
+	}
+
+	public void setChatroomId(String chatroomId) {
+		this.chatroomId = chatroomId;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getSenderId() {
+		return senderId;
+	}
+
+	public void setSenderId(String senderId) {
+		this.senderId = senderId;
+	}
+
+	public String getAlias() {
+		return alias;
+	}
+
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUserType() {
+		return userType;
+	}
+
+	public void setUserType(String userType) {
+		this.userType = userType;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((chatroomId == null) ? 0 : chatroomId.hashCode());
+		result = prime * result + ((senderId == null) ? 0 : senderId.hashCode());
+		result = prime * result + ((type == null) ? 0 : type.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj){
+			return true;
+		}
+		if (obj == null){
+			return false;
+		}
+		if (getClass() != obj.getClass()){
+			return false;
+		}
+		MsgChatroomMsg other = (MsgChatroomMsg) obj;
+		if (chatroomId == null) {
+			if (other.chatroomId != null){
+				return false;
+			}
+		} else if (!chatroomId.equals(other.chatroomId)){
+			return false;
+		}
+		if (senderId == null) {
+			if (other.senderId != null){
+				return false;
+			}
+		} else if (!senderId.equals(other.senderId)){
+			return false;
+		}
+		if (type == null) {
+			if (other.type != null){
+				return false;
+			}
+		} else if (!type.equals(other.type)){
+			return false;
+		}
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java b/src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java
new file mode 100644
index 0000000..01c6564
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java
@@ -0,0 +1,150 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 消息好友表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="msg_friend")
+@NamedQuery(name="MsgFriend.findAll", query="SELECT m FROM MsgFriend m")
+public class MsgFriend implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="FRIEND_ID", unique=true, nullable=false, length=32)
+	private String friendId;
+
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	private Date createTime;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  修改者ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	/**  来自好友ID */
+	@Column(name="USER_ID_FROM", length=32)
+	private String userIdFrom;
+
+	/**  结识好友ID  */
+	@Column(name="USER_ID_TO", length=32)
+	private String userIdTo;
+
+	public MsgFriend() {
+	}
+
+	public String getFriendId() {
+		return this.friendId;
+	}
+
+	public void setFriendId(String friendId) {
+		this.friendId = friendId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserIdFrom() {
+		return this.userIdFrom;
+	}
+
+	public void setUserIdFrom(String userIdFrom) {
+		this.userIdFrom = userIdFrom;
+	}
+
+	public String getUserIdTo() {
+		return this.userIdTo;
+	}
+
+	public void setUserIdTo(String userIdTo) {
+		this.userIdTo = userIdTo;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java b/src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java
new file mode 100644
index 0000000..c7a70c8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java
@@ -0,0 +1,261 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.Lob;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 消息群表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="msg_group")
+@NamedQuery(name="MsgGroup.findAll", query="SELECT m FROM MsgGroup m")
+public class MsgGroup implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  群ID  */
+	@Id
+	@Column(name="GROUP_ID", unique=true, nullable=false, length=32)
+	private String groupId;
+	
+	/**
+	 * 环信群组ID
+	 */
+	@Column(name="EASEMOB_GROUP_ID", length=32)
+	private String easmobGroupId;
+
+	/**  创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**   创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	private Date createTime;
+
+	/**   创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**   删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**   描述 */
+	@Column(name="DESCRIPTION", length=2000)
+	private String description;
+
+	/**   名称 */
+	@Column(name="NAME", length=64)
+	private String name;
+
+	/**   头像  */
+	@Lob
+	@Column(name="PORTRIAIT",length=512)
+	private String portriait;
+
+	/**   修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**   修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR",length=100)
+	private String updator;
+	
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinTable(name = "msg_group_user_re", joinColumns = { 
+			@JoinColumn(name = "GROUP_ID") }, 
+			inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@CollectionId(
+		        columns = @Column(name="RELATION_ID"), 
+		        type=@Type(type="string"), 
+		        generator = "hibernate-uuid"
+		    )
+	@JsonIgnore
+	private List<MsgUser> users;
+	
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinTable(name = "msg_group_admin", joinColumns = { 
+			@JoinColumn(name = "GROUP_ID") }, 
+			inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@CollectionId(
+		        columns = @Column(name="GROUP_ADMIN_ID"), 
+		        type=@Type(type="string"), 
+		        generator = "hibernate-uuid"
+		    )
+	@JsonIgnore
+	private List<MsgUser> admins;
+
+	@Transient
+	private int msgUserCount;
+
+	public int getMsgUserCount() {
+		return msgUserCount;
+	}
+
+	public void setMsgUserCount(int msgUserCount) {
+		this.msgUserCount = msgUserCount;
+	}
+
+	public List<MsgUser> getUsers() {
+		return users;
+	}
+
+	public void setUsers(List<MsgUser> users) {
+		this.users = users;
+	}
+	
+	public String getNameInitial(){
+//		return name!=null?"#".concat(Unidecode.initials(name.substring(0, 1))):"";
+		return name!=null?"#".concat(UUIDUtils.generateShortUuid()):"";
+	}
+
+	public MsgGroup() {
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPortriait() {
+		return this.portriait;
+	}
+
+	public void setPortriait(String portriait) {
+		this.portriait = portriait;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public void setCreateTime(java.util.Date createTime) {
+		this.createTime = createTime;
+		
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	@Override
+	public void setUpdateTime(java.util.Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public List<MsgUser> getAdmins() {
+		return admins;
+	}
+
+	public void setAdmins(List<MsgUser> admins) {
+		this.admins = admins;
+	}
+	
+	public int getUserCount(){
+		return this.users.size();
+	}
+
+	public String getEasmobGroupId() {
+		return easmobGroupId;
+	}
+
+	public void setEasmobGroupId(String easmobGroupId) {
+		this.easmobGroupId = easmobGroupId;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java b/src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java
new file mode 100644
index 0000000..86392aa
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java
@@ -0,0 +1,151 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+
+/**
+ * 群-用户 关联表实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="msg_group_user_re")
+@NamedQuery(name="MsgGroupUserRe.findAll", query="SELECT m FROM MsgGroupUserRe m")
+public class MsgGroupUserRe implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  群ID  */
+	@Column(name="GROUP_ID", length=32)
+	private String groupId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	private Date updateTime;
+
+	/**  修改人  */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	/**  用户ID  */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	public MsgGroupUserRe() {
+	}
+
+	public String getRelationId() {
+		return this.relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java b/src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java
new file mode 100644
index 0000000..0da427d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java
@@ -0,0 +1,187 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the msg_info database table.
+ * 
+ */
+@Entity
+@Table(name="msg_info")
+@NamedQuery(name="MsgInfo.findAll", query="SELECT e FROM MsgInfo e")
+public class MsgInfo implements Serializable, ITrace {
+	/**
+	 *UID 
+	 */
+	private static final long serialVersionUID = 3543065009677784163L;
+	
+	//消息类型(1:公告 ,2:考试,3:作业,4:直播,5:课件,6:问卷,7:老师批阅,8:提醒)	
+	public final static short TYPE_NOTICE = 1;
+	
+	public final static short TYPE_EXAM= 2;
+	
+	public final static short TYPE_EXERCISE= 3;
+	
+	public final static short TYPE_LIVE = 4;
+	
+	public final static short TYPE_COURSEWARE = 5;
+		
+	public final static short TYPE_EVALUATE = 6; 
+	
+	public final static short TYPE_CHECK = 7;
+	
+	public final static short TYPE_REMIND = 8;
+	
+	//是否是新消息(0:未读,1:已读)
+	public static final short READ_NOT = 0;
+	
+	public static final short READ_YES = 1;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="MSG_ID", unique=true, nullable=false, length=32)
+	private String msgId;
+	
+	private short type;
+	
+	@Column(name="content")
+	private String  content;
+
+	@Column(name="RECEIVER_ID")
+	private String receiverId;
+	
+	@Column(name="READ_FLAG")
+	private String readFlag;
+	
+	@Column(name="CREATE_ID")
+	private String createId;
+	
+	private String creator;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+	
+	private String updator;
+	
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public short getType() {
+		return this.type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getMsgId() {
+		return msgId;
+	}
+
+	public void setMsgId(String msgId) {
+		this.msgId = msgId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getReceiverId() {
+		return receiverId;
+	}
+
+	public void setReceiverId(String receiverId) {
+		this.receiverId = receiverId;
+	}
+
+	public String getReadFlag() {
+		return readFlag;
+	}
+
+	public void setReadFlag(String readFlag) {
+		this.readFlag = readFlag;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/model/MsgUser.java b/src/main/java/com/qxueyou/scc/msg/model/MsgUser.java
new file mode 100644
index 0000000..36b4163
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/model/MsgUser.java
@@ -0,0 +1,312 @@
+package com.qxueyou.scc.msg.model;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.notice.model.Notice;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 消息用户表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="msg_user")
+@NamedQuery(name="MsgUser.findAll", query="SELECT m FROM MsgUser m")
+public class MsgUser implements Serializable , com.qxueyou.scc.base.model.ITrace{
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@Column(name="USER_ID", unique=true, nullable=false, length=32)
+	private String userId;
+
+	/**  账号  */
+	@Column(name="ACCOUNT",length=64)
+	private String account;
+
+	/**  年龄  */
+	@Column(name="AGE")
+	private int age;
+
+	/**  昵称  */
+	@Column(name="ALIAS",length=64)
+	private String alias;
+
+	/**  生日,暂时默认数据生成时间  */
+	@Column(name="BIRTHDAY")
+	private Date birthday;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  密码  */
+	@Column(name="PASSWORD", length=2048)
+	private String password;
+
+	/**  头像  */
+	@Column(name="PORTRAIT", length=512)
+	private String portrait;
+
+	/**   用户名  */
+	@Column(name="REAL_NAME", length=32)
+	private String realName;
+
+	/**  性别  */
+	@Column(name="SEX")
+	private boolean sex;
+
+	/**   修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**   修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
+	@JoinTable(name = "MSG_FRIEND", joinColumns = { 
+			@JoinColumn(name = "USER_ID_FROM") }, 
+			inverseJoinColumns = { @JoinColumn(name = "USER_ID_TO") })
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@CollectionId(
+		        columns = @Column(name="FRIEND_ID"), 
+		        type=@Type(type="string"), 
+		        generator = "hibernate-uuid"
+		    )
+	@JsonIgnore
+	private List<MsgUser> friends;
+	
+	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "friends")
+	@JsonIgnore
+	private List<MsgUser> friendsOf;
+	
+	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
+	@JsonIgnore
+	private List<MsgGroup> groups;
+	
+	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "admins")
+	@JsonIgnore
+	private List<MsgGroup> adminGroups;
+
+	public String getAliasInitial(){
+		if(Notice.NOTICE_ORG_MSG_USER_ID.equals(userId)){//学校通知
+			return "#0";
+		}else if(Notice.NOTICE_CLASS_MSG_USER_ID.equals(userId)){//班级通知
+			return "#1";
+		}else if(Notice.NOTICE_SYS_MSG.equals(userId)){//系统通知
+			return "#2";
+		}else if("qxueyou_assistant".equals(userId)){//智能客服
+			return "#3";
+		}
+		
+		return alias!=null?UUIDUtils.generateShortUuid():"";
+	}
+	
+	public List<MsgGroup> getGroups() {
+		return groups;
+	}
+
+	public void setGroups(List<MsgGroup> groups) {
+		this.groups = groups;
+	}
+
+	public List<MsgUser> getFriends() {
+		return friends;
+	}
+
+	public void setFriends(List<MsgUser> friends) {
+		this.friends = friends;
+	}
+
+	public List<MsgUser> getFriendsOf() {
+		return friendsOf;
+	}
+
+	public void setFriendsOf(List<MsgUser> friendsOf) {
+		this.friendsOf = friendsOf;
+	}
+
+	public void setBirthday(Date birthday) {
+		this.birthday = birthday;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public MsgUser() {
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getAccount() {
+		return this.account;
+	}
+
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	public int getAge() {
+		return this.age;
+	}
+
+	public void setAge(int age) {
+		this.age = age;
+	}
+
+	public String getAlias() {
+		return this.alias;
+	}
+
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+
+	public Date getBirthday() {
+		return this.birthday;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Timestamp createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public String getPassword() {
+		return this.password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getPortrait() {
+		return this.portrait;
+	}
+
+	public void setPortrait(String portrait) {
+		this.portrait = portrait;
+	}
+
+	public String getRealName() {
+		return this.realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+	
+	public boolean getSex() {
+		return sex;
+	}
+
+	public void setSex(boolean sex) {
+		this.sex = sex;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag=deleteFlag;
+	}
+	
+	public String getImgUrl() {
+		return this.portrait;
+	}
+
+	public void setImgImgUrl(String imgPath) {
+		this.portrait = imgPath;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/msg/service/IChatroomMsgService.java b/src/main/java/com/qxueyou/scc/msg/service/IChatroomMsgService.java
new file mode 100644
index 0000000..5d4178f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/service/IChatroomMsgService.java
@@ -0,0 +1,14 @@
+package com.qxueyou.scc.msg.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface IChatroomMsgService {
+	
+	Result doSendMessage(String chatroomId, String senderId, String imgPath, String alias, String content, Integer type, String userType);
+
+	Result latestMsg(String chatroomId);
+
+	Result getHistoryMes(String chatroomId, Integer pageNo);
+	
+	Long getViewCount(String chatroomId);
+}
diff --git a/src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java b/src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java
new file mode 100644
index 0000000..9e51011
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java
@@ -0,0 +1,101 @@
+package com.qxueyou.scc.msg.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.msg.model.MsgInfo;
+
+/**
+ * 消息服务
+ * 
+ * @author kevin
+ *
+ */
+public interface IMsgInfoService {
+	/**
+	 * 查询消息列表
+	 */
+	List<MsgInfo> list(Short type,Integer pageSize,Integer pageNum);
+	
+	/**
+	 * 查询消息列表数量
+	 */
+	int listCount(Short type);
+	
+	/**
+	 *  删除消息
+	 * @param msgIds
+	 * @return
+	 */
+	Result deleteUserMsg(String [] msgIds);
+
+	/**
+	 * 清空个人消息
+	 * @param type
+	 * @return
+	 */
+	Result deleteAllUserMsg(Short type);
+	
+	/**
+	 *  修改已读标志位
+	 * @param msgId
+	 * @return
+	 */
+	Result updateReadStatus(String [] msgIds);
+	
+	
+	/**
+	 *  修改已读标志位
+	 * @param type
+	 * @return
+	 */
+	Result updateUserAllReadStatus(Short type);
+	
+	/**
+	 * 发送消息给多个用户
+	 * @param userIdsToArr
+	 * @param Type
+	 * @param msg
+	 * @return
+	 */
+	public Result doSendTextMsgToUsers(String[] userIdsToArr,short Type,String msg); 
+
+	/**
+	 * 发送带属性参数的消息给用户
+	 * @param userIdsToArr
+	 * @param Type
+	 * @param msg
+	 * @param attrs
+	 * @return
+	 */
+	public Result doSendTextMsgToUsers(String[] userIdsToArr,short Type,String msg,Map<String,String> attrs);
+	
+	/**
+	 * 分批发送通知
+	 * @param userIdList
+	 * @param Type
+	 * @param content
+	 * @param extra
+	 */
+	public void doSendTextMsgToUsersLoop(List<String> userIdList,short Type,String content, Map<String,String> extra);
+	
+	/**
+	 * 获取最近的提醒消息
+	 * @return
+	 */
+	public MsgInfo readLastRemindMsg();
+	
+	/**
+	 * 按类型查询未读消息
+	 * @return
+	 */
+	Map<String, Object> queryUnReadMsgCountByType();
+	
+	/**
+	 * 查询未读消息总数
+	 * @return
+	 */
+	int queryUnReadTotalCount();
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java b/src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java
new file mode 100644
index 0000000..3c39294
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java
@@ -0,0 +1,310 @@
+package com.qxueyou.scc.msg.service.impl;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.msg.model.MsgChatroomMsg;
+import com.qxueyou.scc.msg.service.IChatroomMsgService;
+
+@Service
+public class ChatroomMessageBean implements IChatroomMsgService {
+
+	@Autowired
+	ICacheService redis;
+
+	private static final int PAGE_SIZE = 20;
+
+	private static final String CACHEKEY_MSG_QUEUE = "msg_chatroom_msg_"; // 实时消息队列
+	private static final String CACHEKEY_MESSAGE_A_COUNT = "msg_chatroom_message_count_"; // A类消息总数
+	private static final String CACHEKEY_MESSAGE_HISTORY = "msg_chatroom_msg_history_"; //历史消息
+	
+	private static final String CACHEKEY_ONLINE_COUNT = "msg_chatroom_online_count_"; // 在线人数
+	private static final String CACHEKEY_PRAISE_COUNT = "msg_chatroom_praise_count_"; // 点赞数
+	private static final String CACHEKEY_LOTTERY_COUNT = "msg_chatroom_lottery_count_"; // 签到数
+	private static final String CACHEKEY_VIEW_COUNT = "msg_chatroom_view_count_"; // 浏览数
+	private static final String CACHEKEY_LOTTERY_RESULT_COUNT = "msg_chatroom_lottery_result_count_"; //中奖结果
+	private static final String CACHEKEY_REWARD_COUNT = "msg_chatroom_reward_count_"; //打赏次数
+	private static final String CACHEKEY_CONSULT_COUNT = "msg_chatroom_consult_count_"; //咨询次数
+	private static final String CACHEKEY_REWARD_AMOUNT = "msg_chatroom_reward_amount_"; //打赏金额
+
+	/**
+	 * 发送消息
+	 */
+
+	@Override
+	public Result doSendMessage(String chatroomId, String senderId,
+			String imgPath, String alias, String content, Integer type, String userType) {
+
+		MsgChatroomMsg mes = new MsgChatroomMsg();
+		mes.setMsgId(redis.incr("ChatroomMsgId"));
+		mes.setChatroomId(chatroomId);
+		mes.setSenderId(senderId);
+		mes.setContent(content);
+		mes.setType(type);
+		mes.setAlias(alias);
+		mes.setUserType(userType);
+		mes.setImgPath(imgPath);
+		mes.setCreateTime(new Date());
+
+		//缓存消息
+		this.msgCache(chatroomId, mes);
+		this.msgTypeCountCache(chatroomId, type);
+		                    
+		return new Result(true, null, mes);
+
+	}
+	
+	/**
+	 * 聊天消息剪切,
+	 * 
+	 * @param chatroomId
+	 */
+	@Deprecated
+	private void msgListTrim(String key, String chatroomId){
+		List<MsgChatroomMsg> mesList = redis.lstRange(key, 0l, -1l);
+		if(mesList != null && !mesList.isEmpty()){
+			if(mesList.size() <= PAGE_SIZE){
+				return;
+			}
+			long index = 0;
+			long time = System.currentTimeMillis();
+			for(MsgChatroomMsg msg : mesList){
+				if(time - msg.getCreateTime().getTime()<= 10000){
+					break;
+				}
+				index ++;
+			}
+			//保留20条
+			redis.lstTrim(key, mesList.size() - index <= 20?mesList.size()-20:index, -1l);
+		}
+	}
+	
+	/**
+	 * 缓存消息
+	 * 
+	 * @param chatroomId
+	 * @param mes
+	 */
+	private void msgCache(String chatroomId, MsgChatroomMsg mes){
+		String key = CACHEKEY_MSG_QUEUE + chatroomId;		
+		
+		//先获取10秒内的数据
+//		this.msgListTrim(key, chatroomId);
+//		List<MsgChatroomMsg> mesList = redis.lstRange(key, 0l, -1l);
+		
+		//获取PAGE_SIZE条以内的消息
+		List<MsgChatroomMsg> mesList= redis.lstRange(key, 0l, PAGE_SIZE);
+		
+		//最近20消息过滤重复的点赞,进入,退出
+		if((MsgChatroomMsg.TYPE_PRAISE == mes.getType() || MsgChatroomMsg.TYPE_ENTER == mes.getType() || MsgChatroomMsg.TYPE_EXIT == mes.getType())
+				&& mesList.contains(mes)){
+			return;
+		}
+		redis.lstRightPush(key, mes);
+		redis.expire(key, 360, TimeUnit.DAYS);
+	}
+	
+	/**
+	 * 计数器
+	 * 
+	 * @param chatroomId
+	 * @param type
+	 */
+	private void msgTypeCountCache(String chatroomId, Integer type){
+		if(type == MsgChatroomMsg.TYPE_ENTER){//在线人数加一
+			redis.incr(CACHEKEY_ONLINE_COUNT + chatroomId);
+			redis.expire(CACHEKEY_ONLINE_COUNT + chatroomId, 360, TimeUnit.DAYS);
+		}
+		if(type == MsgChatroomMsg.TYPE_ENTER || type == MsgChatroomMsg.TYPE_PRAISE || type == MsgChatroomMsg.TYPE_LOTTERY 
+				|| type == MsgChatroomMsg.TYPE_REWARD || type == MsgChatroomMsg.TYPE_CONSULT || type == MsgChatroomMsg.TYPE_LOTTERY_RESULT){
+			redis.incr(this.getKey(chatroomId, type));
+			redis.expire(this.getKey(chatroomId, type),  360, TimeUnit.DAYS);
+		}else if(type == MsgChatroomMsg.TYPE_EXIT){//在线人数减一
+			String key = CACHEKEY_ONLINE_COUNT + chatroomId;
+			Long value = redis.getIncrValue(key);
+			if(value.compareTo(0l)>0){
+				redis.decr(key);
+			}
+			redis.expire(key,  360, TimeUnit.DAYS);
+		}else if(type == MsgChatroomMsg.TYPE_NORMAL || type == MsgChatroomMsg.TYPE_LOTTERY_RESULT){//A类消息计数器
+			redis.incr(CACHEKEY_MESSAGE_A_COUNT + chatroomId);
+			redis.expire(CACHEKEY_MESSAGE_A_COUNT + chatroomId,  360, TimeUnit.DAYS);
+		}
+	}
+	
+	//获取缓存key值
+	private String getKey(String chatroomId, Integer type){
+		String key = "";
+		switch(type){
+			case MsgChatroomMsg.TYPE_PRAISE:
+				key = CACHEKEY_PRAISE_COUNT + chatroomId;
+				break;
+			case MsgChatroomMsg.TYPE_LOTTERY:
+				key = CACHEKEY_LOTTERY_COUNT + chatroomId;
+				break;
+			case MsgChatroomMsg.TYPE_ENTER:
+				key = CACHEKEY_VIEW_COUNT + chatroomId;
+				break;
+			case MsgChatroomMsg.TYPE_REWARD:
+				key = CACHEKEY_REWARD_COUNT + chatroomId;
+				break;
+			case MsgChatroomMsg.TYPE_CONSULT:
+				key = CACHEKEY_CONSULT_COUNT + chatroomId;
+				break;
+			case MsgChatroomMsg.TYPE_LOTTERY_RESULT:
+				key = CACHEKEY_LOTTERY_RESULT_COUNT + chatroomId;
+				break;
+			default:
+				key = "";
+		}
+		return key;
+	}
+
+	/**
+	 * 轮询
+	 * 
+	 * @param chatroomId
+	 * @throws Exception
+	 */
+	@Override
+	public Result latestMsg(String chatroomId) {
+		List<MsgChatroomMsg> mesList = redis.lstRange(CACHEKEY_MSG_QUEUE + chatroomId, 0l, -1l);
+		
+		//奖金总数
+		Long rewardAmount = redis.getIncrValue(CACHEKEY_REWARD_AMOUNT + chatroomId);
+		
+		Map<String, Object> data = new HashMap<String, Object>();
+		//统计数据
+		Map<String,Long> statistics = this.reStatistics(chatroomId);
+		Integer maxPage = this.getMaxPage(chatroomId, String.valueOf(statistics.get("historyMsgCount")));
+		data.put("maxPage", maxPage);
+		data.put("currentPage", maxPage);
+		data.put("onlineCount", statistics.get("onlineCount"));
+		data.put("praiseCount", statistics.get("praiseCount"));
+		data.put("viewCount", statistics.get("viewCount"));
+		data.put("lotteryCount", statistics.get("lotteryCount"));
+		data.put("rewardCount", statistics.get("rewardCount"));
+		data.put("consultCount", statistics.get("consultCount"));
+		data.put("rewardAmount", rewardAmount);
+		data.put("dataList", mesList);
+		data.put("serverTime", new Date());
+		return new Result(true, null, data);
+	}
+	
+	/**
+	 * 获取浏览人次
+	 * @param chatroomId
+	 * @throws Exception
+	 */
+	@Override
+	public Long getViewCount(String chatroomId){
+		return redis.getIncrValue(CACHEKEY_VIEW_COUNT + chatroomId);
+	}
+	
+	/**
+	 * 重新统计数据,读取数据库
+	 * 
+	 * @param type
+	 * @param statistics
+	 * @return
+	 */
+	private Map<String,Long> reStatistics(String chatroomId){
+		Long msgCount = nul2Zero(redis.getIncrValue(CACHEKEY_MESSAGE_A_COUNT + chatroomId));
+		Long onlineCount = nul2Zero(redis.getIncrValue(CACHEKEY_ONLINE_COUNT + chatroomId));
+		Long praiseCount = nul2Zero(redis.getIncrValue(CACHEKEY_PRAISE_COUNT + chatroomId));
+		Long lotteryCount = nul2Zero(redis.getIncrValue(CACHEKEY_LOTTERY_COUNT + chatroomId));
+		Long viewCount = nul2Zero(redis.getIncrValue(CACHEKEY_VIEW_COUNT + chatroomId));
+		Long rewardCount = nul2Zero(redis.getIncrValue(CACHEKEY_REWARD_COUNT + chatroomId));
+		Long lotteryResultCount = nul2Zero(redis.getIncrValue(CACHEKEY_LOTTERY_RESULT_COUNT + chatroomId));
+		Long consultCount = nul2Zero(redis.getIncrValue(CACHEKEY_CONSULT_COUNT + chatroomId));
+		
+		Map<String, Long> result = new HashMap<>();
+		result.put("msgCount", msgCount);
+		//历史消息数量,正常消息、中奖消息,打赏消息
+		result.put("historyMsgCount", msgCount+lotteryResultCount+rewardCount);
+		result.put("onlineCount", onlineCount);
+		result.put("praiseCount", praiseCount);
+		result.put("lotteryCount", lotteryCount);
+		result.put("viewCount", viewCount);
+		result.put("rewardCount", rewardCount);
+		result.put("consultCount", consultCount);
+		return result;
+	}
+	
+	private Long nul2Zero(Long value) {
+		if(value==null) {
+			return  0l;
+		}
+		return value;
+	}
+	
+	/**
+	 * 按页获取历史消息
+	 */
+	@Override
+	public Result getHistoryMes(String chatroomId, Integer pageNo)
+			{
+		//统计数据
+		List<MsgChatroomMsg> mesList = redis.lstRange(CACHEKEY_MSG_QUEUE + chatroomId, 0l, -1l);
+		Map<String,Long> statistics = this.reStatistics(chatroomId);
+		Integer maxPage = getMaxPage(chatroomId, String.valueOf(statistics.get("historyMsgCount")+mesList.size()));
+		String key = CACHEKEY_MESSAGE_HISTORY + chatroomId+ "_" + pageNo;
+		if (StringUtils.isEmpty(chatroomId) || pageNo == null
+				|| pageNo > maxPage) {
+			return new Result(false, "参数错误");
+		}
+		List<MsgChatroomMsg> msgList = redis.lstAll(key);
+		msgList = this.distinct(msgList, chatroomId);
+		Map<String, Object> data = new HashMap<>();
+		data.put("currentPage", pageNo);
+		data.put("maxPage", maxPage);
+		data.put("dataList", msgList);
+		return new Result(true, null, data);
+	}
+	
+	/**
+	 * 去除重复消息
+	 * 
+	 * @return
+	 */
+	private List<MsgChatroomMsg> distinct(List<MsgChatroomMsg> historyMsgList, String chatroomId){
+		List<MsgChatroomMsg> lastMsgList = redis.lstRange(CACHEKEY_MSG_QUEUE + chatroomId, 0l, -1l);
+		if(historyMsgList != null && !historyMsgList.isEmpty() && lastMsgList != null && !lastMsgList.isEmpty()){
+			for(int i=historyMsgList.size()-1;i>= 0;i--){
+				MsgChatroomMsg historyMsgChatroomMsg = historyMsgList.get(i);
+				for(MsgChatroomMsg lastMsgChatroomMsg : lastMsgList){
+					if(historyMsgChatroomMsg.getMsgId().equals(lastMsgChatroomMsg.getMsgId())){
+						historyMsgList.remove(i);
+						break;
+					}
+				}
+			}
+		}
+		return historyMsgList;
+	}
+
+
+	/**
+	 * 获取A类消息最大页码
+	 * 
+	 * @param chatroomId
+	 * @return
+	 */
+	public Integer getMaxPage(String chatroomId, String msgCount) {
+		Integer count = Integer.valueOf(msgCount);
+		int maxPage = count % PAGE_SIZE == 0 ? count / PAGE_SIZE : count
+				/ PAGE_SIZE + 1;
+		return maxPage;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java b/src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java
new file mode 100644
index 0000000..cc3d2a0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java
@@ -0,0 +1,174 @@
+package com.qxueyou.scc.msg.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+
+/**
+ * 消息服务
+ * 
+ * @author kevin
+ *
+ */
+@Service
+public class MsgInfoService extends CommonAppService implements IMsgInfoService {
+	
+	@Override
+	public List<MsgInfo> list(Short type, Integer pageSize, Integer pageNum) {
+		StringBuffer hql = new StringBuffer();
+		hql.append("from MsgInfo where receiverId=?  ");
+		List<Object> params =CollectionUtils.newList(ClientUtils.getUserId());
+		
+		if(type!=null){
+			hql.append(" and type = ? ");
+			params.add(type);
+		}
+		
+		hql.append(" and deleteFlag is false order by createTime desc");
+				
+		return findList(hql.toString(),new Pager(pageSize, pageNum),params, MsgInfo.class);
+	}
+
+	@Override
+	public int listCount(Short type) {
+		StringBuffer hql = new StringBuffer();
+		hql.append("from MsgInfo where receiverId=?  ");
+		List<Object> params =CollectionUtils.newList(ClientUtils.getUserId());
+		
+		if(type!=null){
+			hql.append(" and type = ? ");
+			params.add(type);
+		}
+		
+		hql.append(" and deleteFlag is false");
+		
+		return findCount(hql.toString(),params);
+	}
+
+	@Override
+	public Result deleteUserMsg(String [] msgId) {
+		return bulkUpdateInLoop("update MsgInfo set deleteFlag = true where msgId=?", msgId);
+	}
+
+	@Override
+	public Result deleteAllUserMsg(Short type) {
+		return this.bulkUpdate("update MsgInfo set deleteFlag = true where deleteFlag is false and receiverId=? and type=?", 
+				new Object[]{ClientUtils.getUserId(),type==null?10000:type});
+	}
+
+	@Override
+	public Result updateReadStatus(String [] msgIds) {
+		return bulkUpdateInLoop("update MsgInfo set readFlag = 1 where msgId=?", msgIds);
+	}
+	
+	@Override
+	public Result updateUserAllReadStatus(Short type) {
+		return this.bulkUpdate("update MsgInfo set readFlag = 1 where deleteFlag is false and receiverId=? and type=?", 
+				new Object[]{ClientUtils.getUserId(),type==null?10000:type});
+	}
+	
+	@Override
+	public Result doSendTextMsgToUsers(String[] userIdsToArr,short type,String msg) {
+		return doSendTextMsgToUsers(userIdsToArr,type,msg,CollectionUtils.newStringMap("msg",msg));
+	}
+
+	@Override
+	public Result doSendTextMsgToUsers(String[] userIdsToArr,short type,String msg,Map<String,String> attrs) {
+		return doSendtMsgToTargets(userIdsToArr,type,attrs,CollectionUtils.newStringMap("msg",msg));
+	}
+	
+	
+	/**
+	 * 给指定目标发送消息
+	 * @param userIdFrom
+	 * @param targetIdsToArr
+	 * @param msg
+	 * @param attrs
+	 * @param targetType
+	 * @param msgInfo
+	 * @return
+	 */
+	private Result doSendtMsgToTargets(String[] targetIdsToArr,short type,Map<String, String> attrs,Map<String,String> msgInfo){
+		if(targetIdsToArr== null || targetIdsToArr.length==0){
+			return new Result(false,"参数错误");
+		}
+		
+		List<MsgInfo> lstMsg = new ArrayList<MsgInfo>(targetIdsToArr.length);
+		for(String receiverId:targetIdsToArr){
+			MsgInfo tempInfo  = new MsgInfo();
+			tempInfo.setType(type);
+			tempInfo.setReadFlag(String.valueOf(MsgInfo.READ_NOT));
+			tempInfo.setContent(JSON.toJSONString(CollectionUtils.newObjectMap("ext", attrs,"msg", msgInfo)));
+			tempInfo.setReceiverId(receiverId);
+			TraceUtils.setCreateTrace(tempInfo);
+			lstMsg.add(tempInfo);
+		}
+		return this.saveOrUpdateAll(lstMsg);
+	}
+	
+	
+	/**
+	 * 分批发送通知
+	 * 
+	 * @param userIdList
+	 * @param msg
+	 * @param extra
+	 * @return
+	 */
+	public void doSendTextMsgToUsersLoop(List<String> userIdList,short type,String msg, Map<String,String> extra) {
+		if(userIdList==null || userIdList.size()==0){
+			return ;
+		}
+		String [] targetIds = null;
+		for(int i=0;i<userIdList.size();i+=20){
+			if((userIdList.size()-i)>20){
+				targetIds = userIdList.subList(i, i+20).toArray(new String [20]);
+			}else{
+				targetIds = userIdList.subList(i,userIdList.size()).toArray(new String[userIdList.size()-i]);
+			}
+			this.doSendtMsgToTargets(targetIds,type,extra,CollectionUtils.newStringMap("msg",msg));
+		}
+	}
+	
+	@Override
+	public  MsgInfo  readLastRemindMsg(){
+	return 	this.findUnique("from MsgInfo where receiverId=? and type=? and deleteFlag is false order by createTime desc",
+				CollectionUtils.newList(ClientUtils.getUserId(),MsgInfo.TYPE_REMIND), MsgInfo.class);
+	}
+	
+	@Override
+	public Map<String,Object> queryUnReadMsgCountByType(){
+		List<Map<String,Object>> resultList = this.findListWithMapByHql("select type as type ,count(1) as count from MsgInfo where receiverId=:receiverId and readFlag=:readFlag and deleteFlag is false group by type",
+						CollectionUtils.newObjectMap("receiverId",ClientUtils.getUserId(),"readFlag",String.valueOf(MsgInfo.READ_NOT)));
+		
+		Map<String,Object> result = null;
+		if(resultList != null && resultList.size()>0){
+			result = new HashMap<String,Object>(resultList.size());
+			for(Map<String,Object> map:resultList){
+				result.put(String.valueOf(map.get("type")), map.get("count"));
+			}
+		}
+		
+		return result;
+	}
+	
+	@Override
+	public int queryUnReadTotalCount(){
+		return this.findCountByComplexHql("from MsgInfo where receiverId=:receiverId and readFlag=:readFlag and deleteFlag is false",
+						CollectionUtils.newObjectMap("receiverId",ClientUtils.getUserId(),"readFlag",String.valueOf(MsgInfo.READ_NOT)));
+	}	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/notice/model/Notice.java b/src/main/java/com/qxueyou/scc/notice/model/Notice.java
new file mode 100644
index 0000000..3265e3a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/notice/model/Notice.java
@@ -0,0 +1,542 @@
+package com.qxueyou.scc.notice.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.sys.model.SysAttachment;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+/**
+ * The persistent class for the notice database table.
+ * 
+ */
+@ApiModel
+@Entity
+@Table(name = "notice")
+@NamedQuery(name = "Notice.findAll", query = "SELECT n FROM Notice n")
+public class Notice implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "NOTICE_ID", unique = true, nullable = false, length = 32)
+	private String noticeId;
+
+	/** 内容 */
+	@ApiModelProperty(value="内容",name="content")
+	@Column(name = "CONTENT", columnDefinition = "CLOB")
+	private String content;
+
+	/** 简介 */
+	@ApiModelProperty(value="简介",name="brief")
+	@Column(name = "BRIEF", length = 255)
+	private String brief;
+
+	/** 创建者ID */
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	private String createId;
+
+	/** 创建时间 */
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 创建者 */
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	private boolean deleteFlag;
+
+	/** 通知范围 1:班级通知 ;0: 平台通知 */
+	@Column(name = "NOTICE_SCOPE")
+	private int noticeScope;
+
+	/** 通知图标路径 */
+	@ApiModelProperty(value="通知图标路径",name="imgPath")
+	@Column(name = "IMG_PATH")
+	private String imgPath;
+
+	/*
+	 * 班级通知
+	 */
+	public static int NOTICE_SCOPE_CLASS = 1;
+
+	/*
+	 * 平台通知
+	 */
+	public static int NOTICE_SCOPE_ORG = 0;
+
+	public static String NOTICE_CLASS_MSG_USER_ID = "notice-class";
+
+	public static String NOTICE_ORG_MSG_USER_ID = "notice-org";
+
+	public static String NOTICE_SYS_MSG = "sys_msg";
+
+	public static String SYS_MSG_NAME = "系统消息";
+
+	/** 通知类型:1:平台通知 0:课程通知 */
+	@ApiModelProperty(value="通知类型",name="noticeType",example="0平台通知,1课程通知,3信息发布,4其他通知,5活动通知")
+	@Column(name = "NOTICE_TYPE")
+	private int noticeType;
+
+	/*
+	 * 平台通知
+	 */
+	public static int NOTICE_TYPE_TERRACE = 0;
+
+	/*
+	 * 课程通知
+	 */
+	public static int NOTICE_TYPE_COURSES = 1;
+
+	/*
+	 * 信息发布
+	 */
+	public static int NOTICE_TYPE_INF = 3;
+
+	/*
+	 * 其他通知
+	 */
+	public static int NOTICE_TYPE_OTHER = 4;
+
+	/*
+	 * 其他通知
+	 */
+	public static int NOTICE_TYPE_ACTIVE = 5;
+
+	/*
+	 * 平台通知
+	 */
+	public static String NOTICE_TYPE_NAME_TERRACE = "平台通知";
+
+	/*
+	 * 上课通知
+	 */
+	public static String NOTICE_TYPE_NAME_COURSES = "课程通知";
+
+	/*
+	 * 信息发布
+	 */
+	public static String NOTICE_TYPE_NAME_INF = "信息发布";
+
+	/*
+	 * 信息发布
+	 */
+	public static String NOTICE_TYPE_NAME_OTHER = "其他通知";
+
+	/*
+	 * 信息发布
+	 */
+	public static String NOTICE_TYPE_NAME_ACTIVE = "活动通知";
+
+	/** 通知类型名称 */
+	@ApiModelProperty(value="通知类型名称",name="noticeTypeName",example="平台通知,课程通知,信息发布,其他通知,活动通知")
+	@Column(name = "NOTICE_TYPE_NAME", length = 150)
+	private String noticeTypeName;
+
+	/** 范围ID:平台通知:机构ID 班级通知:班级ID */
+	@ApiModelProperty(value="范围ID",name="scopeId",example="平台通知:机构ID 班级通知:班级ID")
+	@Column(name = "SCOPE_ID")
+	private String scopeId;
+
+	@ApiModelProperty(value="状态",name="status",example="0 草稿 1已发布 2已废弃")
+	/** 状态: 0 草稿 1已发布 2已废弃 */
+	@Column(name = "STATUS", length = 32)
+	private short status;
+
+	/*
+	 * 草稿
+	 */
+	public static short STATUS_DRAFT = 0;
+
+	/*
+	 * 已发布
+	 */
+	public static short STATUS_ISSUED = 1;
+
+	/*
+	 * 已废弃
+	 */
+	public static short STATUS_DISCARD = 2;
+
+	/** 标题 */
+	@ApiModelProperty(value="标题",name="title")
+	@Column(name = "TITLE", length = 255)
+	private String title;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 浏览总次数:一人可以多次 */
+	@ApiModelProperty(value="浏览总次数",name="viewCount",example="一人可以多次")
+	@Column(name = "VIEW_COUNT")
+	private int viewCount;
+
+	/** 发布时间 */
+	@ApiModelProperty(value="发布时间",name="issuedTime")
+	@Column(name = "ISSUED_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date issuedTime;
+
+	/** 浏览总人次:一人记录一次 */
+	@ApiModelProperty(value="浏览总人次",name="viwerCount",example="一人记录一次")
+	@Column(name = "VIWER_COUNT")
+	private int viwerCount;
+
+	@Transient
+	private Integer totalPeople;
+
+	@Transient
+	private Integer arrivePeople;
+
+	@Transient
+	private Integer readPeople;
+	
+	
+
+	
+	@OneToMany(cascade=CascadeType.ALL ,fetch = FetchType.LAZY)
+	@JoinColumn(name = "REALATED_OBJECT_ID", referencedColumnName = "NOTICE_ID", updatable = false, insertable = false)
+	@Where(clause="DELETE_FLAG=0")
+	private List<SysAttachment> lstSysAttachment;
+
+	public List<SysAttachment> getLstSysAttachment() {
+		return lstSysAttachment;
+	}
+
+	public void setLstSysAttachment(List<SysAttachment> lstSysAttachment) {
+		this.lstSysAttachment = lstSysAttachment;
+	}
+
+
+
+
+	public Date getIssuedTime() {
+		return issuedTime;
+	}
+
+	public void setIssuedTime(Date issuedTime) {
+		this.issuedTime = issuedTime;
+	}
+
+	public String getNoticeId() {
+		return this.noticeId;
+	}
+
+	public void setNoticeId(String noticeId) {
+		this.noticeId = noticeId;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public int getNoticeScope() {
+		return this.noticeScope;
+	}
+
+	public void setNoticeScope(int noticeScope) {
+		this.noticeScope = noticeScope;
+	}
+
+	public int getNoticeType() {
+		return this.noticeType;
+	}
+
+	public void setNoticeType(int noticeType) {
+		this.noticeType = noticeType;
+
+		switch (noticeType) {
+
+		case 1: {
+			setNoticeTypeName(NOTICE_TYPE_NAME_TERRACE);
+			break;
+		}
+		case 2: {
+			setNoticeTypeName(NOTICE_TYPE_NAME_COURSES);
+			break;
+		}
+		case 3: {
+			setNoticeTypeName(NOTICE_TYPE_NAME_INF);
+			break;
+		}
+		case 4: {
+			setNoticeTypeName(NOTICE_TYPE_NAME_OTHER);
+			break;
+		}
+		case 5: {
+			setNoticeTypeName(NOTICE_TYPE_NAME_ACTIVE);
+			break;
+		}
+
+		}
+	}
+
+	public String getNoticeTypeName() {
+		return this.noticeTypeName;
+	}
+
+	public void setNoticeTypeName(String noticeTypeName) {
+		this.noticeTypeName = noticeTypeName;
+	}
+
+	public String getScopeId() {
+		return this.scopeId;
+	}
+
+	public void setScopeId(String scopeId) {
+		this.scopeId = scopeId;
+	}
+
+	public short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public int getViewCount() {
+		return viewCount;
+	}
+
+	public void setViewCount(int viewCount) {
+		this.viewCount = viewCount;
+	}
+
+	public int getViwerCount() {
+		return viwerCount;
+	}
+
+	public void setViwerCount(int viwerCount) {
+		this.viwerCount = viwerCount;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public Integer getTotalPeople() {
+		return totalPeople;
+	}
+
+	public void setTotalPeople(Integer totalPeople) {
+		this.totalPeople = totalPeople;
+	}
+
+	public Integer getArrivePeople() {
+		return arrivePeople;
+	}
+
+	public void setArrivePeople(Integer arrivePeople) {
+		this.arrivePeople = arrivePeople;
+	}
+
+	public Integer getReadPeople() {
+		return readPeople;
+	}
+
+	public void setReadPeople(Integer readPeople) {
+		this.readPeople = readPeople;
+	}
+
+	public String getBrief() {
+		return brief;
+	}
+
+	public void setBrief(String brief) {
+		this.brief = brief;
+	}
+
+	/**
+	 * 返回不包含content的所有字段
+	 * 
+	 * @return
+	 */
+	public static String getColumnsWithOutContent() {
+		StringBuilder buf = new StringBuilder(120);
+		buf.append("noticeId,");
+		buf.append("createId,");
+		buf.append("createTime,");
+		buf.append("creator,");
+		buf.append("deleteFlag,");
+		buf.append("noticeScope,");
+		buf.append("noticeType,");
+		buf.append("noticeTypeName,");
+		buf.append("scopeId,");
+		buf.append("status,");
+		buf.append("title,");
+		buf.append("brief,");
+		buf.append("updateId,");
+		buf.append("updateTime,");
+		buf.append("updator,");
+		buf.append("viewCount,");
+		buf.append("viwerCount");
+		return buf.toString();
+	}
+
+	/**
+	 * 返回不包含content的所有字段
+	 * 
+	 * @return
+	 */
+	public static String getPrefixColumnsWithOutContent() {
+		StringBuilder buf = new StringBuilder(120);
+		buf.append("n.NOTICE_ID AS noticeId,");
+		buf.append("n.CREATE_ID AS createId,");
+		buf.append("n.CREATE_TIME AS createTime,");
+		buf.append("n.CREATOR AS creator,");
+		buf.append("n.NOTICE_SCOPE AS noticeScope,");
+		buf.append("n.NOTICE_TYPE AS noticeType,");
+		buf.append("n.NOTICE_TYPE_NAME AS noticeTypeName,");
+		buf.append("n.SCOPE_ID AS scopeId,");
+		buf.append("n.STATUS AS status,");
+		buf.append("n.TITLE AS title,");
+		buf.append("n.BRIEF AS brief,");
+		buf.append("n.UPDATE_ID AS updateId,");
+		buf.append("n.UPDATE_TIME AS updateTime,");
+		buf.append("n.UPDATOR AS updator,");
+		buf.append("n.VIEW_COUNT AS viewCount,");
+		buf.append("n.VIWER_COUNT AS viwerCount");
+		return buf.toString();
+	}
+
+	/**
+	 * 返回不包含content的所有字段
+	 * 
+	 * @return
+	 */
+	public static Notice fromObject(Object[] objs) {
+
+		Notice notice = new Notice();
+
+		notice.setNoticeId((String) objs[0]);
+		notice.setCreateId((String) objs[1]);
+		notice.setCreateTime((Date) objs[2]);
+		notice.setCreator((String) objs[3]);
+		notice.setDeleteFlag((Boolean) objs[4]);
+		notice.setNoticeScope((Integer) objs[5]);
+		notice.setNoticeType((Integer) objs[6]);
+		notice.setNoticeTypeName((String) objs[7]);
+		notice.setScopeId((String) objs[8]);
+		notice.setStatus((Short) objs[9]);
+		notice.setTitle((String) objs[10]);
+		notice.setBrief((String) objs[11]);
+		notice.setUpdateId((String) objs[12]);
+		notice.setUpdateTime((Date) objs[13]);
+		notice.setUpdator((String) objs[14]);
+		notice.setViewCount((Integer) objs[15]);
+		notice.setViwerCount((Integer) objs[16]);
+		notice.setTotalPeople((Integer) objs[17]);
+		notice.setArrivePeople((Integer) objs[18]);
+		notice.setReadPeople((Integer) objs[19]);
+		return notice;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java
new file mode 100644
index 0000000..3c0bc57
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java
@@ -0,0 +1,404 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 评论表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sns_comment")
+@NamedQuery(name="Comment.findAll", query="SELECT e FROM Comment e")
+public class Comment implements Serializable,ITrace {
+	
+	
+	public static final Integer COMMENT_LEVEL_FIRST = 1;
+	
+	public static final Integer COMMENT_LEVEL_SECOND = 2;
+	
+	private static final long serialVersionUID = 1L;
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="COMMENT_ID", unique=true, nullable=false, length=32)
+	private String commentId;
+
+	/** 评论对象ID  */
+	@Column(name="COMMENT_OBJECT_ID", length=32)
+	private String commentObjectId;
+
+	/** 评论者ID  */
+	@Column(name="COMMENTTER_ID", length=32)
+	private String commentterId;
+
+	/** 评论者  */
+	@Column(name="COMMENTTER", length=150)
+	private String commentter;
+	
+	/** 评论者头像  */
+	@Column(name="COMMENTTER_HEADIMG", length=255)
+	private String commentterHeadimg;
+	
+	/** 被评论者ID  */
+	@Column(name="COMMENTED_ID", length=32)
+	private String commentedId;
+	
+	/** 被评论人为Common 表示公共的对象id  适用于点赞时直接点赞对象 而不是点赞某个人的评论 */
+	public static final String COMMENTED_ID_COMMON = "Common";
+
+	/** 被评论者  */
+	@Column(name="COMMENTED_NAME", length=150)
+	private String commentedName;
+	
+	/** 评论层级  */
+	@Column(name="COMMENT_LEVEL")
+	private Integer commentLevel ;
+
+	/** 评论时间 */
+	@Column(name="COMMENT_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date commentTime;
+
+	/** 评论内容  */
+	@Column(name="CONTENT")
+	private String content;
+	
+	/** 是否通过审核(0、已发布    1、未审核)  */
+	@Column(name="PASS_REVIEW_FLAG", nullable=false)
+	private boolean passReviewFlag;
+	
+	/** 是否需要审核(0、不需要    1、需要)  */
+	@Column(name="REVIEW_FLAG", nullable=false)
+	private boolean reviewFlag;
+	
+	/** 来源  */
+	@Column(name="SOURCE")
+	private String source;
+	
+	/** 班级Id  */
+	@Column(name="CLASS_ID")
+	private String classId;
+	
+	/** 评论上一级评论ID  */
+	@Column(name="COMMENT_PARENT_ID", length=32)
+	private String commentParentId;
+
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/** 修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/** 修改人  */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  评论个数 */
+	@Column(name="COMMENT_COUNT")
+	private BigInteger commentCount;
+
+	/**  评论被赞数 */
+	@Column(name="COMMENT_PRAISE_COUNT")
+	private BigInteger commentPraiseCount;
+	
+	/**  子评论 */
+	@Transient
+	private List<Comment> childComments;
+	
+	/**  评论对象评论总数  */
+	@Transient
+	private BigInteger parCommentCount;
+	
+	/**  评论对象赞总数  */
+	@Transient
+	private BigInteger parPraiseCount;
+	
+	/**  是否赞  */
+	@Transient
+	private boolean praise;
+	
+	/**  是否赞  */
+	@Transient
+	private int pageOrder;
+	
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public String getCommentObjectId() {
+		return commentObjectId;
+	}
+
+	public void setCommentObjectId(String commentObjectId) {
+		this.commentObjectId = commentObjectId;
+	}
+
+	public String getCommentterId() {
+		return commentterId;
+	}
+
+	public void setCommentterId(String commentterId) {
+		this.commentterId = commentterId;
+	}
+
+	public String getCommentter() {
+		return commentter;
+	}
+
+	public void setCommentter(String commentter) {
+		this.commentter = commentter;
+	}
+
+	public String getCommentterHeadimg() {
+		return commentterHeadimg;
+	}
+
+	public void setCommentterHeadimg(String commentterHeadimg) {
+		this.commentterHeadimg = commentterHeadimg;
+	}
+
+	public Date getCommentTime() {
+		return commentTime;
+	}
+
+	public void setCommentTime(Date commentTime) {
+		this.commentTime = commentTime;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCommentParentId() {
+		return commentParentId;
+	}
+
+	public void setCommentParentId(String commentParentId) {
+		this.commentParentId = commentParentId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public List<Comment> getChildComments() {
+		return childComments;
+	}
+
+	public void setChildComments(List<Comment> childComments) {
+		this.childComments = childComments;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public BigInteger getCommentPraiseCount() {
+		return commentPraiseCount;
+	}
+
+	public void setCommentPraiseCount(BigInteger commentPraiseCount) {
+		this.commentPraiseCount = commentPraiseCount;
+	}
+
+	public BigInteger getParCommentCount() {
+		return parCommentCount;
+	}
+
+	public void setParCommentCount(BigInteger parCommentCount) {
+		this.parCommentCount = parCommentCount;
+	}
+
+	public BigInteger getParPraiseCount() {
+		return parPraiseCount;
+	}
+
+	public void setParPraiseCount(BigInteger parPraiseCount) {
+		this.parPraiseCount = parPraiseCount;
+	}
+
+	public boolean getPraise() {
+		return praise;
+	}
+
+	public void setPraise(boolean praise) {
+		this.praise = praise;
+	}
+
+	public String getCommentedId() {
+		return commentedId;
+	}
+
+	public void setCommentedId(String commentedId) {
+		this.commentedId = commentedId;
+	}
+
+	public String getCommentedName() {
+		return commentedName;
+	}
+
+	public void setCommentedName(String commentedName) {
+		this.commentedName = commentedName;
+	}
+
+	public Integer getCommentLevel() {
+		return commentLevel;
+	}
+
+	public void setCommentLevel(Integer commentLevel) {
+		this.commentLevel = commentLevel;
+	}
+
+	public boolean isPassReviewFlag() {
+		return passReviewFlag;
+	}
+
+	public void setPassReviewFlag(boolean passReviewFlag) {
+		this.passReviewFlag = passReviewFlag;
+	}
+
+	public boolean isReviewFlag() {
+		return reviewFlag;
+	}
+
+	public void setReviewFlag(boolean reviewFlag) {
+		this.reviewFlag = reviewFlag;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public int getPageOrder() {
+		return pageOrder;
+	}
+
+	public void setPageOrder(int pageOrder) {
+		this.pageOrder = pageOrder;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java
new file mode 100644
index 0000000..ee26360
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java
@@ -0,0 +1,176 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 评论图片表 实体
+ * 
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name = "sns_comment_img")
+@NamedQuery(name = "CommentImg.findAll", query = "SELECT e FROM CommentImg e")
+public class CommentImg implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "COMMENT_IMG_ID", unique = true, nullable = false, length = 32)
+	private String commentImgId;
+
+	/** 评论ID */
+	@Column(name = "COMMENT_ID", length = 32)
+	private String commentId;
+
+	/** 图片路径 */
+	@Column(name = "IMG_PATH", length = 255)
+	private String imgPath;
+
+	/** 评论时间 */
+	@Column(name = "COMMENT_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date commentTime;
+
+	/** 创建者ID */
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建时间 */
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建人 */
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	/** 修改者ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCommentImgId() {
+		return commentImgId;
+	}
+
+	public void setCommentImgId(String commentImgId) {
+		this.commentImgId = commentImgId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public Date getCommentTime() {
+		return commentTime;
+	}
+
+	public void setCommentTime(Date commentTime) {
+		this.commentTime = commentTime;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java
new file mode 100644
index 0000000..d77f9dc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java
@@ -0,0 +1,231 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 评论对象表 实体
+ * 
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name = "sns_comment_object")
+@NamedQuery(name = "CommentObject.findAll", query = "SELECT e FROM CommentObject e")
+public class CommentObject implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 评论来源ID */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "COMMENT_OBJECT_ID", unique = true, nullable = false, length = 32)
+	private String commentObjectId;
+
+	/** 评论对象ID */
+	@Column(name = "COMMENT_OBJECT_UID", length = 32)
+	private String commentObjectUid;
+
+	/** 评论对象名称 */
+	@Column(name = "COMMENT_OBJECT_NAME", length = 150)
+	private String commentObjectName;
+
+	/** 评论类型: 1:讲义 2:练习 3:视频 4:活动 5:互动 6:分享课程 7:直播 8:内容分享 */
+	@Column(name = "COMMENT_OBJECT_TYPE")
+	private short commentObjectType;
+
+	public static final short COMMENT_TYPE_HANDOUT = 1;
+
+	public static final short COMMENT_TYPE_EXERCISE = 2;
+
+	public static final short COMMENT_TYPE_VIDEO = 3;
+
+	public static final short COMMENT_TYPE_ACTIVITIES = 4;
+
+	public static final short COMMENT_TYPE_INTERACT = 5;
+
+	public static final short COMMENT_TYPE_SHARE_LESSON = 6;
+
+	public static final short COMMENT_TYPE_VIDEO_LIVE = 7;
+
+	public static final short COMMENT_TYPE_CONTENT_SHARE = 8;
+
+	public static final short COMMENT_TYPE_CLASS_CIRCLE = 9;
+
+	/** 评论个数 */
+	@Column(name = "COMMENT_COUNT")
+	private BigInteger commentCount;
+
+	/** 查看次数 */
+	@Column(name = "VIEW_COUNT")
+	private BigInteger viewCount;
+
+	/** 评论被赞的个数 */
+	@Column(name = "COMMENT_PRAISE_COUNT")
+	private BigInteger commentPraiseCount;
+
+	/** 创建者ID */
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建时间 */
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建者 */
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	/** 修改者ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/** 修改者 */
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getCommentObjectId() {
+		return commentObjectId;
+	}
+
+	public void setCommentObjectId(String commentObjectId) {
+		this.commentObjectId = commentObjectId;
+	}
+
+	public String getCommentObjectUid() {
+		return commentObjectUid;
+	}
+
+	public void setCommentObjectUid(String commentObjectUid) {
+		this.commentObjectUid = commentObjectUid;
+	}
+
+	public String getCommentObjectName() {
+		return commentObjectName;
+	}
+
+	public void setCommentObjectName(String commentObjectName) {
+		this.commentObjectName = commentObjectName;
+	}
+
+	public short getCommentObjectType() {
+		return commentObjectType;
+	}
+
+	public void setCommentObjectType(short commentObjectType) {
+		this.commentObjectType = commentObjectType;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public BigInteger getCommentPraiseCount() {
+		return commentPraiseCount;
+	}
+
+	public void setCommentPraiseCount(BigInteger commentPraiseCount) {
+		this.commentPraiseCount = commentPraiseCount;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public BigInteger getViewCount() {
+		return viewCount;
+	}
+
+	public void setViewCount(BigInteger viewCount) {
+		this.viewCount = viewCount;
+	}
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java
new file mode 100644
index 0000000..a09f394
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java
@@ -0,0 +1,212 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 评论点赞表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sns_comment_praise")
+@NamedQuery(name="CommentPraise.findAll", query="SELECT e FROM CommentPraise e")
+public class CommentPraise implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="COMMENT_PRAISE_ID", unique=true, nullable=false, length=32)
+	private String commentPraiseId;
+	
+	/** 评论对象ID  */
+	@Column(name="COMMENT_OBJECT_ID", length=32)
+	private String commentObjectId;
+
+	/**  评论ID  */
+	@Column(name="COMMENT_ID", length=32)
+	private String commentId;
+
+	/**  点赞ID  */
+	@Column(name="COMMENTTER_ID", length=32)
+	private String commentterId;
+
+	/**  点赞人  */
+	@Column(name="COMMENTTER", length=150)
+	private String commentter;
+
+	/**   0 未赞  1赞 */
+	@Column(name="PRAISE")
+	private boolean praise;
+
+	/**   点赞时间 */
+	@Column(name="PRAISE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date praiseTime;
+
+	/**   创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**   创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**   创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**   修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**   修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**   删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getCommentObjectId() {
+		return commentObjectId;
+	}
+
+	public void setCommentObjectId(String commentObjectId) {
+		this.commentObjectId = commentObjectId;
+	}
+
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCommentPraiseId() {
+		return commentPraiseId;
+	}
+
+	public void setCommentPraiseId(String commentPraiseId) {
+		this.commentPraiseId = commentPraiseId;
+	}
+
+	public boolean isPraise() {
+		return praise;
+	}
+
+	public void setPraise(boolean praise) {
+		this.praise = praise;
+	}
+
+	public Date getPraiseTime() {
+		return praiseTime;
+	}
+
+	public void setPraiseTime(Date praiseTime) {
+		this.praiseTime = praiseTime;
+	}
+
+	public String getCommentter() {
+		return commentter;
+	}
+
+	public void setCommentter(String commentter) {
+		this.commentter = commentter;
+	}
+
+	public String getCommentterId() {
+		return commentterId;
+	}
+
+	public void setCommentterId(String commentterId) {
+		this.commentterId = commentterId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java
new file mode 100644
index 0000000..e922b7f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java
@@ -0,0 +1,221 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 我收到的评论视图
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="SNS_COMMENT_TO_ME")
+@NamedQuery(name="SnsCommentToMe.findAll", query="SELECT e FROM SnsCommentToMe e")
+public class SnsCommentToMe implements Serializable{
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 类型  1讨论,2评论*/
+	private int type;
+	
+	/** 用户名称*/
+	private String name;
+	
+	/** 用户Id*/
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** 用户头像*/
+	@Column(name="IMG_PATH", length=32)
+	private String imgPath;
+	
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name = "TOPIC_DESC", columnDefinition = "CLOB")
+    private String topicDesc;
+
+    @Column(name = "TOPIC_NAME")
+    private String topicName;
+    
+    @Column(name = "TOPIC_ID", nullable = false, length = 32)
+    private String topicId;
+	
+	/** 主键  */
+    @Id
+	@Column(name="COMMENT_ID", length=32)
+	private String commentId;
+
+	/** 评论时间 */
+	@Column(name="COMMENT_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date commentTime;
+
+	/** 评论内容  */
+	@Column(name="CONTENT")
+	private String content;
+	
+	/** 父评论Id  */
+	@Column(name="COMMENT_PARENT_ID", length=32)
+	private String commentParentId;
+
+	/** 父评论内容  */
+	@Column(name="COMMENT_PARENT_CONTENT")
+	private String commentParentContent;
+
+	/**  评论个数 */
+	@Column(name="COMMENT_COUNT")
+	private BigInteger commentCount = BigInteger.ZERO;
+
+	/**  评论被赞数 */
+	@Column(name="COMMENT_PRAISE_COUNT")
+	private BigInteger commentPraiseCount = BigInteger.ZERO;
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getTopicDesc() {
+		return topicDesc;
+	}
+
+	public void setTopicDesc(String topicDesc) {
+		this.topicDesc = topicDesc;
+	}
+
+	public String getTopicName() {
+		return topicName;
+	}
+
+	public void setTopicName(String topicName) {
+		this.topicName = topicName;
+	}
+
+	public String getTopicId() {
+		return topicId;
+	}
+
+	public void setTopicId(String topicId) {
+		this.topicId = topicId;
+	}
+
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public Date getCommentTime() {
+		return commentTime;
+	}
+
+	public void setCommentTime(Date commentTime) {
+		this.commentTime = commentTime;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCommentParentId() {
+		return commentParentId;
+	}
+
+	public void setCommentParentId(String commentParentId) {
+		this.commentParentId = commentParentId;
+	}
+
+	public String getCommentParentContent() {
+		return commentParentContent;
+	}
+
+	public void setCommentParentContent(String commentParentContent) {
+		this.commentParentContent = commentParentContent;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public BigInteger getCommentPraiseCount() {
+		return commentPraiseCount;
+	}
+
+	public void setCommentPraiseCount(BigInteger commentPraiseCount) {
+		this.commentPraiseCount = commentPraiseCount;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java
new file mode 100644
index 0000000..dc088b3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java
@@ -0,0 +1,221 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 我的评论视图
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="SNS_MY_COMMENT")
+@NamedQuery(name="SnsMyComment.findAll", query="SELECT e FROM SnsMyComment e")
+public class SnsMyComment implements Serializable{
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 类型  1讨论,2评论*/
+	private int type;
+	
+	/** 用户名称*/
+	private String name;
+	
+	/** 用户Id*/
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** 用户头像*/
+	@Column(name="IMG_PATH", length=32)
+	private String imgPath;
+	
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name = "TOPIC_DESC", columnDefinition = "CLOB")
+    private String topicDesc;
+
+    @Column(name = "TOPIC_NAME")
+    private String topicName;
+    
+    @Column(name = "TOPIC_ID", nullable = false, length = 32)
+    private String topicId;
+	
+	/** 主键  */
+    @Id
+	@Column(name="COMMENT_ID", length=32)
+	private String commentId;
+
+	/** 评论时间 */
+	@Column(name="COMMENT_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date commentTime;
+
+	/** 评论内容  */
+	@Column(name="CONTENT")
+	private String content;
+	
+	/** 父评论Id  */
+	@Column(name="COMMENT_PARENT_ID", length=32)
+	private String commentParentId;
+
+	/** 父评论内容  */
+	@Column(name="COMMENT_PARENT_CONTENT")
+	private String commentParentContent;
+
+	/**  评论个数 */
+	@Column(name="COMMENT_COUNT")
+	private BigInteger commentCount = BigInteger.ZERO;
+
+	/**  评论被赞数 */
+	@Column(name="COMMENT_PRAISE_COUNT")
+	private BigInteger commentPraiseCount = BigInteger.ZERO;
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getTopicDesc() {
+		return topicDesc;
+	}
+
+	public void setTopicDesc(String topicDesc) {
+		this.topicDesc = topicDesc;
+	}
+
+	public String getTopicName() {
+		return topicName;
+	}
+
+	public void setTopicName(String topicName) {
+		this.topicName = topicName;
+	}
+
+	public String getTopicId() {
+		return topicId;
+	}
+
+	public void setTopicId(String topicId) {
+		this.topicId = topicId;
+	}
+
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public Date getCommentTime() {
+		return commentTime;
+	}
+
+	public void setCommentTime(Date commentTime) {
+		this.commentTime = commentTime;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCommentParentId() {
+		return commentParentId;
+	}
+
+	public void setCommentParentId(String commentParentId) {
+		this.commentParentId = commentParentId;
+	}
+
+	public String getCommentParentContent() {
+		return commentParentContent;
+	}
+
+	public void setCommentParentContent(String commentParentContent) {
+		this.commentParentContent = commentParentContent;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public BigInteger getCommentPraiseCount() {
+		return commentPraiseCount;
+	}
+
+	public void setCommentPraiseCount(BigInteger commentPraiseCount) {
+		this.commentPraiseCount = commentPraiseCount;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java
new file mode 100644
index 0000000..32ec6e8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 我的点赞视图
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="SNS_MY_PRAISE")
+@NamedQuery(name="SnsMyPraise.findAll", query="SELECT e FROM SnsMyPraise e")
+public class SnsMyPraise implements Serializable{
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 类型  1讨论,2评论*/
+	private int type;
+	
+	/** 用户名称*/
+	private String name;
+	
+	/** 用户Id*/
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** 用户头像*/
+	@Column(name="IMG_PATH", length=32)
+	private String imgPath;
+	
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name = "TOPIC_DESC", columnDefinition = "CLOB")
+    private String topicDesc;
+
+    @Column(name = "TOPIC_NAME")
+    private String topicName;
+    
+    @Column(name = "TOPIC_ID", nullable = false, length = 32)
+    private String topicId;
+	
+	/** 主键  */
+	@Column(name="COMMENT_ID", length=32)
+	private String commentId;
+	
+	/** 主键  */
+	@Id
+	@Column(name="COMMENT_PRAISE_ID", length=32)
+	private String commentPraiseId;
+
+	/** 评论时间 */
+	@Column(name="PRAISE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date praiseTime;
+
+	/** 评论内容  */
+	@Column(name="CONTENT")
+	private String content;
+
+	/**  评论个数 */
+	@Column(name="COMMENT_COUNT")
+	private BigInteger commentCount = BigInteger.ZERO;
+
+	/**  评论被赞数 */
+	@Column(name="COMMENT_PRAISE_COUNT")
+	private BigInteger commentPraiseCount = BigInteger.ZERO;
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getTopicDesc() {
+		return topicDesc;
+	}
+
+	public void setTopicDesc(String topicDesc) {
+		this.topicDesc = topicDesc;
+	}
+
+	public String getTopicName() {
+		return topicName;
+	}
+
+	public void setTopicName(String topicName) {
+		this.topicName = topicName;
+	}
+
+	public String getTopicId() {
+		return topicId;
+	}
+
+	public void setTopicId(String topicId) {
+		this.topicId = topicId;
+	}
+
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public BigInteger getCommentPraiseCount() {
+		return commentPraiseCount;
+	}
+
+	public void setCommentPraiseCount(BigInteger commentPraiseCount) {
+		this.commentPraiseCount = commentPraiseCount;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java
new file mode 100644
index 0000000..9e02bea
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 给我点赞视图
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="SNS_PRAISE_TO_ME")
+@NamedQuery(name="SnsPraiseToMe.findAll", query="SELECT e FROM SnsPraiseToMe e")
+public class SnsPraiseToMe implements Serializable{
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 类型  1讨论,2评论*/
+	private int type;
+	
+	/** 用户名称*/
+	private String name;
+	
+	/** 用户Id*/
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** 用户头像*/
+	@Column(name="IMG_PATH", length=32)
+	private String imgPath;
+	
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name = "TOPIC_DESC", columnDefinition = "CLOB")
+    private String topicDesc;
+
+    @Column(name = "TOPIC_NAME")
+    private String topicName;
+    
+    @Column(name = "TOPIC_ID", nullable = false, length = 32)
+    private String topicId;
+	
+	/** 主键  */
+	@Column(name="COMMENT_ID", length=32)
+	private String commentId;
+	
+	/** 主键  */
+	@Id
+	@Column(name="COMMENT_PRAISE_ID", length=32)
+	private String commentPraiseId;
+
+	/** 评论时间 */
+	@Column(name="PRAISE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date praiseTime;
+
+	/** 评论内容  */
+	@Column(name="CONTENT")
+	private String content;
+
+	/**  评论个数 */
+	@Column(name="COMMENT_COUNT")
+	private BigInteger commentCount = BigInteger.ZERO;
+
+	/**  评论被赞数 */
+	@Column(name="COMMENT_PRAISE_COUNT")
+	private BigInteger commentPraiseCount = BigInteger.ZERO;
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getTopicDesc() {
+		return topicDesc;
+	}
+
+	public void setTopicDesc(String topicDesc) {
+		this.topicDesc = topicDesc;
+	}
+
+	public String getTopicName() {
+		return topicName;
+	}
+
+	public void setTopicName(String topicName) {
+		this.topicName = topicName;
+	}
+
+	public String getTopicId() {
+		return topicId;
+	}
+
+	public void setTopicId(String topicId) {
+		this.topicId = topicId;
+	}
+
+	public String getCommentId() {
+		return commentId;
+	}
+
+	public void setCommentId(String commentId) {
+		this.commentId = commentId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public BigInteger getCommentPraiseCount() {
+		return commentPraiseCount;
+	}
+
+	public void setCommentPraiseCount(BigInteger commentPraiseCount) {
+		this.commentPraiseCount = commentPraiseCount;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java b/src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java
new file mode 100644
index 0000000..81680de
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java
@@ -0,0 +1,393 @@
+
+package com.qxueyou.scc.operation.topic.action;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CommonUtils;
+import com.qxueyou.scc.operation.topic.model.TopicInfo;
+import com.qxueyou.scc.operation.topic.service.ITopicService;
+import com.qxueyou.scc.user.service.IUserService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 学习端 话题前端控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@Api(tags="讨论接口")
+@RestController
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "/stu/topic")
+public class StuTopicController {
+
+	@Autowired
+	private ITopicService topicService;
+
+	@Autowired
+	IUserService userService;
+	
+	/**
+	 * 获取热门话题列表
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @param keyword
+	 *            索搜关键字
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return status (0,为开始。1,讨论中。2,已结束。)
+	 */
+	@ApiOperation(value = "获取热门话题列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "type", value = "1热门,2最近", required = true, paramType="query", dataType = "int"),
+        @ApiImplicitParam(name = "scope", value = "1班级,2机构", required = true, paramType="query", dataType = "int"),
+    })
+	@GetMapping(value = "getHotTopicLst")
+	public Result getClassTopicLst(String classId, @RequestParam(defaultValue="")String keyword, Pager pager, int type, int scope) {
+//		System.out.println(classId);
+		return new Result(true, "success", topicService.getHotTopicLst(CommonUtils.getClassId(classId), keyword, pager.getPageSize(), pager.getOffset(), type, scope));
+	}
+	
+	/**
+	 * 我的回复
+	 * 
+	 * @param pageSize
+	 *            每页显示多少条
+	 * @param currentPage
+	 *            当前页码
+	 */
+	@ApiOperation(value = "app端接口-我的回复", notes = "")
+	@GetMapping(value = "/app/myComment")
+	public Result appMyComment(Pager pager) {
+		return topicService.appMyComment(ClientUtils.getUserId(), pager);
+	}
+	
+	/**
+	 * app端接口-回复我的获取列表
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	@ApiOperation(value = "app端接口-回复我的获取列表", notes = "")
+	@GetMapping(value = "/app/commentToMe")
+	public Result commentToMe(Pager pager) {
+		return topicService.commentToMe(ClientUtils.getUserId(), pager);
+	}
+	
+	/**
+	 * app端接口-我的点赞
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	@ApiOperation(value = "app端接口-我的点赞", notes = "")
+	@GetMapping(value = "/app/myPraise")
+	public Result appMyPraise(Pager pager) {
+
+		return topicService.appMyPraise(ClientUtils.getUserId(), pager);
+	}
+	
+	/**
+	 * app端接口-给我赞的
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	@ApiOperation(value = "app端接口-给我赞的", notes = "")
+	@GetMapping(value = "/app/praiseToMe")
+	public Result praiseToMe(Pager pager) {
+		return topicService.praiseToMe(ClientUtils.getUserId(), pager);
+	}
+
+	/**
+	 * 获取话题列表
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @param keyword
+	 *            索搜关键字
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return status (0,为开始。1,讨论中。2,已结束。)
+	 */
+	@ApiOperation(value = "获取话题列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "getTopicLst")
+	public Result getTopicLst(String classId, String keyword, Integer limit, Integer pageNum) {
+		if (userService.isAdmin()) {
+			return topicService.getTopicLstOfAdmin(classId, limit, pageNum, keyword);
+		}
+		if (userService.isTeacher()) {
+			return topicService.getTopicLstOfTeacher(classId, limit, pageNum, keyword);
+		}
+		return topicService.getTopicLst(classId, keyword, limit, pageNum);
+	}
+
+	/**
+	 * 学习端 发布/更新话题
+	 * 
+	 * @param topicName
+	 *            话题名称
+	 * @param topicDesc
+	 *            话题描述
+	 * @param starTime
+	 *            开始时间
+	 * @param endTime
+	 *            结束时间
+	 * @param classId
+	 *            班级id(可以多个)
+	 */
+	@ApiOperation(value = "发布/更新话题", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级ids", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "topicName", value = "讨论名称", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "topicDesc", value = "内容", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "startTime", value = "开始时间", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "endTime", value = "结束时间", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "topicId", value = "讨论id", required = true, paramType="query", dataType = "String"),
+    })
+	@PostMapping(value = "addOrUpdateTopic")
+	public Result addOrUpdateTopic(@RequestBody TopicInfo topicInfo) {
+		if (StringUtils.isBlank(topicInfo.getTopicId())) {
+			return topicService.addTopicInfo(topicInfo);
+		}
+		return topicService.updateTopicInfo(topicInfo);
+	}
+
+	/**
+	 * 学习端讨论区
+	 * 
+	 * @param keyword
+	 *            搜索关键字
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 */
+	@GetMapping(value = "lstCommonTopic")
+	public Result lstCommonTopic(String keyword, Integer limit, Integer pageNum, String classId) {
+		return topicService.lstCommonTopic(keyword, 6, 0, classId);
+	}
+
+	/**
+	 * 学习端 讨论统计
+	 */
+	@ApiOperation(value = "学习端 讨论统计", notes = "")
+	@GetMapping(value = "commentDetail")
+	public Result commentDetail() {
+		return topicService.commentDetail(ClientUtils.getUserId());
+	}
+
+	/**
+	 * 班级论坛
+	 */
+	@GetMapping(value = "getClassForumLst")
+	public Result getClassForum() {
+
+		return topicService.getClassForum();
+	}
+
+	/**
+	 * 学习端获取班级论坛详情
+	 */
+	@GetMapping(value = "getClassForumDetail")
+	public Result getClassForumDetail(String classId) {
+
+		return topicService.getClassForumDetail(classId);
+	}
+
+	/**
+	 * 获取话题详情
+	 * 
+	 * @param topicId
+	 *            话题id
+	 */
+	@ApiOperation(value = "获取话题详情", notes = "")
+	@ApiImplicitParams({
+        @ApiImplicitParam(name = "topicId", value = "讨论id", required = true, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "getTopicDetails")
+	public Result getTopicDetails(String topicId) {
+		return topicService.doTopicDetails(topicId);
+	}
+
+	/**
+	 * 获取详情 获取评论列表
+	 * 
+	 * @param topicId
+	 *            话题id
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 */
+	@ApiOperation(value = "获取详情 获取评论列表", notes = "")
+	@ApiImplicitParams({
+        @ApiImplicitParam(name = "topicId", value = "讨论id", required = false, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "getCommentLst")
+	public Result getCommentLst(String topicId, Integer pageSize, Integer pageNum) {
+
+		return topicService.getCommentLst(topicId, pageSize, pageNum);
+	}
+
+	/**
+	 * 我发布的话题
+	 * 
+	 * @param pageSize
+	 *            每页显示多少条
+	 * @param pageNum
+	 *            当前页码
+	 */
+	@ApiOperation(value = "我发布的话题", notes = "")
+	@GetMapping(value = "myTopic")
+	public Result myTopic(Integer pageSize, Integer pageNum) {
+
+		return topicService.myTopic(pageSize, pageNum);
+	}
+
+	/**
+	 * 我的回复
+	 * 
+	 * @param pageSize
+	 *            每页显示多少条
+	 * @param currentPage
+	 *            当前页码
+	 */
+	@ApiOperation(value = "我的回复", notes = "")
+	@GetMapping(value = "myComment")
+	public Result myComment(Integer pageSize, Integer pageNum) {
+
+		return topicService.myComment(pageSize, pageNum);
+	}
+	
+	/**
+	 * 我的回复
+	 * 
+	 * @param pageSize
+	 *            每页显示多少条
+	 * @param currentPage
+	 *            当前页码
+	 */
+	@ApiOperation(value = "我的点赞", notes = "")
+	@GetMapping(value = "myPraise")
+	public Result myPraise(Integer pageSize, Integer pageNum) {
+
+		return topicService.myComment(pageSize, pageNum);
+	}
+
+	/**
+	 * 删除我的回复
+	 */
+	@ApiOperation(value = "删除我的回复", notes = "")
+	@ApiImplicitParams({
+        @ApiImplicitParam(name = "commentId", value = "评论id", required = false, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "deleteMycomment")
+	public Result deleteMycomment(String commentId) {
+		return topicService.deleteMycomment(commentId);
+	}
+
+	/**
+	 * 回复我的获取列表
+	 * 
+	 * @param keyword
+	 *            话题id
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * 
+	 */
+	@ApiOperation(value = "回复我的获取列表", notes = "")
+	@GetMapping(value = "getCommentLstToMe")
+	public Result gerCommentLstToMe(Integer pageSize, Integer pageNum) {
+		return topicService.getCommentLstToMe(pageSize, pageNum);
+	}
+
+	/**
+	 * 获取我的点赞
+	 */
+	@ApiOperation(value = "获取我的点赞", notes = "")
+	@GetMapping(value = "getPraiseLst")
+	public Result getPraiseLst(Integer pageSize, Integer pageNum) {
+		return topicService.getPraiseLst(pageSize, pageNum);
+	}
+
+	/**
+	 * 话题回复评论
+	 * 
+	 * @param content
+	 *            评论内容
+	 * @param topicId
+	 *            话题id
+	 * @param 回复评论的id
+	 */
+	/**
+	 * 获取我的点赞
+	 */
+	@ApiOperation(value = "话题回复评论", notes = "")
+		@ApiImplicitParams({
+			@ApiImplicitParam(name = "commentedId", value = "被评论的id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "content", value = "回复内容", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "commentObjectId", value = "评论话题id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "commentParentId", value = "父评论id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "commentedName", value = "被评论者", required = false, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "addComment")
+	public Result addComment(String content, String commentObjectId, String commentParentId, String commentedId,
+			String commentedName) {
+		return topicService.addComment(content, commentObjectId, commentParentId, commentedId, commentedName);
+	}
+
+	/**
+	 * 点赞话题/评论
+	 * 
+	 * @param commentId
+	 *            评论id
+	 * @param topicId
+	 *            话题id
+	 */
+	@ApiOperation(value = "点赞话题/评论", notes = "")
+	@ApiImplicitParams({
+        @ApiImplicitParam(name = "commentId", value = "点赞评论id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "commentObjectId", value = "点赞话题id", required = false, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "addPraise")
+	public Result addPraise(String commentId, String commentObjectId) {
+		return topicService.addPraise(commentId, commentObjectId);
+	}
+
+	/**
+	 * 删除话题
+	 * 
+	 * @param topicId
+	 *            话题id
+	 */
+	@ApiOperation(value = "删除讨论", notes = "")
+	@ApiImplicitParams({
+        @ApiImplicitParam(name = "topicId", value = "讨论id", required = false, paramType="query", dataType = "String"),
+    })
+	@PostMapping(value = "deleteTopic")
+	public Result deleteTopic(String topicId) {
+		return topicService.deleteTopic(topicId);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java b/src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java
new file mode 100644
index 0000000..7a03138
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java
@@ -0,0 +1,155 @@
+package com.qxueyou.scc.operation.topic.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 话题班级中间表
+ * 
+ * @author chenjunliang
+ *
+ */
+@Entity
+@Table(name = "topic_class_re")
+@NamedQuery(name = "TopicClassRe.findAll", query = "SELECT t FROM TopicClassRe t")
+public class TopicClassRe implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "TOPIC_CLASS_RE_ID", unique = true, nullable = false, length = 32)
+	private String TopicClassReId;
+
+	@Column(name = "CLASS_ID")
+	private String classId;
+
+	@Column(name = "TOPIC_ID")
+	private String topicId;
+
+	@Column(name = "CREATE_ID", length = 32)
+	private String createId;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getTopicClassReId() {
+		return TopicClassReId;
+	}
+
+	public void setTopicClassReId(String topicClassReId) {
+		TopicClassReId = topicClassReId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getTopicId() {
+		return topicId;
+	}
+
+	public void setTopicId(String topicId) {
+		this.topicId = topicId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean isDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java b/src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java
new file mode 100644
index 0000000..9205f67
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java
@@ -0,0 +1,293 @@
+package com.qxueyou.scc.operation.topic.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the topic_info database table.
+ */
+@Entity
+@Table(name = "topic_info")
+@NamedQuery(name = "TopicInfo.findAll", query = "SELECT t FROM TopicInfo t")
+public class TopicInfo implements Serializable, ITrace {
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(generator = "hibernate-uuid")
+    @GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+    @Column(name = "TOPIC_ID", unique = true, nullable = false, length = 32)
+    private String topicId;
+
+    @Column(name = "CLASS_ID")
+    private String classId;
+    
+    @Column(name = "ORG_ID")
+    private String orgId;
+
+    @Column(name = "COMMENT_FLAG")
+    private short commentFlag;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Column(name = "END_TIME")
+    private Date endTime;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Column(name = "LATEST_COMMENT_TIME")
+    private Date latestCommentTime;
+
+    @Column(name = "LATEST_COMMENT_NAME")
+    private String latestCommentName;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Column(name = "PUBLISH_TIME")
+    private Date publishTime;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Column(name = "START_TIME")
+    private Date startTime;
+
+    @Column(name = "TOPIC_STATUS")
+    private short topicStatus;
+
+    @Column(name = "TEACHER_FLAG")
+    private short teacherFlag;
+
+    @Column(name = "TOPIC_DESC", columnDefinition = "CLOB")
+    private String topicDesc;
+
+    @Column(name = "TOPIC_NAME")
+    private String topicName;
+
+    @Column(name = "TOPIC_TYPE")
+    private short topicType;
+
+    @Column(name = "CREATE_ID", length = 32)
+    private String createId;
+
+    @Column(name = "CREATOR", nullable = false, length = 100)
+    private String creator;
+
+    @Column(name = "CREATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 修改人ID
+     */
+    @Column(name = "UPDATE_ID", length = 32)
+    private String updateId;
+
+    /**
+     * 修改时间
+     */
+    @Column(name = "UPDATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 修改人
+     */
+    @Column(name = "UPDATOR", length = 100)
+    private String updator;
+
+    /**
+     * 删除标志
+     */
+    @Column(name = "DELETE_FLAG", nullable = false)
+    @JsonIgnore
+    private boolean deleteFlag;
+
+
+    public TopicInfo() {
+    }
+
+    public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getTopicId() {
+        return this.topicId;
+    }
+
+    public void setTopicId(String topicId) {
+        this.topicId = topicId;
+    }
+
+    public String getClassId() {
+        return this.classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
+    public short getCommentFlag() {
+        return this.commentFlag;
+    }
+
+    public void setCommentFlag(short commentFlag) {
+        this.commentFlag = commentFlag;
+    }
+
+    public short getTeacherFlag() {
+        return this.teacherFlag;
+    }
+
+    public void setTeacherFlag(short teacherFlag) {
+        this.teacherFlag = teacherFlag;
+    }
+
+    public String getTopicDesc() {
+        return this.topicDesc;
+    }
+
+    public void setTopicDesc(String topicDesc) {
+        this.topicDesc = topicDesc;
+    }
+
+    public String getTopicName() {
+        return this.topicName;
+    }
+
+    public void setTopicName(String topicName) {
+        this.topicName = topicName;
+    }
+
+    public short getTopicType() {
+        return this.topicType;
+    }
+
+    public void setTopicType(short topicType) {
+        this.topicType = topicType;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Date getLatestCommentTime() {
+        return latestCommentTime;
+    }
+
+    public void setLatestCommentTime(Date latestCommentTime) {
+        this.latestCommentTime = latestCommentTime;
+    }
+
+    public Date getPublishTime() {
+        return publishTime;
+    }
+
+    public void setPublishTime(Date publishTime) {
+        this.publishTime = publishTime;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public short getTopicStatus() {
+        return topicStatus;
+    }
+
+    public void setTopicStatus(short topicStatus) {
+        this.topicStatus = topicStatus;
+    }
+
+    public String getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateId() {
+        return updateId;
+    }
+
+    public void setUpdateId(String updateId) {
+        this.updateId = updateId;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdator() {
+        return updator;
+    }
+
+    public void setUpdator(String updator) {
+        this.updator = updator;
+    }
+
+    public boolean getDeleteFlag() {
+        return deleteFlag;
+    }
+
+    public void setDeleteFlag(boolean deleteFlag) {
+        this.deleteFlag = deleteFlag;
+    }
+
+    public String getLatestCommentName() {
+        return latestCommentName;
+    }
+
+    public void setLatestCommentName(String latestCommentName) {
+        this.latestCommentName = latestCommentName;
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java b/src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java
new file mode 100644
index 0000000..83d86e1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java
@@ -0,0 +1,197 @@
+package com.qxueyou.scc.operation.topic.service;
+
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.operation.topic.model.TopicInfo;
+
+/**
+ * 话题服务层
+ * 
+ * @author chenjunliang
+ *
+ */
+public interface ITopicService {
+	/**
+	 * 获取话题列表
+	 */
+	Result getTopicLst(String classId, String keyword, Integer limit, Integer pageNum);
+
+	/**
+	 * 获取话题内容信息
+	 */
+	Result doTopicDetails(String topicId);
+
+	/**
+	 * 话题的新增
+	 */
+	Result addTopicInfo(TopicInfo topicInfo);
+
+	/**
+	 * 获取最新话题列表
+	 */
+	Result lstCommonTopic(String keyword, Integer limit, Integer pageNum, String classId);
+
+	/**
+	 * 获取班级论坛列表
+	 */
+	Result getClassForum();
+
+	/**
+	 * 学习端获取班级论坛详情
+	 */
+	Result getClassForumDetail(String classId);
+
+	/**
+	 * 获取详情 获取评论列表
+	 */
+	Result getCommentLst(String topicId, Integer limit, Integer pageNum);
+
+	/**
+	 * 我发布的话题
+	 */
+	Result myTopic(Integer pageSize, Integer pageNum);
+
+	/**
+	 * 我的回复
+	 */
+	Result myComment(Integer pageSize, Integer pageNum);
+
+	/**
+	 * 删除我的回复
+	 */
+	Result deleteMycomment(String commentId);
+
+	/**
+	 * 回复我的
+	 */
+	Result getCommentLstToMe(Integer pageSize, Integer pageNum);
+
+	/**
+	 * 获取我的点赞
+	 * 
+	 * @return
+	 */
+	Result getPraiseLst(Integer pageSize, Integer pageNum);
+
+	/**
+	 * 话题回复评论
+	 */
+	Result addComment(String content, String topicId, String commentId, String commentedId, String commentedName);
+
+	/**
+	 * 点赞话题的评论
+	 */
+	Result addPraise(String commentId, String topiId);
+
+	/**
+	 * 删除话题
+	 */
+	Result deleteTopic(String topicId);
+
+	/**
+	 * 讨论统计
+	 */
+	Result commentDetail(String userId);
+
+	/**
+	 * 获取后台管理列表
+	 * 
+	 * @param classId
+	 * @param pageSize
+	 * @param pageNum
+	 * @param keyword
+	 * @return
+	 */
+	Result getTopicLstOfAdmin(String classId, Integer pageSize, Integer pageNum, String keyword);
+
+	/**
+	 * 话题的更新
+	 * 
+	 * @param topicName
+	 * @param topicDesc
+	 * @param startTime
+	 * @param endTime
+	 * @param classId
+	 * @param topicId
+	 * @return
+	 */
+	Result updateTopicInfo(TopicInfo topicInfo);
+
+	/**
+	 * 获取后台管理教师的话题列表
+	 * 
+	 * @param classId
+	 * @param pageSize
+	 * @param pageNum
+	 * @param keyword
+	 * @return
+	 */
+	Result getTopicLstOfTeacher(String classId, Integer pageSize, Integer pageNum, String keyword);
+	
+	/**
+	 * 获取热门讨论
+	 * 
+	 * @param classId
+	 * @param keyword
+	 * @param limit
+	 * @param pageNum
+	 * @return
+	 */
+	Map<String, Object> getHotTopicLst(String classId, String keyword, Integer limit, Integer pageNum, int type, int scope);
+	
+	/**
+	 * 获取讨论数量
+	 * 
+	 * @param keyword
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	public int getTopicCount(String keyword, String classId, String userId);
+	
+	/**
+	 * app-我的回复
+	 * 
+	 * @param userId
+	 * @param pager
+	 * @return
+	 */
+	Result appMyComment(String userId, Pager pager);
+	
+	/**
+	 * app端接口-回复我的获取列表
+	 * 
+	 * @param userId
+	 * @param pager
+	 * @return
+	 */
+	Result commentToMe(String userId, Pager pager);
+	
+	/**
+	 * app端接口-我的点赞
+	 * 
+	 * @param userId
+	 * @param pager
+	 * @return
+	 */
+	Result appMyPraise(String userId, Pager pager);
+	
+	/**
+	 * app端接口-给我赞的
+	 * 
+	 * @param userId
+	 * @param pager
+	 * @return
+	 */
+	Result praiseToMe(String userId, Pager pager);
+	
+	/**
+     * 获取班级讨论数量
+     * 
+     * @param classId
+     * @return
+     */
+    public long getClassTopicCount(String classId);
+}
diff --git a/src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java b/src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java
new file mode 100644
index 0000000..8daafa1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java
@@ -0,0 +1,853 @@
+package com.qxueyou.scc.operation.topic.service.impl;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.stereotype.Service;
+
+import com.querydsl.core.Tuple;
+import com.querydsl.core.types.Order;
+import com.querydsl.core.types.OrderSpecifier;
+import com.querydsl.core.types.Predicate;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.model.QClsClass;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.operation.comment.mode.Comment;
+import com.qxueyou.scc.operation.comment.mode.CommentObject;
+import com.qxueyou.scc.operation.comment.mode.CommentPraise;
+import com.qxueyou.scc.operation.comment.mode.QComment;
+import com.qxueyou.scc.operation.comment.mode.QCommentObject;
+import com.qxueyou.scc.operation.comment.mode.QCommentPraise;
+import com.qxueyou.scc.operation.comment.mode.QSnsCommentToMe;
+import com.qxueyou.scc.operation.comment.mode.QSnsMyComment;
+import com.qxueyou.scc.operation.comment.mode.QSnsMyPraise;
+import com.qxueyou.scc.operation.comment.mode.QSnsPraiseToMe;
+import com.qxueyou.scc.operation.comment.mode.SnsCommentToMe;
+import com.qxueyou.scc.operation.comment.mode.SnsMyComment;
+import com.qxueyou.scc.operation.comment.mode.SnsMyPraise;
+import com.qxueyou.scc.operation.comment.mode.SnsPraiseToMe;
+import com.qxueyou.scc.operation.topic.model.QTopicClassRe;
+import com.qxueyou.scc.operation.topic.model.QTopicInfo;
+import com.qxueyou.scc.operation.topic.model.TopicClassRe;
+import com.qxueyou.scc.operation.topic.model.TopicInfo;
+import com.qxueyou.scc.operation.topic.service.ITopicService;
+import com.qxueyou.scc.user.model.QUser;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.service.IUserService;
+
+/**
+ * 话题服务层
+ *
+ * @author chenjunliang
+ */
+@Service
+public class TopicService extends CommonAppService implements ITopicService {
+
+    @Autowired
+    IUserService userService;
+
+    @Autowired
+    ITeacherService teacherService;
+
+    @Override
+    public Result getTopicLst(String classId, String keyword, Integer limit, Integer pageNum) {
+        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+        String userId = ClientUtils.getUserId();
+
+        int topicCount = this.getTopicCount(keyword_, classId, userId);
+        String hql = "select distinct t.topicId as topicId ,t.topicName as topicName, t.topicStatus as  status, t.creator as issuer, t.createId as issuerId ,"
+                + "t.startTime as releaseTime,t.endTime as endTime , t.classId as classId, t.latestCommentName as latestCommentName ,"
+                + "t.latestCommentTime as latestCommentTime,o.viewCount as viewCount ,o.commentCount as commentCount from TopicInfo t,TopicClassRe r ,CommentObject o ,StuStudent s "
+                + "where t.deleteFlag is false and r.deleteFlag is false and o.deleteFlag is false  and t.topicId "
+                + "=o.commentObjectUid and t.topicName like:keyword_ and o.commentObjectType = 5 and r.topicId = t.topicId and r.classId = s.classId and s.userId =:userId ";
+        Map<String, Object> hqlMap = new HashMap<String, Object>(2);
+        hqlMap.put("keyword_", "%" + keyword_ + "%");
+        hqlMap.put("userId", userId);
+        if (StringUtils.isNotBlank(classId)) {
+            hql = hql.concat("and r.classId =:classId order by t.createTime desc");
+            hqlMap.put("classId", classId);
+        } else {
+            hql = hql.concat(" order by t.createTime desc");
+        }
+
+        List<Map<String, Object>> topicLst = findListWithMapByHql(hql, hqlMap, new Pager(limit, pageNum));
+
+        for (Map<String, Object> map : topicLst) {
+            String topicId = (String) map.get("topicId");
+            String findPeopleCountByHql = "select distinct c.commentterId as commentterId from CommentObject o,Comment c where o.deleteFlag is false and o.commentObjectUid =:topicId and"
+                    + " c.commentObjectId =o.commentObjectId and o.commentObjectType = 5";
+            List<Map<String, Object>> commentIdLst = findListWithMapByHql(findPeopleCountByHql,
+                    CollectionUtils.newObjectMap("topicId", topicId));
+            int peopleCount = commentIdLst.size();// 参与人数
+            map.put("peopleCount", peopleCount);
+        }
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("topicLst", topicLst, "topicCount", topicCount));
+    }
+
+    public int getTopicCount(String keyword, String classId, String userId) {
+        Map<String, Object> map = CollectionUtils.newObjectMap("keyword", "%" + keyword + "%");
+        String hql = "";
+
+        if (userService.isAdmin()) {
+            hql = "select distinct t.topicId from  TopicInfo t,TopicClassRe r ,CommentObject o ,ClsClass c where t.deleteFlag is false and r.deleteFlag is false and o.deleteFlag is false and r.topicId = t.topicId and t.topicId "
+                    + "=o.commentObjectUid and t.topicName like:keyword and o.commentObjectType = 5 and r.classId =c.classId and c.deleteFlag is false and t.topicId = t.topicId";
+        } else if (userService.isTeacher()) {
+        	hql = "select distinct t.topicId as topicId from"
+                     + " TopicInfo t,TopicClassRe r ,CommentObject o ,Subject s, ClsClassReSubject re "
+                     + "where t.deleteFlag is false and r.deleteFlag is false and o.deleteFlag is false and r.topicId = t.topicId and t.topicId "
+                     + "=o.commentObjectUid and t.topicName like:keyword and o.commentObjectType = 5 and"
+                     + " re.classId =r.classId and s.deleteFlag is false and re.deleteFlag is false and re.subjectId = s.subjectId and t.topicId = t.topicId and s.teacherId =:teacherId ";
+            map.put("teacherId", userId);
+        } else {
+            hql = "select distinct t.topicId  from TopicInfo t,TopicClassRe r , StuStudent s where t.deleteFlag is false and t.topicName like:keyword "
+                    + "and r.deleteFlag is false and r.classId = s.classId and  t.topicId =r.topicId and s.userId =:userId  ";
+            map.put("userId", userId);
+        }
+        if (StringUtils.isNotBlank(classId)) {
+            hql = hql.concat(" and r.classId =:classId");
+            map.put("classId", classId);
+        }
+
+        List<Map<String, Object>> result = findListWithMapByHql(hql, map);
+        int topicCount = result.size();
+        return topicCount;
+    }
+
+    @Override
+    public Result doTopicDetails(String topicId) {
+        if (StringUtils.isBlank(topicId)) {
+            return new Result(false, "error,topicId is null");
+        }
+        String hql = "from CommentObject where deleteFlag is false and commentObjectUid = ? and commentObjectType = 5";
+        CommentObject commentObject = findUnique(hql, CollectionUtils.newList(topicId), CommentObject.class);
+        BigInteger viewCount = commentObject.getViewCount();
+        commentObject.setViewCount(viewCount.add(new BigInteger("1")));// 查看条数+1
+        BigInteger viewCount2Json = commentObject.getViewCount();
+        BigInteger commentPraiseCount = commentObject.getCommentPraiseCount();
+        TraceUtils.setUpdateTrace(commentObject);
+        save(commentObject);
+        TopicInfo topic = this.read(TopicInfo.class, topicId);
+        String[] classIds = topic.getClassId().split(",");
+        
+        Map<String, Object> argsMap = new HashMap<String, Object>(1);
+        argsMap.put("classIds", classIds);
+        List<Map<String, Object>> classMapLst = findListWithMapByHql(
+                "select name as className, classId as classId from ClsClass where classId in (:classIds) and deleteFlag is false", argsMap);
+
+        String findPeopleCountByHql = "select distinct c.commentterId as commentterId from CommentObject o,Comment c"
+        		+ " where o.deleteFlag is false and o.commentObjectUid =:topicId and"
+                + " c.commentObjectId =o.commentObjectId and o.commentObjectType = 5";
+
+        List<Map<String, Object>> commentIdLst = findListWithMapByHql(findPeopleCountByHql,CollectionUtils.newObjectMap("topicId", topicId));
+        int peopleCount = commentIdLst.size();// 参与人数
+        
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("topicId", topicId,"topicType", topic.getTopicType(), "createTime", topic.getCreateTime(), "topicName", topic.getTopicName(), "issuer",
+                        topic.getCreator(), "issuerId", topic.getCreateId(), "deadline", topic.getEndTime(),
+                        "topicDesc", topic.getTopicDesc(), "classLst", classMapLst, "viewCount", viewCount2Json,
+                        "commentCount", commentObject.getCommentCount(), "praiseCount", commentPraiseCount, "startTime", topic.getStartTime(), "endTime",
+                        topic.getEndTime(), "peopleCount", peopleCount));
+    }
+
+    @Override
+    public Result addTopicInfo(TopicInfo topicInfo) {
+//    	if(topicInfo.getTopicType()==TopicInfo.TOPIC_TYPE_CLS && StringUtils.isEmpty(topicInfo.getClassId())) {
+    	if(StringUtils.isEmpty(topicInfo.getClassId())) {
+    		return new Result(false, "请选择关联班级!");
+    	}
+    	String classId = topicInfo.getClassId();
+    	topicInfo.setTopicId(null);
+        topicInfo.setDeleteFlag(false);
+        topicInfo.setOrgId(ClientUtils.getOrgId());
+        TraceUtils.setCreateTrace(topicInfo);
+        save(topicInfo);
+        
+        if(StringUtils.isNotEmpty(classId)){
+        	String[] classIds = classId.split(",");
+            TopicClassRe topicClassRe = null;
+            for (int i = 0; i < classIds.length; i++) {
+                topicClassRe = new TopicClassRe();
+                topicClassRe.setClassId(classIds[i]);
+                topicClassRe.setTopicId(topicInfo.getTopicId());
+                TraceUtils.setCreateTrace(topicClassRe);
+                save(topicClassRe);// 保存到中间表
+            }
+        }
+        
+        CommentObject commentObject = new CommentObject();
+        commentObject.setCommentObjectUid(topicInfo.getTopicId());
+        commentObject.setCommentObjectName(topicInfo.getTopicName());
+        commentObject.setCommentObjectType(CommentObject.COMMENT_TYPE_INTERACT);
+        commentObject.setCreateTime(new Date());
+        TraceUtils.setCreateTrace(commentObject);
+        BigInteger initParam =BigInteger.ZERO;
+        commentObject.setCommentCount(initParam);
+        commentObject.setCommentPraiseCount(initParam);
+        commentObject.setViewCount(initParam);
+        save(commentObject);// 创建评论对象
+        return new Result(true, "add success");
+    }
+
+    @Override
+    public Result lstCommonTopic(String keyword, Integer limit, Integer pageNum, String classId) {
+        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+        String userId = ClientUtils.getUserId();
+        int topicCount = this.getTopicCount(keyword_, classId, userId);
+
+        String hql = "select distinct t.topicId as topicId ,t.topicName as topicName, t.topicStatus as  status, t.creator as issuer,"
+                + "t.createTime as releaseTime,t.endTime as endTime,t.classId as classId, t.latestCommentName as latestCommentName ,"
+                + "t.latestCommentTime as latestCommentTime,o.viewCount as viewCount ,o.commentCount as commentCount from TopicInfo t,TopicClassRe r ,CommentObject o ,ClsClass c "
+                + "where t.deleteFlag is false and r.deleteFlag is false and o.deleteFlag is false and r.topicId = t.topicId and t.topicId "
+                + "=o.commentObjectUid and t.topicName like:keyword_ and o.commentObjectType = 5 and r.classId =c.classId and c.deleteFlag is false and t.topicId = t.topicId  ";
+        Map<String, Object> hqlMap = new HashMap<String, Object>(2);
+        hqlMap.put("keyword_", "%" + keyword_ + "%");
+        if (StringUtils.isNotBlank(classId)) {
+            hql = hql.concat("and r.classId =:classId  order by t.createTime desc ");
+            hqlMap.put("classId", classId);
+        } else {
+            hql = hql.concat("order by  t.createTime desc ");
+        }
+
+        List<Map<String, Object>> topicLst = findListWithMapByHql(hql, hqlMap, new Pager(limit, pageNum));
+
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("commonTopicLst", topicLst, "commonTopicCount", topicCount));
+    }
+
+    public Result getClassForum() {
+
+        String hql = "select distinct c.classId as classId ,c.name as className ,c.imgPath as coverUrl from ClsClass c ,TopicClassRe r "
+                + "where c.classId = r.classId  and c.deleteFlag is false and r.deleteFlag is false  ";
+        Map<String, Object> args = CollectionUtils.newObjectMap();
+        if (!userService.isAdmin()) {
+            hql = "select distinct c.classId as classId ,c.name as className ,c.imgPath as coverUrl from ClsClass c ,TopicClassRe r ,StuStudent s "
+                    + "where c.classId = r.classId  and c.deleteFlag is false and r.deleteFlag is false and s.classId = c.classId and s.userId =:userId";
+            args.put("userId", ClientUtils.getUserId());
+        }
+        List<Map<String, Object>> classLst = findListWithMapByHql(hql, args);
+        for (Map<String, Object> map : classLst) {
+            String classId = (String) map.get("classId");
+            int topicCount = findCountByComplexHql(
+                    "select count(1) from TopicClassRe  where deleteFlag is false and classId =:classId",
+                    CollectionUtils.newObjectMap("classId", classId));
+            map.put("topicCount", topicCount);
+            String CommentCountByHql = "select count(1)  from TopicClassRe r,CommentObject o , Comment c where "
+                    + "r.classId =:classId and r.deleteFlag is false and r.topicId = o.commentObjectUid  and "
+                    + "c.commentObjectId = o.commentObjectId";
+
+            int commentCount = findCountByComplexHql(CommentCountByHql,
+                    CollectionUtils.newObjectMap("classId", classId));
+            map.put("commentCount", commentCount);
+
+        }
+        return new Result(true, "success", classLst);
+    }
+
+    @Override
+    public Result getClassForumDetail(String classId) {
+        if (StringUtils.isBlank(classId)) {
+            return new Result(false, "classId not null");
+        }
+        ClsClass clsClass = read(ClsClass.class, classId);
+        Map<String, Object> mapJson = new HashMap<String, Object>();
+        String name = clsClass.getName();
+        String imgPath = clsClass.getImgPath();
+        int topicCount = findCountByComplexHql(// 获取话题条数
+                "select count(1) from TopicClassRe r  where deleteFlag is false and classId =:classId",
+                CollectionUtils.newObjectMap("classId", classId));
+        String findTopicIdLst = "select topicId as topicId from TopicClassRe where deleteFlag is false and classId=:classId";
+        List<Map<String, Object>> topicIdLst = findListWithMapByHql(findTopicIdLst, // 获取班级所有话题的id
+                CollectionUtils.newObjectMap("classId", classId));
+        int commentCount = 0;
+        int studentCommentCount = 0;
+        for (Map<String, Object> map : topicIdLst) {
+            String topicId = (String) map.get("topicId");
+            CommentObject commentObject = findUnique(// 获取话题的评论条数
+                    "from CommentObject where deleteFlag is false and commentObjectUid = ? and commentObjectType = 5",
+                    CollectionUtils.newList(topicId), CommentObject.class);
+            BigInteger BigcommentCount = commentObject.getCommentCount();
+            int count = BigcommentCount.intValue();
+            commentCount += count;
+            List<Map<String, Object>> lstCommentId = findListWithMapByHql(// 获取回复话题的评论人数
+                    "select distinct c.commentterId as  commentterId from CommentObject o,Comment c where o.deleteFlag is false and o.commentObjectUid =:topicId and"
+                            + " c.commentObjectId =o.commentObjectId and o.commentObjectType = 5",
+                    CollectionUtils.newObjectMap("topicId", topicId));
+            studentCommentCount += lstCommentId.size();
+        }
+        mapJson.put("commentCount", commentCount);
+        mapJson.put("imgPath", imgPath);
+        mapJson.put("className", name);
+        mapJson.put("topicCount", topicCount);
+        mapJson.put("peopleCount", studentCommentCount);
+        return new Result(true, "success", mapJson);
+    }
+
+    @Override
+    public Result getCommentLst(String topicId, Integer pageSize, Integer pageNum) {
+        String hql = "select c.commentId as commentId ,c.commentter as userName ,c.content as commentContent"
+                + " ,c.createTime as commentTime ,o.commentCount as commentCount ,c.commentParentId as commentParentId,c.commentterId as commentterId from Comment c "
+                + ",CommentObject o where c.deleteFlag is false and o.deleteFlag is false "
+                + " and c.commentObjectId=o.commentObjectId and o.commentObjectUid =:topicId order by c.createTime desc";
+        List<Map<String, Object>> commentLst = findListWithMapByHql(hql,
+                CollectionUtils.newObjectMap("topicId", topicId), new Pager(pageSize, pageNum));
+        int commentCount = findCountByComplexHql(// 获取总条数
+                "select count(1) from Comment c ,CommentObject o where c.deleteFlag is false and o.deleteFlag is false"
+                + "  and c.commentObjectId=o.commentObjectId and o.commentObjectUid =:topicId and o.commentObjectType = 5",
+                CollectionUtils.newObjectMap("topicId", topicId));
+
+        for (Map<String, Object> map : commentLst) {
+            String userId = (String) map.get("commentterId");
+            String commentId = (String) map.get("commentId");
+            String commentParentId = (String) map.get("commentParentId");
+            User user = read(User.class, userId);
+            String imgPath = user.getImgPath();
+            map.put("imgPath", imgPath);
+            // 获取每条评论的点赞数 ;
+            String findPraiseCountByHql = "select count(1) from CommentPraise where deleteFlag is false and commentId =:commentId";
+            int praiseCount = findCountByComplexHql(findPraiseCountByHql,
+                    CollectionUtils.newObjectMap("commentId", commentId));
+            map.put("praiseCount", praiseCount);
+            map.put("commentCount", findCountByComplexHql("select count(1) from Comment where deleteFlag is false and commentParentId =:commentId",
+                    CollectionUtils.newObjectMap("commentId", commentId)));
+            // 获取回复这个评论的自评论内容
+            String findSubCommentDetailByhql = "select commentter as commentter ,content as commentContent ,createTime as commentTime from  Comment "
+                    + " where deleteFlag is false and  commentId =:commentParentId ";
+            List<Map<String, Object>> subCommentDetail = findListWithMapByHql(findSubCommentDetailByhql,
+                    CollectionUtils.newObjectMap("commentParentId", commentParentId));
+
+            if (!subCommentDetail.isEmpty()) {
+                map.put("subCommentDetail", subCommentDetail);
+            }
+        }
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("commentLst", commentLst, "commentCount", commentCount));
+    }
+
+    @Override
+    public Result myTopic(Integer pageSize, Integer pageNum) {
+        String userId = ClientUtils.getUserId();
+        String findTopicLstByHql = "select  c.commentObjectId as commentObjectId, t.topicId as topicId ,t.topicName as topicName ,t.createTime as releaseTime, "
+                + "t.endTime as endTime ,c.commentCount as commentCount ,c.viewCount as viewCount ,t.latestCommentName as latestCommentName ,t.latestCommentTime as"
+                + " latestCommentTime from TopicInfo t ,CommentObject c where t.deleteFlag is false and c.commentObjectType = 5 and "
+                + "c.deleteFlag is false and t.createId =:userId and c.commentObjectUid = t.topicId";
+        int myTopicCount = findCountByComplexHql(
+                "select count(1) from TopicInfo t ,CommentObject c where t.deleteFlag is false and c.commentObjectType = 5 and "
+                        + "c.deleteFlag is false and t.createId =:userId and c.commentObjectUid = t.topicId ",
+                CollectionUtils.newObjectMap("userId", userId));
+        List<Map<String, Object>> myTopicLst = findListWithMapByHql(findTopicLstByHql,
+                CollectionUtils.newObjectMap("userId", userId), new Pager(pageSize, pageNum));
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("myTopicCount", myTopicCount, "myTopicLst", myTopicLst));
+    }
+
+    @Override
+    public Result myComment(Integer pageSize, Integer pageNum) {
+        String userId = ClientUtils.getUserId();
+        String findMyCommentLstByHql = "select t.topicId as topicId ,t.topicName as topicName , c.commentId as commentId ,c.content as commentContent ,"
+                + " c.commentedName as commentName ,c.createTime as "
+                + "commentTime from Comment c ,CommentObject o,TopicInfo t where c.deleteFlag is false and t.deleteFlag is false and "
+                + "c.commentterId =:userId and c.commentObjectId =o.commentObjectId and o.commentObjectUid =t.topicId and o.commentObjectType = 5";
+        int commentCount = findCountByComplexHql(
+                "select count(1) from Comment c ,CommentObject o,TopicInfo t where c.deleteFlag is false and t.deleteFlag is false and "
+                        + "c.commentterId =:userId and c.commentObjectId =o.commentObjectId and o.commentObjectUid =t.topicId and o.commentObjectType = 5",
+                CollectionUtils.newObjectMap("userId", userId));
+        List<Map<String, Object>> commentLst = findListWithMapByHql(findMyCommentLstByHql,
+                CollectionUtils.newObjectMap("userId", userId), new Pager(pageSize, pageNum));
+        for (Map<String, Object> map : commentLst) {
+            String commentId = (String) map.get("commentId");
+            int praiseCount = findCountByComplexHql(
+                    "select count(1) from CommentPraise  where deleteFlag is false and commentId =:commentId",
+                    CollectionUtils.newObjectMap("commentId", commentId));
+            map.put("praiseCount", praiseCount);
+        }
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("commentLst", commentLst, "commentCount", commentCount));
+    }
+    
+    @Override
+    public Result appMyComment(String userId, Pager pager) {
+    	QSnsMyComment qSnsMyComment = QSnsMyComment.snsMyComment;
+    	
+    	JPAQuery<SnsMyComment> query = this.getQueryFactory().
+    			selectFrom(qSnsMyComment).where(qSnsMyComment.createId.eq(userId));
+    	
+    	List<SnsMyComment> lstSnsMyComment = query.orderBy(qSnsMyComment.commentTime.desc())
+    			.offset(pager.getOffset()).limit(pager.getPageSize()).fetch();
+    	
+    	long commentCount = query.fetchCount();
+    	
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("dataList", lstSnsMyComment, "count", commentCount));
+    }
+    
+    @Override
+    public Result commentToMe(String userId, Pager pager) {
+    	QSnsCommentToMe qSnsCommentToMe = QSnsCommentToMe.snsCommentToMe;
+    	
+		JPAQuery<SnsCommentToMe> query = this.getQueryFactory().
+				selectFrom(qSnsCommentToMe).where(qSnsCommentToMe.createId.eq(userId));
+		
+		List<SnsCommentToMe> lstSnsMyComment = query.orderBy(qSnsCommentToMe.commentTime.desc())
+				.offset(pager.getOffset()).limit(pager.getPageSize()).fetch();
+		
+		long commentCount = query.fetchCount();
+		
+	    return new Result(true, "success",
+	            CollectionUtils.newObjectMap("dataList", lstSnsMyComment, "count", commentCount));
+    }
+    
+    @Override
+    public Result praiseToMe(String userId, Pager pager) {
+    	QSnsPraiseToMe qSnsPraiseToMe = QSnsPraiseToMe.snsPraiseToMe;
+    	
+    	JPAQuery<SnsPraiseToMe> query = this.getQueryFactory().
+    			selectFrom(qSnsPraiseToMe).where(qSnsPraiseToMe.createId.eq(userId));
+    	
+    	List<SnsPraiseToMe> lstSnsMyComment = query.orderBy(qSnsPraiseToMe.praiseTime.desc())
+    			.offset(pager.getOffset()).limit(pager.getPageSize()).fetch();
+    	
+    	long commentCount = query.fetchCount();
+    	
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("dataList", lstSnsMyComment, "count", commentCount));
+    }
+
+
+    @Override
+    public Result appMyPraise(String userId, Pager pager) {
+    	QSnsMyPraise qSnsMyPraise = QSnsMyPraise.snsMyPraise;
+    	
+    	JPAQuery<SnsMyPraise> query = this.getQueryFactory().
+    			selectFrom(qSnsMyPraise).where(qSnsMyPraise.createId.eq(userId));
+    	
+    	List<SnsMyPraise> lstSnsMyComment = query.orderBy(qSnsMyPraise.praiseTime.desc())
+    			.offset(pager.getOffset()).limit(pager.getPageSize()).fetch();
+    	
+    	long commentCount = query.fetchCount();
+    	
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("dataList", lstSnsMyComment, "count", commentCount));
+    }
+    
+    @Override
+    public Result deleteMycomment(String commentId) {
+        Comment comment = read(Comment.class, commentId);
+        if(!comment.getCreateId().equals(ClientUtils.getUserId())) {
+        	return new Result(false, "只能删除自己发布的信息");
+        }
+        comment.setDeleteFlag(true);
+        TraceUtils.setCreateTrace(comment);
+        save(comment);// 删除评论表的
+
+        String[] commentIds = commentId.split(",");
+        this.bulkUpdateInLoop("update CommentPraise set deleteFlag = true where commentId = ?", commentIds);// 删除对应的点赞
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result getCommentLstToMe(Integer pageSize, Integer pageNum) {
+        String hql = "select t.topicId as topicId , t.topicName as topicName ,t.startTime as startTime ,t.endTime as endTime , c.commentId as commentId , c.commentter as userName , "
+                + "c.commentterId as userId ,u.imgPath as imgPath , o.commentCount as commentCount , "
+                + "c.createTime as commentTime , c.content as commentContent from Comment c , CommentObject o ,"
+                + "TopicInfo t ,User u where c.commentedId =:userId and c.deleteFlag is false and o.deleteFlag is false "
+                + " and t.deleteFlag is false  and  c.commentObjectId = o.commentObjectId and o.commentObjectUid = t.topicId "
+                + "and o.commentObjectType = 5 and u.userId = c.commentterId and u.deleteFlag is false ";
+        List<Map<String, Object>> commentLst = findListWithMapByHql(hql,
+                CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()), new Pager(pageSize, pageNum));
+        for (Map<String, Object> map : commentLst) {
+            String commentId = (String) map.get("commentId");
+            int praiseCount = findCountByComplexHql(
+                    "select count(1) from CommentPraise  where deleteFlag is false and commentId =:commentId",
+                    CollectionUtils.newObjectMap("commentId", commentId));
+            map.put("praiseCount", praiseCount);
+        }
+
+        int commentCount = findCountByComplexHql("select count(1)  from  Comment c , CommentObject o ,"
+                        + "TopicInfo t where c.commentedId =:userId and c.deleteFlag is false and o.deleteFlag is false "
+                        + " and t.deleteFlag is false  and c.commentObjectId = o.commentObjectId and o.commentObjectUid = t.topicId and o.commentObjectType = 5",
+                CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()));
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("commentLst", commentLst, "commentCount", commentCount));
+    }
+
+    @Override
+    public Result getPraiseLst(Integer pageSize, Integer pageNum) {
+        String hql = "select  u.imgPath as imgPath ,c.commentedName as commentName , c.content as commentContent ,p.createTime as reTime , "
+                + "  t.topicId as topicId , t.topicName as topicName ,p.commentter as praiseName from Comment c , CommentPraise p ,"
+                + " CommentObject o , TopicInfo t , User u where c.commentId = p.commentId and  c.commentterId =:userId and"
+                + "  c.commentObjectId = o.commentObjectId and o.commentObjectUid = t.topicId and u.userId = p.commentterId and o.commentObjectType = 5";
+
+        int praiseCount = findCountByComplexHql("select count(1) from Comment c , CommentPraise p ,"
+                        + " CommentObject o , TopicInfo t , User u where c.commentId = p.commentId and  c.commentterId =:userId and"
+                        + "  c.commentObjectId = o.commentObjectId and o.commentObjectUid = t.topicId and u.userId =p.commentterId and o.commentObjectType = 5",
+                CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()));
+        List<Map<String, Object>> praiseLst = findListWithMapByHql(hql,
+                CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()), new Pager(pageSize, pageNum));
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("praiseLst", praiseLst, "praiseCount", praiseCount));
+    }
+
+    @Override
+    public Result addComment(String content, String commentObjectId, String commentParentId, String commentedId,
+                             String commentedName) {
+        if (StringUtils.isBlank(commentObjectId)) {
+            return new Result(false, " commentObjectId is null");
+        }
+        String hql = "from CommentObject where commentObjectUid=? and deleteFlag is false and commentObjectType = 5";
+        CommentObject commentObject = findUnique(hql, CollectionUtils.newList(commentObjectId), CommentObject.class);
+        BigInteger commentCount = commentObject.getCommentCount();
+        commentObject.setCommentCount(commentCount.add(new BigInteger("1")));// 评论+1;
+        TraceUtils.setUpdateTrace(commentObject);
+        save(commentObject);
+        Comment comment = new Comment();
+        comment.setCommentedId(commentedId);
+        comment.setCommentedName(commentedName);
+        comment.setContent(content);
+        comment.setCommentObjectId(commentObject.getCommentObjectId());
+        comment.setCommentter(ClientUtils.getUserName());
+        comment.setCommentterId(ClientUtils.getUserId());
+        comment.setDeleteFlag(false);
+        comment.setCommentCount(BigInteger.ZERO);
+        comment.setParPraiseCount(BigInteger.ZERO);
+        TraceUtils.setCreateTrace(comment);
+        if (StringUtils.isBlank(commentParentId)) {
+            TopicInfo topicInfo = read(TopicInfo.class, commentObjectId);
+            topicInfo.setLatestCommentTime(new Date());
+            topicInfo.setLatestCommentName(ClientUtils.getUserName());
+            TraceUtils.setUpdateTrace(topicInfo);
+            save(topicInfo);
+        } else {
+            comment.setCommentParentId(commentParentId);
+            
+            this.bulkUpdate("update Comment set commentCount = commentCount + 1 where commentId = ?", new Object[] {commentParentId});
+        }
+        save(comment);
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result addPraise(String commentId, String commentObjectId) {
+        if (StringUtils.isBlank(commentId)) {// 点赞话题
+            String hql = "from CommentObject where deleteFlag is false and commentObjectUid = ? and commentObjectType = 5";
+            CommentObject commentObject = findUnique(hql, CollectionUtils.newList(commentObjectId),
+                    CommentObject.class);
+            BigInteger commentPraiseCount = commentObject.getCommentPraiseCount();
+            BigInteger one = new BigInteger("1");
+            commentObject.setCommentPraiseCount(commentPraiseCount.add(one));// 点赞数+1
+            TraceUtils.setCreateTrace(commentObject);
+            save(commentObject);
+
+        }else {
+        	this.bulkUpdate("update Comment set commentPraiseCount = commentPraiseCount + 1 where commentId = ?", new Object[] {commentId});
+        }
+        
+        CommentPraise commentPraise = new CommentPraise();
+        commentPraise.setCommentId(commentId);
+        commentPraise.setCommentObjectId(commentObjectId);
+        commentPraise.setDeleteFlag(false);
+        commentPraise.setCommentterId(ClientUtils.getUserId());
+        commentPraise.setCommentter(ClientUtils.getUserName());
+        TraceUtils.setCreateTrace(commentPraise);
+        save(commentPraise);// 保存到点赞表
+        
+        return new Result(true, "success");
+    }
+
+    public Result commentDetail(String userId) {
+        QTopicInfo qTopicInfo = QTopicInfo.topicInfo;
+        QCommentObject qCommentObject = QCommentObject.commentObject;
+        QComment qComment = QComment.comment;
+        QCommentPraise qCommentPraise = QCommentPraise.commentPraise;
+        //我发的讨论数量
+        long topicCount = this.getQueryFactory().selectFrom(qTopicInfo).where(qTopicInfo.deleteFlag.isFalse().and(qTopicInfo.createId.eq(userId))).fetchCount();
+        
+        //我发的讨论的评论数
+		long topicCommentToMeCount = this.getQueryFactory().select(qCommentObject.commentCount.sum()).from(qCommentObject)
+				.where(qCommentObject.deleteFlag.isFalse().and(qCommentObject.createId.eq(userId))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)))
+				.fetchCount();
+		//我发的评论的评论数
+		long commentToMeCount = this.getQueryFactory().selectDistinct(qComment.commentId).from(qCommentObject, qComment)
+				.where(qComment.deleteFlag.isFalse().and(qCommentObject.deleteFlag.isFalse())
+						.and(qCommentObject.createId.eq(userId)).and(qCommentObject.commentObjectUid.eq(qComment.commentObjectId))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)).and(qComment.commentParentId.isNotNull()))
+				.fetchCount();
+		
+		//我评论的讨论的评论数
+		long topicCommentCount = this.getQueryFactory().selectDistinct(qComment.commentId).from(qCommentObject, qComment)
+				.where(qComment.deleteFlag.isFalse().and(qCommentObject.deleteFlag.isFalse())
+						.and(qComment.createId.eq(userId)).and(qCommentObject.commentObjectUid.eq(qComment.commentObjectId))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)).and(qComment.commentParentId.isNotNull()))
+				.fetchCount();
+		//我评论的数
+		long commentCount = this.getQueryFactory().selectDistinct(qComment.commentId).from(qCommentObject, qComment)
+				.where(qComment.deleteFlag.isFalse().and(qCommentObject.deleteFlag.isFalse())
+						.and(qComment.createId.eq(userId)).and(qCommentObject.commentObjectUid.eq(qComment.commentObjectId))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)).and(qComment.commentParentId.isNotNull()))
+				.fetchCount();
+		//我对讨论的点赞数
+		long topicPraise = this.getQueryFactory().selectDistinct(qCommentPraise.commentPraiseId).from(qCommentObject, qCommentPraise)
+				.where(qCommentObject.deleteFlag.isFalse().and(qCommentPraise.createId.eq(userId))
+						.and(qCommentPraise.commentObjectId.eq(qCommentObject.commentObjectId)).and(qCommentPraise.deleteFlag.isFalse())
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)))
+				.fetchCount();
+        //我对评论的点赞数
+        long commentPraise = this.getQueryFactory().selectDistinct(qCommentPraise.commentPraiseId).from(qCommentObject, qComment, qCommentPraise)
+				.where(qComment.deleteFlag.isFalse().and(qCommentObject.deleteFlag.isFalse()).and(qCommentPraise.commentId.eq(qComment.commentId))
+						.and(qCommentPraise.createId.eq(userId)).and(qCommentObject.commentObjectUid.eq(qComment.commentObjectId)).and(qCommentPraise.deleteFlag.isFalse())
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)))
+				.fetchCount();
+        //我的讨论的点赞数
+        long topicPraiseToMe = this.getQueryFactory().select(qCommentObject.commentPraiseCount.sum()).from(qCommentObject)
+				.where(qCommentObject.deleteFlag.isFalse().and(qCommentObject.createId.eq(userId))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)))
+				.fetchCount();
+        //我的讨论的点赞数
+        long commentPraiseToMe = this.getQueryFactory().selectDistinct(qCommentPraise.commentPraiseId).from(qCommentObject, qComment, qCommentPraise)
+				.where(qComment.deleteFlag.isFalse().and(qCommentObject.deleteFlag.isFalse()).and(qCommentPraise.commentId.eq(qComment.commentId))
+						.and(qComment.createId.eq(userId)).and(qCommentObject.commentObjectUid.eq(qComment.commentObjectId)).and(qCommentPraise.deleteFlag.isFalse())
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT)))
+				.fetchCount();
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("topicCount", topicCount, "topicCommentToMeCount", topicCommentToMeCount,
+						"commentToMeCount", commentToMeCount, "topicCommentCount", topicCommentCount, "commentCount",
+						commentCount, "topicPraise", topicPraise, "commentPraise", commentPraise,
+						"topicPraiseToMe", topicPraiseToMe, "commentPraiseToMe", commentPraiseToMe));
+    }
+
+    @Override
+    public Result deleteTopic(String topicId) {
+        String[] topicIds = topicId.split(",");
+
+        List<TopicInfo> topicInfoLst = findByComplexHql(
+                "from TopicInfo where deleteFlag is false and topicId in(:topicIds)",
+                CollectionUtils.newObjectMap("topicIds", topicIds), TopicInfo.class);
+        for (TopicInfo topicInfo : topicInfoLst) {
+            topicInfo.setDeleteFlag(true);
+            TraceUtils.setUpdateTrace(topicInfo);
+            save(topicInfo);
+        }
+
+        bulkUpdateInLoop("update Comment set deleteFlag = true where commentId = ?", topicIds);// 删除话题对应的评论;
+
+        bulkUpdateInLoop("update TopicClassRe set deleteFlag = true where topicId = ?", topicIds);// 删除话题对应的班级;
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result getTopicLstOfAdmin(String classId, Integer pageSize, Integer pageNum, String keyword) {
+
+        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+
+        int topicCount = this.getTopicCount(keyword_, classId, null);
+        String hql = "select distinct t.topicId as topicId ,t.topicName as topicName, t.topicStatus as  status, t.creator as issuer,t.createId as issuerId ,"
+                + "t.startTime as releaseTime,t.endTime as endTime,t.classId as classId, t.latestCommentName as latestCommentName ,"
+                + "t.latestCommentTime as latestCommentTime,o.viewCount as viewCount ,o.commentCount as commentCount from TopicInfo t,TopicClassRe r ,CommentObject o ,ClsClass c "
+                + "where t.deleteFlag is false and r.deleteFlag is false and o.deleteFlag is false and r.topicId = t.topicId and t.topicId "
+                + "=o.commentObjectUid and t.topicName like:keyword_ and o.commentObjectType = 5 and r.classId =c.classId and c.deleteFlag is false and t.topicId = t.topicId  ";
+        Map<String, Object> hqlMap = new HashMap<String, Object>(2);
+        hqlMap.put("keyword_", "%" + keyword_ + "%");
+        if (StringUtils.isNotBlank(classId)) {
+            hql = hql.concat("and r.classId =:classId order by t.createTime desc");
+            hqlMap.put("classId", classId);
+        } else {
+            hql = hql.concat(" order by t.createTime desc");
+        }
+
+        List<Map<String, Object>> topicLst = findListWithMapByHql(hql, hqlMap, new Pager(pageSize, pageNum));
+
+        for (Map<String, Object> map : topicLst) {
+            String topicId = (String) map.get("topicId");
+            String findPeopleCountByHql = "select distinct c.commentterId as commentterId from CommentObject o,Comment c where o.deleteFlag is false and o.commentObjectUid =:topicId and"
+                    + " c.commentObjectId =o.commentObjectId and o.commentObjectType = 5";
+            List<Map<String, Object>> commentIdLst = findListWithMapByHql(findPeopleCountByHql,
+                    CollectionUtils.newObjectMap("topicId", topicId));
+            int peopleCount = commentIdLst.size();// 参与人数
+            map.put("peopleCount", peopleCount);
+        }
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("topicLst", topicLst, "topicCount", topicCount));
+    }
+
+    @Override
+    public Result updateTopicInfo(TopicInfo editTopicInfo) {
+    	
+//    	if(editTopicInfo.getTopicType()==TopicInfo.TOPIC_TYPE_CLS && StringUtils.isEmpty(editTopicInfo.getClassId())) {
+    	if(StringUtils.isEmpty(editTopicInfo.getClassId())) {
+    		return new Result(false, "请选择关联班级!");
+    	}
+
+        TopicInfo topicInfo = read(TopicInfo.class, editTopicInfo.getTopicId());
+        this.bulkUpdate("update TopicClassRe set deleteFlag = true where topicId = ?", new Object[] {topicInfo.getTopicId()});// 删除对应的中间表数据
+        topicInfo.setTopicName(editTopicInfo.getTopicName());
+        topicInfo.setTopicType(editTopicInfo.getTopicType());
+        topicInfo.setTopicDesc(editTopicInfo.getTopicDesc());
+        topicInfo.setStartTime(editTopicInfo.getStartTime());
+        topicInfo.setEndTime(editTopicInfo.getEndTime());
+        topicInfo.setClassId(editTopicInfo.getClassId());
+        topicInfo.setDeleteFlag(false);
+        TraceUtils.setUpdateTrace(topicInfo);
+        save(topicInfo);
+        
+        if(StringUtils.isNotEmpty(topicInfo.getClassId())){
+        	String[] classIds = topicInfo.getClassId().split(",");
+            TopicClassRe topicClassRe = null;
+            for (int i = 0; i < classIds.length; i++) {
+            	topicClassRe = new TopicClassRe();
+                topicClassRe.setClassId(classIds[i]);
+                topicClassRe.setTopicId(editTopicInfo.getTopicId());
+                TraceUtils.setCreateTrace(topicClassRe);
+                save(topicClassRe);// 保存到中间表
+            }
+        }
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result getTopicLstOfTeacher(String classId, Integer pageSize, Integer pageNum, String keyword) {
+        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+        String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+        int topicCount = this.getTopicCount(keyword_, classId, teacherId);
+        String hql = "select distinct t.topicId as topicId ,t.topicName as topicName, t.topicStatus as  status, t.creator as issuer,t.createId as issuerId ,"
+                + "t.startTime as releaseTime,t.endTime as endTime,t.classId as classId, t.latestCommentName as latestCommentName ,"
+                + "t.latestCommentTime as latestCommentTime,o.viewCount as viewCount ,o.commentCount as commentCount from"
+                + " TopicInfo t,TopicClassRe r ,CommentObject o ,Subject s, ClsClassReSubject re "
+                + "where t.deleteFlag is false and r.deleteFlag is false and o.deleteFlag is false and r.topicId = t.topicId and t.topicId "
+                + "=o.commentObjectUid and t.topicName like:keyword_ and o.commentObjectType = 5 and"
+                + " re.classId =r.classId and s.deleteFlag is false and re.deleteFlag is false and re.subjectId = s.subjectId and t.topicId = t.topicId and s.teacherId =:teacherId ";
+        Map<String, Object> hqlMap = new HashMap<String, Object>(2);
+        hqlMap.put("keyword_", "%" + keyword_ + "%");
+        hqlMap.put("teacherId", teacherId);
+        if (StringUtils.isNotBlank(classId)) {
+            hql = hql.concat("and r.classId =:classId order by t.createTime desc");
+            hqlMap.put("classId", classId);
+        } else {
+            hql = hql.concat(" order by t.createTime desc");
+        }
+
+        List<Map<String, Object>> topicLst = findListWithMapByHql(hql, hqlMap, new Pager(pageSize, pageNum));
+
+        for (Map<String, Object> map : topicLst) {
+            String topicId = (String) map.get("topicId");
+            String findPeopleCountByHql = "select distinct c.commentterId as commentterId from CommentObject o,Comment c where o.deleteFlag is false and o.commentObjectUid =:topicId and"
+                    + " c.commentObjectId =o.commentObjectId and o.commentObjectType = 5";
+            List<Map<String, Object>> commentIdLst = findListWithMapByHql(findPeopleCountByHql,
+                    CollectionUtils.newObjectMap("topicId", topicId));
+            int peopleCount = commentIdLst.size();// 参与人数
+            map.put("peopleCount", peopleCount);
+        }
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap("topicLst", topicLst, "topicCount", topicCount));
+
+    }
+    
+    /**
+     * 获取班级讨论数量
+     * 
+     * @param classId
+     * @return
+     */
+    public long getClassTopicCount(String classId) {
+    	if(StringUtils.isEmpty(classId)){
+    		return 0L;
+    	}
+    	
+    	QTopicInfo qTopicInfo = QTopicInfo.topicInfo;
+		QTopicClassRe qTopicClassRe = QTopicClassRe.topicClassRe;
+		QCommentObject qCommentObject = QCommentObject.commentObject;
+		QClsClass qClsClass = QClsClass.clsClass;
+		QUser qUser = QUser.user;
+		
+    	JPAQuery<Long> query = this.getQueryFactory().select(qTopicInfo.topicId.countDistinct()).from(qTopicInfo, qTopicClassRe, qCommentObject, qClsClass, qUser )
+				.where(qTopicInfo.deleteFlag.isFalse().and(qTopicClassRe.deleteFlag.isFalse()).and(qUser.userId.eq(qTopicInfo.createId))
+						.and(qCommentObject.deleteFlag.isFalse()).and(qTopicClassRe.topicId.eq(qTopicInfo.topicId))
+						.and(qTopicClassRe.classId.eq(qClsClass.classId)).and(qClsClass.classId.eq(classId))
+						.and(qTopicInfo.startTime.isNull().or(qTopicInfo.startTime.before(new Date()).and(qTopicInfo.endTime.after(new Date()))))
+						.and(qCommentObject.commentObjectUid.eq(qTopicInfo.topicId)).and(
+								qTopicInfo.createTime.after(new Date(new Date().getTime() - 1000L * 60 * 60 * 24 * 30 * 12)))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT))).groupBy(qTopicInfo.topicId);
+    	
+    	return query.fetchCount();
+    }
+    
+    /**
+     * 获取热门话题列表
+     * 
+     * type 1热门,2最近
+     * scope 1班级,2机构
+     * 
+     */
+    @CachePut(value = "topic_list", key = "#classId+#keyword+#limit+#pageNum+#type+#scope")
+	public Map<String, Object> getHotTopicLst(String classId, String keyword, Integer limit, Integer pageNum, int type, int scope){
+		QTopicInfo qTopicInfo = QTopicInfo.topicInfo;
+		QTopicClassRe qTopicClassRe = QTopicClassRe.topicClassRe;
+		QCommentObject qCommentObject = QCommentObject.commentObject;
+		QClsClass qClsClass = QClsClass.clsClass;
+		QUser qUser = QUser.user;
+
+		//热门取最近30天内,否则取1年内
+		long time = type == 1 ? 1000L * 60 * 60 * 24 * 30 : 1000L * 60 * 60 * 24 * 30 * 12;
+		
+		//讨论的范围
+		Predicate scopeRight = scope == 1?qClsClass.classId.eq(classId):qClsClass.orgId.eq(ClientUtils.getOrgId());
+		
+		@SuppressWarnings("rawtypes")
+		//排序方式
+		OrderSpecifier order = type == 1?new OrderSpecifier<BigInteger>(Order.DESC, qCommentObject.commentCount.add(qCommentObject.commentPraiseCount)):
+			new OrderSpecifier<Date>(Order.DESC, qTopicInfo.createTime);
+		
+		JPAQuery<Tuple> query = this.getQueryFactory().select(qTopicInfo, qCommentObject, qClsClass, qUser).from(qTopicInfo, qTopicClassRe, qCommentObject, qClsClass, qUser )
+				.where(qTopicInfo.deleteFlag.isFalse().and(qTopicClassRe.deleteFlag.isFalse()).and(qUser.userId.eq(qTopicInfo.createId))
+						.and(qCommentObject.deleteFlag.isFalse()).and(qTopicClassRe.topicId.eq(qTopicInfo.topicId)).and(qClsClass.deleteFlag.isFalse())
+						.and(qTopicInfo.startTime.isNull().or(qTopicInfo.startTime.before(new Date()).and(qTopicInfo.endTime.after(new Date()))))
+						.and(qTopicClassRe.classId.eq(qClsClass.classId).and(qTopicInfo.topicName.like("%" + keyword + "%"))).and(scopeRight)
+						.and(qCommentObject.commentObjectUid.eq(qTopicInfo.topicId).and(
+								qTopicInfo.createTime.after(new Date(new Date().getTime() - time))))
+						.and(qCommentObject.commentObjectType.eq(CommentObject.COMMENT_TYPE_INTERACT))).groupBy(qTopicInfo.topicId);
+		
+		long count = query.fetchCount();
+		
+		return CollectionUtils.newObjectMap("count", count, "listData", query.offset(pageNum).limit(limit)
+				.orderBy(order, qTopicInfo.createTime.desc()).fetch().stream()
+				.map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(14);
+					map.put("topicName", tuple.get(qTopicInfo).getTopicName());
+					map.put("topicId", tuple.get(qTopicInfo).getTopicId());
+					map.put("topicStatus", tuple.get(qTopicInfo).getTopicStatus());
+					map.put("creator", tuple.get(qTopicInfo).getCreator());
+					map.put("imgPath", tuple.get(qUser).getImgPath());
+					map.put("createId", tuple.get(qTopicInfo).getCreateId());
+					map.put("createTime", tuple.get(qTopicInfo).getCreateTime());
+					map.put("startTime", tuple.get(qTopicInfo).getStartTime());
+					map.put("endTime", tuple.get(qTopicInfo).getEndTime());
+					map.put("topicDesc", tuple.get(qTopicInfo).getTopicDesc());
+					map.put("latestCommentName", tuple.get(qTopicInfo).getLatestCommentName());
+					map.put("latestCommentTime", tuple.get(qTopicInfo).getLatestCommentTime());
+					map.put("viewCount", tuple.get(qCommentObject).getViewCount());
+					map.put("commentCount", tuple.get(qCommentObject).getCommentCount());
+					map.put("commentPraiseCount", tuple.get(qCommentObject).getCommentPraiseCount());
+					map.put("className", tuple.get(qClsClass).getName());
+					return map;
+				}).collect(Collectors.toList())); 
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java b/src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java
new file mode 100644
index 0000000..90fadf1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java
@@ -0,0 +1,64 @@
+/******************************************************************************
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.org.dao;
+
+import java.text.ParseException;
+import java.util.List;
+
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.transform.Transformers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+
+
+@Repository(value="orgCourseDAO")
+/**
+ * 自动注入sessionFactory 
+ *
+ * @author ody.yuan
+ * @since JDK1.6
+ * @history 2015-04-23
+ */
+public class OrgCourseDAO extends HibernateDaoSupport {
+	
+	/**
+     * 注入sessionFactory
+     *
+     * @param sessionFactory
+     */
+    @Autowired(required = false)
+    public void setSessionfactory(SessionFactory sessionFactory) {
+        this.setSessionFactory(sessionFactory);
+    }
+    
+    /**
+	 * 查询课程列表明细
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+    @SuppressWarnings("unchecked")
+	public List<OrgCollegeCourse> queryCourseList(String sql,List<Object> args) {
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(OrgCollegeCourse.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	List<OrgCollegeCourse> lstItems = query.list();
+    	
+		return lstItems;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java b/src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java
new file mode 100644
index 0000000..49155cc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java
@@ -0,0 +1,117 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.org.dao;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.org.model.OrgCollegeCourse;
+import com.qxueyou.scc.org.model.OrgCourseCategory;
+
+@Repository(value="orgDAO")
+/**
+ * 自动注入sessionFactory
+ *
+ * @author 夏德虎
+ * @since JDK1.6
+ * @history 2010-07-28 夏德虎 新建
+ */
+public class OrgDAO extends BaseDAO {
+    
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	public  List<OrgCollegeCourse> queryOrgCourseList(String hql, List<Object> args) {
+        return  this.queryOrgCourseListNew(hql, args);
+    }
+	
+	/**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	@SuppressWarnings("unchecked")
+	public  List<OrgCollegeCourse> queryOrgCourseListNew(String hql, List<Object> args) {
+        List<OrgCollegeCourse> lstCourse = new ArrayList<OrgCollegeCourse>();
+        // 添加不限
+        OrgCollegeCourse course = null;
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	course = new OrgCollegeCourse();
+        	course.setCourseId(String.valueOf(obj[0]));
+        	course.setName(String.valueOf(obj[1]));
+        	course.setPrice(new BigDecimal(String.valueOf(obj[2])));
+        	course.setImgPath(String.valueOf(obj[3]));
+        	course.setCourseCategoryId(String.valueOf(obj[4]));
+        	lstCourse.add(course);
+        }
+        
+        return lstCourse;
+    }
+	
+	 
+    /**
+     * 根据hql查询,并返回执行类型的列表结果
+     *
+     * @param hql 查询语句
+     * @param args 参数
+     * @param cls 返回类型
+     * @return
+     */
+	@SuppressWarnings("unchecked")
+	public List<OrgCourseCategory> queryOrgCourseCategoryList(String hql,
+			List<Object> args) {
+		List<OrgCourseCategory> lstCategory = new ArrayList<OrgCourseCategory>();
+		OrgCourseCategory category = null;
+    	
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	category = new OrgCourseCategory();
+        	category.setCategoryId(String.valueOf(obj[0]));
+        	category.setCategoryName(String.valueOf(obj[1]));
+        	lstCategory.add(category);
+        }
+        
+        return lstCategory;
+	}
+    
+	/**
+   	 * 组装查询班级
+   	 * @param hql
+   	 * @param page
+   	 * @param args
+   	 * @return
+   	 */
+	public List<ClsClass> queryRegClassList(final String hql, final Pager page, final List<Object> args) {
+   	
+   		List<ClsClass> lstitems = new ArrayList<ClsClass>(20);
+   		ClsClass item;
+        List<Object[]> lst  =  this.findList(hql, page, args, Object[].class);
+        
+        for (Object obj : lst) {
+        	item = (ClsClass) obj;
+           	lstitems.add(item);
+         }
+         return lstitems;
+
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java b/src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java
new file mode 100644
index 0000000..d22dd78
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java
@@ -0,0 +1,194 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * app首页banner  实体类
+ */
+@Entity
+@Table(name="discover_banner")
+@NamedQuery(name="DiscoverBanner.findAll", query="SELECT d FROM DiscoverBanner d ")
+public class DiscoverBanner implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="BANNER_ID", unique=true, nullable=false, length=32)
+	private String bannerId;
+
+	/** 图片路径 */
+	@Column(name="IMG_PATH",length=128)
+	private String imgPath;
+
+	/** 机构编号 */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/** 图片序号 */
+	@Column(name="PHOTO_ORDER")
+	private int photoOrder;
+
+	/** 图片名称*/
+	@Column(name="PHOTO_NAME",length=64)
+	private String photoName;
+
+	/** 图片说明 */
+	@Column(name="PERSENTATION",length=225)
+	private String persentation;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	public DiscoverBanner() {
+		
+	}
+
+	public String getBannerId() {
+		return bannerId;
+	}
+
+	public void setBannerId(String bannerId) {
+		this.bannerId = bannerId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public int getPhotoOrder() {
+		return photoOrder;
+	}
+
+	public void setPhotoOrder(int photoOrder) {
+		this.photoOrder = photoOrder;
+	}
+
+	public String getPhotoName() {
+		return photoName;
+	}
+
+	public void setPhotoName(String photoName) {
+		this.photoName = photoName;
+	}
+
+	public String getPersentation() {
+		return persentation;
+	}
+
+	public void setPersentation(String persentation) {
+		this.persentation = persentation;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java b/src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java
new file mode 100644
index 0000000..4d6bec8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java
@@ -0,0 +1,208 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+*外部讲师类 
+*@author junliang
+*@createTime 2017-11-7
+*/
+@Entity
+@Table(name="EXTERNEL_TEACHER_INFO")
+@NamedQuery(name="ExternelTeacherInfo.findAll",query ="SELECT o FROM ExternelTeacherInfo o")
+public class ExternelTeacherInfo implements Serializable ,ITrace{
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="TEACHER_ID", unique=true, nullable=false, length=32)
+	private String teacherId;
+	
+	
+	@Column(name="IMG_PATH")
+	private String imgPath;
+	
+	@Column(name="TEACHER_NAME" ,nullable=false ,length=150)
+	private String teacherName;
+	
+	@Column(name="MOBILE_PHONE" ,nullable=true ,length=16)
+	private String mobilePhone;
+	
+	@Column(name="SELF_DESC" ,length=2000)
+	private String selfDesc;
+	
+	@Column(name="ORGANIZATION_ID" ,length=100)
+	private String organizationId;
+	
+	@Column(name="ORGANIZATION_NAME" ,length=2000)
+	private String organizationName;
+	
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@JsonIgnore
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@JsonIgnore
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	
+	
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getSelfDesc() {
+		return selfDesc;
+	}
+
+	public void setSelfDesc(String selfDesc) {
+		this.selfDesc = selfDesc;
+	}
+
+	public String getOrganizationId() {
+		return organizationId;
+	}
+
+	public void setOrganizationId(String organizationId) {
+		this.organizationId = organizationId;
+	}
+
+	public String getOrganizationName() {
+		return organizationName;
+	}
+
+	public void setOrganizationName(String organizationName) {
+		this.organizationName = organizationName;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+
+
+	
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgAdmin.java b/src/main/java/com/qxueyou/scc/org/model/OrgAdmin.java
new file mode 100644
index 0000000..8f8003d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgAdmin.java
@@ -0,0 +1,182 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.user.model.User;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the org_salesman database table.
+ * 
+ */
+@Entity
+@Table(name="org_admin")
+@NamedQuery(name="OrgAdmin.findAll", query="SELECT o FROM OrgAdmin o")
+public class OrgAdmin implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_ADMIN_ID", nullable=false, length=32)
+	private String orgAdminId;
+
+	@Column(name="ADMIN_ID", nullable=false, length=32)
+	private String adminId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable = false, updatable = false)
+	@JsonIgnore
+	private Organization organization;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private User user;
+
+	public OrgAdmin() {
+	}
+	
+	public Organization getOrganization() {
+		return organization;
+	}
+
+	public void setOrganization(Organization organization) {
+		this.organization = organization;
+	}
+
+	public String getAdminId() {
+		return adminId;
+	}
+
+	public void setAdminId(String adminId) {
+		this.adminId = adminId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	public String getOrgId() {
+		return orgId;
+	}
+	
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getOrgAdminId() {
+		return orgAdminId;
+	}
+
+	public void setOrgAdminId(String orgAdminId) {
+		this.orgAdminId = orgAdminId;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java b/src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java
new file mode 100644
index 0000000..a3e6417
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java
@@ -0,0 +1,239 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 机构app信息
+ */
+@Entity
+@Table(name="ORG_APP_INFO")
+@NamedQuery(name="OrgAppInfo.findAll", query="SELECT o FROM OrgAppInfo o")
+@Where(clause="delete_flag = 0")
+public class OrgAppInfo implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="APP_ID", unique=true, nullable=false, length=32)
+	private String appId;
+
+	/** 首页logo地址 */
+	@Column(name="badge_url",length=256)
+	private String badgeUrl;
+	
+	/**logo地址 */
+	@Column(name="logo_url",length=256)
+	private String logoUrl;
+	
+	/** 带文字logo地址 */
+	@Column(name="text_logo_url",length=256)
+	private String textLogoUrl;
+
+	/** 机构编号 */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/**app名称 */
+	@Column(name="app_name",length=50)
+	private String appName;
+
+	/** app版本号*/
+	@Column(name="app_version",length=10)
+	private String appVersion;
+
+	/** appcode */
+	@Column(name="app_code",length=50)
+	private String appCode;
+	
+	/** app下载地址 */
+	@Column(name="app_download_url",length=225)
+	private String appDownloadUrl;
+	
+	/** app更新内容 */
+	@Column(name="app_update_tips",length=1000)
+	private String appUpdateTips;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public String getAppId() {
+		return appId;
+	}
+
+	public void setAppId(String appId) {
+		this.appId = appId;
+	}
+
+	public String getBadgeUrl() {
+		return badgeUrl;
+	}
+
+	public void setBadgeUrl(String badgeUrl) {
+		this.badgeUrl = badgeUrl;
+	}
+
+	public String getLogoUrl() {
+		return logoUrl;
+	}
+
+	public void setLogoUrl(String logoUrl) {
+		this.logoUrl = logoUrl;
+	}
+
+	public String getTextLogoUrl() {
+		return textLogoUrl;
+	}
+
+	public void setTextLogoUrl(String textLogoUrl) {
+		this.textLogoUrl = textLogoUrl;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getAppName() {
+		return appName;
+	}
+
+	public void setAppName(String appName) {
+		this.appName = appName;
+	}
+
+	public String getAppVersion() {
+		return appVersion;
+	}
+
+	public void setAppVersion(String appVersion) {
+		this.appVersion = appVersion;
+	}
+
+	public String getAppCode() {
+		return appCode;
+	}
+
+	public void setAppCode(String appCode) {
+		this.appCode = appCode;
+	}
+
+	public String getAppDownloadUrl() {
+		return appDownloadUrl;
+	}
+
+	public void setAppDownloadUrl(String appDownloadUrl) {
+		this.appDownloadUrl = appDownloadUrl;
+	}
+
+	public String getAppUpdateTips() {
+		return appUpdateTips;
+	}
+
+	public void setAppUpdateTips(String appUpdateTips) {
+		this.appUpdateTips = appUpdateTips;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java b/src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java
new file mode 100644
index 0000000..7b3c7bf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java
@@ -0,0 +1,251 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 机构自定义菜单
+ * 
+ */
+@Entity
+@Table(name="org_app_menu")
+@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
+@NamedQuery(name="OrgAppMenu.findAll", query="SELECT s FROM OrgAppMenu s")
+public class OrgAppMenu implements Serializable, ITrace{
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_MENU_ID", unique=true, nullable=false, length=32)
+	private String orgMenuId;
+
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="ICON_URL", length=255)
+	private String iconUrl;
+
+	@Column(name="NAME", length=128)
+	private String name;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="URL", length=255)
+	private String url;
+	
+	/** 菜单级别,1:底部主菜单 2:首页菜单 */
+	@Column(name="LEVEL")
+	private int level;
+	
+	public static final int TYPE_MAIN_MENU = 1;
+	
+	public static final int TYPE_FIRST_MENU = 2;
+	
+	@Column(name="MENU_ORDER")
+	private int menuOrder;
+	
+	/** 菜单类型  */
+	@Column(name="TYPE")
+	private String type;
+	
+	@Column(name="COLOR")
+	private String color;
+	
+	/** 0:显示  1:隐藏  */
+	@Column(name="HIDDEN")
+	private boolean hidden;
+	
+	/** 父菜单id  */
+	@Column(name="PARENT_ORG_MENU_ID")
+	private String parentOrgMenuId;
+
+	public String getOrgMenuId() {
+		return orgMenuId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public String getIconUrl() {
+		return iconUrl;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public int getMenuOrder() {
+		return menuOrder;
+	}
+
+	public String getParentOrgMenuId() {
+		return parentOrgMenuId;
+	}
+
+	public void setOrgMenuId(String orgMenuId) {
+		this.orgMenuId = orgMenuId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public void setIconUrl(String iconUrl) {
+		this.iconUrl = iconUrl;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public void setMenuOrder(int menuOrder) {
+		this.menuOrder = menuOrder;
+	}
+
+	public void setParentOrgMenuId(String parentOrgMenuId) {
+		this.parentOrgMenuId = parentOrgMenuId;
+	}
+
+	public boolean isHidden() {
+		return hidden;
+	}
+
+	public void setHidden(boolean hidden) {
+		this.hidden = hidden;
+	}
+
+	public int getLevel() {
+		return level;
+	}
+
+	public void setLevel(int level) {
+		this.level = level;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getColor() {
+		return color;
+	}
+
+	public void setColor(String color) {
+		this.color = color;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgBank.java b/src/main/java/com/qxueyou/scc/org/model/OrgBank.java
new file mode 100644
index 0000000..d1c5d87
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgBank.java
@@ -0,0 +1,87 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * The persistent class for the org_class database table.
+ * 
+ */
+@Entity
+@Table(name="trans_bank")
+@NamedQuery(name="OrgBank.findAll", query="SELECT o FROM OrgBank o")
+public class OrgBank implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="BANK_ID", unique=true, nullable=false, length=32)
+	private String bankId;
+
+	@Column(name="BANK_NAME", length=50)
+	private String bankName;
+
+	@Column(name="BANK_CODE", length=32)
+	private String bankCode;
+
+	@Column(name="SHORT_NAME", length=32)
+	private String shortName;
+	
+	//图标地址
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getBankId() {
+		return bankId;
+	}
+
+	public void setBankId(String bankId) {
+		this.bankId = bankId;
+	}
+
+	public String getBankName() {
+		return bankName;
+	}
+
+	public void setBankName(String bankName) {
+		this.bankName = bankName;
+	}
+
+	public String getBankCode() {
+		return bankCode;
+	}
+
+	public void setBankCode(String bankCode) {
+		this.bankCode = bankCode;
+	}
+
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+	
+	
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java b/src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java
new file mode 100644
index 0000000..6768aaa
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java
@@ -0,0 +1,258 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the org_class database table.
+ * 
+ */
+@Entity
+@Table(name="trans_bank_account")
+@NamedQuery(name="OrgBankAccount.findAll", query="SELECT o FROM OrgBankAccount o")
+public class OrgBankAccount implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="BANK_ACCOUNT_ID", unique=true, nullable=false, length=32)
+	private String bankAccountId;
+
+	@Column(name="BANK_NAME", length=50)
+	private String bankName;
+
+	@Column(name="ACCOUNT_NO", length=32)
+	private String accountNo;
+
+	@Column(name="ACCOUNT_NAME", length=50)
+	private String accountName;
+	
+	/**账户类型**/
+	@Column(name="ACCOUNT_TYPE", length=2)
+	private String accountType;
+
+	@Column(name="DEPOSIT_BANK", length=32)
+	private String depositBank;
+	
+	@Column(name="BANK_ID", length=32)
+	private String bankId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="DEFAULT_ACCOUNT", nullable=false)
+	private boolean defaultAccount;
+	
+	/**银行预留手机号**/
+	@Column(name="MOBILE_PHONE", length=15)
+	private String mobilePhone;
+	
+	/**身份证号**/
+	@Column(name="ID_NUMBER", length=30)
+	private String idNumber;
+	
+	/** 验证码**/
+	@Transient
+	private String validateCode;
+	
+	/** 银行图标**/
+	@Transient
+	private String imgPath;
+	
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getIdNumber() {
+		return idNumber;
+	}
+
+	public void setIdNumber(String idNumber) {
+		this.idNumber = idNumber;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public String getAccountType() {
+		return accountType;
+	}
+
+	public void setAccountType(String accountType) {
+		this.accountType = accountType;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getValidateCode() {
+		return validateCode;
+	}
+
+	public void setValidateCode(String validateCode) {
+		this.validateCode = validateCode;
+	}
+	
+	public boolean getDefaultAccount() {
+		return defaultAccount;
+	}
+
+	public void setDefaultAccount(boolean defaultAccount) {
+		this.defaultAccount = defaultAccount;
+	}
+
+	public String getBankAccountId() {
+		return bankAccountId;
+	}
+
+	public void setBankAccountId(String bankAccountId) {
+		this.bankAccountId = bankAccountId;
+	}
+
+	public String getBankName() {
+		return bankName;
+	}
+
+	public void setBankName(String bankName) {
+		this.bankName = bankName;
+	}
+
+	public String getAccountNo() {
+		return accountNo;
+	}
+
+	public void setAccountNo(String accountNo) {
+		this.accountNo = accountNo;
+	}
+
+	public String getAccountName() {
+		return accountName;
+	}
+
+	public void setAccountName(String accountName) {
+		this.accountName = accountName;
+	}
+
+	public String getDepositBank() {
+		return depositBank;
+	}
+
+	public void setDepositBank(String depositBank) {
+		this.depositBank = depositBank;
+	}
+
+	public String getBankId() {
+		return bankId;
+	}
+
+	public void setBankId(String bankId) {
+		this.bankId = bankId;
+	}
+	
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgBankAccountRe.java b/src/main/java/com/qxueyou/scc/org/model/OrgBankAccountRe.java
new file mode 100644
index 0000000..8dd746d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgBankAccountRe.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * The persistent class for the org_bank_account_re database table.
+ * 
+ */
+@Entity
+@Table(name="org_bank_account_re")
+@NamedQuery(name="OrgBankAccountRe.findAll", query="SELECT o FROM OrgBankAccountRe o")
+public class OrgBankAccountRe implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	@Column(name="BANK_ACCOUNT_ID", length=50)
+	private String bankAccountId;
+
+	@Column(name="ORGANIZATION_ID", length=32)
+	private String organizationId;
+
+	public OrgBankAccountRe() {
+	}
+	
+	public String getBankAccountId() {
+		return bankAccountId;
+	}
+
+	public void setBankAccountId(String bankAccountId) {
+		this.bankAccountId = bankAccountId;
+	}
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getOrganizationId() {
+		return organizationId;
+	}
+
+	public void setOrganizationId(String organizationId) {
+		this.organizationId = organizationId;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgBanner.java b/src/main/java/com/qxueyou/scc/org/model/OrgBanner.java
new file mode 100644
index 0000000..dcaaa15
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgBanner.java
@@ -0,0 +1,389 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * app首页banner  实体类
+ */
+@Entity
+@Table(name="org_banner")
+@NamedQuery(name="OrgBanner.findAll", query="SELECT o FROM OrgBanner o")
+public class OrgBanner implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 机构banner模块 */
+	public static final String ORG_BANNER_ORG = "ORG";
+	/** 课程超市banner模块 */
+	public static final String ORG_BANNER_COURSE_MARKET_APP = "COURSE_MARKET_APP";
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="BANNER_ID", unique=true, nullable=false, length=32)
+	private String bannerId;
+
+	/** 图片路径 */
+	@Column(name="IMG_PATH",length=256)
+	private String imgPath;
+
+	/** 机构编号 */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/** 图片序号 */
+	@Column(name="PHOTO_ORDER")
+	private int photoOrder;
+
+	/** 图片名称*/
+	@Column(name="PHOTO_NAME",length=64)
+	private String photoName;
+
+	/** 图片说明 */
+	@Column(name="PERSENTATION",length=225)
+	private String persentation;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/** URL */
+	@Column(name="LINK_URL")
+	private String linkUrl;
+	
+	/** TYPE */
+	@Column(name="TYPE")
+	private Integer type;
+	
+	/** 链接类型(1、网址) */
+	public static final int LINK_TYPE_WEBSITE = 1;
+	
+	/** TITLE */
+	@Column(name="TITLE")
+	private String title;
+	
+	/** CONTENT */
+	@Column(name="CONTENT")
+	private String content;
+	
+	/** MODEL */
+	@Column(name="MODEL")
+	private String model;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private Organization organization;
+
+	/**
+	 * @return the bannerId
+	 */
+	public String getBannerId() {
+		return bannerId;
+	}
+
+	/**
+	 * @param bannerId the bannerId to set
+	 */
+	public void setBannerId(String bannerId) {
+		this.bannerId = bannerId;
+	}
+
+	/**
+	 * @return the imgPath
+	 */
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	/**
+	 * @param imgPath the imgPath to set
+	 */
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the photoOrder
+	 */
+	public int getPhotoOrder() {
+		return photoOrder;
+	}
+
+	/**
+	 * @param photoOrder the photoOrder to set
+	 */
+	public void setPhotoOrder(int photoOrder) {
+		this.photoOrder = photoOrder;
+	}
+
+	/**
+	 * @return the photoName
+	 */
+	public String getPhotoName() {
+		return photoName;
+	}
+
+	/**
+	 * @param photoName the photoName to set
+	 */
+	public void setPhotoName(String photoName) {
+		this.photoName = photoName;
+	}
+
+	/**
+	 * @return the persentation
+	 */
+	public String getPersentation() {
+		return persentation;
+	}
+
+	/**
+	 * @param persentation the persentation to set
+	 */
+	public void setPersentation(String persentation) {
+		this.persentation = persentation;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	/**
+	 * @return the linkUrl
+	 */
+	public String getLinkUrl() {
+		return linkUrl;
+	}
+
+	/**
+	 * @param linkUrl the linkUrl to set
+	 */
+	public void setLinkUrl(String linkUrl) {
+		this.linkUrl = linkUrl;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public Integer getType() {
+		return type;
+	}
+
+	/**
+	 * @param type the type to set
+	 */
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	/**
+	 * @return the title
+	 */
+	public String getTitle() {
+		return title;
+	}
+
+	/**
+	 * @param title the title to set
+	 */
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	/**
+	 * @return the content
+	 */
+	public String getContent() {
+		return content;
+	}
+
+	/**
+	 * @param content the content to set
+	 */
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	/**
+	 * @return the model
+	 */
+	public String getModel() {
+		return model;
+	}
+
+	/**
+	 * @param model the model to set
+	 */
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	/**
+	 * @return the organization
+	 */
+	public Organization getOrganization() {
+		return organization;
+	}
+
+	/**
+	 * @param organization the organization to set
+	 */
+	public void setOrganization(Organization organization) {
+		this.organization = organization;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java b/src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java
new file mode 100644
index 0000000..8eddbc1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java
@@ -0,0 +1,419 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+//import javax.persistence.Transient;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the org_course_category database table.
+ * 
+ */
+@Entity
+@Table(name="org_category_level",
+uniqueConstraints = {@UniqueConstraint(columnNames={"LEVEL_CODE"})})
+public class OrgCategoryLevel implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	public static final short CATEGORY_LEVEL_FIRST = 1;
+	
+	public static final short CATEGORY_LEVEL_SECOND = 2;
+	
+	public static final short CATEGORY_LEVEL_THIRD = 3;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CATEGORY_LEVEL_ID", unique=true, nullable=false, length=32)
+	private String categoryLevelId;
+
+	@Column(name="LEVEL_", nullable=false)
+	private short level;
+
+	@Column(name="CATEGORY_NAME", nullable=false, length=150)
+	private String categoryName;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="FULL_NAME", length=255)
+	private String fullName;
+
+	@Column(name="PARENT_ID", length=32)
+	private String parentId;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/**  类型:(1.职业培训 2.学历教育3.企业内训 4.活动沙龙5.代理机构) */
+	@Column(name="TYPE")
+	private Short type;
+	
+	/** 编码 */
+	@Column(name="CODE", length=100)
+	private String code;
+	
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+	
+	/** 本科、专科、研究生、博士生 */
+	@Column(name="CATEGORY_TYPE", length=6)
+	private Short categoryType;
+	
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	
+	@Column(name="TOP_ORG_ID", length=32)
+	private String topOrgId;
+	
+	/**分类层级编码(用于方便查找层级结构) */
+	@Column(name="LEVEL_CODE", length=255)
+	private String levelCode;
+	
+	@Column(name="ORDER_NUM")
+	private int orderNum;
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+	
+
+	
+	//新增映射
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
+	@JsonIgnore
+	private List<OrgCollegeCourse> courses;
+
+	
+	/**
+	 * @return the categoryLevelId
+	 */
+	public String getCategoryLevelId() {
+		return categoryLevelId;
+	}
+
+	/**
+	 * @param categoryLevelId the categoryLevelId to set
+	 */
+	public void setCategoryLevelId(String categoryLevelId) {
+		this.categoryLevelId = categoryLevelId;
+	}
+
+	/**
+	 * @return the level
+	 */
+	public short getLevel() {
+		return level;
+	}
+
+	/**
+	 * @param level the level to set
+	 */
+	public void setLevel(short level) {
+		this.level = level;
+	}
+
+	/**
+	 * @return the categoryName
+	 */
+	public String getCategoryName() {
+		return categoryName;
+	}
+
+	/**
+	 * @param categoryName the categoryName to set
+	 */
+	public void setCategoryName(String categoryName) {
+		this.categoryName = categoryName;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the fullName
+	 */
+	public String getFullName() {
+		return fullName;
+	}
+
+	/**
+	 * @param fullName the fullName to set
+	 */
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	/**
+	 * @return the parentId
+	 */
+	public String getParentId() {
+		return parentId;
+	}
+
+	/**
+	 * @param parentId the parentId to set
+	 */
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public Short getType() {
+		return type;
+	}
+
+	/**
+	 * @param type the type to set
+	 */
+	public void setType(Short type) {
+		this.type = type;
+	}
+
+	/**
+	 * @return the code
+	 */
+	public String getCode() {
+		return code;
+	}
+
+	/**
+	 * @param code the code to set
+	 */
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	/**
+	 * @return the imgPath
+	 */
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	/**
+	 * @param imgPath the imgPath to set
+	 */
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	/**
+	 * @return the categoryType
+	 */
+	public Short getCategoryType() {
+		return categoryType;
+	}
+
+	/**
+	 * @param categoryType the categoryType to set
+	 */
+	public void setCategoryType(Short categoryType) {
+		this.categoryType = categoryType;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the topOrgId
+	 */
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	/**
+	 * @param topOrgId the topOrgId to set
+	 */
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	/**
+	 * @return the levelCode
+	 */
+	public String getLevelCode() {
+		return levelCode;
+	}
+
+	/**
+	 * @param levelCode the levelCode to set
+	 */
+	public void setLevelCode(String levelCode) {
+		this.levelCode = levelCode;
+	}
+
+	/**
+	 * @return the courses
+	 */
+	public List<OrgCollegeCourse> getCourses() {
+		return courses;
+	}
+
+	/**
+	 * @param courses the courses to set
+	 */
+	public void setCourses(List<OrgCollegeCourse> courses) {
+		this.courses = courses;
+	}
+	
+    
+	
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCharger.java b/src/main/java/com/qxueyou/scc/org/model/OrgCharger.java
new file mode 100644
index 0000000..fe47832
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCharger.java
@@ -0,0 +1,213 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.user.model.User;
+
+
+/**
+ * The persistent class for the org_charger database table.
+ * 
+ */
+@Entity
+@Table(name="org_charger")
+@NamedQuery(name="OrgCharger.findAll", query="SELECT o FROM OrgCharger o")
+public class OrgCharger implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_CHARGER_ID", unique=true, nullable=false, length=32)
+	private String orgChargerId;
+	
+	@Column(name="CHARGER_ID", unique=true, nullable=false, length=32)
+	private String chargerId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private Organization organization;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private User user;
+
+	public OrgCharger() {
+	}
+	
+
+	public Organization getOrganization() {
+		return organization;
+	}
+
+
+	public void setOrganization(Organization organization) {
+		this.organization = organization;
+	}
+
+
+	public String getChargerId() {
+		return chargerId;
+	}
+
+	public void setChargerId(String chargerId) {
+		this.chargerId = chargerId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+
+	public String getName() {
+		return name;
+	}
+
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+	public User getUser() {
+		return user;
+	}
+
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+
+	public String getOrgChargerId() {
+		return orgChargerId;
+	}
+
+
+	public void setOrgChargerId(String orgChargerId) {
+		this.orgChargerId = orgChargerId;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClass.java b/src/main/java/com/qxueyou/scc/org/model/OrgClass.java
new file mode 100644
index 0000000..3bad47e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClass.java
@@ -0,0 +1,954 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the org_class database table.
+ * 
+ */
+@Entity
+@Table(name = "org_class")
+@NamedQuery(name = "OrgClass.findAll", query = "SELECT o FROM OrgClass o")
+public class OrgClass implements Serializable, ITrace {
+
+	private static final long serialVersionUID = 1L;
+
+	/** 面授 */
+	public static final String CLASS_FACE = "FACE_TO_FACE";
+	/** 网络 */
+	public static final String CLASS_NETWORK = "NETWORK";
+
+	/** 有直播 */
+	public static final int HAVE_LIVE = 1;
+	/** 无直播 */
+	public static final int NOT_HAVE_LIVE = 0;
+
+	/** 有视频 */
+	public static final int HAVE_VIDEO = 1;
+	/** 无视频 */
+	public static final int NOT_HAVE_VIDEO = 0;
+
+	/** 有讲义 */
+	public static final int HAVE_HANDOUT = 1;
+	/** 无讲义 */
+	public static final int NOT_HAVE_HANDOUT = 0;
+
+	/** 有推荐奖励 */
+	public static final int HAVE_AWARD = 1;
+	/** 无推荐奖励 */
+	public static final int NOT_HAVE_AWARD = 0;
+
+	/** 消息处理业务类型:发送消息 */
+	public static final String MSG_ACTION_TYPE_SEND = "send_sms";
+	/** 消息处理业务类型:新建班级 */
+	public static final String MSG_ACTION_TYPE_ADD = "add_Class";
+	/** 消息处理业务类型:复制班级 */
+	public static final String MSG_ACTION_TYPE_COPY = "copy_Class";
+
+	/** 班级进度:报名 */
+	public static final String CLASS_PROGRESS_START = "报名";
+	/** 班级进度:学习 */
+	public static final String CLASS_PROGRESS_STUDY = "学习";
+	/** 班级进度:结束 */
+	public static final String CLASS_PROGRESS_END = "结束";
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CLASS_ID", unique = true, nullable = false, length = 32)
+	private String classId;
+
+	@Column(name = "CLASS_CHARGER", length = 50)
+	private String classCharger;
+
+	@Column(name = "CLASS_CHARGER_ID", length = 32)
+	private String classChargerId;
+
+	@Column(name = "CODE", length = 50)
+	private String code;
+
+	@Column(name = "COLLEGE_COURSE_ID", length = 32)
+	private String collegeCourseId;
+
+	@Column(name = "COLLEGE_COURSE_NAME", length = 255)
+	private String collegeCourseName;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name = "NAME", length = 255)
+	private String name;
+
+	@Column(name = "FULL_TEXT", length = 4096)
+	private String fullText;
+
+	@Column(name = "PROGRESS", length = 255)
+	private String progress;
+
+	@Column(name = "ADDRESS", length = 255)
+	private String address;
+
+	@Column(name = "ADDRESS_ID", length = 255)
+	private String addressId;
+
+	@Column(name = "ARRANGEMENT", length = 255)
+	private String arrangement;
+
+	/** 班级优势 */
+	@Column(name = "ADVANTAGE", length = 255)
+	private String advantage;
+
+	@Column(name = "PRICE", precision = 10, scale = 2)
+	private BigDecimal price;
+
+	@Column(name = "START_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+
+	@Column(name = "END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/** 当前已报名学生人数 */
+	@Column(name = "STUDENT_COUNT")
+	private int studentCount;
+
+	@Column(name = "RECOMMEND", nullable = false)
+	private boolean recommend;
+
+	@Column(name = "IMG_PATH", length = 255)
+	private String imgPath;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 是否推广 false:不推广 true:推广 */
+	@Column(name = "EXTENDED")
+	private boolean extended;
+
+	@Column(name = "CLASS_TYPES", length = 100)
+	private String classTypes;
+
+	@Column(name = "DISCOUNT", precision = 10, scale = 2)
+	private BigDecimal discount;
+
+	@Column(name = "DISPRICE", precision = 10, scale = 2)
+	private BigDecimal disprice;
+
+	@Column(name = "STUDY_TIME", precision = 10, scale = 2)
+	private BigDecimal studyTime;
+
+	@Column(name = "SCORE", precision = 10, scale = 2)
+	private BigDecimal score;
+
+	/** 学生总数 计划招生人数,用于机构 指定 */
+	@Column(name = "STU_ALL_COUNT")
+	private BigInteger stuAllCount;
+
+	@Column(name = "COMMENT_COUNT")
+	private BigInteger commentCount;
+
+	@Column(name = "POINTER", length = 255)
+	private String pointer;
+
+	/*** 点击次数 **/
+	@Column(name = "CLICK_NUM", precision = 11, scale = 0)
+	private BigDecimal clickNum;
+
+	/*** 省份 **/
+	@Column(name = "PROVINCE", length = 255)
+	private String province;
+
+	/*** 城市 **/
+	@Column(name = "CITY", length = 255)
+	private String city;
+
+	/*** 区域 **/
+	@Column(name = "REGION", length = 255)
+	private String region;
+
+	/*** 是否置顶 **/
+	@Column(name = "TOP_FLAG", length = 255)
+	private Boolean topFlag;
+
+	/*** 方式 **/
+	@Column(name = "MODE", length = 255)
+	private String mode;
+
+	/*** 商品ID **/
+	@Column(name = "GOOD_ID", length = 32)
+	private String goodId;
+
+	/*** 产品ID **/
+	@Column(name = "PRODUCT_ID", length = 255)
+	private String productId;
+
+	/*** 机构ID **/
+	@Column(name = "ORG_ID", length = 32)
+	private String orgId;
+
+	/*** 是否有直播 **/
+	@Column(name = "HAVE_LIVE", length = 1)
+	private Integer haveLive;
+
+	/*** 是否有视频 **/
+	@Column(name = "HAVE_VIDEO", length = 1)
+	private Integer haveVideo;
+
+	/*** 是否有讲义 **/
+	@Column(name = "HAVE_HANDOUT", length = 1)
+	private Integer haveHandout;
+
+	/*** 经度 **/
+	@Column(name = "LONGITUDE_X", length = 32)
+	private String logitudeX;
+
+	/*** 纬度 **/
+	@Column(name = "LATITUDE_Y", length = 32)
+	private String latitudeY;
+
+	/*** 付款人数 **/
+	@Column(name = "PAYMENT_NUM", length = 11)
+	private BigInteger paymentNum;
+
+	/*** 是否有推荐奖励 **/
+	@Column(name = "HAVA_AWARD", length = 32)
+	private Integer haveAward;
+
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@JoinColumn(name = "COLLEGE_COURSE_ID", referencedColumnName = "COLLEGE_COURSE_ID", updatable = false, insertable = false)
+	@JsonIgnore
+	private OrgCollegeCourse orgCollegeCourse;
+
+	@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
+	@NotFound(action = NotFoundAction.IGNORE)
+	@JoinColumn(name = "CLASS_CHARGER_ID", referencedColumnName = "ORG_CHARGER_ID", updatable = false, insertable = false)
+	@JsonIgnore
+	private OrgCharger charger;
+
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@JoinColumn(name = "ORG_ID", referencedColumnName = "ORGANIZATION_ID", updatable = false, insertable = false)
+	@JsonIgnore
+	private Organization org;
+
+	@Transient
+	private String content;
+
+	@Transient
+	private String courseId;
+
+	@Transient
+	private String courseName;
+
+	@Transient
+	private String orgName;
+
+	@Transient
+	private String orgShortName;
+
+	// 班级引荐费
+	@Transient
+	private BigDecimal referFee;
+
+	/** 激活人数 **/
+	@Transient
+	private Integer registCount;
+
+	// ============================新添加字段=================================
+	/** 是否有学生加班审批 */
+
+	@Column(name = "OVER_TIME", nullable = false)
+	private Boolean overTime;
+
+	/** 班级编码 */
+	@Column(name = "CLASS_NUMBER", nullable = false)
+	private String classNumber;
+
+	/** 是否有需要学生退班审批 */
+	@Column(name = "QUIT_CLASS", nullable = false)
+	private Boolean quitClass;
+
+	/** 完成练习是否显示答案 */
+	@Column(name = "DISPLAY_ANSWER", nullable = false)
+	private Boolean displayAnswer;
+
+	/** 是否开通班级论坛 */
+	@Column(name = "FORUM", nullable = false)
+	private Boolean forum;
+
+	/** 班级老师 */
+	@Column(name = "TEACHER_ID", length = 32)
+	private String teacherId;
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getAddressId() {
+		return addressId;
+	}
+
+	public void setAddressId(String addressId) {
+		this.addressId = addressId;
+	}
+
+	public Integer getRegistCount() {
+		return registCount;
+	}
+
+	public void setRegistCount(Integer registCount) {
+		this.registCount = registCount;
+	}
+
+	public Integer getSignUpCount() {
+		return this.studentCount;
+	}
+
+	public BigDecimal getReferFee() {
+		return referFee;
+	}
+
+	public void setReferFee(BigDecimal referFee) {
+		this.referFee = referFee;
+	}
+
+	public Organization getOrg() {
+		return org;
+	}
+
+	public void setOrg(Organization org) {
+		this.org = org;
+	}
+
+	public OrgCharger getCharger() {
+		return charger;
+	}
+
+	public void setCharger(OrgCharger charger) {
+		this.charger = charger;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getClassCharger() {
+		return this.classCharger;
+	}
+
+	public void setClassCharger(String classCharger) {
+		this.classCharger = classCharger;
+	}
+
+	public String getClassChargerId() {
+		return this.classChargerId;
+	}
+
+	public void setClassChargerId(String classChargerId) {
+		this.classChargerId = classChargerId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public BigDecimal getPrice() {
+		return this.price;
+	}
+
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	public Date getStartTime() {
+		return this.startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public int getStudentCount() {
+		return this.studentCount;
+	}
+
+	public void setStudentCount(int studentCount) {
+		this.studentCount = studentCount;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getProgress() {
+		return progress;
+	}
+
+	public void setProgress(String progress) {
+		this.progress = progress;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public boolean getRecommend() {
+		return recommend;
+	}
+
+	public void setRecommend(boolean recommend) {
+		this.recommend = recommend;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public boolean getExtended() {
+		return extended;
+	}
+
+	public void setExtended(boolean extended) {
+		this.extended = extended;
+	}
+
+	public String getClassTypes() {
+		return classTypes;
+	}
+
+	public void setClassTypes(String classTypes) {
+		this.classTypes = classTypes;
+	}
+
+	public BigDecimal getDiscount() {
+		return discount;
+	}
+
+	public void setDiscount(BigDecimal discount) {
+		this.discount = discount;
+	}
+
+	public BigDecimal getDisprice() {
+		return disprice;
+	}
+
+	public void setDisprice(BigDecimal disprice) {
+		this.disprice = disprice;
+	}
+
+	public BigDecimal getStudyTime() {
+		return studyTime;
+	}
+
+	public void setStudyTime(BigDecimal studyTime) {
+		this.studyTime = studyTime;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public BigInteger getStuAllCount() {
+		return stuAllCount;
+	}
+
+	public void setStuAllCount(BigInteger stuAllCount) {
+		this.stuAllCount = stuAllCount;
+	}
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public String getPointer() {
+		return pointer;
+	}
+
+	public void setPointer(String pointer) {
+		this.pointer = pointer;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public OrgCollegeCourse getOrgCollegeCourse() {
+		return orgCollegeCourse;
+	}
+
+	public void setOrgCollegeCourse(OrgCollegeCourse orgCollegeCourse) {
+		this.orgCollegeCourse = orgCollegeCourse;
+	}
+
+	public String getCollegeCourseName() {
+		return collegeCourseName;
+	}
+
+	public void setCollegeCourseName(String collegeCourseName) {
+		this.collegeCourseName = collegeCourseName;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCourseName() {
+		return courseName;
+	}
+
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getArrangement() {
+		return arrangement;
+	}
+
+	public void setArrangement(String arrangement) {
+		this.arrangement = arrangement;
+	}
+
+	public String getAdvantage() {
+		return advantage;
+	}
+
+	public void setAdvantage(String advantage) {
+		this.advantage = advantage;
+	}
+
+	public BigDecimal getClickNum() {
+		return clickNum;
+	}
+
+	public void setClickNum(BigDecimal clickNum) {
+		this.clickNum = clickNum;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getRegion() {
+		return region;
+	}
+
+	public void setRegion(String region) {
+		this.region = region;
+	}
+
+	public Boolean getTopFlag() {
+		return topFlag;
+	}
+
+	public void setTopFlag(Boolean topFlag) {
+		this.topFlag = topFlag;
+	}
+
+	public String getMode() {
+		return mode;
+	}
+
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+
+	public String getGoodId() {
+		return goodId;
+	}
+
+	public void setGoodId(String goodId) {
+		this.goodId = goodId;
+	}
+
+	public String getProductId() {
+		return productId;
+	}
+
+	public void setProductId(String productId) {
+		this.productId = productId;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	/**
+	 * @return the haveLive
+	 */
+	public Integer getHaveLive() {
+		return haveLive;
+	}
+
+	/**
+	 * @param haveLive
+	 *            the haveLive to set
+	 */
+	public void setHaveLive(Integer haveLive) {
+		this.haveLive = haveLive;
+	}
+
+	/**
+	 * @return the haveVideo
+	 */
+	public Integer getHaveVideo() {
+		return haveVideo;
+	}
+
+	/**
+	 * @param haveVideo
+	 *            the haveVideo to set
+	 */
+	public void setHaveVideo(Integer haveVideo) {
+		this.haveVideo = haveVideo;
+	}
+
+	/**
+	 * @return the haveHandout
+	 */
+	public Integer getHaveHandout() {
+		return haveHandout;
+	}
+
+	/**
+	 * @param haveHandout
+	 *            the haveHandout to set
+	 */
+	public void setHaveHandout(Integer haveHandout) {
+		this.haveHandout = haveHandout;
+	}
+
+	/**
+	 * @return the logitudeX
+	 */
+	public String getLogitudeX() {
+		return logitudeX;
+	}
+
+	/**
+	 * @param logitudeX
+	 *            the logitudeX to set
+	 */
+	public void setLogitudeX(String logitudeX) {
+		this.logitudeX = logitudeX;
+	}
+
+	/**
+	 * @return the latitudeY
+	 */
+	public String getLatitudeY() {
+		return latitudeY;
+	}
+
+	/**
+	 * @param latitudeY
+	 *            the latitudeY to set
+	 */
+	public void setLatitudeY(String latitudeY) {
+		this.latitudeY = latitudeY;
+	}
+
+	/**
+	 * @return the paymentNum
+	 */
+	public BigInteger getPaymentNum() {
+		return paymentNum;
+	}
+
+	/**
+	 * @param paymentNum
+	 *            the paymentNum to set
+	 */
+	public void setPaymentNum(BigInteger paymentNum) {
+		this.paymentNum = paymentNum;
+	}
+
+	/**
+	 * @return the haveAward
+	 */
+	public Integer getHaveAward() {
+		return haveAward;
+	}
+
+	/**
+	 * @param haveAward
+	 *            the haveAward to set
+	 */
+	public void setHaveAward(int haveAward) {
+		this.haveAward = haveAward;
+	}
+
+	public String getOrgShortName() {
+		return orgShortName;
+	}
+
+	public void setOrgShortName(String orgShortName) {
+		this.orgShortName = orgShortName;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((classId == null) ? 0 : classId.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+
+		OrgClass other = (OrgClass) obj;
+		if (classId == null) {
+			if (other.classId != null) {
+				return false;
+			}
+		} else if (!classId.equals(other.classId)) {
+			return false;
+		}
+		return true;
+	}
+
+	public String getFullText() {
+		return fullText;
+	}
+
+	public void setFullText(String fullText) {
+		this.fullText = fullText;
+	}
+
+	public String getClassNumber() {
+		return classNumber;
+	}
+
+	public void setClassNumber(String classNumber) {
+		this.classNumber = classNumber;
+	}
+
+	public void setHaveAward(Integer haveAward) {
+		this.haveAward = haveAward;
+	}
+
+	public Boolean getOverTime() {
+		return overTime;
+	}
+
+	public void setOverTime(Boolean overTime) {
+		this.overTime = overTime;
+	}
+
+	public Boolean getQuitClass() {
+		return quitClass;
+	}
+
+	public void setQuitClass(Boolean quitClass) {
+		this.quitClass = quitClass;
+	}
+
+	public Boolean getDisplayAnswer() {
+		return displayAnswer;
+	}
+
+	public void setDisplayAnswer(Boolean displayAnswer) {
+		this.displayAnswer = displayAnswer;
+	}
+
+	public Boolean getForum() {
+		return forum;
+	}
+
+	public void setForum(Boolean forum) {
+		this.forum = forum;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java
new file mode 100644
index 0000000..5b6228f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java
@@ -0,0 +1,213 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * app选课首页banner  实体类
+ */
+@Entity
+@Table(name="org_class_banner")
+@NamedQuery(name="OrgClassBanner.findAll", query="SELECT o FROM OrgClassBanner o")
+public class OrgClassBanner implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CLASS_BANNER_ID", unique=true, nullable=false, length=32)
+	private String classBannerId;
+
+	/** 图片路径 */
+	@Column(name="IMG_PATH",length=128)
+	private String imgPath;
+
+	/** 机构编号 */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/** 图片序号 */
+	@Column(name="PHOTO_ORDER")
+	private int photoOrder;
+
+	/** 图片名称*/
+	@Column(name="PHOTO_NAME",length=64)
+	private String photoName;
+
+	/** 图片说明 */
+	@Column(name="PERSENTATION",length=225)
+	private String persentation;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private Organization organization;
+	
+	public OrgClassBanner() {
+		
+	}
+
+	public String getClassBannerId() {
+		return classBannerId;
+	}
+
+	public void setClassBannerId(String classBannerId) {
+		this.classBannerId = classBannerId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public int getPhotoOrder() {
+		return photoOrder;
+	}
+
+	public void setPhotoOrder(int photoOrder) {
+		this.photoOrder = photoOrder;
+	}
+
+	public String getPhotoName() {
+		return photoName;
+	}
+
+	public void setPhotoName(String photoName) {
+		this.photoName = photoName;
+	}
+
+	public String getPersentation() {
+		return persentation;
+	}
+
+	public void setPersentation(String persentation) {
+		this.persentation = persentation;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Organization getOrganization() {
+		return organization;
+	}
+
+	public void setOrganization(Organization organization) {
+		this.organization = organization;
+	}
+
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java
new file mode 100644
index 0000000..255bcdc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java
@@ -0,0 +1,859 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.Formula;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the org_class database table.
+ * 
+ */
+@Entity
+@Table(name="org_class_query_cm")
+@NamedQuery(name="OrgClassQueryCm.findAll", query="SELECT o FROM OrgClassQueryCm o")
+public class OrgClassQueryCm implements Serializable,ITrace {
+	
+	/**有直播*/
+	public static final int HAVE_LIVE = 1;
+	
+	/**无直播*/
+	public static final int NOT_HAVE_LIVE = 0;
+	
+	/**有视频*/
+	public static final int HAVE_VIDEO = 1;
+	
+	/**无视频*/
+	public static final int NOT_HAVE_VIDEO = 0;
+	
+	/**有讲义*/
+	public static final int HAVE_HANDOUT = 1;
+	
+	/**无讲义*/
+	public static final int NOT_HAVE_HANDOUT = 0;
+	
+	/**有推荐奖励*/
+	public static final int HAVE_AWARD = 1;
+	
+	/**无推荐奖励*/
+	public static final int NOT_HAVE_AWARD = 0;
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CLASS_ID", unique=true, nullable=false, length=32)
+	private String classId;
+
+	@Column(name="CLASS_CHARGER", length=50)
+	private String classCharger;
+
+	@Column(name="CLASS_CHARGER_ID", length=32)
+	private String classChargerId;
+
+	@Column(name="CODE", length=50)
+	private String code;
+
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+
+	@Column(name="COLLEGE_COURSE_NAME", length=255)
+	private String collegeCourseName;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="NAME", length=255)
+	private String name;
+	
+	@Column(name="PROGRESS", length=255)
+	private String progress;
+	
+	@Column(name="ADDRESS", length=255)
+	private String address;
+	
+	@Column(name="ARRANGEMENT", length=255)
+	private String arrangement;
+	
+	/** 班级优势 */
+	@Column(name="ADVANTAGE", length=255)
+	private String advantage;
+
+	@Column(name="PRICE", precision=10, scale=2)
+	private BigDecimal price;
+
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/**当前已报名学生人数*/
+	@Column(name="STUDENT_COUNT")
+	private int studentCount;
+	
+	@Column(name="RECOMMEND", nullable=false)
+	private boolean recommend;
+	
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/** 是否推广  false:不推广  true:推广 */
+	@Column(name="EXTENDED")
+	private boolean extended;
+	
+	@Column(name="CLASS_TYPES", length=100)
+	private String classTypes;
+	
+	@Column(name="DISCOUNT", precision=10, scale=2)
+	private BigDecimal discount;
+	
+	@Column(name="DISPRICE", precision=10, scale=2)
+	private BigDecimal disprice;
+	
+	@Column(name="STUDY_TIME", precision=10, scale=2)
+	private BigDecimal studyTime;
+	
+	@Column(name="SCORE", precision=10, scale=2)
+	private BigDecimal score;
+	
+	/**学生总数   计划招生人数,用于机构    指定 */
+	@Column(name="STU_ALL_COUNT")
+	private BigInteger stuAllCount;
+	
+	@Column(name="COMMENT_COUNT")
+	private BigInteger commentCount;
+	
+	@Column(name="POINTER", length=255)
+	private String pointer;
+	
+	/***点击次数**/
+	@Column(name="CLICK_NUM", precision=11, scale=0)
+	private BigDecimal clickNum;
+	
+	/***省份**/
+	@Column(name="PROVINCE", length=255)
+	private String province;
+	
+	/***城市**/
+	@Column(name="CITY", length=255)
+	private String city;
+	
+	/***区域**/
+	@Column(name="REGION", length=255)
+	private String region;
+	
+	/***是否置顶**/
+	@Column(name="TOP_FLAG", length=255)
+	private Boolean topFlag;
+	
+	/***方式**/
+	@Column(name="MODE", length=255)
+	private String mode;
+	
+	/***商品ID**/
+	@Column(name="GOOD_ID", length=32)
+	private String goodId;
+	
+
+	/***产品ID**/
+	@Column(name="PRODUCT_ID", length=255)
+	private String productId;
+	
+	/***机构ID**/
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/***是否有直播**/
+	@Column(name="HAVE_LIVE", length=1)
+	private Integer haveLive;
+	
+	/***是否有视频**/
+	@Column(name="HAVE_VIDEO", length=1)
+	private Integer haveVideo;
+	
+	/***是否有讲义**/
+	@Column(name="HAVE_HANDOUT", length=1)
+	private Integer haveHandout;
+	
+	/***经度**/
+	@Column(name="LONGITUDE_X", length=32)
+	private String logitudeX;
+	
+	/***纬度**/
+	@Column(name="LATITUDE_Y", length=32)
+	private String latitudeY;
+	
+	/***付款人数**/
+	@Column(name="PAYMENT_NUM", length=11)
+	private BigInteger paymentNum;
+	
+	/***是否有推荐奖励**/
+	@Column(name="HAVA_AWARD", length=32)
+	private Integer haveAward;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "COLLEGE_COURSE_ID",referencedColumnName="COLLEGE_COURSE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private OrgCollegeCourse orgCollegeCourse;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+	@NotFound(action=NotFoundAction.IGNORE)
+    @JoinColumn(name = "CLASS_CHARGER_ID",referencedColumnName="ORG_CHARGER_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private OrgCharger charger;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Organization org;
+	
+	@Transient
+	private String content;
+	
+	@Transient
+	private String courseId ;
+	
+	@Transient
+	private String courseName ;
+	
+	@Transient
+	private String orgName ;
+	
+	@Transient
+	private String orgShortName ;
+	
+	//班级引荐费
+	@Transient
+	private BigDecimal referFee ;
+	
+	/** 报名人数**/
+	@Formula("(select count(1) from User_Registration u WHERE u.CLASS_ID=CLASS_ID and u.DELETE_FLAG = 0)")
+	private Integer signUpCount ;
+	
+	public Integer getSignUpCount() {
+		return signUpCount;
+	}
+
+	public void setSignUpCount(Integer signUpCount) {
+		this.signUpCount = signUpCount;
+	}
+
+	public BigDecimal getReferFee() {
+		return referFee;
+	}
+
+	public void setReferFee(BigDecimal referFee) {
+		this.referFee = referFee;
+	}
+
+
+	public Organization getOrg() {
+		return org;
+	}
+
+
+	public void setOrg(Organization org) {
+		this.org = org;
+	}
+
+	public OrgCharger getCharger() {
+		return charger;
+	}
+
+
+	public void setCharger(OrgCharger charger) {
+		this.charger = charger;
+	}
+
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getClassCharger() {
+		return this.classCharger;
+	}
+
+	public void setClassCharger(String classCharger) {
+		this.classCharger = classCharger;
+	}
+
+	public String getClassChargerId() {
+		return this.classChargerId;
+	}
+
+	public void setClassChargerId(String classChargerId) {
+		this.classChargerId = classChargerId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public BigDecimal getPrice() {
+		return this.price;
+	}
+
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	public Date getStartTime() {
+		return this.startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public int getStudentCount() {
+		return this.studentCount;
+	}
+
+	public void setStudentCount(int studentCount) {
+		this.studentCount = studentCount;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getProgress() {
+		return progress;
+	}
+
+	public void setProgress(String progress) {
+		this.progress = progress;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public boolean getRecommend() {
+		return recommend;
+	}
+
+	public void setRecommend(boolean recommend) {
+		this.recommend = recommend;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+
+	public boolean getExtended() {
+		return extended;
+	}
+
+
+	public void setExtended(boolean extended) {
+		this.extended = extended;
+	}
+
+	public String getClassTypes() {
+		return classTypes;
+	}
+
+
+	public void setClassTypes(String classTypes) {
+		this.classTypes = classTypes;
+	}
+
+
+	public BigDecimal getDiscount() {
+		return discount;
+	}
+
+
+	public void setDiscount(BigDecimal discount) {
+		this.discount = discount;
+	}
+
+
+	public BigDecimal getDisprice() {
+		return disprice;
+	}
+
+
+	public void setDisprice(BigDecimal disprice) {
+		this.disprice = disprice;
+	}
+
+
+	public BigDecimal getStudyTime() {
+		return studyTime;
+	}
+
+
+	public void setStudyTime(BigDecimal studyTime) {
+		this.studyTime = studyTime;
+	}
+
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public BigInteger getStuAllCount() {
+		return stuAllCount;
+	}
+
+
+	public void setStuAllCount(BigInteger stuAllCount) {
+		this.stuAllCount = stuAllCount;
+	}
+
+
+	public BigInteger getCommentCount() {
+		return commentCount;
+	}
+
+
+	public void setCommentCount(BigInteger commentCount) {
+		this.commentCount = commentCount;
+	}
+
+
+	public String getPointer() {
+		return pointer;
+	}
+
+
+	public void setPointer(String pointer) {
+		this.pointer = pointer;
+	}
+	
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public OrgCollegeCourse getOrgCollegeCourse() {
+		return orgCollegeCourse;
+	}
+
+	public void setOrgCollegeCourse(OrgCollegeCourse orgCollegeCourse) {
+		this.orgCollegeCourse = orgCollegeCourse;
+	}
+
+	public String getCollegeCourseName() {
+		return collegeCourseName;
+	}
+
+	public void setCollegeCourseName(String collegeCourseName) {
+		this.collegeCourseName = collegeCourseName;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCourseName() {
+		return courseName;
+	}
+
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+
+	public String getAddress() {
+		return address;
+	}
+
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+
+	public String getArrangement() {
+		return arrangement;
+	}
+
+
+	public void setArrangement(String arrangement) {
+		this.arrangement = arrangement;
+	}
+
+
+	public String getAdvantage() {
+		return advantage;
+	}
+
+
+	public void setAdvantage(String advantage) {
+		this.advantage = advantage;
+	}
+
+
+	public BigDecimal getClickNum() {
+		return clickNum;
+	}
+
+
+	public void setClickNum(BigDecimal clickNum) {
+		this.clickNum = clickNum;
+	}
+
+
+	public String getProvince() {
+		return province;
+	}
+
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+
+	public String getCity() {
+		return city;
+	}
+
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+
+	public String getRegion() {
+		return region;
+	}
+
+
+	public void setRegion(String region) {
+		this.region = region;
+	}
+
+
+	public Boolean getTopFlag() {
+		return topFlag;
+	}
+
+
+	public void setTopFlag(Boolean topFlag) {
+		this.topFlag = topFlag;
+	}
+
+
+	public String getMode() {
+		return mode;
+	}
+
+
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+
+
+	public String getGoodId() {
+		return goodId;
+	}
+
+
+	public void setGoodId(String goodId) {
+		this.goodId = goodId;
+	}
+
+
+	public String getProductId() {
+		return productId;
+	}
+
+
+	public void setProductId(String productId) {
+		this.productId = productId;
+	}
+	
+	public String getOrgName() {
+		return orgName;
+	}
+
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+
+	/**
+	 * @return the haveLive
+	 */
+	public Integer getHaveLive() {
+		return haveLive;
+	}
+
+
+	/**
+	 * @param haveLive the haveLive to set
+	 */
+	public void setHaveLive(Integer haveLive) {
+		this.haveLive = haveLive;
+	}
+
+
+	/**
+	 * @return the haveVideo
+	 */
+	public Integer getHaveVideo() {
+		return haveVideo;
+	}
+
+
+	/**
+	 * @param haveVideo the haveVideo to set
+	 */
+	public void setHaveVideo(Integer haveVideo) {
+		this.haveVideo = haveVideo;
+	}
+
+
+	/**
+	 * @return the haveHandout
+	 */
+	public Integer getHaveHandout() {
+		return haveHandout;
+	}
+
+
+	/**
+	 * @param haveHandout the haveHandout to set
+	 */
+	public void setHaveHandout(Integer haveHandout) {
+		this.haveHandout = haveHandout;
+	}
+
+
+	/**
+	 * @return the logitudeX
+	 */
+	public String getLogitudeX() {
+		return logitudeX;
+	}
+
+
+	/**
+	 * @param logitudeX the logitudeX to set
+	 */
+	public void setLogitudeX(String logitudeX) {
+		this.logitudeX = logitudeX;
+	}
+
+
+	/**
+	 * @return the latitudeY
+	 */
+	public String getLatitudeY() {
+		return latitudeY;
+	}
+
+
+	/**
+	 * @param latitudeY the latitudeY to set
+	 */
+	public void setLatitudeY(String latitudeY) {
+		this.latitudeY = latitudeY;
+	}
+
+
+	/**
+	 * @return the paymentNum
+	 */
+	public BigInteger getPaymentNum() {
+		return paymentNum;
+	}
+
+
+	/**
+	 * @param paymentNum the paymentNum to set
+	 */
+	public void setPaymentNum(BigInteger paymentNum) {
+		this.paymentNum = paymentNum;
+	}
+
+
+	/**
+	 * @return the haveAward
+	 */
+	public Integer getHaveAward() {
+		return haveAward;
+	}
+
+
+	/**
+	 * @param haveAward the haveAward to set
+	 */
+	public void setHaveAward(int haveAward) {
+		this.haveAward = haveAward;
+	}
+
+	public String getOrgShortName() {
+		return orgShortName;
+	}
+
+	public void setOrgShortName(String orgShortName) {
+		this.orgShortName = orgShortName;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java
new file mode 100644
index 0000000..5a6c60b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+* 班级老师中间表
+*@author junliang
+*@createTime 2017-11-10
+*/
+@Entity
+@Table(name="ORG_CLASS_RE_TEACHER")
+@NamedQuery(name="OrgClassReTeacher.findAll",query ="SELECT o FROM OrgClassReTeacher o")
+public class OrgClassReTeacher implements ITrace , Serializable{
+	public static final String TEACHER_NUMBER = "org_public_0000";
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+	
+	@Column(name="TEACHER_ID", nullable=false, length=32)
+	private String teacherId;
+	
+	@Column(name="TEACHER_NAME",nullable=false, length=32)
+	private String teacherName;
+	
+	@Column(name="TEACHER_TYPE", nullable=false, length=5)
+	private int teacherType;
+	
+	@Column(name="CLASS_ID", nullable=false, length=32)
+	private String classId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@JsonIgnore
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@JsonIgnore
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	
+	
+    
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public int getTeacherType() {
+		return teacherType;
+	}
+
+	public void setTeacherType(int teacherType) {
+		this.teacherType = teacherType;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+  
+	
+
+	
+
+
+
+
+	
+
+
+
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java
new file mode 100644
index 0000000..5c5f681
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java
@@ -0,0 +1,219 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+//import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * The persistent class for the ORG_CLASS_RE_USER database table.
+ * 
+ */
+@Entity
+@Table(name = "ORG_CLASS_RE_USER")
+@NamedQuery(name = "OrgClassReUser.findAll", query = "SELECT o FROM OrgClassReUser o")
+public class OrgClassReUser implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 未激活课程 */
+	public static final int CLASS_NOT_ACTIVATED = 1;
+	/** 加入课程 */
+	public static final int CLASS_ADD = 2;
+	/**初审通过*/
+	public static final int CLASS_FIRST_PASS = 3;
+	/**初审拒绝*/
+	public static final int CLASS_FIRST_REJECT = 4;
+	/**最终通过*/
+	public static final int CLASS_END_PASS = 5;
+	/**最终拒绝*/
+	public static final int CLASS_END_REJECT = 6;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CLASS_USER_ID", unique = true, nullable = false, length = 32)
+	private String classUserId;
+
+	@Column(name = "CLASS_ID")
+	private String classId;
+
+	@Temporal(TemporalType.DATE)
+	@Column(name = "ORDER_TIME")
+	private Date orderTime;
+
+	@Column(name = "STATUS")
+	private int status;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name = "USER_ID")
+	private String userId;
+
+	@Column(name = "STUDY_STATUS")
+	private Integer sutdyStatus;
+	
+	@Column(name = "ORG_ID")
+	private String orgId;
+	
+	@Column(name = "ORG_NAME")
+	private String orgName;
+	
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public Integer getSutdyStatus() {
+		return sutdyStatus;
+	}
+
+	public void setSutdyStatus(Integer sutdyStatus) {
+		this.sutdyStatus = sutdyStatus;
+	}
+
+	public OrgClassReUser() {
+	}
+
+	public String getClassUserId() {
+		return this.classUserId;
+	}
+
+	public void setClassUserId(String classUserId) {
+		this.classUserId = classUserId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getOrderTime() {
+		return this.orderTime;
+	}
+
+	public void setOrderTime(Date orderTime) {
+		this.orderTime = orderTime;
+	}
+
+	public int getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassReferFee.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassReferFee.java
new file mode 100644
index 0000000..ee8843a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassReferFee.java
@@ -0,0 +1,211 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Table(name="org_class_refer_fee")
+public class OrgClassReferFee implements Serializable,ITrace{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CLASS_REFER_FEE_ID", unique=true, nullable=false, length=32)
+	private String classReferFeeId;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name="REFER_FEE", precision=10, scale=2)
+	private BigDecimal referFee;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**
+	 * @return the classReferFeeId
+	 */
+	public String getClassReferFeeId() {
+		return classReferFeeId;
+	}
+
+	/**
+	 * @param classReferFeeId the classReferFeeId to set
+	 */
+	public void setClassReferFeeId(String classReferFeeId) {
+		this.classReferFeeId = classReferFeeId;
+	}
+
+	/**
+	 * @return the classId
+	 */
+	public String getClassId() {
+		return classId;
+	}
+
+	/**
+	 * @param classId the classId to set
+	 */
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	/**
+	 * @return the referFee
+	 */
+	public BigDecimal getReferFee() {
+		return referFee;
+	}
+
+	/**
+	 * @param referFee the referFee to set
+	 */
+	public void setReferFee(BigDecimal referFee) {
+		this.referFee = referFee;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java
new file mode 100644
index 0000000..e1921a5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java
@@ -0,0 +1,319 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+@Entity
+@Table(name="org_class_user_custom")
+@NamedQuery(name="OrgClassUserCustom.findAll", query="SELECT o FROM OrgClassUserCustom o")
+public class OrgClassUserCustom implements Serializable,ITrace{
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**对象值:*/
+	
+	public static final String OBJECT_VALUE_USERPHOTO = "userPhoto";
+	public static final String OBJECT_VALUE_ORDERPHONE = "orderPhone";
+	public static final String OBJECT_VALUE_QQ = "QQ";
+	public static final String OBJECT_VALUE_WEIXIN = "weixin";
+	public static final String OBJECT_VALUE_BIRTHDAY = "birthday";
+	public static final String OBJECT_VALUE_IDNUMBER = "idNumber";
+	public static final String OBJECT_VALUE_COMPANY = "company";
+	public static final String OBJECT_VALUE_ADDRESS = "address";
+	public static final String OBJECT_VALUE_MAILADDRESS = "mailAddress";
+	
+	public static final String OBJECT_NAME_USERPHOTO = "学员照片";
+	public static final String OBJECT_NAME_ORDERPHONE = "其它电话";
+	public static final String OBJECT_NAME_QQ = "QQ";
+	public static final String OBJECT_NAME_WEIXIN = "微信";
+	public static final String OBJECT_NAME_BIRTHDAY = "生日";
+	public static final String OBJECT_NAME_IDNUMBER = "身份证";
+	public static final String OBJECT_NAME_COMPANY = "公司";
+	public static final String OBJECT_NAME_ADDRESS = "所在地区";
+	public static final String OBJECT_NAME_MAILADDRESS = "是否索取发票";
+	
+	public static final String OBJECT_TYPE_TEXT = "text"; // 文本框,限制长度,其他不做校验
+	public static final String OBJECT_TYPE_TEXTAREA = "textarea";  // 多行文本
+	public static final String OBJECT_TYPE_NUMBER = "number";  // 数字
+	public static final String OBJECT_TYPE_MOBILE_PHONE = "mobile_phone";  // 手机号
+	public static final String OBJECT_TYPE_TEL = "tel";  // 固话
+	public static final String OBJECT_TYPE_EMAIL = "email";  // 邮箱
+	public static final String OBJECT_TYPE_DATE = "date";  // 日期
+	public static final String OBJECT_TYPE_TIME = "time";  // 时间
+	public static final String OBJECT_TYPE_IMG = "img";  // 单张图片
+	public static final String OBJECT_TYPE_MULTI_IMG = "multi_img";  // 多张图片
+	public static final String OBJECT_TYPE_ADDRESS = "address";  //地址
+	public static final String OBJECT_TYPE_RADIO = "radio";  // 单选
+	public static final String OBJECT_TYPE_IDNUMBER = "idNumber";  // 身份证
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CUSTOM_ID", unique=true, nullable=false, length=32)
+	private String customId;
+	
+	/**对象值*/
+	@Column(name="OBJECT_VALUE", length=32)
+	private String objectValue;
+	
+	/**对象名称*/
+	@Column(name="OBJECT_NAME", length=32)
+	private String objectName;
+	
+	/**输入类型*/
+	@Column(name="OBJECT_TYPE", length=1000)
+	private String objectType;
+	
+	/**单选选项*/
+	@Column(name="OBJECT_OPTION", length=20)
+	private String objectOption;
+	
+	/**是否选中(是否显示)   0:不显示  1:显示*/
+	@Column(name="CHECKED_FLAG", nullable=false)
+	private boolean checkedFlag;
+	
+	/**是否必填   0:非必填  1:必填*/
+	@Column(name="REQUIRED_FLAG", nullable=false)
+	private boolean requiredFlag;
+	
+	/**是否报名时填写   0:非必填  1:必填*/
+	@Column(name="SIGNUP_FILLIN", nullable=false)
+	private boolean signupFillin;
+	
+	/**排序*/
+	@Column(name="order_num", length=3)
+	private Integer orderNum;
+	
+	/**班级Id*/
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/**机构Id*/
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	public boolean isSignupFillin() {
+		return signupFillin;
+	}
+
+	public void setSignupFillin(boolean signupFillin) {
+		this.signupFillin = signupFillin;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getObjectOption() {
+		return objectOption;
+	}
+
+	public void setObjectOption(String objectOption) {
+		this.objectOption = objectOption;
+	}
+
+	public String getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(String objectType) {
+		this.objectType = objectType;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getCustomId() {
+		return customId;
+	}
+
+	public void setCustomId(String customId) {
+		this.customId = customId;
+	}
+
+	public String getObjectValue() {
+		return objectValue;
+	}
+
+	public void setObjectValue(String objectValue) {
+		this.objectValue = objectValue;
+	}
+
+	public String getObjectName() {
+		return objectName;
+	}
+
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+
+	public boolean getCheckedFlag() {
+		return checkedFlag;
+	}
+
+	public void setCheckedFlag(boolean checkedFlag) {
+		this.checkedFlag = checkedFlag;
+	}
+
+	public boolean getRequiredFlag() {
+		return requiredFlag;
+	}
+
+	public void setRequiredFlag(boolean requiredFlag) {
+		this.requiredFlag = requiredFlag;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((objectValue == null) ? 0 : objectValue.hashCode());
+		result = prime * result + ((orgId == null) ? 0 : orgId.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj){
+			return true;
+		}
+		if (obj == null){
+			return false;
+		}
+		if (getClass() != obj.getClass()){
+			return false;
+		}
+		OrgClassUserCustom other = (OrgClassUserCustom) obj;
+		if (objectValue == null) {
+			if (other.objectValue != null){
+				return false;
+			}
+		} else if (!objectValue.equals(other.objectValue)){
+			return false;
+		}
+		if (orgId == null) {
+			if (other.orgId != null){
+				return false;
+			}
+		} else if (!orgId.equals(other.orgId)){
+			return false;
+		}
+		return true;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassVideoPrivilege.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassVideoPrivilege.java
new file mode 100644
index 0000000..edfeb5f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassVideoPrivilege.java
@@ -0,0 +1,126 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+
+/**
+ * The persistent class for the org_salesman database table.
+ * 
+ */
+@Entity
+@Table(name="ORG_CLASS_VIDEO_PRIVILEGE")
+public class OrgClassVideoPrivilege implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="PRIVILEGE_ID", unique=true, nullable=false, length=32)
+	private String privilegeId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+	
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+
+
+	public OrgClassVideoPrivilege() {
+	}
+	
+	
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean isDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgClassVisitor.java b/src/main/java/com/qxueyou/scc/org/model/OrgClassVisitor.java
new file mode 100644
index 0000000..4fc28bd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgClassVisitor.java
@@ -0,0 +1,154 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the org_class_visitor database table.
+ * 
+ */
+@Entity
+@Table(name="org_class_visitor")
+@NamedQuery(name="OrgClassVisitor.findAll", query="SELECT o FROM OrgClassVisitor o")
+public class OrgClassVisitor implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="class_visitor_id", nullable=false, length=32)
+	private String classVisitorId;
+
+	@Column(name="org_id", nullable=false, length=32)
+	private String orgId;
+	
+	@Column(name="class_id", nullable=false, length=32)
+	private String classId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	
+	public String getOrgId() {
+		return orgId;
+	}
+	
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassVisitorId() {
+		return classVisitorId;
+	}
+
+	public void setClassVisitorId(String classVisitorId) {
+		this.classVisitorId = classVisitorId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCollege.java b/src/main/java/com/qxueyou/scc/org/model/OrgCollege.java
new file mode 100644
index 0000000..4c613d5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCollege.java
@@ -0,0 +1,274 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 院系
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="ORG_COLLEGE")
+@NamedQuery(name="OrgCollege.findAll", query="SELECT o FROM OrgCollege o")
+public class OrgCollege implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="COLLEGE_ID", unique=true, nullable=false, length=32)
+	private String collegeId;
+	
+	/**  院系名称  */
+	@Column(name="NAME",length=150)
+	private String name;
+	
+	/**  全称  */
+	@Column(name="FULL_NAME",length=255)
+	private String fullName;
+
+	/** 编码  */
+	@Column(name="CODE",length=50)
+	private String code;
+
+	/**  描述 */
+	@Column(name="CONTENT",length=255)
+	private String content;
+	
+	/** 类型:本科、专科、硕士、博士  */
+	@Column(name="TYPE")
+	private short type;
+	
+	/**  类型:2为院、3为系  */
+	@Column(name="LEVEL_TYPE")
+	private short levelType;
+	
+	/**  地址 */
+	@Column(name="ADDRESS",length=255)
+	private String address;
+	
+	/**  联系人  */
+	@Column(name="CONTACTOR",length=64)
+	private String contactor;
+
+	/**  电话  */
+	@Column(name="TEL", length=50)
+	private String tel;
+
+	/**  网址  */
+	@Column(name="WEBSITE", length=50)
+	private String website;
+	
+	/**  院校ID */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**  父院系ID */
+	@Column(name="PARENT_COLLEGE_ID", length=32)
+	private String parentCollegeId;
+	
+	/**  科目ID 
+	@Column(name="CATEGORY_ID", length=32)
+	private String categoryId; */
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getCollegeId() {
+		return collegeId;
+	}
+
+	public void setCollegeId(String collegeId) {
+		this.collegeId = collegeId;
+	}
+	
+	public short getLevelType() {
+		return levelType;
+	}
+
+	public void setLevelType(short levelType) {
+		this.levelType = levelType;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+	
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFullName() {
+		return fullName;
+	}
+
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getContactor() {
+		return contactor;
+	}
+
+	public void setContactor(String contactor) {
+		this.contactor = contactor;
+	}
+
+	public String getTel() {
+		return tel;
+	}
+
+	public void setTel(String tel) {
+		this.tel = tel;
+	}
+
+	public String getWebsite() {
+		return website;
+	}
+
+	public void setWebsite(String website) {
+		this.website = website;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getParentCollegeId() {
+		return parentCollegeId;
+	}
+
+	public void setParentCollegeId(String parentCollegeId) {
+		this.parentCollegeId = parentCollegeId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java b/src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java
new file mode 100644
index 0000000..7953285
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java
@@ -0,0 +1,670 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 机构专业
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="ORG_COLLEGE_COURSE")
+@NamedQuery(name="OrgCollegeCourse.findAll", query="SELECT o FROM OrgCollegeCourse o")
+public class OrgCollegeCourse implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 层次(1学科 2 门类  3专业) */
+	public static final short ORG_COLLEGE_COURSE_TYPE_SUBJECT = 1;
+	
+	public static final short ORG_COLLEGE_COURSE_TYPE_CATEGORY = 2;
+	
+	public static final short ORG_COLLEGE_COURSE_TYPE_MAJOR = 3;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="COLLEGE_COURSE_ID", unique=true, nullable=false, length=32)
+	private String collegeCourseId;
+	
+	/** 编码 */
+	@Column(name="CODE",length=64)
+	private String code;
+
+	/** 介绍 */
+	@Column(name="CONTENT")
+	private String content;
+
+	/** 分类id */
+	@Column(name="COURSE_CATEGORY_ID", length=32)
+	private String courseCategoryId;
+
+	/** 分类名 */
+	@Column(name="COURSE_CATEGORY_NAME", length=150)
+	private String courseCategoryName;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="NAME", length=255)
+	private String name;
+
+	/**  机构ID  */
+	@Column(name="ORGANIZATION_ID", length=32)
+	private String organizationId;
+	
+	
+	@Transient
+	private String orgName;
+	
+	@Transient
+	private String orgTel;
+	
+	@Column(name="PRICE", nullable=false, precision=16, scale=2)
+	private BigDecimal price;
+
+	@Column(name="TEACHER", length=255)
+	private String teacher;
+	
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="RECOMMEND", nullable=false)
+	private boolean recommend;
+	
+	/**  专业ID  */
+	@Column(name="COURSE_ID", length=32)
+	private String courseId;
+	
+	/**  院系ID  */
+	@Column(name="COLLEGE_ID", length=32)
+	private String collegeId;
+	
+	/**  层次(学科  门类  专业)  */
+	@Column(name="LEVEL_")
+	private short level;
+	
+	/**  类型:1本科  2专科 3硕士   4博士  */
+	@Column(name="TYPE")
+	private short type;
+	
+	@Column(name="TOP_ORG_ID", length=32)
+	private String topOrgId;
+	
+	@Column(name="ORDER_NUM")
+	private int orderNum;
+
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORGANIZATION_ID",referencedColumnName="ORGANIZATION_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Organization org;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "TOP_ORG_ID",referencedColumnName="ORGANIZATION_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Organization topOrg;
+	
+	//新加映射 2017-11-1
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "COURSE_CATEGORY_ID",referencedColumnName="CATEGORY_LEVEL_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private OrgCategoryLevel category;
+	
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+	
+	public OrgCategoryLevel getCategory() {
+		return category;
+	}
+
+	public void setCategory(OrgCategoryLevel category) {
+		this.category = category;
+	}
+
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "COURSE_ID",referencedColumnName="COURSE_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private OrgCourse orgCourse;
+	
+	@Transient
+	private String classCount;
+	
+	/** 视频数量*/
+	@Transient
+	private Integer videoCount;
+	
+	/** 讲义数量*/
+	@Transient
+	private Integer handoutCount;
+	
+	/** 练习数量*/
+	@Transient
+	private Integer groupCount;
+	
+	/** 文章数量*/
+	@Transient
+	private Integer articleCount;
+	
+	/*@Column(name="ORDER_NUM")
+	private int orderNum;
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}*/
+
+	/**
+	 * @return the collegeCourseId
+	 */
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	/**
+	 * @param collegeCourseId the collegeCourseId to set
+	 */
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	/**
+	 * @return the code
+	 */
+	public String getCode() {
+		return code;
+	}
+
+	/**
+	 * @param code the code to set
+	 */
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	/**
+	 * @return the content
+	 */
+	public String getContent() {
+		return content;
+	}
+
+	/**
+	 * @param content the content to set
+	 */
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	/**
+	 * @return the courseCategoryId
+	 */
+	public String getCourseCategoryId() {
+		return courseCategoryId;
+	}
+
+	/**
+	 * @param courseCategoryId the courseCategoryId to set
+	 */
+	public void setCourseCategoryId(String courseCategoryId) {
+		this.courseCategoryId = courseCategoryId;
+	}
+
+	/**
+	 * @return the courseCategoryName
+	 */
+	public String getCourseCategoryName() {
+		return courseCategoryName;
+	}
+
+	/**
+	 * @param courseCategoryName the courseCategoryName to set
+	 */
+	public void setCourseCategoryName(String courseCategoryName) {
+		this.courseCategoryName = courseCategoryName;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the organizationId
+	 */
+	public String getOrganizationId() {
+		return organizationId;
+	}
+
+	/**
+	 * @param organizationId the organizationId to set
+	 */
+	public void setOrganizationId(String organizationId) {
+		this.organizationId = organizationId;
+	}
+
+	/**
+	 * @return the orgName
+	 */
+	public String getOrgName() {
+		return orgName;
+	}
+
+	/**
+	 * @param orgName the orgName to set
+	 */
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	/**
+	 * @return the orgTel
+	 */
+	public String getOrgTel() {
+		return orgTel;
+	}
+
+	/**
+	 * @param orgTel the orgTel to set
+	 */
+	public void setOrgTel(String orgTel) {
+		this.orgTel = orgTel;
+	}
+
+	/**
+	 * @return the price
+	 */
+	public BigDecimal getPrice() {
+		return price;
+	}
+
+	/**
+	 * @param price the price to set
+	 */
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	/**
+	 * @return the teacher
+	 */
+	public String getTeacher() {
+		return teacher;
+	}
+
+	/**
+	 * @param teacher the teacher to set
+	 */
+	public void setTeacher(String teacher) {
+		this.teacher = teacher;
+	}
+
+	/**
+	 * @return the imgPath
+	 */
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	/**
+	 * @param imgPath the imgPath to set
+	 */
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	/**
+	 * @return the recommend
+	 */
+	public boolean isRecommend() {
+		return recommend;
+	}
+
+	/**
+	 * @param recommend the recommend to set
+	 */
+	public void setRecommend(boolean recommend) {
+		this.recommend = recommend;
+	}
+
+	/**
+	 * @return the courseId
+	 */
+	public String getCourseId() {
+		return courseId;
+	}
+
+	/**
+	 * @param courseId the courseId to set
+	 */
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	/**
+	 * @return the collegeId
+	 */
+	public String getCollegeId() {
+		return collegeId;
+	}
+
+	/**
+	 * @param collegeId the collegeId to set
+	 */
+	public void setCollegeId(String collegeId) {
+		this.collegeId = collegeId;
+	}
+
+	/**
+	 * @return the level
+	 */
+	public short getLevel() {
+		return level;
+	}
+
+	/**
+	 * @param level the level to set
+	 */
+	public void setLevel(short level) {
+		this.level = level;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public short getType() {
+		return type;
+	}
+
+	/**
+	 * @param type the type to set
+	 */
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	/**
+	 * @return the topOrgId
+	 */
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	/**
+	 * @param topOrgId the topOrgId to set
+	 */
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	/**
+	 * @return the org
+	 */
+	public Organization getOrg() {
+		return org;
+	}
+
+	/**
+	 * @param org the org to set
+	 */
+	public void setOrg(Organization org) {
+		this.org = org;
+	}
+
+	/**
+	 * @return the topOrg
+	 */
+	public Organization getTopOrg() {
+		return topOrg;
+	}
+
+	/**
+	 * @param topOrg the topOrg to set
+	 */
+	public void setTopOrg(Organization topOrg) {
+		this.topOrg = topOrg;
+	}
+
+	/**
+	 * @return the orgCourse
+	 */
+	public OrgCourse getOrgCourse() {
+		return orgCourse;
+	}
+
+	/**
+	 * @param orgCourse the orgCourse to set
+	 */
+	public void setOrgCourse(OrgCourse orgCourse) {
+		this.orgCourse = orgCourse;
+	}
+
+	/**
+	 * @return the classCount
+	 */
+	public String getClassCount() {
+		return classCount;
+	}
+
+	/**
+	 * @param classCount the classCount to set
+	 */
+	public void setClassCount(String classCount) {
+		this.classCount = classCount;
+	}
+
+	/**
+	 * @return the videoCount
+	 */
+	public Integer getVideoCount() {
+		return videoCount;
+	}
+
+	/**
+	 * @param videoCount the videoCount to set
+	 */
+	public void setVideoCount(Integer videoCount) {
+		this.videoCount = videoCount;
+	}
+
+	/**
+	 * @return the handoutCount
+	 */
+	public Integer getHandoutCount() {
+		return handoutCount;
+	}
+
+	/**
+	 * @param handoutCount the handoutCount to set
+	 */
+	public void setHandoutCount(Integer handoutCount) {
+		this.handoutCount = handoutCount;
+	}
+
+	/**
+	 * @return the groupCount
+	 */
+	public Integer getGroupCount() {
+		return groupCount;
+	}
+
+	/**
+	 * @param groupCount the groupCount to set
+	 */
+	public void setGroupCount(Integer groupCount) {
+		this.groupCount = groupCount;
+	}
+
+	public Integer getArticleCount() {
+		return articleCount;
+	}
+
+	public void setArticleCount(Integer articleCount) {
+		this.articleCount = articleCount;
+	}
+	
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java b/src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java
new file mode 100644
index 0000000..214d124
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java
@@ -0,0 +1,247 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 大学(公共)
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="org_college_public")
+@NamedQuery(name="OrgCollegePublic.findAll", query="SELECT o FROM OrgCollegePublic o")
+public class OrgCollegePublic implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	/** 本科 1   专科 2  其他 3**/
+	public static final short COLLEGE_TYPE_UNDERGRADUATE=1;
+	public static final short COLLEGE_TYPE_SPECIALTY=2;
+	public static final short COLLEGE_TYPE_DEFAULT=3;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="COLLEGE_PUBLIC_ID", unique=true, nullable=false, length=32)
+	private String collegePublicId;
+	
+	/**  院系名称  */
+	@Column(name="NAME",length=150)
+	private String name;
+	
+	/**  简称  */
+	@Column(name="SHORT_NAME",length=255)
+	private String shortName;
+
+	/** 编码  */
+	@Column(name="CODE",length=50)
+	private String code;
+
+	/**  描述 */
+	@Column(name="CONTENT",length=255)
+	private String content;
+	
+	/**  类型:本科、专科、硕士、博士  */
+	@Column(name="TYPE")
+	private short type;
+	
+	/**  地址 */
+	@Column(name="ADDRESS",length=255)
+	private String address;
+	
+	/**  联系人  */
+	@Column(name="CONTACTOR",length=64)
+	private String contactor;
+
+	/**  电话  */
+	@Column(name="TEL", length=50)
+	private String tel;
+
+	/**  网址  */
+	@Column(name="WEBSITE", length=50)
+	private String website;
+	
+	/**  父院系ID */
+	@Column(name="PARENT_COLLEGE_ID", length=32)
+	private String parentCollegeId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	public String getCollegePublicId() {
+		return collegePublicId;
+	}
+
+	public void setCollegePublicId(String collegePublicId) {
+		this.collegePublicId = collegePublicId;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+	
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getContactor() {
+		return contactor;
+	}
+
+	public void setContactor(String contactor) {
+		this.contactor = contactor;
+	}
+
+	public String getTel() {
+		return tel;
+	}
+
+	public void setTel(String tel) {
+		this.tel = tel;
+	}
+
+	public String getWebsite() {
+		return website;
+	}
+
+	public void setWebsite(String website) {
+		this.website = website;
+	}
+
+	public String getParentCollegeId() {
+		return parentCollegeId;
+	}
+
+	public void setParentCollegeId(String parentCollegeId) {
+		this.parentCollegeId = parentCollegeId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCourse.java b/src/main/java/com/qxueyou/scc/org/model/OrgCourse.java
new file mode 100644
index 0000000..e7e0d54
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCourse.java
@@ -0,0 +1,271 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the org_course database table.
+ * 
+ */
+/**
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="ORG_COURSE")
+@NamedQuery(name="OrgCourse.findAll", query="SELECT o FROM OrgCourse o")
+@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
+public class OrgCourse implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 类型:1本科  2专科 3硕士   4博士 */
+	public static final short ORG_COURSE_LEVEL_UNDERGRADUATE  = 1;
+	
+	public static final short ORG_COURSE_LEVEL_FACULTY = 2;
+	
+	public static final short ORG_COURSE_LEVEL_MASTER = 3;
+
+	public static final short ORG_COURSE_LEVEL_DOCTOR = 4;
+	
+	public static final short ORG_COURSE_LEVEL_TRAIN = 5;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="COURSE_ID", unique=true, nullable=false, length=32)
+	private String courseId;
+	
+	/**  名称   */
+	@Column(name="NAME", length=255)
+	private String name;
+
+	/**  编码、代码   */
+	@Column(name="CODE",length=64)
+	private String code;
+
+	/**  科目ID   */
+	@Column(name="COURSE_CATEGORY_ID", length=32)
+	private String courseCategoryId;
+
+	/**  科目名称  */
+	@Column(name="COURSE_CATEGORY_NAME", length=255)
+	private String courseCategoryName;
+	
+	/**  内容   */
+	@Column(name="CONTENT")
+	private String content;
+	
+	/**  类型:1本科  2专科 3硕士   4博士  */
+	@Column(name="COURSE_TYPE")
+	private short courseType;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "orgCourse")
+	@JsonIgnore
+	private List<OrgCollegeCourse> orgCollegeCourses;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "COURSE_CATEGORY_ID",referencedColumnName="CATEGORY_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private OrgCourseCategory orgCourseCategory;
+	
+	/** 是否推广  false:不推广  true:推广 */
+	@Column(name="EXTENDED")
+	private boolean extended;
+	
+	@Transient
+	private String classCount;
+	
+	public OrgCourse() {
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCourseCategoryId() {
+		return courseCategoryId;
+	}
+
+	public void setCourseCategoryId(String courseCategoryId) {
+		this.courseCategoryId = courseCategoryId;
+	}
+
+	public String getCourseCategoryName() {
+		return courseCategoryName;
+	}
+
+	public void setCourseCategoryName(String courseCategoryName) {
+		this.courseCategoryName = courseCategoryName;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public short getCourseType() {
+		return courseType;
+	}
+
+	public void setCourseType(short courseType) {
+		this.courseType = courseType;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<OrgCollegeCourse> getOrgCollegeCourses() {
+		return orgCollegeCourses;
+	}
+
+	public void setOrgCollegeCourses(List<OrgCollegeCourse> orgCollegeCourses) {
+		this.orgCollegeCourses = orgCollegeCourses;
+	}
+
+	public boolean getExtended() {
+		return extended;
+	}
+
+	public void setExtended(boolean extended) {
+		this.extended = extended;
+	}
+
+	public OrgCourseCategory getOrgCourseCategory() {
+		return orgCourseCategory;
+	}
+
+	public void setOrgCourseCategory(OrgCourseCategory orgCourseCategory) {
+		this.orgCourseCategory = orgCourseCategory;
+	}
+
+	public String getClassCount() {
+		return classCount;
+	}
+
+	public void setClassCount(String classCount) {
+		this.classCount = classCount;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java b/src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java
new file mode 100644
index 0000000..48190be
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java
@@ -0,0 +1,80 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 机构层级返回数据
+ * 
+ * @author zhiyong
+ *
+ */
+public class OrgCourseCateData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 2066875267194349324L;
+
+	private String categoryId;
+
+	private short categoryLevel;
+
+	private String categoryName;
+	
+	private String parentCategoryId;
+
+	private List<OrgCourseCateData> childrenList;
+	
+	private List<OrgCourseJsonData> lstCourses;
+
+	public String getCategoryId() {
+		return categoryId;
+	}
+
+	public void setCategoryId(String categoryId) {
+		this.categoryId = categoryId;
+	}
+
+	public short getCategoryLevel() {
+		return categoryLevel;
+	}
+
+	public void setCategoryLevel(short categoryLevel) {
+		this.categoryLevel = categoryLevel;
+	}
+
+	public String getCategoryName() {
+		return categoryName;
+	}
+
+	public void setCategoryName(String categoryName) {
+		this.categoryName = categoryName;
+	}
+
+	public String getParentCategoryId() {
+		return parentCategoryId;
+	}
+
+	public void setParentCategoryId(String parentCategoryId) {
+		this.parentCategoryId = parentCategoryId;
+	}
+
+	public List<OrgCourseCateData> getChildrenList() {
+		return childrenList;
+	}
+
+	public void setChildrenList(List<OrgCourseCateData> childrenList) {
+		this.childrenList = childrenList;
+	}
+
+	public List<OrgCourseJsonData> getLstCourses() {
+		return lstCourses;
+	}
+
+	public void setLstCourses(List<OrgCourseJsonData> lstCourses) {
+		this.lstCourses = lstCourses;
+	}
+
+}
+
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java b/src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java
new file mode 100644
index 0000000..bcbb1de
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java
@@ -0,0 +1,319 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the org_course_category database table.
+ * 
+ */
+@Entity
+@Table(name = "org_course_category")
+@NamedQuery(name = "OrgCourseCategory.findAll", query = "SELECT o FROM OrgCourseCategory o")
+public class OrgCourseCategory implements Serializable, ITrace {
+
+	private static final long serialVersionUID = 1L;
+
+	public static final short CATEGORY_LEVEL_FIRST = 1;
+
+	public static final short CATEGORY_LEVEL_SECOND = 2;
+
+	public static final short CATEGORY_LEVEL_THIRD = 3;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CATEGORY_ID", unique = true, nullable = false, length = 32)
+	private String categoryId;
+
+	@Column(name = "CATEGORY_LEVEL", nullable = false)
+	private short categoryLevel;
+
+	@Column(name = "CATEGORY_NAME", nullable = false, length = 150)
+	private String categoryName;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name = "FULL_NAME", length = 255)
+	private String fullName;
+
+	@Column(name = "PARENT_CATEGORY_ID", length = 32)
+	private String parentCategoryId;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 类型:(1.职业培训 2.学历教育3.企业内训 4.活动沙龙5.代理机构) */
+	@Column(name = "TYPE")
+	private Short type;
+
+	/** 编码 */
+	@Column(name = "CODE", length = 100)
+	private String code;
+
+	@Column(name = "IMG_PATH", length = 255)
+	private String imgPath;
+
+	/** 本科、专科、研究生、博士生 */
+	@Column(name = "CATEGORY_TYPE", length = 6)
+	private Short categoryType;
+
+	/*
+	 * @OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
+	 * 
+	 * @JsonIgnore private List<OrgCollegeCourse> courses;
+	 */
+
+	@ManyToOne(cascade = { CascadeType.ALL })
+	@JoinColumn(name = "PARENT_CATEGORY_ID", referencedColumnName = "CATEGORY_ID", updatable = false, insertable = false)
+	@JsonIgnore
+	private OrgCourseCategory parent;
+
+	@OneToMany(mappedBy = "parent")
+	@Where(clause = "DELETE_FLAG=0")
+	@JsonIgnore
+	private List<OrgCourseCategory> children;
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "orgCourseCategory")
+	@JsonIgnore
+	private List<OrgCourse> orgCourses;
+
+	@Transient
+	private List<OrgCollegeCourse> courseList;
+
+	@Transient
+	private List<OrgCourseCategory> childrenList;
+
+	@Transient
+	private List<OrgCourse> lstCourses;
+
+	public List<OrgCourse> getLstCourses() {
+		return lstCourses;
+	}
+
+	public void setLstCourses(List<OrgCourse> lstCourses) {
+		this.lstCourses = lstCourses;
+	}
+
+	public List<OrgCourseCategory> getChildrenList() {
+		return childrenList;
+	}
+
+	public void setChildrenList(List<OrgCourseCategory> childrenList) {
+		this.childrenList = childrenList;
+	}
+
+	public String getCategoryId() {
+		return this.categoryId;
+	}
+
+	public void setCategoryId(String categoryId) {
+		this.categoryId = categoryId;
+	}
+
+	public short getCategoryLevel() {
+		return this.categoryLevel;
+	}
+
+	public Short getType() {
+		return type;
+	}
+
+	public void setType(Short type) {
+		this.type = type;
+	}
+
+	public void setCategoryLevel(short categoryLevel) {
+		this.categoryLevel = categoryLevel;
+	}
+
+	public String getCategoryName() {
+		return this.categoryName;
+	}
+
+	public void setCategoryName(String categoryName) {
+		this.categoryName = categoryName;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getFullName() {
+		return this.fullName;
+	}
+
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	public String getParentCategoryId() {
+		return this.parentCategoryId;
+	}
+
+	public void setParentCategoryId(String parentCategoryId) {
+		this.parentCategoryId = parentCategoryId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	/*
+	 * public List<OrgCollegeCourse> getCourses() { return courses; }
+	 * 
+	 * public void setCourses(List<OrgCollegeCourse> courses) { this.courses =
+	 * courses; }
+	 */
+
+	public List<OrgCollegeCourse> getCourseList() {
+		return courseList;
+	}
+
+	public void setCourseList(List<OrgCollegeCourse> courseList) {
+		this.courseList = courseList;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public OrgCourseCategory getParent() {
+		return parent;
+	}
+
+	public void setParent(OrgCourseCategory parent) {
+		this.parent = parent;
+	}
+
+	public List<OrgCourseCategory> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<OrgCourseCategory> children) {
+		this.children = children;
+	}
+
+	public List<OrgCourse> getOrgCourses() {
+		return orgCourses;
+	}
+
+	public void setOrgCourses(List<OrgCourse> orgCourses) {
+		this.orgCourses = orgCourses;
+	}
+
+	public Short getCategoryType() {
+		return categoryType;
+	}
+
+	public void setCategoryType(Short categoryType) {
+		this.categoryType = categoryType;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java b/src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java
new file mode 100644
index 0000000..d68674d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 机构科目以及类型数据
+ * @author zhiyong
+ *
+ */
+public class OrgCourseData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 655858651902701073L;
+
+	/** 科目类型 */
+	List<OrgCourseCategory> categorys;
+	
+	/** 科目*/
+	List<OrgCollegeCourse> courses;
+
+	public List<OrgCourseCategory> getCategorys() {
+		return categorys;
+	}
+
+	public void setCategorys(List<OrgCourseCategory> categorys) {
+		this.categorys = categorys;
+	}
+
+	public List<OrgCollegeCourse> getCourses() {
+		return courses;
+	}
+
+	public void setCourses(List<OrgCollegeCourse> courses) {
+		this.courses = courses;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java b/src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java
new file mode 100644
index 0000000..1c87a29
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+
+/**
+ * 机构层级返回数据
+ * 
+ * @author zhiyong
+ *
+ */
+public class OrgCourseJsonData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private String courseId;
+
+	private String name;
+
+	private String code;
+	
+	private String courseCategoryId;
+	
+	private String courseCategoryName;
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCourseCategoryId() {
+		return courseCategoryId;
+	}
+
+	public void setCourseCategoryId(String courseCategoryId) {
+		this.courseCategoryId = courseCategoryId;
+	}
+
+	public String getCourseCategoryName() {
+		return courseCategoryName;
+	}
+
+	public void setCourseCategoryName(String courseCategoryName) {
+		this.courseCategoryName = courseCategoryName;
+	}
+	
+}
+
+
+
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java b/src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java
new file mode 100644
index 0000000..d868567
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java
@@ -0,0 +1,273 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+@Entity
+@Table(name="org_market_privilege")
+public class OrgMarketPrivilege implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/**班级*/
+	public static final String OBJECT_TYPE_CLASS = "class";
+	/**科目*/
+	public static final String OBJECT_TYPE_COURSE = "course";
+	
+	/**不包含*/
+	public static final int TYPE_NOT_CONTAIN = 0;
+	
+	/**包含*/
+	public static final int TYPE_CONTAIN = 1;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="MARKET_PRIVILEGE_ID", unique=true, nullable=false, length=32)
+	private String marketPrivilegeId;
+	
+	@Column(name="OBJECT_ID", length=32)
+	private String objectId;
+	
+	/**对象类型 class:班级 course:科目*/
+	@Column(name="OBJECT_TYPE", length=64)
+	private String objectType;
+	
+
+	@Column(name="OBJECT_VALUE", length=100)
+	private String objectValue;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**类型 0:不包含  1:包含*/
+	@Column(name="TYPE", length=6)
+	private Integer type;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**
+	 * @return the marketPrivilegeId
+	 */
+	public String getMarketPrivilegeId() {
+		return marketPrivilegeId;
+	}
+
+	/**
+	 * @param marketPrivilegeId the marketPrivilegeId to set
+	 */
+	public void setMarketPrivilegeId(String marketPrivilegeId) {
+		this.marketPrivilegeId = marketPrivilegeId;
+	}
+
+	/**
+	 * @return the objectId
+	 */
+	public String getObjectId() {
+		return objectId;
+	}
+
+	/**
+	 * @param objectId the objectId to set
+	 */
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	/**
+	 * @return the objectType
+	 */
+	public String getObjectType() {
+		return objectType;
+	}
+
+	/**
+	 * @param objectType the objectType to set
+	 */
+	public void setObjectType(String objectType) {
+		this.objectType = objectType;
+	}
+
+	/**
+	 * @return the objectValue
+	 */
+	public String getObjectValue() {
+		return objectValue;
+	}
+
+	/**
+	 * @param objectValue the objectValue to set
+	 */
+	public void setObjectValue(String objectValue) {
+		this.objectValue = objectValue;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public Integer getType() {
+		return type;
+	}
+
+	/**
+	 * @param type the type to set
+	 */
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java b/src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java
new file mode 100644
index 0000000..4b3a8e0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.org.model;
+
+public class OrgNewUserModel {
+	
+	/** 姓名*/
+	private String name;
+	
+	/** 手机号*/
+	private String mobilePhone;
+	
+	/** 帐号*/
+	private String account;
+	
+	/** 密码*/
+	private String password;
+	
+	/** email*/
+	private String email;
+	
+	/** 机构ID*/
+	private String orgId;
+	
+	/** 角色ID*/
+	private String roleId;
+	
+	/** 备注*/
+	private String remark;
+	
+	/** 角色关系ID*/
+	private String reId;
+	
+	/** userId*/
+	private String userId;
+	
+	/** 讲师介绍 */
+	private String teacherDes;
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the mobilePhone
+	 */
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	/**
+	 * @param mobilePhone the mobilePhone to set
+	 */
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	/**
+	 * @return the account
+	 */
+	public String getAccount() {
+		return account;
+	}
+
+	/**
+	 * @param account the account to set
+	 */
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	/**
+	 * @return the password
+	 */
+	public String getPassword() {
+		return password;
+	}
+
+	/**
+	 * @param password the password to set
+	 */
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	/**
+	 * @return the email
+	 */
+	public String getEmail() {
+		return email;
+	}
+
+	/**
+	 * @param email the email to set
+	 */
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the roleId
+	 */
+	public String getRoleId() {
+		return roleId;
+	}
+
+	/**
+	 * @param roleId the roleId to set
+	 */
+	public void setRoleId(String roleId) {
+		this.roleId = roleId;
+	}
+
+	/**
+	 * @return the remark
+	 */
+	public String getRemark() {
+		return remark;
+	}
+
+	/**
+	 * @param remark the remark to set
+	 */
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	/**
+	 * @return the reId
+	 */
+	public String getReId() {
+		return reId;
+	}
+
+	/**
+	 * @param reId the reId to set
+	 */
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	/**
+	 * @return the userId
+	 */
+	public String getUserId() {
+		return userId;
+	}
+
+	/**
+	 * @param userId the userId to set
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	/**
+	 * @return the teacherDes
+	 */
+	public String getTeacherDes() {
+		return teacherDes;
+	}
+
+	/**
+	 * @param teacherDes the teacherDes to set
+	 */
+	public void setTeacherDes(String teacherDes) {
+		this.teacherDes = teacherDes;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java b/src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java
new file mode 100644
index 0000000..d7f44de
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java
@@ -0,0 +1,203 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the OrgPhotoalbum database table.
+ * 机构相册实体类
+ */
+@Entity
+@Table(name="org_photoalbum")
+@NamedQuery(name="OrgPhotoalbum.findAll", query="SELECT o FROM OrgPhotoalbum o")
+public class OrgPhotoalbum implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="PHOTO_ID", unique=true, nullable=false, length=32)
+	private String photoId;
+
+	/** 图片路径 */
+	@Column(name="IMG_PATH",length=256)
+	private String imgPath;
+
+	/** 机构编号 */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	/** 图片序号 */
+	@Column(name="PHOTO_ORDER")
+	private int photoOrder;
+
+	/** 图片名称*/
+	@Column(name="PHOTO_NAME",length=64)
+	private String photoName;
+
+	/** 图片说明 */
+	@Column(name="PERSENTATION",length=225)
+	private String persentation;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private Organization organization;
+	
+	public OrgPhotoalbum() {
+		
+	}
+
+	public String getPhotoId() {
+		return photoId;
+	}
+
+	public void setPhotoId(String photoId) {
+		this.photoId = photoId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+	
+	public int getPhotoOrder() {
+		return photoOrder;
+	}
+
+	public void setPhotoOrder(int photoOrder) {
+		this.photoOrder = photoOrder;
+	}
+
+	public String getPhotoName() {
+		return photoName;
+	}
+
+	public void setPhotoName(String photoName) {
+		this.photoName = photoName;
+	}
+
+	public String getPersentation() {
+		return persentation;
+	}
+
+	public void setPersentation(String persentation) {
+		this.persentation = persentation;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java b/src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java
new file mode 100644
index 0000000..378b6bf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java
@@ -0,0 +1,188 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+@Entity
+@Table(name="org_privilege")
+public class OrgPrivilege implements Serializable,ITrace{
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**对象类型:直播*/
+	public static final int OBJECT_TYPE_LIVE = 1;
+	/**对象类型:直播*/
+	public static final int OBJECT_TYPE_VIDEO = 2;
+	/**对象类型:直播*/
+	public static final int OBJECT_TYPE_HANDOUT = 3;
+	
+	/**对象类型值:打赏(直播)*/
+	public static final String OBJECT_VALUE_REWARD = "reward";
+	/**对象类型值:下载(视频、讲义)*/
+	public static final String OBJECT_VALUE_DOWNLOAD = "download";
+	
+	/**权限值:关闭*/
+	public static final Integer PRIVILEGE_FLAG_FALSE = 0;
+	
+	/**权限值:开启*/
+	public static final Integer PRIVILEGE_FLAG_TRUE = 1;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="PRIVILEGE_ID", unique=true, nullable=false, length=32)
+	private String privilegeId;
+	
+	/**对象类型 1:直播,2:视频,3:讲义*/
+	@Column(name="OBJECT_TYPE")
+	private Integer objectType;
+
+	/**对象类型值  直播:打赏,视频:下载,讲义:下载*/
+	@Column(name="OBJECT_VALUE", length=100)
+	private String objectValue;
+	
+	/** 权限值   0:否  1:是 */
+	@Column(name="PRIVILEGE_FLAG", nullable=false)
+	private boolean privilegeFlag;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public String getPrivilegeId() {
+		return privilegeId;
+	}
+
+	public void setPrivilegeId(String privilegeId) {
+		this.privilegeId = privilegeId;
+	}
+
+	public int getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(int objectType) {
+		this.objectType = objectType;
+	}
+
+	public String getObjectValue() {
+		return objectValue;
+	}
+
+	public void setObjectValue(String objectValue) {
+		this.objectValue = objectValue;
+	}
+
+	public boolean getPrivilegeFlag() {
+		return privilegeFlag;
+	}
+
+	public void setPrivilegeFlag(boolean privilegeFlag) {
+		this.privilegeFlag = privilegeFlag;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java b/src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java
new file mode 100644
index 0000000..56890df
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java
@@ -0,0 +1,149 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 机构与大学(公共表)的关联表
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="org_re_college_public")
+@NamedQuery(name="OrgReCollegePublic.findAll", query="SELECT o FROM OrgReCollegePublic o")
+public class OrgReCollegePublic implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/** 大学ID */
+	@Column(name="COLLEGE_PUBLIC_ID", length=32)
+	private String collegePublicId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCollegePublicId() {
+		return collegePublicId;
+	}
+
+	public void setCollegePublicId(String collegePublicId) {
+		this.collegePublicId = collegePublicId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java b/src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java
new file mode 100644
index 0000000..17b353e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java
@@ -0,0 +1,203 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.user.model.User;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 机构销售人员表
+ * 
+ */
+@Entity
+@Table(name="org_salesman")
+@NamedQuery(name="OrgSalesman.findAll", query="SELECT o FROM OrgSalesman o")
+public class OrgSalesman implements Serializable ,ITrace{
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SALES_CODE_ID", unique=true, nullable=false, length=32)
+	private String salesCodeId;
+
+	@Column(name="CODE", length=32)
+	private String code;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private Organization organization;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private User user;
+
+	public OrgSalesman() {
+	}
+	
+	public Organization getOrganization() {
+		return organization;
+	}
+
+
+	public void setOrganization(Organization organization) {
+		this.organization = organization;
+	}
+
+
+	public String getSalesCodeId() {
+		return this.salesCodeId;
+	}
+
+	public void setSalesCodeId(String salesCodeId) {
+		this.salesCodeId = salesCodeId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java b/src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java
new file mode 100644
index 0000000..34204f0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java
@@ -0,0 +1,177 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="org_string_extend")
+public class OrgStringExtend implements Serializable,ITrace{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EXTENDS_ID", unique=true, nullable=false, length=32)
+	private String extendsId;
+	
+	/**  名称*/
+	@Column(name="NAME", length=32)
+	private String name;
+	
+	/**  值*/
+	@Column(name="VALUE", length=255)
+	private String value;
+	
+	/**  对象ID*/
+	@Column(name="OBJECT_ID", length=32)
+	private String objectId;
+	
+	/**  对象类型*/
+	@Column(name="OBJECT_TYPE", length=255)
+	private String objectType;
+	
+	/**  创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人  */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getExtendsId() {
+		return extendsId;
+	}
+
+	public void setExtendsId(String extendsId) {
+		this.extendsId = extendsId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public String getObjectId() {
+		return objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	public String getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(String objectType) {
+		this.objectType = objectType;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgStudent.java b/src/main/java/com/qxueyou/scc/org/model/OrgStudent.java
new file mode 100644
index 0000000..1a29cbf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgStudent.java
@@ -0,0 +1,204 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.user.model.User;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 机构学员表  实体
+ * @history 1-14 add by gavin
+ *
+ */
+@Entity
+@Table(name="org_student")
+public class OrgStudent implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_STUDENT_ID", unique=true, nullable=false, length=32)
+	private String orgStudentId;
+
+	/**  学员ID  */
+	@Column(name="STUDENT_ID", nullable=false, length=32)
+	private String studentId;
+
+	/**  用户ID */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	/**  机构ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	/**  班级ID  */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/**  创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人  */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private User user;
+
+	public OrgStudent() {
+	}
+
+	
+	public String getUserId() {
+		return userId;
+	}
+
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+
+
+	public String getClassId() {
+		return classId;
+	}
+
+
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+
+
+	public String getStudentId() {
+		return this.studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgStudentId() {
+		return orgStudentId;
+	}
+
+
+	public void setOrgStudentId(String orgStudentId) {
+		this.orgStudentId = orgStudentId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java b/src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java
new file mode 100644
index 0000000..e7a4db8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java
@@ -0,0 +1,265 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+//import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+import com.qxueyou.scc.user.model.User;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the org_teacher database table.
+ * 
+ */
+@Entity
+@Table(name="org_teacher")
+@NamedQuery(name="OrgTeacher.findAll", query="SELECT o FROM OrgTeacher o")
+public class OrgTeacher implements Serializable ,ITrace{
+	private static final long serialVersionUID = 1L;
+	public static final String TEACHER_NUMBER = "org_public_0000";
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_TEACHER_ID", unique=true, nullable=false, length=32)
+	private String orgTeacherId;
+
+	@Column(name="TEACHER_ID", nullable=false, length=32)
+	private String teacherId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="DESCRIPTION")
+	private String description;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	/**  职称  */
+	@Column(name="TITLE", length=150)
+	private String title;
+	
+	/**  学历  */
+	@Column(name="EDUCATION", length=100)
+	private String education;
+	
+	/**  工号  */
+	@Column(name="JOB_NUMBER", length=100)
+	private String jobNumber;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ORG_ID",referencedColumnName="ORGANIZATION_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private Organization organization;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private User user;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "teacherClassSchedule")
+	@JsonIgnore
+	private List<SchClassSchedule> classSchedules;
+	
+	public OrgTeacher() {
+	}
+	
+	public String getTeacherId() {
+		return this.teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Organization getOrganization() {
+		return organization;
+	}
+
+	public void setOrganization(Organization organization) {
+		this.organization = organization;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getEducation() {
+		return education;
+	}
+
+	public void setEducation(String education) {
+		this.education = education;
+	}
+
+	public String getJobNumber() {
+		return jobNumber;
+	}
+
+	public void setJobNumber(String jobNumber) {
+		this.jobNumber = jobNumber;
+	}
+
+	public List<SchClassSchedule> getClassSchedules() {
+		return classSchedules;
+	}
+
+	public void setClassSchedules(List<SchClassSchedule> classSchedules) {
+		this.classSchedules = classSchedules;
+	}
+
+	public String getOrgTeacherId() {
+		return orgTeacherId;
+	}
+
+	public void setOrgTeacherId(String orgTeacherId) {
+		this.orgTeacherId = orgTeacherId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrgText.java b/src/main/java/com/qxueyou/scc/org/model/OrgText.java
new file mode 100644
index 0000000..154212f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrgText.java
@@ -0,0 +1,175 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the org_class database table.
+ * 
+ */
+@Entity
+@Table(name="org_text")
+public class OrgText implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** tableName值:班级介绍 */
+	public static final String TABLE_NAME_CLASS = "ORG_CLASS";
+	
+	/** tableName值:机构介绍 */
+	public static final String TABLE_NAME_ORG = "ORG";
+	
+	/** tableName值:文章内容 */
+	public static final String TABLE_NAME_ARTICLE = "SCH_ARTICLE";
+	
+	/** tableName值:直播详情 */
+	public static final String TABLE_NAME_LIVE = "SCH_LIVE";
+	
+	/** tableName值:视频详情 */
+	public static final String TABLE_NAME_VIDEO = "SCH_VIDEO";
+	
+	/** tableName值:讲义详情 */
+	public static final String TABLE_NAME_HANDOUT = "SCH_HANDOUT";
+	
+	/** tableName值:作文作业详情 */
+	public static final String TABLE_WRITING_EXERCISE = "EXERCISE_COMPLETE_INFO";
+	
+	
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_TEXT_ID", unique=true, nullable=false, length=32)
+	private String orgTextId;
+
+	@Column(name="TABLE_NAME", length=64)
+	private String tableName;
+
+	@Column(name="KEY_VALUE", length=32)
+	private String key;
+
+	@Column(name="CONTENT", length=65535)
+	private String content;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	public String getOrgTextId() {
+		return orgTextId;
+	}
+
+	public void setOrgTextId(String orgTextId) {
+		this.orgTextId = orgTextId;
+	}
+
+	public String getTableName() {
+		return tableName;
+	}
+
+	public void setTableName(String tableName) {
+		this.tableName = tableName;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+	
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/Organization.java b/src/main/java/com/qxueyou/scc/org/model/Organization.java
new file mode 100644
index 0000000..e425780
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/Organization.java
@@ -0,0 +1,415 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+//import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+//import javax.persistence.JoinColumn;
+//import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+
+
+/**
+ * The persistent class for the organization database table.
+ * 
+ */
+@Entity
+@Table(name="organization")
+@NamedQuery(name="Organization.findAll", query="SELECT o FROM Organization o")
+public class Organization implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 用户类型(1,职业培训;2,学历教育;3,企业内训;4,活动沙龙;5,代理机构) */
+	public static final short ORG_TYPE_JOB_TRAINING = 1;
+	
+	public static final short ORG_TYPE_DEGREE_EDUCATION = 2;
+	
+	public static final short ORG_TYPE_ORG_CORPORATE_TRAINING = 3;
+	
+	public static final short ORG_TYPE_ACTIVITY_SALON = 4;
+	
+	public static final short ORG_TYPE_CLASS_AGENCY = 5;
+	/**  level (1:学校  2:系  3:学院)  */
+	public static final short ORG_LEVEL_SCHOOL = 1;
+	public static final short ORG_LEVEL_SYSTEM = 2;
+	public static final short ORG_LEVEL_COURTYARD = 3;
+
+	@Id
+	@Column(name="ORGANIZATION_ID", unique=true, nullable=false, length=32)
+	private String organizationId;
+	
+	@Column(name="PARENT_ORGANIZATION_ID", length=32)
+	private String parentOrganizationId;
+	
+	@Column(name="ORG_CODE", length=64)
+	private String orgCode;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="TEL", length=32)
+	private String tel;
+	
+	@Column(name="LOGO_PATH", length=255)
+	private String logoPath;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private String deleteFlag;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	
+	@Column(name="CODE",length=32)
+	private String code;
+
+	@Column(name="SHORT_NAME", length=150)
+	private String shortName;
+	
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	@Column(name="SERVER_URL", length=150)
+	private String serverUrl;
+    
+	/**  类型:(1.职业培训 2.学历教育3.企业内训 4.活动沙龙5.代理机构)  */
+	@Column(name="TYPE", length=6)
+	private String type;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "org")
+	@JsonManagedReference
+	private List<OrgCollegeCourse> courses;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "topOrg")
+	@JsonManagedReference
+	private List<OrgCollegeCourse> topCourses;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgAdmin> admins;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgCharger> chargers;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgSalesman> salesmans;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgTeacher> teachers;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonManagedReference
+	private List<OrgPhotoalbum> photoalbum;
+	
+	
+//	@ManyToOne(cascade={CascadeType.ALL})
+//    @JoinColumn(name="PARENT_ORGANIZATION_ID",referencedColumnName="ORGANIZATION_ID",updatable=false,insertable=false)
+//    @JsonIgnore
+//    private Organization parent;
+// 
+//    @OneToMany(fetch = FetchType.LAZY,mappedBy="parent")
+//    @JsonIgnore
+//    private List<Organization> children;
+    
+    
+    @Transient
+    private String topOrganizationId;
+    
+    @Transient
+    private Map<String,Object> classData;
+    
+    @Transient
+	private short level;
+    
+    @Transient
+    private Boolean  isParent ;
+    
+	public Map<String, Object> getClassData() {
+		return classData;
+	}
+
+	public void setClassData(Map<String, Object> classData) {
+		this.classData = classData;
+	}
+
+	public Organization() {
+	}
+	
+	
+	public String getTel() {
+		return tel;
+	}
+
+	public void setTel(String tel) {
+		this.tel = tel;
+	}
+
+	public String getLogoPath() {
+		return logoPath;
+	}
+
+	public void setLogoPath(String logoPath) {
+		this.logoPath = logoPath;
+	}
+
+	public String getOrganizationId() {
+		return this.organizationId;
+	}
+
+	public void setOrganizationId(String organizationId) {
+		this.organizationId = organizationId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}	
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(String deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+	
+	public String getParentOrganizationId() {
+		return parentOrganizationId;
+	}
+
+	public void setParentOrganizationId(String parentOrganizationId) {
+		this.parentOrganizationId = parentOrganizationId;
+	}
+
+	public String getOrgCode() {
+		return orgCode;
+	}
+
+	public void setOrgCode(String orgCode) {
+		this.orgCode = orgCode;
+	}
+	
+	public List<OrgPhotoalbum> getPhotoalbum() {
+		return photoalbum;
+	}
+
+	public void setPhotoalbum(List<OrgPhotoalbum> photoalbum) {
+		this.photoalbum = photoalbum;
+	}
+
+
+	public List<OrgCollegeCourse> getCourses() {
+		return courses;
+	}
+
+	public void setCourses(List<OrgCollegeCourse> courses) {
+		this.courses = courses;
+	}
+
+	public List<OrgAdmin> getAdmins() {
+		return admins;
+	}
+
+	public void setAdmins(List<OrgAdmin> admins) {
+		this.admins = admins;
+	}
+
+	public List<OrgCharger> getChargers() {
+		return chargers;
+	}
+
+	public void setChargers(List<OrgCharger> chargers) {
+		this.chargers = chargers;
+	}
+
+	public List<OrgSalesman> getSalesmans() {
+		return salesmans;
+	}
+
+	public void setSalesmans(List<OrgSalesman> salesmans) {
+		this.salesmans = salesmans;
+	}
+
+	public List<OrgTeacher> getTeachers() {
+		return teachers;
+	}
+
+	public void setTeachers(List<OrgTeacher> teachers) {
+		this.teachers = teachers;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public short getLevel() {
+		return level;
+	}
+
+	public void setLevel(short level) {
+		this.level = level;
+	}
+/*
+	public Organization getParent() {
+		return parent;
+	}
+
+	public void setParent(Organization parent) {
+		this.parent = parent;
+	}
+
+	public List<Organization> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<Organization> children) {
+		this.children = children;
+	}*/
+
+	public List<OrgCollegeCourse> getTopCourses() {
+		return topCourses;
+	}
+
+	public void setTopCourses(List<OrgCollegeCourse> topCourses) {
+		this.topCourses = topCourses;
+	}
+
+	public Boolean getIsparent() {
+		return isParent;
+	}
+
+	public void setIsparent(Boolean isParent) {
+		this.isParent = isParent;
+	}
+
+	public String getTopOrganizationId() {
+		return topOrganizationId;
+	}
+
+	public void setTopOrganizationId(String topOrganizationId) {
+		this.topOrganizationId = topOrganizationId;
+	}
+
+	public String getServerUrl() {
+		return serverUrl;
+	}
+
+	public void setServerUrl(String serverUrl) {
+		this.serverUrl = serverUrl;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/Organization.java.bak b/src/main/java/com/qxueyou/scc/org/model/Organization.java.bak
new file mode 100644
index 0000000..8c8fbae
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/Organization.java.bak
@@ -0,0 +1,554 @@
+package com.etraining.qxueyou.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.etraining.qxueyou.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+
+
+/**
+ * The persistent class for the organization database table.
+ * 
+ */
+@Entity
+@Table(name="organization")
+@NamedQuery(name="Organization.findAll", query="SELECT o FROM Organization o")
+public class Organization implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 用户类型(1,职业培训;2,学历教育;3,企业内训;4,活动沙龙;5,代理机构) */
+	public static final short ORG_TYPE_JOB_TRAINING = 1;
+	
+	public static final short ORG_TYPE_DEGREE_EDUCATION = 2;
+	
+	public static final short ORG_TYPE_ORG_CORPORATE_TRAINING = 3;
+	
+	public static final short ORG_TYPE_ACTIVITY_SALON = 4;
+	
+	public static final short ORG_TYPE_CLASS_AGENCY = 5;
+	/**  level (1:学校  2:系  3:学院)  */
+	public static final short ORG_LEVEL_SCHOOL = 1;
+	public static final short ORG_LEVEL_SYSTEM = 2;
+	public static final short ORG_LEVEL_COURTYARD = 3;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORGANIZATION_ID", unique=true, nullable=false, length=32)
+	private String organizationId;
+
+	@Column(name="ADDRESS",length=255)
+	private String address;
+
+	@Column(name="CITY",length=32)
+	private String city;
+	
+	@Column(name="PROVINCE",length=255)
+	private String province;
+
+	@Column(name="CODE_",length=32)
+	private String code;
+
+	@Column(name="CONTACTOR",length=64)
+	private String contactor;
+
+	@Column(name="ORG_CONTENT")
+	private String content;
+	
+	@Column(name="HIGH_CODE",length=255)
+	private String highCode;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="SHORT_NAME", length=150)
+	private String shortName;
+	
+	@Column(name="ORG_NAME", length=150)
+	private String name;
+
+	@Column(name="TEL", length=32)
+	private String tel;
+	
+	@Column(name="REFERRER_TEL", length=32)
+	private String referrerTel;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="LOGO_PATH", length=255)
+	private String logoPath;
+	
+	@Column(name="INDUSTRY", length=255)
+	private String industry;
+	
+	/**  举办者 */
+	@Column(name="ORG_HOST", length=100)
+	private String orgHost;
+	
+	/**  网址  */
+	@Column(name="WEBSITE", length=100)
+	private String website;
+	
+	/**  经度  */
+	@Column(name="LONGITUDE_X", length=100)
+	private String longitudeX;
+	
+	/**  纬度  */
+	@Column(name="LATITUDE_Y", length=100)
+	private String latitudeY;
+	
+	/**  类型:(1.职业培训 2.学历教育3.企业内训 4.活动沙龙5.代理机构)  */
+	@Column(name="ORG_TYPE", length=6)
+	private short type;
+	
+	@Column(name="LEVEL", length=1)
+	private short level;
+	
+	/** 是否试用标志 **/
+	@Column(name="TRAIL_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean traiFlag;
+	
+	@Column(name="PARENT_ORGANIZATION_ID", length=32)
+	private String parentOrganizationId;
+	
+	@Column(name="ORG_CODE", length=64)
+	private String orgCode;
+	
+	@Column(name="TOP_ORGANIZATION_ID", length=32)
+	private String topOrganizationId;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "org")
+	@JsonManagedReference
+	@JsonIgnore
+	private List<OrgClass> classes;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "org")
+	@JsonManagedReference
+	private List<OrgCollegeCourse> courses;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "topOrg")
+	@JsonManagedReference
+	private List<OrgCollegeCourse> topCourses;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgAdmin> admins;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgCharger> chargers;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgSalesman> salesmans;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonIgnore
+	private List<OrgTeacher> teachers;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
+	@JsonManagedReference
+	private List<OrgPhotoalbum> photoalbum;
+	
+	@ManyToOne(cascade={CascadeType.ALL})
+    @JoinColumn(name="PARENT_ORGANIZATION_ID",referencedColumnName="ORGANIZATION_ID",updatable=false,insertable=false)
+    @JsonIgnore
+    private Organization parent;
+ 
+    @OneToMany(mappedBy="parent")
+    @JsonIgnore
+    private List<Organization> children;
+    
+    @Transient
+    private Map<String,Object> classData;
+    
+    
+	
+	public List<OrgClass> getClasses() {
+		return classes;
+	}
+
+	public void setClasses(List<OrgClass> classes) {
+		this.classes = classes;
+	}
+
+	public Map<String, Object> getClassData() {
+		return classData;
+	}
+
+	public void setClassData(Map<String, Object> classData) {
+		this.classData = classData;
+	}
+
+	public Organization() {
+	}
+	
+	public List<OrgPhotoalbum> getPhotoalbum() {
+		return photoalbum;
+	}
+
+	public void setPhotoalbum(List<OrgPhotoalbum> photoalbum) {
+		this.photoalbum = photoalbum;
+	}
+
+	public String getOrganizationId() {
+		return this.organizationId;
+	}
+
+	public void setOrganizationId(String organizationId) {
+		this.organizationId = organizationId;
+	}
+
+	public String getAddress() {
+		return this.address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getCity() {
+		return this.city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getContactor() {
+		return this.contactor;
+	}
+
+	public void setContactor(String contactor) {
+		this.contactor = contactor;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getTel() {
+		return this.tel;
+	}
+
+	public void setTel(String tel) {
+		this.tel = tel;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<OrgCollegeCourse> getCourses() {
+		return courses;
+	}
+
+	public void setCourses(List<OrgCollegeCourse> courses) {
+		this.courses = courses;
+	}
+
+	public List<OrgAdmin> getAdmins() {
+		return admins;
+	}
+
+	public void setAdmins(List<OrgAdmin> admins) {
+		this.admins = admins;
+	}
+
+	public List<OrgCharger> getChargers() {
+		return chargers;
+	}
+
+	public void setChargers(List<OrgCharger> chargers) {
+		this.chargers = chargers;
+	}
+
+	public List<OrgSalesman> getSalesmans() {
+		return salesmans;
+	}
+
+	public void setSalesmans(List<OrgSalesman> salesmans) {
+		this.salesmans = salesmans;
+	}
+
+	public List<OrgTeacher> getTeachers() {
+		return teachers;
+	}
+
+	public void setTeachers(List<OrgTeacher> teachers) {
+		this.teachers = teachers;
+	}
+	
+
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public String getLogoPath() {
+		return logoPath;
+	}
+
+	public void setLogoPath(String logoPath) {
+		this.logoPath = logoPath;
+	}
+
+	public String getOrgHost() {
+		return orgHost;
+	}
+
+	public void setOrgHost(String orgHost) {
+		this.orgHost = orgHost;
+	}
+
+	public String getWebsite() {
+		return website;
+	}
+
+	public void setWebsite(String website) {
+		this.website = website;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public short getLevel() {
+		return level;
+	}
+
+	public void setLevel(short level) {
+		this.level = level;
+	}
+
+	public String getParentOrganizationId() {
+		return parentOrganizationId;
+	}
+
+	public void setParentOrganizationId(String parentOrganizationId) {
+		this.parentOrganizationId = parentOrganizationId;
+	}
+
+	public String getHighCode() {
+		return highCode;
+	}
+
+	public void setHighCode(String highCode) {
+		this.highCode = highCode;
+	}
+
+	public String getIndustry() {
+		return industry;
+	}
+
+	public void setIndustry(String industry) {
+		this.industry = industry;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public String getOrgCode() {
+		return orgCode;
+	}
+
+	public void setOrgCode(String orgCode) {
+		this.orgCode = orgCode;
+	}
+
+	public Organization getParent() {
+		return parent;
+	}
+
+	public void setParent(Organization parent) {
+		this.parent = parent;
+	}
+
+	public List<Organization> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<Organization> children) {
+		this.children = children;
+	}
+
+	public String getTopOrganizationId() {
+		return topOrganizationId;
+	}
+
+	public void setTopOrganizationId(String topOrganizationId) {
+		this.topOrganizationId = topOrganizationId;
+	}
+
+	public String getLongitudeX() {
+		return longitudeX;
+	}
+
+	public void setLongitudeX(String longitudeX) {
+		this.longitudeX = longitudeX;
+	}
+
+	public String getLatitudeY() {
+		return latitudeY;
+	}
+
+	public void setLatitudeY(String latitudeY) {
+		this.latitudeY = latitudeY;
+	}
+
+	public boolean getTraiFlag() {
+		return traiFlag;
+	}
+
+	public void setTraiFlag(boolean traiFlag) {
+		this.traiFlag = traiFlag;
+	}
+
+	public List<OrgCollegeCourse> getTopCourses() {
+		return topCourses;
+	}
+
+	public void setTopCourses(List<OrgCollegeCourse> topCourses) {
+		this.topCourses = topCourses;
+	}
+
+	public String getReferrerTel() {
+		return referrerTel;
+	}
+
+	public void setReferrerTel(String referrerTel) {
+		this.referrerTel = referrerTel;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java b/src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java
new file mode 100644
index 0000000..30cfdd4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java
@@ -0,0 +1,130 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 机构扩展字段
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="ORGANIZATION_EXTEND")
+@NamedQuery(name="OrganizationExtend.findAll", query="SELECT o FROM OrganizationExtend o")
+public class OrganizationExtend implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	/**  ID  */
+	@Id
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	@Column(name="HINT_DOWNAPP_FLAG", nullable=false)
+	private boolean hintDownappFlag;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+	
+	public boolean getHintDownappFlag() {
+		return hintDownappFlag;
+	}
+
+	public void setHintDownappFlag(boolean hintDownappFlag) {
+		this.hintDownappFlag = hintDownappFlag;
+	}
+	
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/OrganizationUnion.java b/src/main/java/com/qxueyou/scc/org/model/OrganizationUnion.java
new file mode 100644
index 0000000..22b6c9e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/OrganizationUnion.java
@@ -0,0 +1,140 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+
+/**
+ * The persistent class for the organization_union database table.
+ * 
+ */
+@Entity
+@Table(name="organization_union")
+@NamedQuery(name="OrganizationUnion.findAll", query="SELECT o FROM OrganizationUnion o")
+public class OrganizationUnion implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ORG_UNION_ID", unique=true, nullable=false, length=32)
+	private String orgUnionId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="FROM_ORG_ID", nullable=false, length=32)
+	private String fromOrgId;
+
+	@Column(name="TO_ORG_ID", nullable=false, length=32)
+	private String toOrgId;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public OrganizationUnion() {
+	}
+
+	public String getOrgUnionId() {
+		return this.orgUnionId;
+	}
+
+	public void setOrgUnionId(String orgUnionId) {
+		this.orgUnionId = orgUnionId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getFromOrgId() {
+		return this.fromOrgId;
+	}
+
+	public void setFromOrgId(String fromOrgId) {
+		this.fromOrgId = fromOrgId;
+	}
+
+	public String getToOrgId() {
+		return this.toOrgId;
+	}
+
+	public void setToOrgId(String toOrgId) {
+		this.toOrgId = toOrgId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarket.java b/src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarket.java
new file mode 100644
index 0000000..c13c5ad
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarket.java
@@ -0,0 +1,196 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+
+@Entity
+@Table(name="v_org_course_market")
+public class VOrgCourseMarket implements Serializable {
+	
+	private static final long serialVersionUID = -3808487318187993941L;
+
+	@Id
+	@Column(name="CLASS_ID", unique=true, nullable=false, length=32)
+	private String classId;
+
+	@Column(name="REWARD_AMOUNT", precision=10, scale=2)
+	private String rewardAmount;
+
+	@Column(name="ORG_NAME", length=150)
+	private String orgName;
+
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	@Column(name="NAME", length=255)
+	private String name;
+
+	@Column(name="COURSE_ID", length=32)
+	private String courseId;
+	
+	@Column(name="CITY", length=32)
+	private String city;
+	
+	@Transient
+	private String courseCategoryId;
+
+	@Column(name="COURSE_NAME", length=255)
+	private String courseName;
+
+	@Column(name="COVER_PAGE_URL", length=255)
+	private String coverPageUrl;
+	
+	@Column(name="STUDY_TIME", precision=10, scale=2)
+	private BigDecimal lecturePeroid;
+	
+	@Column(name="STUDENT_COUNT")
+	private int studentCount;
+	
+	@Column(name="DISPRICE", precision=10, scale=2)
+	private BigDecimal disPrice;
+
+	@Column(name="PRICE", precision=10, scale=2)
+	private BigDecimal price;
+	
+	@Column(name="CLICK_NUM")
+	private Integer clickNum;
+	
+	@Column(name="RECOMMEND")
+	private Boolean recommend;
+	
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getCourseCategoryId() {
+		return courseCategoryId;
+	}
+
+	public void setCourseCategoryId(String courseCategoryId) {
+		this.courseCategoryId = courseCategoryId;
+	}
+
+	public Integer getClickNum() {
+		return clickNum;
+	}
+
+	public void setClickNum(Integer clickNum) {
+		this.clickNum = clickNum;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getRewardAmount() {
+		return rewardAmount;
+	}
+
+	public void setRewardAmount(String rewardAmount) {
+		this.rewardAmount = rewardAmount;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCourseName() {
+		return courseName;
+	}
+
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	public BigDecimal getLecturePeroid() {
+		return lecturePeroid;
+	}
+
+	public void setLecturePeroid(BigDecimal lecturePeroid) {
+		this.lecturePeroid = lecturePeroid;
+	}
+
+	public int getStudentCount() {
+		return studentCount;
+	}
+
+	public void setStudentCount(int studentCount) {
+		this.studentCount = studentCount;
+	}
+
+	public BigDecimal getDisPrice() {
+		return disPrice;
+	}
+
+	public void setDisPrice(BigDecimal disprice) {
+		this.disPrice = disprice;
+	}
+
+	public BigDecimal getPrice() {
+		return price;
+	}
+
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	public Boolean getRecommend() {
+		return recommend;
+	}
+
+	public void setRecommend(Boolean recommend) {
+		this.recommend = recommend;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarketQuery.java b/src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarketQuery.java
new file mode 100644
index 0000000..455d928
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/model/VOrgCourseMarketQuery.java
@@ -0,0 +1,261 @@
+package com.qxueyou.scc.org.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+
+@Entity
+@Table(name="v_org_course_market_query")
+public class VOrgCourseMarketQuery implements Serializable {
+	
+	private static final long serialVersionUID = -3775960977633695226L;
+
+	@Id
+	@Column(name="CLASS_ID", unique=true, nullable=false, length=32)
+	private String classId;
+
+	@Column(name="REWARD_AMOUNT", precision=10, scale=2)
+	private BigDecimal rewardAmount;
+
+	@Column(name="ORG_NAME", length=150)
+	private String orgName;
+
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	@Column(name="NAME", length=255)
+	private String name;
+	
+	@Column(name="FULL_TEXT", length=4096)
+	private String fullText;
+
+	@Column(name="COURSE_ID", length=32)
+	private String courseId;
+	
+	@Column(name="CATEGORY_OR_COURSE_ID", length=32)
+	private String categoryOrCourseId;
+
+	@Column(name="COURSE_NAME", length=255)
+	private String courseName;
+
+	@Column(name="COVER_PAGE_URL", length=255)
+	private String coverPageUrl;
+	
+	@Column(name="STUDY_TIME", precision=10, scale=2)
+	private BigDecimal lecturePeroid;
+	
+	@Column(name="STUDENT_COUNT")
+	private int studentCount;
+	
+	@Column(name="DISPRICE", precision=10, scale=2)
+	private BigDecimal disPrice;
+
+	@Column(name="PRICE", precision=10, scale=2)
+	private BigDecimal price;
+	
+	@Column(name="CITY", length=32)
+	private String city;
+	
+	@Column(name="HAVE_LIVE")
+	private Boolean haveLive;
+	
+	@Column(name="HAVE_VIDEO")
+	private Boolean haveVideo;
+	
+	@Column(name="HAVE_HANDOUT")
+	private Boolean haveHandout;
+	
+	@Column(name="ONLINE")
+	private Boolean online;
+	
+	@Column(name="LAT", length=32)
+	private String lat;
+	
+	@Column(name="LNG", length=32)
+	private String lng;
+	
+	@Column(name="RECOMMEND")
+	private Boolean recommend;
+	
+	public String getLat() {
+		return lat;
+	}
+
+	public void setLat(String lat) {
+		this.lat = lat;
+	}
+
+	public String getLng() {
+		return lng;
+	}
+
+	public void setLng(String lng) {
+		this.lng = lng;
+	}
+
+	public Boolean getHaveLive() {
+		return haveLive;
+	}
+
+	public void setHaveLive(Boolean haveLive) {
+		this.haveLive = haveLive;
+	}
+
+	public Boolean getHaveVideo() {
+		return haveVideo;
+	}
+
+	public void setHaveVideo(Boolean haveVideo) {
+		this.haveVideo = haveVideo;
+	}
+
+	public Boolean getHaveHandout() {
+		return haveHandout;
+	}
+
+	public void setHaveHandout(Boolean haveHandout) {
+		this.haveHandout = haveHandout;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getCategoryOrCourseId() {
+		return categoryOrCourseId;
+	}
+
+	public void setCategoryOrCourseId(String categoryOrCourseId) {
+		this.categoryOrCourseId = categoryOrCourseId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public BigDecimal getRewardAmount() {
+		return rewardAmount;
+	}
+
+	public void setRewardAmount(BigDecimal rewardAmount) {
+		this.rewardAmount = rewardAmount;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCourseName() {
+		return courseName;
+	}
+
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	public BigDecimal getLecturePeroid() {
+		return lecturePeroid;
+	}
+
+	public void setLecturePeroid(BigDecimal lecturePeroid) {
+		this.lecturePeroid = lecturePeroid;
+	}
+
+	public int getStudentCount() {
+		return studentCount;
+	}
+
+	public void setStudentCount(int studentCount) {
+		this.studentCount = studentCount;
+	}
+
+	public BigDecimal getDisPrice() {
+		return disPrice;
+	}
+
+	public void setDisPrice(BigDecimal disPrice) {
+		this.disPrice = disPrice;
+	}
+
+	public BigDecimal getPrice() {
+		return price;
+	}
+
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	public Boolean getRecommend() {
+		return recommend;
+	}
+
+	public void setRecommend(Boolean recommend) {
+		this.recommend = recommend;
+	}
+
+	public String getFullText() {
+		return fullText;
+	}
+
+	public void setFullText(String fullText) {
+		this.fullText = fullText;
+	}
+
+	public Boolean getOnline() {
+		return online;
+	}
+
+	public void setOnline(Boolean online) {
+		this.online = online;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java b/src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java
new file mode 100644
index 0000000..a45040f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.org.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 班级管理服务层
+ * 
+ * @author chenjunliang
+ *
+ */
+public interface IOrgClassService {
+
+	/**
+	 * 新增班级
+	 * 
+	 * @param course
+	 * @return
+	 */
+	Result insertClass(String className, String classNumber, String startTime, String endTime, String courseIds,
+			boolean overTime, boolean quitClass, boolean displayAnswer, boolean repeatExercise, boolean forum);
+
+	/**
+	 * 获取班级列表
+	 * 
+	 * @return
+	 */
+	Result getClassLst(String keyword, Integer pageNum, Integer pageSize);
+
+	/**
+	 * 删除班级
+	 * 
+	 * @param classIds
+	 * @return
+	 */
+	Result deleteClass(String classIds);
+
+	/**
+	 * 查看班级
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	Result queryClass(String classId);
+
+	/**
+	 * 获取课程列表
+	 * 
+	 * @return
+	 */
+	Result getCourseLst();
+
+}
diff --git a/src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java b/src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java
new file mode 100644
index 0000000..9eb640d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java
@@ -0,0 +1,9 @@
+package com.qxueyou.scc.org.service;
+/**
+*外部讲师服务接口
+*@author junliang
+*@createTime 2017
+*/
+public interface IOrgClassTeacherService {
+
+}
diff --git a/src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java b/src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java
new file mode 100644
index 0000000..b14c686
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.org.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.org.model.OrgText;
+
+public interface IOrgTextService {
+	
+	/**
+	 * 插入OrgText - 单个
+	 * @param key
+	 * @param tableName
+	 * @param content
+	 * @return
+	 */
+	Result doInsertOrgText(String key,String tableName,String content);
+	
+	/**
+	 * 保存OrgText - 单个
+	 * @param key
+	 * @param tableName
+	 * @param content
+	 * @return
+	 */
+	Result doSaveOrgText(String key,String tableName,String content);
+	
+	/**
+	 * 保存OrgText - 多个
+	 * @param keys
+	 * @param tableName
+	 * @param content
+	 * @return
+	 */
+	Result doSaveOrgTexts(List<String> keys,String tableName,String content);
+	
+	/**
+	 * 获取OrgText - 单个
+	 * @param key
+	 * @param tableName
+	 * @return
+	 */
+	OrgText getOrgText(String key,String tableName);
+	
+	/**
+	 * 获取OrgText —— 多个(组长Map:key-key,value-OrgText)
+	 * @param keys
+	 * @param tableName
+	 * @return
+	 */
+	Map<String,Object> getOrgTextMap(List<String> keys,String tableName);
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java b/src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java
new file mode 100644
index 0000000..a8c2459
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java
@@ -0,0 +1,56 @@
+package com.qxueyou.scc.org.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.org.model.Organization;
+
+
+public interface IOrganizationService {
+
+    /**
+     * 获取区局机构ID
+     *
+     * @param orgId 机构id
+     */
+    String getTopOrgId(String orgId);
+
+    /**
+     * 根据orgId查询所有的父级组织列表
+     *
+     * @param orgId
+     * @return
+     */
+    List<Organization> queryAllParentOrganizations(String orgId);
+
+    /**
+     * 根据orgId获取所有子机构组织信息
+     *
+     * @param orgId
+     * @return
+     */
+    List<Organization> queryAllChildOrganizations(String orgId);
+
+    /**
+     * 查询用户所在的所有组织
+     *
+     * @param userId
+     * @return
+     */
+    List<Organization> queryUserOrganizaions(String userId);
+
+    /**
+     * 获取所有机构列表
+     *
+     * @return
+     */
+    List<Map<String, Object>> getOrgLst();
+    
+    /**
+     * 获取机构信息
+     *
+     * @return
+     */
+    Result getOrgInfo(String appCode, String orgId);
+}
diff --git a/src/main/java/com/qxueyou/scc/org/service/ITeacherService.java b/src/main/java/com/qxueyou/scc/org/service/ITeacherService.java
new file mode 100644
index 0000000..6843b43
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/ITeacherService.java
@@ -0,0 +1,19 @@
+package com.qxueyou.scc.org.service;
+
+import com.qxueyou.scc.org.model.OrgTeacher;
+
+/**
+ *  讲师接口
+ * @author 夏德虎
+ *
+ */
+public interface ITeacherService {
+	
+	/**
+	 * 读取讲师
+	 * @param userId 用户ID
+	 * @return 讲师对象,如果为空,返回null
+	 */
+	public abstract OrgTeacher getOrgTeacherByUserId(String userId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/org/service/impl/OrgClassService.java b/src/main/java/com/qxueyou/scc/org/service/impl/OrgClassService.java
new file mode 100644
index 0000000..59cc85c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/impl/OrgClassService.java
@@ -0,0 +1,148 @@
+//package com.qxueyou.scc.org.service.impl;
+//
+//import java.text.ParseException;
+//import java.text.SimpleDateFormat;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//import org.apache.commons.lang3.StringUtils;
+//import org.apache.logging.log4j.LogManager;
+//import org.apache.logging.log4j.Logger;
+//import org.springframework.stereotype.Service;
+//
+//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.ClientUtils;
+//import com.qxueyou.scc.base.util.CollectionUtils;
+//import com.qxueyou.scc.base.util.TraceUtils;
+//import com.qxueyou.scc.org.model.OrgClass;
+//import com.qxueyou.scc.org.model.OrgCourse;
+//import com.qxueyou.scc.org.service.IOrgClassService;
+//
+///**
+// * 班级服务类
+// * 
+// * @author chenjunliang
+// * 
+// */
+//@Service
+//public class OrgClassService extends CommonAppService implements IOrgClassService {
+//	private final Logger log = LogManager.getLogger("OrgClassService");
+//
+//	/**
+//	 * 添加班级
+//	 */
+//	@Override
+//	public Result insertClass(String className, String classNumber, String startTime, String endTime,
+//			String courseIds, boolean overTime, boolean quitClass, boolean displayAnswer, boolean repeatExercise,
+//			boolean forum) {
+//		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+//		Date startTime_ = null;
+//		Date endTime_ = null;
+//		try {
+//			startTime_ = simpleDateFormat.parse(startTime);
+//			if (!StringUtils.isBlank(endTime)) {
+//				endTime_ = simpleDateFormat.parse(endTime);
+//			}
+//		} catch (ParseException e) {
+//			log.error("日期转换失败", e);
+//		}
+//		String teacherId = ClientUtils.getUserId();
+//		OrgClass orgClass = new OrgClass();
+//		orgClass.setClassNumber(classNumber);
+//		orgClass.setTeacherId(teacherId);
+//		orgClass.setName(className);
+//		orgClass.setStartTime(startTime_);
+//		orgClass.setEndTime(endTime_);
+//		orgClass.setCourseId(courseIds);
+//		orgClass.setOverTime(overTime);
+//		orgClass.setQuitClass(quitClass);
+//		orgClass.setDisplayAnswer(displayAnswer);
+//		orgClass.setRepeatExercise(repeatExercise);
+//		orgClass.setForum(forum);
+//		orgClass.setTeacherId(ClientUtils.getUserId());
+//		TraceUtils.setCreateTrace(orgClass);
+//		save(orgClass);
+//
+//		return new Result(true, "success");
+//	}
+//
+//	/**
+//	 * 获取班级列表
+//	 */
+//	@SuppressWarnings("unused")
+//	@Override
+//	public Result getClassLst(String keyword, Integer pageNo, Integer currentPage) {
+//		String keyword_ = StringUtils.isEmpty(keyword) ? "" : keyword;
+//		String hql = "select classId as classId , name as name ,classNumber as classNumber ,studentCount as studentCount ,createTime as createTime"
+//				+ ", startTime as startTime ,courseId as courseId from OrgClass where deleteFlag is false and className like :keyword order by createTime desc";
+//		List<Map<String, Object>> orgClassLst = findListWithMapByHql(hql,
+//				CollectionUtils.newObjectMap("keyword", "%" + keyword_ + "%"), new Pager(pageNo, currentPage));
+//		int orgClassCount = this.orgClassCount(keyword_);
+//
+//		Map<String, Object> classCountMap = CollectionUtils.newObjectMap("orgClassCount", orgClassCount);// 显示查询的条数
+//		Map<String, Object> argsMap = null;
+//		for (Map<String, Object> map : orgClassLst) {
+//			String courseId = (String) map.get("courseId");
+//			String[] courseIds = courseId.split(",");
+//			argsMap = new HashMap<String, Object>(1);
+//			argsMap.put("courseIds", courseIds);
+//			List<OrgCourse> courseName = findByComplexHql(
+//					"select name as courseName from OrgCourse where noticeId in (:noticeIds)", argsMap,
+//					OrgCourse.class);
+//			Map<String, Object> courseNameMap = CollectionUtils.newObjectMap("courseName", courseName);
+//		}
+//
+//		return new Result(true, "success", null);
+//	}
+//
+//	/**
+//	 * 获取班级列表总条数
+//	 */
+//	private int orgClassCount(String keyword) {
+//		String hql = "select count(1) from OrgClass where deleteFlas is false and name like:keyword";
+//		int findCount = findCountByComplexHql(hql, CollectionUtils.newObjectMap("keyword", "%" + keyword + "%"));
+//
+//		return findCount;
+//	}
+//
+//	/**
+//	 * 删除班级
+//	 */
+//	@Override
+//	public Result deleteClass(String classIds) {
+//		if (StringUtils.isBlank(classIds)) {
+//			return new Result(false, "param is not null");
+//		}
+//		String[] arrClass = classIds.split(",");
+//
+//		// 1. 删除班级
+//		getCommonDAO().bulkUpdateInLoop("update OrgClass set deleteFlag = true where classId = ?", arrClass);
+//		// 2.删除班级对应的课程
+//		return null;
+//	}
+//
+//	/**
+//	 * 查看班级基本信息
+//	 */
+//	@SuppressWarnings("unused")
+//	@Override
+//	public Result queryClass(String classId) {
+//		String hql = "select o.name as name,o.classNumber as classNumber,o.studentCount as studentCount ,o.startTime as startTime , o.createTime as createTime"
+//				+ " ,o.overTime as overTime , o.quitClass as quitClass ,o.displayAnswer as displayAnswer,o.repeatExercise as repeatExercise, o.forum as forum "
+//				+ "u.name as teacherName  from OrgClass o,User u where o.deleteFlag is false and o.classId =:classId and u.userId = o.teacherId";
+//
+//		return null;
+//	}
+//
+//	@Override
+//	public Result getCourseLst() {
+//		String hql = "select courseId as courseId, name as courseName from  OrgCourse  where deleteFlag is false ";
+//		List<Map<String, Object>> courseName = findListWithMapByHql(hql, null);
+//		return new Result(true, "success", courseName);
+//	}
+//
+//}
diff --git a/src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java b/src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java
new file mode 100644
index 0000000..c18a09b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.org.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.org.service.IOrgClassTeacherService;
+
+/**
+*外部讲师服务层 
+*@author junliang
+*@createTime 2017
+*/
+@Service
+public class OrgClassTeacherService implements IOrgClassTeacherService {
+
+}
diff --git a/src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java b/src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java
new file mode 100644
index 0000000..cbe3bac
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java
@@ -0,0 +1,136 @@
+package com.qxueyou.scc.org.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+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.base.util.TraceUtils;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+
+@Service
+public class OrgTextService extends CommonAppService implements IOrgTextService {
+	
+	/**
+	 * 插入OrgText - 单个
+	 */
+	@Override
+	public Result doInsertOrgText(String key,String tableName,String content){
+		
+		if(StringUtils.isBlank(key)){
+			
+			return new Result(true);
+		}
+		
+		OrgText orgText = new OrgText();
+		orgText = new OrgText();
+		orgText.setKey(key);
+		orgText.setTableName(tableName);
+		orgText.setContent(content);
+		orgText.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(orgText);
+		save(orgText);
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("orgTextId",orgText.getOrgTextId()));
+	}
+	
+	/**
+	 * 保存OrgText - 单个
+	 */
+	@Override
+	public Result doSaveOrgText(String key,String tableName,String content) {
+
+		if(StringUtils.isBlank(key)){
+			return new Result(true);
+		}
+		
+		OrgText orgText = getOrgText(key, tableName);
+		if(orgText == null){// 新增
+			orgText = new OrgText();
+			orgText.setKey(key);
+			orgText.setTableName(tableName);
+			orgText.setContent(content);
+			orgText.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(orgText);
+			
+		}else{// 编辑
+			orgText.setContent(content);
+			TraceUtils.setUpdateTrace(orgText);
+		}
+		
+		return this.save(orgText);
+	}
+	
+	/**
+	 * 保存OrgText - 多个
+	 */
+	@Override
+	public Result doSaveOrgTexts(List<String> keys,String tableName,String content){
+		
+		if(keys.isEmpty()){
+			
+			return new Result(true);
+		}
+		
+		Map<String,Object> map = getOrgTextMap(keys, tableName);
+		
+		for (int i = 0; i < keys.size(); i++) {
+			OrgText orgText = (OrgText) map.get(keys.get(i));
+			if(orgText == null){// 新增
+				orgText = new OrgText();
+				orgText.setKey(keys.get(i));
+				orgText.setTableName(tableName);
+				orgText.setContent(content);
+				orgText.setDeleteFlag(false);
+				TraceUtils.setCreateTrace(orgText);
+			}else{// 编辑
+				orgText.setContent(content);
+				TraceUtils.setUpdateTrace(orgText);
+			}
+			save(orgText);
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 获取OrgText - 单个
+	 */
+	@Override
+	public OrgText getOrgText(String key,String tableName){
+
+		String hql = "from OrgText where key=? and tableName=? and deleteFlag is false";
+		return this.findUnique(hql, CollectionUtils.newList(key, tableName), OrgText.class);
+	}
+	
+	/**
+	 * 获取OrgText —— 多个(组长Map:key-key,value-OrgText)
+	 */
+	@Override
+	public Map<String,Object> getOrgTextMap(List<String> keys,String tableName){
+		
+		if(keys.isEmpty()){
+			
+			return null;
+		}
+		
+		Map<String, Object> orgTextMap = new HashMap<String, Object>();
+		orgTextMap.put("keys", keys);
+		orgTextMap.put("tableName", tableName);
+		
+		String hql = "from OrgText where key in (:keys) and tableName=:tableName and deleteFlag is false";
+		List<OrgText> orgTextLst = findByComplexHql(hql, orgTextMap, OrgText.class);
+		Map<String,Object> map = new HashMap<String,Object>(orgTextLst.size());
+		for (OrgText orgText : orgTextLst) {
+			map.put(orgText.getKey(), orgText);
+		}
+		
+		return map;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java b/src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java
new file mode 100644
index 0000000..1dc2179
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java
@@ -0,0 +1,175 @@
+package com.qxueyou.scc.org.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.org.model.OrgAppInfo;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.org.model.QOrgAppInfo;
+import com.qxueyou.scc.org.model.QOrgBanner;
+import com.qxueyou.scc.org.service.IOrganizationService;
+
+/**
+ * 组织结构服务类
+ *
+ * @author 何楷
+ */
+@Service
+public class OrganizationService extends CommonAppService implements IOrganizationService {
+
+    @SuppressWarnings("unused")
+    private final Logger log = LogManager.getLogger(OrganizationService.class);
+
+    /**
+     * 根据用户当前组织ID获取所在局的组织ID
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public String getTopOrgId(String orgId) {
+        String topOrgId = null;
+        String sql = null;
+
+        //查询所在单位的区局内设机构的orgID
+        sql = "select d.value" +
+                "  from sys_dictionary d " +
+                " where d.dic_key = 'TOP_ORG' " +
+                "   and d.value in " +
+                "       (select organization_id " +
+                "          from organization o " +
+                "         start with o.organization_id = ? " +
+                "        connect by prior o.parent_organization_id = o.organization_id)";
+
+        List<Object[]> queryResult = this.findBySql(sql, CollectionUtils.newList(orgId));
+
+        if (queryResult != null && !queryResult.isEmpty()) {
+            topOrgId = String.valueOf(queryResult.get(0));
+        }
+
+        return topOrgId;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public List<Organization> queryAllParentOrganizations(String orgId) {
+        String sql = "select organization_id, org_name, short_name, code_, org_code, parent_organization_id, "
+                + "	type_,level from organization o start with o.organization_id = ? connect  by     prior o.parent_organization_id = o.organization_id ";
+        List<Object[]> queryResult = this.findBySql(sql, CollectionUtils.newList(orgId));
+        List<Organization> parents = null;
+        Organization tempOrg = null;
+        if (queryResult != null && !queryResult.isEmpty()) {
+            parents = new ArrayList<Organization>(queryResult.size());
+            for (Object[] objs : queryResult) {
+                tempOrg = new Organization();
+                tempOrg.setOrganizationId(String.valueOf(objs[0]));
+                tempOrg.setName(String.valueOf(objs[1]));
+                tempOrg.setShortName(String.valueOf(objs[2]));
+                tempOrg.setCode(String.valueOf(objs[3]));
+                tempOrg.setOrgCode(String.valueOf(objs[4]));
+                tempOrg.setParentOrganizationId(String.valueOf(objs[5]));
+                tempOrg.setType(String.valueOf(objs[6]));
+                tempOrg.setLevel(Short.valueOf(String.valueOf(objs[7])));
+                parents.add(tempOrg);
+            }
+        }
+        return parents;
+
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public List<Organization> queryAllChildOrganizations(String orgId) {
+        String sql = "select organization_id, org_name, short_name, code_, org_code, parent_organization_id, "
+                + "	type_,level from organization o start with o.organization_id = ? connect  by    o.parent_organization_id = prior o.organization_id ";
+        List<Object[]> queryResult = this.findBySql(sql, CollectionUtils.newList(orgId));
+        List<Organization> childs = null;
+        Organization tempOrg = null;
+        if (queryResult != null && !queryResult.isEmpty()) {
+            childs = new ArrayList<Organization>(queryResult.size());
+            for (Object[] objs : queryResult) {
+                tempOrg = new Organization();
+                tempOrg.setOrganizationId(String.valueOf(objs[0]));
+                tempOrg.setName(String.valueOf(objs[1]));
+                tempOrg.setShortName(String.valueOf(objs[2]));
+                tempOrg.setCode(String.valueOf(objs[3]));
+                tempOrg.setOrgCode(String.valueOf(objs[4]));
+                tempOrg.setParentOrganizationId(String.valueOf(objs[5]));
+                tempOrg.setType(String.valueOf(objs[6]));
+                tempOrg.setLevel(Short.valueOf(String.valueOf(objs[7])));
+                childs.add(tempOrg);
+            }
+        }
+        return childs;
+    }
+
+    /**
+     * 查询用户所在的所有组织
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<Organization> queryUserOrganizaions(String userId) {
+        String hql = "select o from User u,Organization o  where u.organizationId = o.organizationId and u.userId =?";
+        List<Organization> lstOrgs = this.find(hql, CollectionUtils.newList(userId), Organization.class);
+        return lstOrgs;
+    }
+
+    @Override
+    public List<Map<String, Object>> getOrgLst() {
+        String hql = "select organizationId as orgId ,shortName as orgName,serverUrl as serverUrl from Organization where deleteFlag = 0 ";
+
+        return findListWithMapByHql(hql, CollectionUtils.newObjectMap());
+    }
+    
+    /**
+     * 获取机构信息
+     *
+     * @return
+     */
+    public Result getOrgInfo(String appCode, String orgId) {
+    	QOrgBanner qOrgBanner = QOrgBanner.orgBanner;
+    	QOrgAppInfo qOrgAppInfo = QOrgAppInfo.orgAppInfo;
+    	
+    	orgId = StringUtils.isEmpty(orgId)?ClientUtils.getOrgId():orgId;
+    	
+    	List<Map<String, Object>> lstBanner = this.getQueryFactory().selectFrom(qOrgBanner).where(qOrgBanner.deleteFlag.isFalse().and(qOrgBanner.orgId.eq(orgId))).
+				orderBy(qOrgBanner.photoOrder.asc()).fetch().stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(3);
+			    	map.put("bannerId", tuple.getBannerId());
+			    	map.put("content",  tuple.getContent());
+			    	map.put("imgPath",  tuple.getImgPath());
+			    	map.put("photoName",  tuple.getPhotoName());
+			    	map.put("title",  tuple.getTitle());
+			    	return map;
+			    }).collect(Collectors.toList());
+    	
+    	OrgText orgText = this.read(OrgText.class, orgId);
+    	Organization org = this.read(Organization.class, orgId);
+    	
+    	OrgAppInfo orgAppInfo = null;
+    	if(!StringUtils.isEmpty(appCode)) {
+    		orgAppInfo = this.getQueryFactory().selectFrom(qOrgAppInfo).where(qOrgAppInfo.orgId.eq(orgId)
+    				.and(qOrgAppInfo.appCode.eq(appCode)).and(qOrgAppInfo.deleteFlag.isFalse())).fetchFirst();
+    	}
+    	
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("orgName", org.getName(), "shortName", org.getShortName(), "tel",
+						org.getTel(), "orgLogo", orgAppInfo == null?org.getLogoPath():orgAppInfo.getLogoUrl(), "lstBanner", lstBanner, "content",
+						orgText == null ? "" : orgText.getContent(), "appInfo", orgAppInfo));
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java b/src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java
new file mode 100644
index 0000000..d01a5ef
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.org.util;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Transparency;
+import java.awt.geom.Ellipse2D;
+import java.awt.image.BufferedImage;
+
+
+/**
+ * 课程超市工具类
+ * @author xiadehu
+ *
+ */
+public class CourseMarketUtils {
+
+	/**
+	 * 
+	 * @param text
+	 * @param bgColor
+	 * @return
+	 */
+	public static BufferedImage drawPng(char letter,Color bgColor){
+		
+		//初始化画布
+		int width=120;
+		int height = 120;
+		BufferedImage image = new BufferedImage(width, height,     BufferedImage.TYPE_INT_RGB);
+		Graphics2D g2d = image.createGraphics();
+		image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
+		g2d.dispose();
+		g2d = image.createGraphics();
+		 
+		//背景
+		g2d.setColor(bgColor);
+		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		double centerX = width/2;
+		double centerY = height/2;
+		double radius = width/2;
+		Ellipse2D circle = new Ellipse2D.Double();
+		circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY+ radius);
+		g2d.fill(circle);
+		
+		//文字
+		g2d.setColor(new Color(255,255,255));
+		int textSize = 64;
+		
+		Font font = new Font("微软雅黑", Font.PLAIN, textSize);
+		g2d.setFont(font);
+		FontMetrics metrics = g2d.getFontMetrics();
+		
+		float x = (width - metrics.charWidth(letter)) / 2.0f;
+		float y = (height - metrics.getHeight()) / 2.0f + metrics.getAscent();
+		
+		g2d.drawString(String.valueOf(letter), x, y);
+		
+		//释放
+		g2d.dispose();
+		
+		return image;
+	}
+	
+	public static void main(String[] args){
+		System.out.println((String)null);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/action/ArticleController.java b/src/main/java/com/qxueyou/scc/school/action/ArticleController.java
new file mode 100644
index 0000000..53d2766
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/action/ArticleController.java
@@ -0,0 +1,318 @@
+package com.qxueyou.scc.school.action;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+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.QrCodeUtils;
+import com.qxueyou.scc.config.AliOssConfig;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.model.SchArticle;
+import com.qxueyou.scc.school.service.IArticleService;
+
+/**
+ * 文章控制器
+ * 
+ * @author zhiyong
+ * 
+ */
+@Controller
+@RequestMapping(value = "/school/article")
+@EnableConfigurationProperties(AliOssConfig.class)
+public class ArticleController {
+	
+	@Autowired
+	private IArticleService articleService;
+	
+	@Autowired
+	AliOssConfig aliOssConfig;
+	
+	
+	@Autowired
+	private CommonDAO commonDAO;
+	
+	@SuppressWarnings("unused")
+	@Autowired
+	private IOrgTextService textService;
+	
+	//-------------------------------------------------------------app接口-------------------------------------------------------------------------------------------
+	
+	/**
+	 * 文章列表
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	@RequestMapping(value = "articleList", method = RequestMethod.GET) 
+	public @ResponseBody Result articleList(Pager pager, String sortType, String sortField, String collegeCourseId, String subjectId) {
+		return this.articleService.articleList(pager, sortType, sortField, collegeCourseId, subjectId);
+	}
+	
+	/**
+	 * 更新观看进度
+	 * 
+	 * @param articleId
+	 * @return
+	 */
+	@RequestMapping(value = "doSubmitSchedule", method = RequestMethod.POST) 
+	public @ResponseBody Result doSubmitSchedule(String articleId, double compDegree) {
+		return this.articleService.doSubmitSchedule(articleId, compDegree);
+	}
+	
+	/**
+	 * 点赞
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	@RequestMapping(value = "doLike", method = RequestMethod.POST) 
+	public @ResponseBody Result doLike(String commentId) {
+		return this.articleService.doLike(commentId);
+	}
+	
+	/**
+	 * 新增评论
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	@RequestMapping(value = "commentList", method = RequestMethod.GET) 
+	public @ResponseBody Result commentList(String articleId) {
+		return this.articleService.commentList(articleId);
+	}
+	
+	/**
+	 * 新增评论
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	@RequestMapping(value = "addComment", method = RequestMethod.POST) 
+	public @ResponseBody Result addComment(String articleId, String content, String parentCommentId) {
+		return this.articleService.addComment(articleId, content, parentCommentId);
+	}
+	
+	/**
+	 * 删除评论
+	 * 
+	 * @param msgId
+	 * @param commentId
+	 * @return
+	 */
+	@RequestMapping(value = "deleteComment", method = RequestMethod.POST) 
+	public @ResponseBody Result deleteComment(String articleId, String commentId) {
+		return this.articleService.deleteComment(articleId, commentId);
+	}
+	
+	
+	/**
+	 *  班级列表数据
+	 * URL :/school/article/list
+	 * 
+	 * type 1:机构 2:班级
+	 * @return
+	 */
+	@RequestMapping(value = "/class/list", method = RequestMethod.GET)
+	public @ResponseBody List<SchArticle> getClassListData() {
+		
+		return articleService.queryClassListData();
+	}
+	
+	//-------------------------------------------------------------后台接口-------------------------------------------------------------------------------------------
+	/**
+	 * 获取机构讲义列表数据
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "orgData", method = RequestMethod.GET)
+	public @ResponseBody List<Map<String, Object>> queryArticleOrgLst(String collegeCourseId, String subjectId) {
+
+		return articleService.queryArticleOrgLst(collegeCourseId, subjectId);
+	}
+	
+	/**
+	 *  列表数据
+	 * URL :/school/article/list
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/info", method = RequestMethod.GET)
+	public @ResponseBody Result queryInfo(@RequestParam("articleId") String articleId) {
+		
+		return articleService.queryInfo(articleId);
+	}
+	
+	/**
+	 *  班级列表数据
+	 * URL :/school/article/class/addOrUpdate
+	 * 
+	 * type 1:机构 2:班级
+	 * @return
+	 */
+	@RequestMapping(value = "/class/addOrUpdate", method = RequestMethod.POST)
+	public @ResponseBody Result updateArticle(SchArticle article) {
+		
+		return articleService.updateArticle(article);
+	}
+	
+	/**
+	 *  机构列表数据
+	 * URL :/school/article/org/addOrUpdate
+	 * 
+	 * type 1:机构 2:班级
+	 * @return
+	 */
+	@RequestMapping(value = "/org/addOrUpdate", method = RequestMethod.POST)
+	public @ResponseBody Result updateOrgArticle(SchArticle article, String collegeCourseId) {
+		
+		return articleService.updateOrgArticle(article, collegeCourseId);
+	}
+	
+	/**
+	 *  删除班级数据
+	 * URL :/school/article/delete
+	 * 
+	 * type  班级
+	 * @return
+	 */
+	@RequestMapping(value = "/delete", method = RequestMethod.POST)
+	public @ResponseBody Result deleteArticle(@RequestParam("articleIds") String articleIds) {
+		
+		return articleService.deleteArticle(articleIds);
+	}
+	
+	
+	/**
+	 * 习题排序
+	 * 
+	 * @param key
+	 * @return
+	 */
+	@RequestMapping(value = "/order", method=RequestMethod.POST)
+    public @ResponseBody Result itemOrder(@RequestParam("ids[]") List<String> ids,  @RequestParam("index[]") List<Integer> index){
+		
+		return articleService.doitemOrder(ids, index);
+	}
+	
+	/**
+	 * 获取机构指定的机构和班级
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "articleOrgIds", method = RequestMethod.GET)
+	public @ResponseBody Result findAlreadyOrg(String articleId) {
+		Map<String, Object> map = new HashMap<String, Object>();
+		String hql = " select r from SchArticleReCourse c,Organization r" 
+				   + " where c.orgId = r.organizationId" 
+				   + " and c.deleteFlag is false" 
+				   + " and r.deleteFlag is false" 
+				   + " and c.articleId = ?";
+		List<Organization> lstOrg = commonDAO.find(hql, CollectionUtils.newList(articleId), Organization.class);
+		// StringBuffer sbName = new StringBuffer();
+		StringBuffer sbId = new StringBuffer();
+		List<String> classIds = new ArrayList<String>();
+		// String orgNames = "";
+		String orgIds = "";
+		for (Organization org : lstOrg) {
+			// sbName.append(org.getName() + ",");
+			sbId.append(org.getOrganizationId()).append(',');
+		}
+		if (classIds.isEmpty()) {
+			map.put("classIds", "");
+		} else {
+			hql = "select distinct classId from SchArticle where classId in (:classIds) and deleteFlag is false and originArticleId = :articleId";
+			Map<String, Object> args = new HashMap<String, Object>();
+
+			args.put("classIds", classIds.toArray());
+
+			args.put("articleId", articleId);
+			List<String> objs = commonDAO.findByComplexHql(hql, args, String.class);
+			map.put("classIds", StringUtils.join(objs.toArray(), ","));
+		}
+		/*
+		 * if (sbName.length() > 0) { orgNames = sbName.deleteCharAt(sbName.length() - 1).toString(); }
+		 */
+		if (sbId.length() > 0) {
+			orgIds = sbId.deleteCharAt(sbId.length() - 1).toString();
+		}
+		// map.put("orgNames", orgNames);
+		map.put("orgIds", orgIds);
+
+		Result result = new Result(true);
+		result.setData(map);
+		return result;
+	}
+	
+	/**
+	 * 删除讲义信息
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "deleteOrg", method = RequestMethod.POST)
+	@ResponseBody
+	public Result deleteOrg(String articleIds, Integer delAll, String orgIds[], String classIds[]) {
+
+		// 保存到服务器
+		Result result = articleService.deleteOrgArticleIds(articleIds.split(","), delAll, orgIds, classIds);
+
+		// 删除微商项目所有缓存
+//		new CacheUtils().deleteWBProjectCacheData();
+		
+		// 返回结果
+		return result;
+	}
+	
+	/**
+	 * 指定讲义数据到某个机构
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "orgArticle", method = RequestMethod.GET)
+	public @ResponseBody Result orgHandout(String articleId[], String orgId[], String classIds[], String collegeCourseId) {
+		
+		// 删除微商项目所有缓存
+//		new CacheUtils().deleteWBProjectCacheData();
+				
+		return articleService.insertAppointArticle(articleId, orgId, classIds, collegeCourseId);
+	}
+	
+	/**
+	 * 预览
+	 * 
+	 * @param articleId
+	 * @param request
+	 * @param response
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "/preview/qrcode/{articleId}", method = RequestMethod.GET)
+	public void qrcodeWeChat(@PathVariable String articleId, HttpServletRequest request, HttpServletResponse response)
+			throws IOException {
+
+		SchArticle article = commonDAO.read(SchArticle.class, articleId);
+		
+		QrCodeUtils.createQRCodeImgAndSend(aliOssConfig.getDomain()+article.getUrl(), 
+				response.getOutputStream(), true);
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/action/HandoutController.java b/src/main/java/com/qxueyou/scc/school/action/HandoutController.java
new file mode 100644
index 0000000..01da2ce
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/action/HandoutController.java
@@ -0,0 +1,1602 @@
+//package com.qxueyou.scc.school.action;
+//
+//import java.math.BigDecimal;
+//import java.math.BigInteger;
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//import javax.servlet.http.HttpServletResponse;
+//
+//import org.apache.commons.lang3.StringUtils;
+//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.Qualifier;
+//import org.springframework.stereotype.Controller;
+//import org.springframework.web.bind.annotation.PathVariable;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestMethod;
+//import org.springframework.web.bind.annotation.RequestParam;
+//import org.springframework.web.bind.annotation.ResponseBody;
+//import org.springframework.web.servlet.ModelAndView;
+//
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import com.qxueyou.scc.base.dao.CommonDAO;
+//import com.qxueyou.scc.base.model.Constants;
+//import com.qxueyou.scc.base.model.Pager;
+//import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.model.ResultJson;
+//import com.qxueyou.scc.base.model.UserInfoWrapper;
+//import com.qxueyou.scc.base.service.ICommonService;
+//import com.qxueyou.scc.base.util.ClientUtils;
+//import com.qxueyou.scc.base.util.CollectionUtils;
+//import com.qxueyou.scc.base.util.TraceUtils;
+//import com.qxueyou.scc.exercise.model.ExerciseGroup;
+//import com.qxueyou.scc.exercise.model.ExerciseReCourse;
+//import com.qxueyou.scc.exercise.service.IExerciseService;
+//import com.qxueyou.scc.org.model.OrgClass;
+//import com.qxueyou.scc.org.model.OrgCollegeCourse;
+//import com.qxueyou.scc.org.model.OrgText;
+//import com.qxueyou.scc.org.model.Organization;
+//import com.qxueyou.scc.org.service.IOrgTextService;
+//import com.qxueyou.scc.school.model.HandoutAnswerData;
+//import com.qxueyou.scc.school.model.HandoutAnswerResult;
+//import com.qxueyou.scc.school.model.SchClassSchedule;
+//import com.qxueyou.scc.school.model.SchClassSubject;
+//import com.qxueyou.scc.school.model.SchHandout;
+//import com.qxueyou.scc.school.model.SchHandoutPage;
+//import com.qxueyou.scc.school.model.SchHandoutPageFavor;
+//import com.qxueyou.scc.school.model.SchHandoutReCourse;
+//import com.qxueyou.scc.school.model.SchHandoutRecord;
+//import com.qxueyou.scc.school.model.SchHandoutStatistic;
+//import com.qxueyou.scc.school.model.SchSubject;
+//import com.qxueyou.scc.school.model.SchSubjectReCourse;
+//import com.qxueyou.scc.school.service.IDocdealMsgSenderService;
+//import com.qxueyou.scc.school.service.IHandoutService;
+//
+///**
+// * 讲义控制器
+// * 
+// * @author 德虎
+// * 
+// */
+//@Controller
+//@RequestMapping(value = "/school/HandOut")
+//public class HandoutController {
+//
+//	private final Logger log = LogManager.getLogger("HandoutController");
+//
+//	@Autowired
+//	private CommonDAO commonDAO;
+//
+//	@Autowired
+//	private IHandoutService service;
+//	
+//	@Autowired
+//	IOrgTextService orgTextService;
+//	
+//	@Autowired
+//	IDocdealMsgSenderService docdealMsgSenderService;
+//
+//
+//	
+//	@Autowired
+//	IExerciseService exerciseService;
+//
+//	private static final String initKey = "MDUIZSA5K7HSGB2XQVZR5EZ";
+//
+//	@Autowired
+//	@Qualifier("commonAppService")
+//	ICommonService commonService;
+//	
+//	/**
+//	 * APP2.0: 获取讲义信息 URL :/school/HandOut/handoutInfo
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutInfo", method = RequestMethod.GET)
+//	public @ResponseBody ResultJson handoutInfo(@RequestParam("handoutId") String handoutId) {
+//		
+//		SchHandout schHandout = commonDAO.read(SchHandout.class, handoutId);
+//		
+//		return new ResultJson(true,schHandout.getFullPath(), CollectionUtils.newObjectMap("subjectId", schHandout.getSubjectId(),
+//				"subjectName", schHandout.getSubjectName(), "fullPath", schHandout.getFullPath(), "coverPageUrl", schHandout.getCoverPageUrl())); 
+//	}
+//	
+//	/**
+//	 * APP2.0: 获取讲义目录 URL :/school/HandOut/handoutDirectory
+//	 * 
+//	 * @param limit
+//	 *            每页显示
+//	 * @param page
+//	 *            页码
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutDirectory", method = RequestMethod.GET)
+//	public @ResponseBody List<Map<String,Object>> getHandoutDirectory(@RequestParam("limit") int limit, @RequestParam("page") int page) {
+//		Pager pager = new Pager();
+//		pager.setPageNum(page);
+//		pager.setPageSize(limit);
+//		List<Map<String,Object>> lst = new ArrayList<Map<String,Object>>();
+//		
+//		//查询课程  分页
+//		String hql = " from SchClassSubject where classId = ? and deleteFlag is false order by createTime";
+//		List<SchClassSubject> lstSub = commonDAO.findList(hql,pager, CollectionUtils.newList(ClientUtils.getClassId()), SchClassSubject.class);
+//		
+//		List<String> subjectIds = new ArrayList<String>();
+//		for (SchClassSubject schClassSubject : lstSub) {
+//			subjectIds.add(schClassSubject.getClassSubjectId());
+//		}
+//		
+//		if(subjectIds.isEmpty()){
+//			return lst;
+//		}
+//		//根据课程ID查询讲义
+//		hql = " from SchHandout where subjectId in (:subjectIds) and deleteFlag is false and status = :status and classId =:classId order by subjectId,orderNum ";
+//		Map<String,Object> args = new HashMap<String, Object>();
+//		args.put("subjectIds", subjectIds.toArray());
+//		args.put("status", SchHandout.STATUS_ISSUED);
+//		args.put("classId", ClientUtils.getClassId());
+//		List<SchHandout> handouts = commonDAO.findByComplexHql(hql, args, SchHandout.class);
+//		
+//		for (SchHandout schHandout : handouts) {
+//			Map<String,Object> handoutMap = new HashMap<String, Object>();
+//			handoutMap.put("handoutId", schHandout.getHandoutId());
+//			handoutMap.put("name", schHandout.getName());
+//			handoutMap.put("subjectName", schHandout.getSubjectName());
+//			handoutMap.put("subjectId", schHandout.getSubjectId());
+//			handoutMap.put("coverPageUrl", schHandout.getCoverPageUrl());
+//			handoutMap.put("pageCount", schHandout.getPageCount());
+//			handoutMap.put("playCount", schHandout.getPlayCount());
+//			lst.add(handoutMap);
+//		}
+//		return lst;
+//	}
+//
+//	/**
+//	 * APP2.0: 获取当前用户讲义列表数据 URL :/school/HandOut/handoutListNew
+//	 * 
+//	 * @param limit
+//	 *            每页显示
+//	 * @param page
+//	 *            页码
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutListNew", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandout> getHandoutList(@RequestParam("limit") int limit, @RequestParam("page") int page, String classScheduleId, String timeSort, String timesSort, String lookFlag) {
+//		
+//		// 分页
+//		Pager pager = new Pager();
+//		pager.setPageNum(page);
+//		pager.setPageSize(limit);
+//
+//		// 过滤条件
+//		List<Object> args = new ArrayList<Object>(4);
+//		
+//		String hql = generateSql(args,classScheduleId,lookFlag,timeSort,timesSort);
+//		
+//		List<SchHandout> lstHandout = this.commonDAO.findList(hql, pager, args, SchHandout.class);
+//
+//		List<String> handoutIds = new ArrayList<String>();
+//		for (SchHandout handout : lstHandout) {
+//			handout.setCompDegree(BigDecimal.ZERO);
+//			handoutIds.add(handout.getHandoutId());
+//		}
+//
+//		if (handoutIds.isEmpty()) {
+//			return null == lstHandout ? new ArrayList<SchHandout>() : lstHandout;
+//		}
+//
+//		generateCompree(handoutIds, lstHandout);
+//
+//		return lstHandout;
+//	}
+//	
+//	/**
+//	 * 生成hql
+//	 * @param args
+//	 * @param classScheduleId
+//	 * @param lookFlag
+//	 * @param timeSort0
+//	 * @param timesSort
+//	 * @return
+//	 */
+//	private String generateSql(List<Object> args,String classScheduleId,String lookFlag,String timeSort,String timesSort) {
+//		String timeSort0 = timeSort;
+//		// 查询讲义信息 只查询已发布的
+//		String hql = "select h " 
+//		+ " from SchClassSubject l,SchHandout h  " 
+//		+ " where l.deleteFlag is false and h.deleteFlag is false and l.classSubjectId=h.subjectId and h.status=1 " 
+//		+ " and h.classId=? " ;
+//		args.add(ClientUtils.getClassId());
+//
+//		// 课程过滤
+//		if (StringUtils.isNotBlank(classScheduleId) && !"all".equals(classScheduleId)) {
+//			args.add(classScheduleId);
+//			hql = hql.concat(" and l.classSubjectId = ? ");
+//		}
+//
+//		// 查看过滤
+//		if (StringUtils.isNotBlank(lookFlag) && "true".equals(lookFlag)) {
+//			args.add(ClientUtils.getUserId());
+//			hql = hql.concat(" and h.handoutId in (select s.handoutId from SchHandoutStatistic s where s.deleteFlag is false and s.userId = ? and s.handoutId = h.handoutId ) ");
+//		} else if (StringUtils.isNotBlank(lookFlag) && "false".equals(lookFlag)) {
+//			args.add(ClientUtils.getUserId());
+//			hql = hql.concat(" and h.handoutId not in (select s.handoutId from SchHandoutStatistic s where s.deleteFlag is false and s.userId = ? and s.handoutId = h.handoutId ) ");
+//		}
+//
+//		// 排序条件,拼HQL
+//		boolean flag0 = StringUtils.isNotBlank(timeSort0) && !"desc".equalsIgnoreCase(timeSort0) && !"asc".equalsIgnoreCase(timeSort0);
+//		boolean flag1 = StringUtils.isNotBlank(timesSort) && !"desc".equalsIgnoreCase(timesSort) && !"asc".equalsIgnoreCase(timesSort);
+//		if (flag0||flag1) {
+//			timeSort0 = null;
+//		}
+//
+//		if (StringUtils.isNotBlank(timeSort0) && StringUtils.isBlank(timesSort)) { // 上传时间排序
+//			hql = hql.concat(" order by h.createTime  " + timeSort0);
+//		} else if (StringUtils.isBlank(timeSort0) && StringUtils.isNotBlank(timesSort)) { // 播放次数排序
+//			hql = hql.concat(" order by h.playCount  " + timesSort);
+//		} else if (StringUtils.isNotBlank(timeSort0) && StringUtils.isNotBlank(timesSort)) { // 上传时间排序 、播放次数排序
+//			hql = hql.concat(" order by h.createTime  " + timeSort0 + ", h.playCount " + timesSort);
+//		} else {
+//			hql = hql.concat(" order by h.orderNum, h.createTime asc");
+//		}
+//		
+//		return hql;
+//	}
+//
+//	/**
+//	 * 讲义观看度
+//	 * 
+//	 * @param handoutIds
+//	 * @param lstHandout
+//	 */
+//	private void generateCompree(List<String> handoutIds, List<SchHandout> lstHandout) {
+//		Map<String, Object> argsMap = new HashMap<String, Object>();
+//		String hql = " from SchHandoutStatistic where handoutId in (:handoutIds) and deleteFlag is false and userId = :userId and classId = :classId";
+//		argsMap.put("handoutIds", handoutIds.toArray());
+//		argsMap.put("userId", ClientUtils.getUserId());
+//		argsMap.put("classId", ClientUtils.getClassId());
+//		List<SchHandoutStatistic> handoutStatistic = commonDAO.findByComplexHql(hql, argsMap, SchHandoutStatistic.class);
+//		Map<String, Object> map = new HashMap<String, Object>();
+//		for (SchHandoutStatistic schHandoutStatistic : handoutStatistic) {
+//			map.put(ClientUtils.getUserId() + schHandoutStatistic.getHandoutId(), schHandoutStatistic.getCompDegree());
+//		}
+//
+//		for (SchHandout handout : lstHandout) {
+//
+//			Object obj = map.get(ClientUtils.getUserId() + handout.getHandoutId());
+//			if (obj != null) {
+//				BigDecimal b = (BigDecimal) obj;
+//				handout.setCompDegree(b.multiply(new BigDecimal(100)));
+//			}
+//
+//		}
+//	}
+//
+//	/**
+//	 * APP2.0: 课程视频:获取当前班级有讲义的全部课程 URL: /school/HandOut/scheduleList
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "scheduleList", method = RequestMethod.GET)
+//	public @ResponseBody List<Map<String, String>> scheduleList() {
+//
+//		String hql = "select distinct l from SchHandout s,SchClassSubject l " + " where s.classId=? " + " and s.subjectId = l.classSubjectId " + " and s.deleteFlag is false " + " and l.deleteFlag is false " + " and s.status = ? ";
+//
+//		List<SchClassSubject> classSubjects = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId(), SchHandout.STATUS_ISSUED), SchClassSubject.class);
+//
+//		List<Map<String, String>> scheduleLstMap = new ArrayList<Map<String, String>>();
+//		Map<String, String> map = new HashMap<String, String>(2);
+//		map.put("classScheduleId", "all");
+//		map.put("name", "全部课程");
+//		scheduleLstMap.add(map);
+//
+//		for (SchClassSubject classSubject : classSubjects) {
+//			map = new HashMap<String, String>(2);
+//			map.put("classScheduleId", classSubject.getClassSubjectId());
+//			map.put("name", classSubject.getName());
+//			scheduleLstMap.add(map);
+//		}
+//
+//		return scheduleLstMap;
+//	}
+//
+//	/**
+//	 * APP2.0: 获取当前用户收藏讲义列表数据 URL :/school/HandOut/handoutFavorListNew
+//	 * 
+//	 * @param iLimit
+//	 *            每页显示
+//	 * @param iPage
+//	 *            页码
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutFavorListNew", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandout> getHandoutFavorList(@RequestParam("limit") int limit, @RequestParam("page") int page) {
+//
+//		// 分页
+//		Pager pager = new Pager();
+//		pager.setPageNum(1);
+//		pager.setPageSize(limit);
+//
+//		// 查询讲义信息 只查询已发布的
+//		String hql = "select DISTINCT h," 
+//				//+ "(select p.imgPath from SchHandoutPage p where h.handoutId=p.handoutId and p.deleteFlag is false and p.pageOrder=?),\n" 
+//				+ "(select count(1) from SchHandoutPageFavor a where a.handoutId=h.handoutId and a.deleteFlag is false and a.userId=? and a.classId=?)\n" 
+//				+ "from SchHandout h, SchHandoutPageFavor f\n" 
+//				+ "where h.handoutId=f.handoutId\n" 
+//				+ "and h.deleteFlag is false\n" 
+//				+ "and f.deleteFlag is false\n" 
+//				+ "and f.userId=?\n" 
+//				+ "and h.status=1\n" 
+//				+ "and h.classId=? order by f.updateTime desc";
+//
+//		// 下拉刷新分页
+//		List<SchHandout> lstHandout = service.schHandoutList(1, hql, pager, CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getClassId(), ClientUtils.getUserId(), ClientUtils.getClassId()));
+//
+//
+//		return lstHandout;
+//	}
+//
+//	/**
+//	 * APP2.0: 提交讲义收藏的记录到DB URL :/school/HandOut/submitHandoutFavorNew 请求参数 :records 具体封装方法和练习模块类似,json对象转成字符串,后台接收值java类:HandoutAnswerData<br>
+//	 * 
+//	 * <pre>
+//	 * {
+//	 * 	"id"            : "" 必须传  不能为空,随便赋值
+//	 * 	"handoutId"     : "" 必须传  当前讲义ID
+//	 * 	"handoutPageId" : "" 必须传  当前页讲义ID
+//	 * 	"favor" 		: "" 必须传  收藏or取消收藏  true:收藏     false:取消收藏
+//	 * 	"userId" 		: "" 必须传  当前用户ID
+//	 * 	"classId" 		: "" 必须传  当前班级ID
+//	 * }
+//	 * </pre>
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "submitHandoutFavorNew", method = RequestMethod.GET)
+//	public @ResponseBody Result doSubmitExerFaultList(@RequestParam(value = "records") String records) {
+//		Result result = new Result(false);
+//		String classId = ClientUtils.getClassId();
+//		String userId = ClientUtils.getUserId();
+//		try {
+//			ObjectMapper mapper = new ObjectMapper();
+//			// 装换json到对象
+//			HandoutAnswerResult recordResult = mapper.readValue(records, HandoutAnswerResult.class);
+//			List<HandoutAnswerData> lstRecords = recordResult.getRecords();
+//
+//			if (lstRecords.isEmpty()) {
+//				return result;
+//			}
+//
+//			List<SchHandoutPageFavor> lstFavor = new ArrayList<SchHandoutPageFavor>();
+//			SchHandoutPageFavor favor = null;
+//
+//			// 查询此用户是否有收藏记录
+//			String hql = "from SchHandoutPageFavor where userId=? and classId=? ";
+//			List<SchHandoutPageFavor> lstExistfavor = commonDAO.find(hql, CollectionUtils.newList(userId, classId), SchHandoutPageFavor.class);
+//			Map<String, SchHandoutPageFavor> favorMap = new HashMap<String, SchHandoutPageFavor>();
+//			for (SchHandoutPageFavor existfavor : lstExistfavor) {
+//				favorMap.put(existfavor.getHandoutPageId(), existfavor);
+//			}
+//
+//			// 循环每一条记录
+//			for (HandoutAnswerData record : lstRecords) {
+//				if (record.getFavor()) {// 添加收藏记录
+//					favor = favorMap.get(record.getHandoutPageId());
+//					if (favor == null) {
+//						favor = new SchHandoutPageFavor();
+//						favor.setHandoutId(record.getHandoutId());
+//						favor.setHandoutPageId(record.getHandoutPageId());
+//						favor.setUserId(userId);
+//						favor.setClassId(classId);
+//						favor.setDeleteFlag(false);
+//						TraceUtils.setCreateTrace(favor);
+//					} else {
+//						if (favor.getDeleteFlag()) {
+//							favor.setDeleteFlag(false);
+//						}
+//						TraceUtils.setUpdateTrace(favor);
+//					}
+//
+//				} else {// 删除收藏
+//					favor = favorMap.get(record.getHandoutPageId());
+//					if (favor == null) {
+//						continue;
+//					}
+//					favor.setDeleteFlag(true);
+//					TraceUtils.setUpdateTrace(favor);
+//				}
+//				lstFavor.add(favor);
+//			}
+//
+//			// 批量操作记录
+//			result = service.doOperHandoutFavorDataBatch(lstFavor);
+//
+//		} catch (Exception e) {
+//			log.error(e);
+//		}
+//		return result;
+//	}
+//
+//	/**
+//	 * 
+//	 * @param handoutId
+//	 *            讲义ID
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutPageListNew/{handoutId}", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandoutPage> getHandoutPageList(@PathVariable String handoutId) {
+//		// 查询讲义信息
+//		String hql = "from SchHandoutPage where deleteFlag is false and handoutId=? order by pageOrder ";
+//
+//		List<Object> args = new ArrayList<Object>(2);
+//		args.add(handoutId);
+//
+//		List<SchHandoutPage> lstHandout = commonDAO.find(hql, args, SchHandoutPage.class);
+//
+//		// 收藏记录
+//		List<SchHandoutPage> lstFavorHandout = this.getHandoutFavorHistoryList(handoutId);
+//
+//		List<String> favorList = new ArrayList<String>();
+//		if (!lstFavorHandout.isEmpty()) {
+//			for (SchHandoutPage favor : lstFavorHandout) {
+//				favorList.add(favor.getHandoutPageId());
+//			}
+//		}
+//
+//		if (!lstHandout.isEmpty() && !favorList.isEmpty()) {
+//			for (SchHandoutPage page : lstHandout) {
+//				page.setFavorFlag(favorList.contains(page.getHandoutPageId()));
+//			}
+//		}
+//
+//		return lstHandout;
+//	}
+//
+//	/**
+//	 * APP2.0: 获取讲义分页明细 URL :/school/HandOut/handoutPages/{handoutId} 图片路径保护
+//	 * 
+//	 * @param handoutId
+//	 *            讲义ID
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutPages/{handoutId}", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandoutPage> queryHandoutPageList(@PathVariable String handoutId) {
+//		// 查询讲义信息
+//		String hql = "from SchHandoutPage where deleteFlag is false and handoutId=? order by pageOrder ";
+//
+//		List<Object> args = new ArrayList<Object>(2);
+//		args.add(handoutId);
+//
+//		List<SchHandoutPage> lstHandout = commonDAO.find(hql, args, SchHandoutPage.class);
+//
+//		// 收藏记录
+//		List<SchHandoutPage> lstFavorHandout = this.getHandoutFavorHistoryList(handoutId);
+//
+//		List<String> favorList = new ArrayList<String>(lstFavorHandout.size());
+//		if (!lstFavorHandout.isEmpty()) {
+//			for (SchHandoutPage favor : lstFavorHandout) {
+//				favorList.add(favor.getHandoutPageId());
+//			}
+//		}
+//
+//		for (SchHandoutPage page : lstHandout) {
+//			page.setImgPath(null);// 控制前端看不到此字段 隐私保护
+//			page.setFavorFlag(favorList.contains(page.getHandoutPageId()));
+//		}
+//
+//		return lstHandout;
+//	}
+//
+//	/**
+//	 * APP2.0: 获取讲义分页明细 URL :/school/HandOut/handoutPage 图片路径保护
+//	 * 
+//	 * @param handoutId
+//	 *            讲义ID
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutPage", method = RequestMethod.GET)
+//	public String goHandoutPage(@RequestParam("handoutId") String handoutId, @RequestParam("pageOrder") int pageOrder, HttpServletResponse response) {
+////		String imgPath = cacheService.get("handout/imgpath/" + handoutId + pageOrder, String.class);
+//		String imgPath = null;
+//
+//		if (imgPath == null) {
+//
+//			String hql = "from SchHandoutPage where deleteFlag is false and handoutId=? and pageOrder=? ";
+//
+//			SchHandoutPage page = commonDAO.findUnique(hql, CollectionUtils.newList(handoutId, pageOrder), SchHandoutPage.class);
+//
+//			if (page == null) {
+//				return null;
+//			}
+//			imgPath = page.getImgPath();
+//			// 放到缓存10分钟
+////			cacheService.set("handout/imgpath/" + handoutId + pageOrder, 60 * 10, imgPath);
+//		}
+//		
+//		return "redirect:" +imgPath;
+//
+//	}
+//
+//	/**
+//	 * APP2.0: 点击某一个收藏讲义,获取收藏的讲义明细 URL :/school/HandOut/handoutFavorPages/{handoutId} 图片路径保护
+//	 * 
+//	 * @param handoutId
+//	 *            讲义ID
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutFavorPages/{handoutId}", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandoutPage> getHandoutFavorPages(@PathVariable String handoutId) {
+//
+//		List<SchHandoutPage> lstHandout = this.getHandoutFavorHistoryList(handoutId);
+//
+//		for (SchHandoutPage page : lstHandout) {
+//			page.setImgPath(null);
+//			page.setFavorFlag(true);
+//		}
+//
+//		return lstHandout;
+//	}
+//
+//	/**
+//	 * APP2.0: 点击某一个收藏讲义,获取收藏的讲义明细 URL :/school/HandOut/handoutFavorPageListNew/{handoutId}
+//	 * 
+//	 * @param handoutId
+//	 *            讲义ID
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutFavorPageListNew/{handoutId}", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandoutPage> getHandoutFavorPageList(@PathVariable String handoutId) {
+//
+//		List<SchHandoutPage> lstHandout = this.getHandoutFavorHistoryList(handoutId);
+//
+//		for (SchHandoutPage page : lstHandout) {
+//			page.setFavorFlag(true);
+//		}
+//
+//		return lstHandout;
+//	}
+//
+//	/**
+//	 * APP2.0: 查询讲义,模糊匹配讲义名或者课程名 URL :/school/HandOut/queryHandout
+//	 * 
+//	 * @param keyWord
+//	 *            查询关键字
+//	 * @return
+//	 */
+//	@RequestMapping(value = "queryHandout", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandout> queryHandoutByKeyWord(String keyWord) {
+//
+//		return service.queryHandoutByKeyWord(keyWord);
+//
+//	}
+//	
+//	/**
+//	 * APP2.0: 提交播放某个讲义 URL: /school/HandOut/playHandoutBefore
+//	 * 
+//	 * @param handoutId
+//	 *            讲义ID
+//	 * @return result true为成功,false时,msg为错误描述
+//	 */
+//	@RequestMapping(value = "playHandoutBefore", method = RequestMethod.POST)
+//	public @ResponseBody Result playHandoutBefore(String handoutId) {
+//
+//		return service.updatePlayCount(handoutId);
+//
+//	}
+//	
+//	/**
+//	 * APP2.0: 播放完某个讲义 URL: /school/HandOut/playHandoutNew
+//	 * @return result true为成功,false时,msg为错误描述
+//	 */
+//	@RequestMapping(value = "playHandoutNew", method = RequestMethod.POST)
+//	public @ResponseBody Result submitPlayHandoutNew(SchHandoutRecord record, String pageNums) {
+//
+//		if (StringUtils.isBlank(record.getHandoutId()) || StringUtils.isBlank(pageNums)) {
+//			return new Result(false, "提交参数不正确");
+//		}
+//		return service.insertplayRecordNew(record, pageNums);
+//
+//	}
+//
+//	/**
+//	 * APP2.0: (老版本)播放完某个讲义 URL: /school/HandOut/playHandout
+//	 * @return result true为成功,false时,msg为错误描述
+//	 */
+//	@RequestMapping(value = "playHandout", method = RequestMethod.POST)
+//	public @ResponseBody Result submitPlayHandout(SchHandoutRecord record, String pageNums) {
+//
+//		if (StringUtils.isBlank(record.getHandoutId()) || StringUtils.isBlank(pageNums)) {
+//			return new Result(false, "提交参数不正确");
+//		}
+//		return service.insertplayRecord(record, pageNums);
+//
+//	}
+//
+//	/**
+//	 * APP2.0: 测试添加数据 无实际用途 URL: /school/HandOut/playHandout1
+//	 * 
+//	 * @param videoId
+//	 *            一个或多个视频videoId,多个时用“,”拼接
+//	 * @return result true为成功,false时,msg为错误描述
+//	 */
+//	@RequestMapping(value = "playHandout1", method = RequestMethod.GET)
+//	public @ResponseBody Result submitPlayVideo1() {
+//
+//		SchHandoutRecord record = new SchHandoutRecord();
+//
+//		record.setHandoutId("297e741653cb61dd0153cb7fb626002f");
+//		record.setBeginTime(new Date());
+//		record.setEndTime(new Date());
+//		record.setType(1);
+//		String pageNums = "1,2,3,4,5,6,7,8,9,10,11,12";
+//		return service.insertplayRecordNew(record, pageNums);
+//
+//	}
+//
+//	/******************************************************************* 上面为App接口,下面为后台接口 **************************/
+//
+//	/**
+//	 * 讲义维护
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(method = RequestMethod.GET)
+//	public ModelAndView listPage() {
+//
+//		ModelAndView modelAndView = new ModelAndView("/school/HandOut");
+//
+//		return modelAndView;
+//	}
+//
+//	/**
+//	 * 机构讲义维护
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "/org", method = RequestMethod.GET)
+//	public ModelAndView orgPage() {
+//
+//		ModelAndView modelAndView = new ModelAndView("/school/OrgHandOut");
+//
+//		return modelAndView;
+//	}
+//
+//	/**
+//	 * 获取讲义列表数据
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "data", method = RequestMethod.GET)
+//	public @ResponseBody List<Map<String, Object>> data(String tid) {
+//
+//		return service.handoutLst(tid);
+//	}
+//
+//	/**
+//	 * 获取机构讲义列表数据
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "orgData", method = RequestMethod.GET)
+//	public @ResponseBody List<Map<String, Object>> orgData(String collegeCourseId, String subjectId) {
+//
+//		return service.handoutOrgLst(collegeCourseId, subjectId);
+//	}
+//
+//	/**
+//	 * 获取机构指定的机构和班级
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutOrgIds", method = RequestMethod.GET)
+//	public @ResponseBody ResultJson findAlreadyOrg(String handoutId) {
+//		Map<String, Object> map = new HashMap<String, Object>();
+//		String hql = " select r from SchHandoutReCourse c,Organization r" 
+//				   + " where c.orgId = r.organizationId" 
+//				   + " and c.deleteFlag is false" 
+//				   + " and r.deleteFlag is false" 
+//				   + " and c.handoutId = ?";
+//		List<Organization> lstOrg = commonDAO.find(hql, CollectionUtils.newList(handoutId), Organization.class);
+//		// StringBuffer sbName = new StringBuffer();
+//		StringBuffer sbId = new StringBuffer();
+//		List<String> classIds = new ArrayList<String>();
+//		// String orgNames = "";
+//		String orgIds = "";
+//		for (Organization org : lstOrg) {
+//			// sbName.append(org.getName() + ",");
+//			sbId.append(org.getOrganizationId()).append(',');
+//			List<OrgClass> classes = org.getClasses();
+//			for (OrgClass orgClass : classes) {
+//				classIds.add(orgClass.getClassId());
+//			}
+//		}
+//		if (classIds.isEmpty()) {
+//			map.put("classIds", "");
+//		} else {
+//			hql = "select distinct classId from SchHandout where classId in (:classIds) and deleteFlag is false and originHandoutId = :handoutId";
+//			Map<String, Object> args = new HashMap<String, Object>();
+//
+//			args.put("classIds", classIds.toArray());
+//
+//			args.put("handoutId", handoutId);
+//			List<String> objs = commonDAO.findByComplexHql(hql, args, String.class);
+//			map.put("classIds", StringUtils.join(objs.toArray(), ","));
+//		}
+//		/*
+//		 * if (sbName.length() > 0) { orgNames = sbName.deleteCharAt(sbName.length() - 1).toString(); }
+//		 */
+//		if (sbId.length() > 0) {
+//			orgIds = sbId.deleteCharAt(sbId.length() - 1).toString();
+//		}
+//		// map.put("orgNames", orgNames);
+//		map.put("orgIds", orgIds);
+//
+//		ResultJson result = new ResultJson(true);
+//		result.setData(map);
+//		return result;
+//	}
+//
+//	/**
+//	 * 指定讲义数据到某个机构
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "orgHandout", method = RequestMethod.GET)
+//	public @ResponseBody Result orgHandout(String handoutId[], String orgId[], String classIds[], String collegeCourseId) {
+//		
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		return service.insertAppointHandout(handoutId, orgId, classIds, collegeCourseId);
+//	}
+//
+//	/**
+//	 * 获取讲义页数据
+//	 *
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "pages/{handoutId}", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandoutPage> pages(@PathVariable String handoutId) {
+//
+//		// 获取讲义页数据,增加排序
+//		String hql = "from SchHandoutPage where deleteFlag is false and handoutId= ? order by pageOrder asc ";
+//		List<SchHandoutPage> pages = commonDAO.find(hql, CollectionUtils.newList(handoutId), SchHandoutPage.class);
+//
+//		return pages;
+//	}
+//
+//	/**
+//	 * 获取负责课程列表数据
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "lessons", method = RequestMethod.GET)
+//	public @ResponseBody List<SchClassSchedule> lessons() {
+//
+//		List<SchClassSchedule> lessons = new ArrayList<SchClassSchedule>();
+//		// 班主任:获取该班级(class_id)下面的讲师负责的课程讲师:获取该讲师(teacher_id)负责的课程
+//		if (UserInfoWrapper.ROLE_CHARGER.equals(ClientUtils.getCurrentRole())) {
+//
+//			String hql = "from SchClassSchedule where deleteFlag is false and classId = ? order by startTime desc";
+//			lessons = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId()), SchClassSchedule.class);
+//
+//		} else if (UserInfoWrapper.ROLE_TEACHER.equals(ClientUtils.getCurrentRole())) {
+//
+//			String hql = "from SchClassSchedule where deleteFlag is false " + " and teacherId = ( select orgTeacherId from OrgTeacher where userId = ? and orgId = ? and deleteFlag is false ) " + " and classId = ?   order by startTime desc";
+//			lessons = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getOrgId(), ClientUtils.getClassId()), SchClassSchedule.class);
+//
+//		}/*
+//		 * else{ String hql = "from SchClassSchedule where deleteFlag is false and classId=?"; lessons = commonDAO.find(hql,CollectionUtils.newList(ClientUtils.getClassId()), SchClassSchedule.class); }
+//		 */
+//
+//		return lessons;
+//	}
+//
+//	/**
+//	 * 删除讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "delete", method = RequestMethod.POST)
+//	@ResponseBody
+//	public Result delete(String handoutIds) {
+//
+//		// 保存到服务器
+//		Result result = service.deleteHandouts(handoutIds.split(","));
+//		
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		// 返回结果
+//		return result;
+//	}
+//
+//	/**
+//	 * 删除讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "deleteOrg", method = RequestMethod.POST)
+//	@ResponseBody
+//	public Result deleteOrg(String handoutIds, Integer delAll, String orgIds[], String classIds[]) {
+//
+//		// 保存到服务器
+//		Result result = service.deleteOrgHandouts(handoutIds.split(","), delAll, orgIds, classIds);
+//
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		// 返回结果
+//		return result;
+//	}
+//
+//	/**
+//	 * 发布讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "start", method = RequestMethod.POST)
+//	@ResponseBody
+//	public Result start(String handoutIds) {
+//
+//		// 保存到服务器
+//		Result result = service.doStartHandouts(handoutIds);
+//
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		// 返回结果
+//		return result;
+//	}
+//
+//	/**
+//	 * 停用讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "stop", method = RequestMethod.POST)
+//	@ResponseBody
+//	public Result stop(String handoutIds) {
+//
+//		// 保存到服务器
+//		Result result = service.doStopHandouts(handoutIds.split(","));
+//
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		// 返回结果
+//		return result;
+//	}
+//
+//	/**
+//	 * ORG 获取机构科目列表
+//	 * 
+//	 * @return
+//	 */
+//	@SuppressWarnings("unused")
+//	@RequestMapping(value = "/orgCourse", method = RequestMethod.GET)
+//	public @ResponseBody List<OrgCollegeCourse> orgCollegeCourse() {
+//
+//		String hql = " from OrgCollegeCourse where topOrgId = ? and deleteFlag is false";
+//
+//		Organization org = commonDAO.read(Organization.class, ClientUtils.getOrgId());
+//
+////		List<OrgCollegeCourse> result = this.commonDAO.find(hql, CollectionUtils.newList(org.getTopOrganizationId()), OrgCollegeCourse.class);
+//		List<OrgCollegeCourse> result = this.commonDAO.find(hql, null, OrgCollegeCourse.class);
+//
+//		return result;
+//
+//	}
+//
+//	/**
+//	 * 导入讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "add", method = RequestMethod.POST)
+//	public @ResponseBody Result add(SchHandout handout, String fullPath, String module) {
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//				
+//		Result result = service.insertHandout(fullPath, module, handout);
+//		if (!result.isSuccess()) {
+//			return result;
+//		}
+//		boolean pptFlag = (Boolean) result.getAttr("pptFlag");
+//		if (!pptFlag) {
+//			service.sendMsgConvertPDF(handout.getHandoutId(), fullPath, module, ClientUtils.getUserId());
+//		} else {
+//
+//			// OFFICE 发送请求到docdeal 消息队列;参数:docpath和handoutid
+//			docdealMsgSenderService.sendMsg(fullPath, handout.getHandoutId(), module, ClientUtils.getUserId());
+//		}
+//		return result;
+//	}
+//
+//	/**
+//	 * 导入讲义信息
+//	 * 
+//	 * @return
+//	 */
+///*	@RequestMapping(value = "addOrg", method = RequestMethod.POST)
+//	public @ResponseBody Result addOrg(SchHandout handout, String collegeCourseId, String fullPath, String module) {
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		handout.setHandoutId(null);
+//		Result result = service.insertOrgHandout(fullPath, module, handout, collegeCourseId);
+//		if (!result.isSuccess()) {
+//			return result;
+//		}
+//		boolean pptFlag = (Boolean) result.getAttr("pptFlag");
+//		if (!pptFlag) {
+//			service.doConvertPDF(handout.getHandoutId(), fullPath, module, ClientUtils.getUserId());
+//		} else {
+//			// OFFICE 发送请求到docdeal 消息队列;参数:docpath和handoutid
+//			service.doConvertDOC(fullPath, handout.getHandoutId(), module, ClientUtils.getUserId());
+//		}
+//		
+//		return result;
+//	}*/
+//
+//	
+//	
+//	
+//
+//	
+//	
+//	
+//	/**
+//	 * 编辑讲义信息
+//	 * @return
+//	 */
+////	@RequestMapping(value = "edit", method = RequestMethod.POST)
+////	public @ResponseBody Result edit(SchHandout handout,String type) {
+////
+////		// 删除微商项目所有缓存
+//////		new CacheUtils().deleteWBProjectCacheData();
+////		
+////		return service.doEditHandout(handout,type);
+////	}
+//	
+//	/**
+//	 * 获取单个讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handout/data", method = RequestMethod.GET)
+//	public @ResponseBody SchHandout handoutData(String handoutId) {
+//
+//		OrgText orgText = orgTextService.getOrgText(handoutId, OrgText.TABLE_NAME_HANDOUT);
+//		SchHandout handout = commonDAO.read(SchHandout.class, handoutId);
+//		handout.setRemark(orgText != null ? orgText.getContent() : handout != null ?  handout.getRemark() : "");
+//		
+//		return handout;
+//	}
+//	
+//	/**
+//	 * 获取机构下的班级数据
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "getAllClass", method = RequestMethod.GET)
+//	public @ResponseBody List<OrgClass> getAllClass() {
+//
+//		List<OrgClass> classes = null;
+//
+//		// 班主任的话 当前机构班主任所任课的班级 讲师的话 当前讲师班级
+//		if (UserInfoWrapper.ROLE_CHARGER.equals(ClientUtils.getCurrentRole())) {
+//
+//			String hql = "select distinct cls from OrgCharger c, OrgClass cls, SchHandout h where" +
+//					" c.orgChargerId = cls.classChargerId and cls.classId = h.classId " +
+//					" and h.deleteFlag is false and cls.deleteFlag is false and c.deleteFlag is false and c.userId = ? and c.orgId = ? ";
+//
+//			classes = this.commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getOrgId()), OrgClass.class);
+//		} else if (UserInfoWrapper.ROLE_TEACHER.equals(ClientUtils.getCurrentRole())) {
+//
+//			String hql = "select distinct c  from OrgTeacher t, SchClassSchedule s , OrgClass c " + " where t.orgTeacherId = s.teacherId " + " and s.classId = c.classId " + " and t.deleteFlag is false and s.deleteFlag is false and c.deleteFlag is false " + " and t.userId = ? and t.orgId = ?  ";
+//
+//			classes = this.commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getOrgId()), OrgClass.class);
+//		}
+//
+//		List<OrgClass> result = new ArrayList<OrgClass>(3);
+//		for (OrgClass cls : classes) {
+//			if (!ClientUtils.getClassId().equals(cls.getClassId()) && !cls.getDeleteFlag()) {
+//				result.add(cls);
+//			}
+//		}
+//
+//		return result;
+//
+//	}
+//
+//	/**
+//	 * 获取班级下的讲义信息
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "getClassHandout", method = RequestMethod.GET)
+//	public @ResponseBody List<SchHandout> getClassHandout(String classId) {
+//		
+//		String hql = "select h from SchHandout h where h.deleteFlag is false and h.classId = ? ";
+//		return commonDAO.find(hql, CollectionUtils.newList(classId), SchHandout.class);
+//
+//	}
+//
+//	/**
+//	 * 选择历史讲义
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "addClassHandout", method = RequestMethod.POST)
+//	public @ResponseBody Result addClassHandout(SchHandout handout, String oldHandoutId) {
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//				
+//		return service.insertChooseHandout(handout, oldHandoutId);
+//	}
+//
+//	/**
+//	 * 获取ppt上传的
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "getDocdealUrl", method = RequestMethod.GET)
+//	public @ResponseBody Result getDocdealUrl() {
+//		Result objResult = new Result(true);
+//		objResult.setMsg(commonDAO.queryConfigValue(Constants.CONFIG_DOC_DEAL_URL));
+//		return objResult;
+//	}
+//
+//	/**
+//	 * 获取当前用户的当前讲义的收藏记录
+//	 * 
+//	 * @param handoutId
+//	 * @return
+//	 */
+//	private List<SchHandoutPage> getHandoutFavorHistoryList(String handoutId) {
+//		String classId = ClientUtils.getClassId();
+//		String userId = ClientUtils.getUserId();
+//
+//		// 查询讲义信息
+//		String hql = "select p from SchHandoutPage p ,SchHandoutPageFavor f " + " where f.deleteFlag is false " + " and p.handoutPageId=f.handoutPageId " + " and p.handoutId=? and f.userId=? and f.classId=?" + " order by p.pageOrder ";
+//
+//		List<SchHandoutPage> lstHandout = commonDAO.find(hql, CollectionUtils.newList(handoutId, userId, classId), SchHandoutPage.class);
+//
+//		return lstHandout;
+//	}
+//
+//	/**
+//	 * 讲义预览旋转图片
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "rotatePic", method = RequestMethod.GET)
+//	public @ResponseBody Result rotatePic(String angle, String handoutPageId) {
+//
+//		if (StringUtils.isBlank(angle) || StringUtils.isBlank(handoutPageId)) {
+//			return new Result(false, "参数不合法");
+//		}
+//
+//		return service.doRotatePic(angle, handoutPageId);
+//
+//	}
+//
+//	/**
+//	 * 初始化用户的handout 的 重复明细
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "/initHandoutRepeatData", method = RequestMethod.GET)
+//	public @ResponseBody Result initUserReRoleUser(String key) {
+//
+//		if (!initKey.equals(key)) {
+//			return new Result(true, "auth");
+//		}
+//
+//		// 查询存在可能性的重复的讲义
+//		String hql = "select handoutId from SchHandout s where  s.originHandoutId = s.handoutId and s.deleteFlag is false  ";
+//		List<String> handouts = this.commonDAO.find(hql, CollectionUtils.newList(), String.class);
+//
+//		if (handouts.isEmpty()) {
+//			return new Result(true, "zero");
+//		}
+//
+//		int successCount = 0;
+//
+//		for (int i = 0; i < handouts.size(); i++) {
+//			this.service.doInitHandoutRepeatData(handouts.get(i));
+//			successCount++;
+//		}
+//		Result result = new Result(true, "successful");
+//		result.addAttr("count", successCount);
+//
+//		return result;
+//
+//	}
+//
+//	@RequestMapping(value = "/initHandoutByClassSchedule", method = RequestMethod.GET)
+//	public @ResponseBody Result initHandoutByClassSchedule(String key) {
+//
+//		if (!initKey.equals(key)) {
+//			return new Result(true, "auth");
+//		}
+//		int count = 0;
+//		int s = 0;
+//		int y = 0;
+//		int z = 0;
+//		String hql = " from SchHandout where deleteFlag is false";
+//		List<SchHandout> lstHandout = commonDAO.find(hql, SchHandout.class);
+//
+//		for (SchHandout schHandout : lstHandout) {
+//
+//			// 判断subjectId有没有值,有值说明不用初始化
+//			if (StringUtils.isBlank(schHandout.getSubjectId())) {
+//				// 判断classScheduleId有没有值,没值说明是管理员的数据或者是脏数据
+//				if (StringUtils.isNotBlank(schHandout.getClassScheduleId())) {
+//					hql = " from SchClassSchedule where classScheduleId = ? and deleteFlag is false";
+//					SchClassSchedule sch = commonDAO.findUnique(hql, CollectionUtils.newList(schHandout.getClassScheduleId()), SchClassSchedule.class);
+//					if (sch != null) {
+//						OrgClass cls = commonDAO.read(OrgClass.class, sch.getClassId());
+//						if (cls != null) {
+//							hql = " from SchClassSubject where name = ? and deleteFlag is false and classId = ?";
+//							SchClassSubject sub = commonDAO.findUnique(hql, CollectionUtils.newList(sch.getName(), sch.getClassId()), SchClassSubject.class);
+//							// 判断对应的班级课程有没有
+//							if (sub != null) {
+//
+//								schHandout.setSubjectId(sub.getClassSubjectId());
+//								schHandout.setSubjectName(sub.getName());
+//								schHandout.setCollegeCourseId(cls.getCollegeCourseId());
+//								TraceUtils.setUpdateTrace(schHandout);
+//								
+//								this.service.saveHandout(schHandout);
+//								count++;
+//
+//							} else {
+//
+//								sub = new SchClassSubject();
+//								TraceUtils.setCreateTrace(sub);
+//								sub.setClassId(sch.getClassId());
+//								sub.setCourseId(cls.getCollegeCourseId());
+//								sub.setName(sch.getName());
+//								TraceUtils.setCreateTrace(sub);
+//								commonService.save(sub);
+//								s++;
+//								schHandout.setSubjectId(sub.getClassSubjectId());
+//								schHandout.setSubjectName(sub.getName());
+//								schHandout.setCollegeCourseId(cls.getCollegeCourseId());
+//								TraceUtils.setUpdateTrace(schHandout);
+//								this.service.saveHandout(schHandout);
+//								count++;
+//
+//								// TODO SchClassSchedule classSubjectId 字段
+//								sch.setClassSubjectId(sub.getClassSubjectId());
+//								commonService.save(sch);
+//							}
+//						}
+//
+//					}
+//				} else {
+//
+//					// 管理员
+//
+//					hql = " from SchHandoutReCourse where handoutId = ? and deleteFlag is false";
+//					List<SchHandoutReCourse> lstHandoutCourse = commonDAO.find(hql, CollectionUtils.newList(schHandout.getHandoutId()), SchHandoutReCourse.class);
+//					for (SchHandoutReCourse schHandoutReCourse : lstHandoutCourse) {
+//						Organization org = commonDAO.read(Organization.class, schHandoutReCourse.getOrgId());
+//						if (org == null) {
+//							continue;
+//						}
+//						hql = " from SchSubjectReCourse where subjectId in " + " ( select subjectId from SchSubject where name = ? and deleteFlag is false ) " + " and deleteFlag is false " + " and collegeCourseId = ?";
+//
+//						SchSubjectReCourse reCourse = commonDAO.findUnique(hql, CollectionUtils.newList("公共课程", schHandoutReCourse.getCollegeCourseId()), SchSubjectReCourse.class);
+//						if (reCourse != null) {
+//							schHandout.setSubjectId(reCourse.getSubjectId());
+//							schHandout.setSubjectName("公共课程");
+//							schHandout.setCollegeCourseId(schHandoutReCourse.getCollegeCourseId());
+//							TraceUtils.setUpdateTrace(schHandout);
+//							this.service.saveHandout(schHandout);
+//							count++;
+//						} else {
+//							hql = " from SchSubject where name = ? and deleteFlag is false";
+//							SchSubject subject = commonDAO.findUnique(hql, CollectionUtils.newList("公共课程"), SchSubject.class);
+//							if (subject != null) {
+//								reCourse = new SchSubjectReCourse();
+//								reCourse.setCollegeCourseId(schHandoutReCourse.getCollegeCourseId());
+//								reCourse.setDeleteFlag(false);
+//								reCourse.setOrgId(schHandoutReCourse.getOrgId());
+////								reCourse.setTopOrgId(org.getTopOrganizationId());
+//								reCourse.setSubjectId(subject.getSubjectId());
+//								TraceUtils.setCreateTrace(reCourse);
+//								commonService.save(reCourse);
+//								y++;
+//							} else {
+//								subject = new SchSubject();
+//								subject.setName("公共课程");
+//								TraceUtils.setCreateTrace(subject);
+//								commonService.save(subject);
+//								z++;
+//								reCourse = new SchSubjectReCourse();
+//								reCourse.setCollegeCourseId(schHandoutReCourse.getCollegeCourseId());
+//								reCourse.setDeleteFlag(false);
+//								reCourse.setOrgId(schHandoutReCourse.getOrgId());
+////								reCourse.setTopOrgId(org.getTopOrganizationId());
+//								reCourse.setSubjectId(subject.getSubjectId());
+//								TraceUtils.setCreateTrace(reCourse);
+//								commonService.save(reCourse);
+//								y++;
+//							}
+//
+//							schHandout.setSubjectId(reCourse.getSubjectId());
+//							schHandout.setSubjectName("公共课程");
+//							schHandout.setCollegeCourseId(schHandoutReCourse.getCollegeCourseId());
+//							TraceUtils.setUpdateTrace(schHandout);
+//							this.service.saveHandout(schHandout);
+//							count++;
+//
+//						}
+//					}
+//
+//				}
+//			}
+//
+//		}
+//		return new Result(true, "总共" + lstHandout.size() + "条,成功了" + count + "条,新增了" + s + "条班级课程、" + y + "条科目课程、" + z + "条课程");
+//	}
+//
+//	@RequestMapping(value = "/initHandoutOrderNum", method = RequestMethod.GET)
+//	public @ResponseBody Result initHandoutOrderNum(String key) {
+//		if (!initKey.equals(key)) {
+//			return new Result(true, "auth");
+//		}
+//		// 管理员
+//		Map<String, List<SchHandoutReCourse>> map = new HashMap<String, List<SchHandoutReCourse>>();
+//
+//		String hql = " from SchHandoutReCourse where deleteFlag is false order by orgId";
+//		List<SchHandoutReCourse> courses = commonDAO.find(hql, SchHandoutReCourse.class);
+//		for (SchHandoutReCourse course : courses) {
+//			if (map.get(course.getOrgId()) == null) {
+//				List<SchHandoutReCourse> lst = new ArrayList<SchHandoutReCourse>();
+//				lst.add(course);
+//				map.put(course.getOrgId(), lst);
+//			} else {
+//				map.get(course.getOrgId()).add(course);
+//			}
+//		}
+//
+//		for (List<SchHandoutReCourse> lst : map.values()) {
+//			int i = 0;
+//			for (SchHandoutReCourse course : lst) {
+//				i++;
+//				course.setOrderNum(i);
+//				commonService.save(course);
+//			}
+//		}
+//
+//		// 班主任
+//		Map<String, List<SchHandout>> handoutMap = new HashMap<String, List<SchHandout>>();
+//		hql = " from SchHandout where deleteFlag is false order by classId";
+//		List<SchHandout> lstH = commonDAO.find(hql, SchHandout.class);
+//		for (SchHandout schHandout : lstH) {
+//			if (handoutMap.get(schHandout.getClassId()) == null) {
+//				List<SchHandout> lstHandout = new ArrayList<SchHandout>();
+//				lstHandout.add(schHandout);
+//				handoutMap.put(schHandout.getClassId(), lstHandout);
+//			} else {
+//				handoutMap.get(schHandout.getClassId()).add(schHandout);
+//			}
+//
+//		}
+//
+//		for (List<SchHandout> lst : handoutMap.values()) {
+//			int i = 0;
+//			for (SchHandout handout : lst) {
+//				i++;
+//				handout.setOrderNum(i);
+//				this.service.saveHandout(handout);
+//			}
+//		}
+//		return new Result(true);
+//	}
+//
+//	/**
+//	 * 练习序号初始化
+//	 * 
+//	 * @param key
+//	 * @return
+//	 */
+//	@RequestMapping(value = "/initExerciseOrderNum", method = RequestMethod.GET)
+//	public @ResponseBody Result initExerciseOrderNum(String key) {
+//		if (!initKey.equals(key)) {
+//			return new Result(true, "auth");
+//		}
+//		// 管理员
+//		Map<String, List<ExerciseReCourse>> map = new HashMap<String, List<ExerciseReCourse>>();
+//
+//		String hql = " from ExerciseReCourse where deleteFlag is false order by orgId";
+//		List<ExerciseReCourse> courses = commonDAO.find(hql, ExerciseReCourse.class);
+//		for (ExerciseReCourse course : courses) {
+//			if (map.get(course.getOrgId()) == null) {
+//				List<ExerciseReCourse> lst = new ArrayList<ExerciseReCourse>();
+//				lst.add(course);
+//				map.put(course.getOrgId(), lst);
+//			} else {
+//				map.get(course.getOrgId()).add(course);
+//			}
+//		}
+//
+//		for (List<ExerciseReCourse> lst : map.values()) {
+//			int i = 0;
+//			for (ExerciseReCourse course : lst) {
+//				i++;
+//				course.setOrderNum(i);
+//				commonService.save(course);
+//			}
+//		}
+//
+//		// 班主任
+//		Map<String, List<ExerciseGroup>> groupMap = new HashMap<String, List<ExerciseGroup>>();
+//		hql = " from ExerciseGroup where deleteFlag is false order by classId";
+//		List<ExerciseGroup> lstH = commonDAO.find(hql, ExerciseGroup.class);
+//		for (ExerciseGroup group : lstH) {
+//			if (groupMap.get(group.getClassId()) == null) {
+//				List<ExerciseGroup> lstGroup = new ArrayList<ExerciseGroup>();
+//				lstGroup.add(group);
+//				groupMap.put(group.getClassId(), lstGroup);
+//			} else {
+//				groupMap.get(group.getClassId()).add(group);
+//			}
+//
+//		}
+//
+//		for (List<ExerciseGroup> lst : groupMap.values()) {
+//			int i = 0;
+//			for (ExerciseGroup group : lst) {
+//				i++;
+//				group.setOrderNum(new BigInteger(String.valueOf(i)));
+//
+//				this.exerciseService.saveExerciseGroup(group);
+//			}
+//		}
+//		return new Result(true);
+//	}
+//
+//	/**
+//	 * 讲义排序
+//	 * 
+//	 * @param key
+//	 * @return
+//	 */
+//	@RequestMapping(value = "/order", method = RequestMethod.POST)
+//	public @ResponseBody Result order(@RequestParam("ids[]") List<String> ids, @RequestParam("index[]") List<Integer> index) {
+//		service.doOrder(ids, index);
+//		
+//		// 删除微商项目所有缓存
+////		new CacheUtils().deleteWBProjectCacheData();
+//		
+//		return new Result(true);
+//	}
+//	
+//	/**
+//	 * 分享讲义
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "share", method = RequestMethod.POST)
+//	@ResponseBody
+//	public Result share(String handoutIds,String shareName) {
+//
+//		// 保存到服务器
+////		Result result = shareService.doSaveShare(handoutIds.split(","), shareName, ContentShare.SHARE_TYPE_HANDOUT);
+//
+//		// 返回结果
+////		return result;
+//		return null;
+//	}
+//	
+//	/**
+//	 * 慧眼端: 获取讲义文档目录 URL :/school/HandOut/courseDirectory
+//	 * 
+//	 * @param limit
+//	 *            每页显示
+//	 * @param page
+//	 *            页码
+//	 * @return
+//	 */
+//	@RequestMapping(value = "courseDirectory", method = RequestMethod.GET)
+//	public @ResponseBody ResultJson getCourseDirectory(@RequestParam("limit") int limit, @RequestParam("page") int page) {
+//		Pager pager = new Pager();
+//		pager.setPageNum(page);
+//		pager.setPageSize(limit);
+//		
+//		//查询课程  分页
+//		String hql = " from SchClassSubject where classId = ? and deleteFlag is false order by createTime asc";
+//		List<SchClassSubject> lstSub = commonDAO.findList(hql, pager, 
+//				CollectionUtils.newList(ClientUtils.getClassId()), SchClassSubject.class);
+//		
+//		if(lstSub.isEmpty()){
+//			if(page > 1){//表示从第二页开始
+//				return new ResultJson(true, "当页无数据", lstSub);
+//			}
+//			return new ResultJson(false, "当前班级无文档列表");
+//		}
+//		
+//		List<Map<String,Object>> lst = new ArrayList<Map<String,Object>>(lstSub.size());
+//		Map<String,Object> resultMap = null;
+//		
+//		for (SchClassSubject subject:lstSub) {
+//			resultMap = new HashMap<String, Object>(2);
+//			resultMap.put("classSubjectId", subject.getClassSubjectId());
+//			resultMap.put("name", subject.getName());
+//			
+//			lst.add(resultMap);
+//		}
+//		
+//		return new ResultJson(true, "操作成功", lst);
+//	}
+//	
+//	/**
+//	 * 慧眼端: 获取讲义列表URL:/school/HandOut/handoutListItem
+//	 * 
+//	 * @param limit
+//	 *            每页显示
+//	 * @param page
+//	 *            页码
+//	 * @return
+//	 */
+//	@RequestMapping(value = "handoutListItem", method = RequestMethod.GET)
+//	public @ResponseBody ResultJson getCourseDirectory(
+//			@RequestParam("classSubjectId") String classSubjectId,
+//			@RequestParam("limit") int limit,
+//			@RequestParam("page") int page) {
+//		
+//		Pager pager = new Pager();
+//		pager.setPageNum(page);
+//		pager.setPageSize(limit);
+//		
+//		//根据课程ID查询讲义
+//		String hql = " from SchHandout where subjectId = ? and status=? and deleteFlag is false order by orderNum ";
+//		List<SchHandout> handouts = commonDAO.findList(hql, pager, 
+//				CollectionUtils.newList(classSubjectId, SchHandout.STATUS_ISSUED), SchHandout.class);
+//		
+//		if(handouts.isEmpty()){
+//			if(page > 1){//表示从第二页开始
+//				return new ResultJson(true, "当页无数据", handouts);
+//			}
+//			return new ResultJson(false, "当前课程无文档");
+//		}
+//		
+//		// 查询首页图片
+//		Map<String, Object> argsMap = new HashMap<String, Object>(2);
+//		Object[] args = new Object[handouts.size()];
+//		for (int i=0;i<handouts.size();i++) {
+//			args[i] = handouts.get(i).getHandoutId();
+//		}
+//		
+//		argsMap.put("handoutIds", args);
+//		String hql_page = "select handoutId, imgPath from SchHandoutPage where handoutId in (:handoutIds) and pageOrder=1";
+//		List<Object[]> lstImgPath = commonDAO.findByComplexHql(hql_page, argsMap, Object[].class);
+//		
+//		Map<String,String> imgMap = new HashMap<String, String>(lstImgPath.size());
+//		for(Object[] obj:lstImgPath){
+//			imgMap.put(String.valueOf(obj[0]), String.valueOf(obj[1]));
+//		}
+//		
+//		// 返回结果
+//		List<Map<String,Object>> lst = new ArrayList<Map<String,Object>>(handouts.size());
+//		Map<String,Object> handoutMap;
+//		for (SchHandout schHandout : handouts) {
+//			handoutMap = new HashMap<String, Object>(5);
+//			handoutMap.put("handoutId", schHandout.getHandoutId());
+//			handoutMap.put("name", schHandout.getName());
+//			handoutMap.put("pageCount", schHandout.getPageCount());
+//			handoutMap.put("playCount", schHandout.getPlayCount());
+//			handoutMap.put("mainImg", imgMap.get(schHandout.getHandoutId()));
+//			
+//			lst.add(handoutMap);
+//		}
+//		argsMap.put("handoutIds", args);
+//
+//		return new ResultJson(true, "操作成功", lst);
+//	}
+//	
+//	
+//	/**
+//	 * 获取文档 所有
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "live/fileItems", method = RequestMethod.GET)
+//	public @ResponseBody ResultJson getFileItems(String videoLiveId) {
+//		// 1、查询直播关联所有讲义Id
+//		List<Object[]> lstHandout = commonDAO.find(
+//				"select h.handoutId,h.name,h.pageCount"
+//				+ " from SchVideoFile f, SchHandout h "
+//				+ " where f.fileId=h.handoutId "
+//				+ " and f.businessId=? "
+//				+ " and h.status=? "
+//				+ " and f.deleteFlag is false"
+//				+ " and h.deleteFlag is false"
+//				+ " order by f.createTime asc",
+//				CollectionUtils.newList(videoLiveId, SchHandout.STATUS_ISSUED), Object[].class);
+//		
+//		
+//		if(lstHandout.isEmpty()){
+//			return new ResultJson(false, "当前直播没有关联的文档", lstHandout);
+//		}
+//		
+//		// 3.组装数据
+//		List<Map<String,Object>> resultLst = new ArrayList<Map<String,Object>>(lstHandout.size());
+//		Map<String,Object> resultMap;
+//		for(Object[] obj:lstHandout){
+//			 resultMap = new HashMap<String, Object>();
+//			 
+//			 resultMap.put("handoutId", obj[0]);
+//			 resultMap.put("name", obj[1]);
+//			 resultMap.put("pageCount", obj[2]);
+//			 
+//			 resultMap.put("pages", getHandoutPageLiveList(String.valueOf(obj[0])));
+//			 resultLst.add(resultMap);
+//		}
+//		
+//		return new ResultJson(true, "操作成功", resultLst);
+//	}
+//	
+//	/**
+//	 * 获取文档单个
+//	 * 
+//	 * @return
+//	 */
+//	@RequestMapping(value = "live/fileItem", method = RequestMethod.GET)
+//	public @ResponseBody ResultJson getFileItem(String handoutId) {
+//		
+//		return new ResultJson(true, "操作成功", getHandoutPageLiveList(handoutId));
+//	}
+//	
+//	/**
+//	 * 获取当个文档
+//	 * @param handoutId
+//	 * @return
+//	 */
+//	private List<Map<String,Object>> getHandoutPageLiveList(String handoutId){
+//		
+//		List<SchHandoutPage> lstHandoutPage = commonDAO.find(
+//				"from SchHandoutPage p "
+//				+ " where p.handoutId=? "
+//				+ " and p.deleteFlag is false"
+//				+ " order by pageOrder asc",
+//				CollectionUtils.newList(handoutId), SchHandoutPage.class);
+//		
+//		List<Map<String,Object>> resultLst = new ArrayList<Map<String,Object>>(lstHandoutPage.size());
+//		
+//		Map<String,Object> map;
+//		for(SchHandoutPage page:lstHandoutPage){
+//			map = new HashMap<String, Object>(3);
+//			map.put("url",  page.getImgPath());
+//			map.put("handoutPageId",  page.getHandoutPageId());
+//			map.put("pageOrder",  page.getPageOrder());
+//			
+//			resultLst.add(map);
+//		}
+//		
+//		return resultLst;
+//	}
+//	
+//	/**
+//	 * 获取讲义进度
+//	 * 
+//	 * @param handoutId
+//	 * @return
+//	 */
+//	@RequestMapping(value = "getUploadSchedule", method = RequestMethod.GET)
+//	public @ResponseBody Float getUploadSchedule(String handoutId) {
+////		return cacheService.get("handout_upload_schedule_"+handoutId, Float.class);
+//		return null;
+//	}
+//}
diff --git a/src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java b/src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java
new file mode 100644
index 0000000..3e8f0a8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.school.action;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.service.IStudentScoreService;
+
+/**
+ * 用户学分控制层;
+ * 
+ * @author junliang
+ * @createTime 2017-12-10
+ */
+@Controller
+@RequestMapping(value = "/studentScore")
+public class StudentScoreController {
+	@Autowired
+	private IStudentScoreService studentScoreService;
+
+	/**
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @param videoId
+	 *            视频id
+	 * @param score
+	 *            学分
+	 * @return
+	 */
+	@RequestMapping(value = "/addStudentScore", method = RequestMethod.GET)
+	@ResponseBody
+	public Result addStudentScore(String classId, String videoId, Integer score) {
+
+		return studentScoreService.addStudentScore(classId, videoId, score);
+	}
+
+	/**
+	 * 获取学分
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/getStudentScore", method = RequestMethod.GET)
+	@ResponseBody
+	public Result getStudentScore() {
+
+		return studentScoreService.getStudentScore();
+
+	}
+	
+	/**
+	 * 是否学完
+	 * 
+	 * @return
+	 */
+	@RequestMapping(value = "/isLearn", method = RequestMethod.GET)
+	@ResponseBody
+	public Result isLearn(String classId) {
+		return studentScoreService.checkStudyStatus(classId);
+
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java b/src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java
new file mode 100644
index 0000000..a5ae881
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java
@@ -0,0 +1,205 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.school.dao;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.Query;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.transform.Transformers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.org.model.OrgTeacher;
+
+
+@Repository(value="evaluateDAO")
+/**
+ * 自动注入sessionFactory 评估
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2015-01-07 邓志永 新建
+ */
+public class EvaluateDAO extends BaseDAO {
+	
+	/**
+     * 注入sessionFactory
+     *
+     * @param sessionFactory
+     */
+    @Autowired(required = false)
+    public void setSessionfactory(SessionFactory sessionFactory) {
+        this.setSessionFactory(sessionFactory);
+    }
+    
+    /**
+	 * 查询签到排名结果
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+    @SuppressWarnings("unchecked")
+	public List<Map<String, Object>> querySignRankList(String sql,
+		List<Object> args) {
+    	// 查询结果
+    	List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(sql, args.toArray());
+    	if(lst.isEmpty()){
+    		return null;
+    	}
+    	List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
+    	
+    	Map<String, Object> resultMap = new HashMap<String, Object>(8);
+    	for (Object[] obj : lst) {
+    		 resultMap = new HashMap<String, Object>();
+    		 resultMap.put("userId", obj[0]);
+    		 resultMap.put("userName", obj[1]);
+    		 resultMap.put("signOrder", obj[2]);
+    		 resultMap.put("signTime", obj[3]);
+    		 resultMap.put("lessonId", obj[4]);
+    		 resultMap.put("lessonName", obj[5]);
+    		 resultMap.put("signId", obj[6]);
+    		 resultMap.put("classId", obj[7]);
+    		 resultLst.add(resultMap);
+        }
+		return resultLst;
+	}
+    
+    /**
+	 * 查询出勤率结果
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+    @SuppressWarnings("unchecked")
+	public List<Map<String, Object>> querySignAttendanceList(String sql,
+		List<Object> args) {
+    	// 查询结果
+    	List<Object[]> lst =  this.findBySql(sql, args);
+    	if(lst.isEmpty()){
+    		return null;
+    	}
+    	List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
+    	
+    	Map<String, Object> resultMap = new HashMap<String, Object>(8);
+    	for (Object[] obj : lst) {
+    		 resultMap = new HashMap<String, Object>();
+    		 resultMap.put("classId", obj[0]);
+    		 resultMap.put("className", obj[1]);
+    		 resultMap.put("userId", obj[2]);
+    		 resultMap.put("userName", obj[3]);
+    		 resultMap.put("stuSignCount", obj[4]);
+    		 resultMap.put("signNormal", obj[5]);
+    		 resultMap.put("classSignCount", obj[6]);
+    		 resultLst.add(resultMap);
+        }
+		return resultLst;
+	}
+    
+    
+    /**
+   	 * 查询家庭作业完成度结果
+   	 * @param sql
+   	 * @param args
+   	 * @return
+   	 */
+       @SuppressWarnings("unchecked")
+   	public List<Map<String, Object>> queryEvaHomeTimelinessList(String sql,
+   		List<Object> args) {
+       	
+	    List<Object[]> lst =  this.findBySql(sql, args);
+       	if(lst.isEmpty()){
+       		return null;
+       	}
+       	List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
+       	
+       	Map<String, Object> resultMap = new HashMap<String, Object>(5);
+       	for (Object[] obj : lst) {
+       		 resultMap = new HashMap<String, Object>();
+       		 resultMap.put("classId", obj[0]);
+       		 resultMap.put("className", obj[1]);
+       		 resultMap.put("userId", obj[2]);
+       		 resultMap.put("userName", obj[3]);
+       		 resultMap.put("complateRate", obj[4]);
+       		 resultLst.add(resultMap);
+           }
+   		return resultLst;
+   	}
+       
+       /**
+        * 查询家庭作业答题分数结果
+        * @param sql
+        * @param args
+        * @return
+        */
+       @SuppressWarnings("unchecked")
+       public List<Map<String, Object>> queryEvaHomeExamResultList(String sql,
+    		   List<Object> args) {
+    	   
+    	   List<Object[]> lst =  this.findBySql(sql, args);
+    	   if(lst.isEmpty()){
+    		   return null;
+    	   }
+    	   List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
+    	   
+    	   Map<String, Object> resultMap = new HashMap<String, Object>(5);
+    	   for (Object[] obj : lst) {
+    		   resultMap = new HashMap<String, Object>();
+    		   resultMap.put("classId", obj[0]);
+    		   resultMap.put("className", obj[1]);
+    		   resultMap.put("userId", obj[2]);
+    		   resultMap.put("userName", obj[3]);
+    		   resultMap.put("correctRate", obj[4]);
+    		   resultLst.add(resultMap);
+    	   }
+    	   return resultLst;
+       }
+       
+    @SuppressWarnings("rawtypes")
+	public <T> List<T> queryListByIn(String hql, List<Object> args, Class<T> cls) {
+    	List<T> result = new ArrayList<T>();
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	Query query = session.createQuery(hql);
+    	query.setParameterList("ins", args);
+ 		 List lst = query.list();
+         for (Object obj : lst) {
+             result.add(cls.cast(obj));
+         }
+         return result;
+	}
+    
+    /**
+	 * 查询老师列表
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+    @SuppressWarnings("unchecked")
+	public List<OrgTeacher> queryTeacherList(String sql,List<Object> args) {
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(OrgTeacher.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	List<OrgTeacher> lstItems = query.list();
+    	
+		return lstItems;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java b/src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java
new file mode 100644
index 0000000..fd44b59
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java
@@ -0,0 +1,113 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.school.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.springframework.orm.hibernate4.HibernateCallback;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.school.model.SchHandout;
+
+
+@Repository(value="handoutDAO")
+/**
+ * 自动注入sessionFactory 互动
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2015-01-07 邓志永 新建
+ */
+public class HandoutDAO extends BaseDAO {
+    /**
+	 * 查询互动练习结果,加下拉和分页
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	public List<SchHandout> schHandoutList(int type,final String hql, final Pager page, final List<Object> args) {
+    	
+    	List<SchHandout> handoutLst = new ArrayList<SchHandout>(20);
+    	SchHandout handout = null;  
+    	// 查询结果 	
+	   List<Object[]> lst  =   this.findList(hql, page, args, Object[].class);
+    	
+    	for (Object[] obj : lst) {
+    		handout = new SchHandout();
+    		handout = (SchHandout) obj[0];
+    		if(type == 1){//讲义收藏
+    			handout.setTotalCount(handout.getPageCount());
+    			handout.setPageCount(Integer.parseInt(String.valueOf(obj[1])));
+    		}
+    		handoutLst.add(handout);
+        }
+		return handoutLst;
+	}
+    
+    
+    /**
+     * 后台列表查询讲义数据
+     * @param sql
+     * @param args
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+	public List<SchHandout> queryDataList(String sql,List<Object> args) {
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql).addEntity(SchHandout.class);
+    	//query.setResultTransformer(Transformers.aliasToBean(SchHandout.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	List<SchHandout> lstHandouts = query.list();
+    	
+		return lstHandouts;
+	}
+    
+    
+    /**
+	 * 通过讲义观看记录查询讲义实际观看了的页码
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+    @SuppressWarnings({ "unchecked"})
+	public List<String> schHandoutPageNum(final String hql, final List<Object> args) {
+    	
+    	// 查询结果 	
+	   List<Integer> lst  =  this.getHibernateTemplate().execute(new HibernateCallback<List<Integer>>() {
+
+	        public List<Integer> doInHibernate(Session session) {
+	            Query query = session.createSQLQuery(hql);
+	            int i = 0;
+	            for (Object arg : args) {
+	                query.setParameter(i++, arg);
+	            }
+	           
+	            return query.list();
+	        }
+	    });
+	  List<String> pageLst = new ArrayList<String>();
+
+	   for (Integer obj : lst) {
+		   if(null!=obj){
+			   pageLst.add(String.valueOf(obj));
+			 
+		   }
+	}
+		return pageLst;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java b/src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java
new file mode 100644
index 0000000..2d548f9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java
@@ -0,0 +1,68 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.school.dao;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
+import org.springframework.stereotype.Repository;
+
+
+@Repository(value="interactDAO")
+/**
+ * 自动注入sessionFactory 互动
+ *
+ * @author 邓志永
+ * @since JDK1.6
+ * @history 2015-01-07 邓志永 新建
+ */
+public class InteractDAO extends HibernateDaoSupport {
+	
+	/**
+     * 注入sessionFactory
+     *
+     * @param sessionFactory
+     */
+    @Autowired(required = false)
+    public void setSessionfactory(SessionFactory sessionFactory) {
+        this.setSessionFactory(sessionFactory);
+    }
+    
+    /**
+	 * 查询互动练习结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+    @SuppressWarnings("unchecked")
+	public List<Map<String, Object>> queryResultByInteractExer(String hql,
+		List<Object> args) {
+    	// 查询结果
+    	List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+    	if(lst.isEmpty()){
+    		return null;
+    	}
+    	List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
+    	
+    	Map<String, Object> resultMap = new HashMap<String, Object>(3);
+    	for (Object[] obj : lst) {
+    		 resultMap = new HashMap<String, Object>();
+    		 resultMap.put("name", obj[0]);
+    		 resultMap.put("count", obj[1]);
+    		 resultMap.put("peopleCount", obj[2]);//总人数
+    		 resultLst.add(resultMap);
+        }
+		return resultLst;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java b/src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java
new file mode 100644
index 0000000..ead578c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java
@@ -0,0 +1,96 @@
+/******************************************************************************
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.school.dao;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.transform.Transformers;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+
+
+@Repository(value="lessonDAO")
+/**
+ * 自动注入sessionFactory 
+ *
+ * @author ody.yuan
+ * @since JDK1.6
+ * @history 2015-04-23
+ */
+public class LessonDAO extends BaseDAO {
+	
+    /**
+	 * 查询课程列表明细
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+	public List<SchClassSchedule> queryLessonList(String sql,List<Object> args) {
+		// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(SchClassSchedule.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	@SuppressWarnings("unchecked")
+		List<SchClassSchedule> lstItems = query.list();
+    	
+		return lstItems;
+	}
+    
+    /**
+   	 * 组装查询练习题目  顺序、随机练习
+   	 * @return
+   	 */
+   	public List<SchClassSchedule> queryAppLessonList(final String hql, final Pager page,
+   			final List<Object> args) {
+       List<SchClassSchedule> lstitems = new ArrayList<SchClassSchedule>();
+       SchClassSchedule item;
+       List<Object[]> lst  =   this.findList(hql, page, args, Object[].class);
+       
+       for (Object[] obj : lst) {
+           	item = (SchClassSchedule) obj[0];
+           	item.setTeacherImg(String.valueOf(obj[1]));
+           	lstitems.add(item);
+        }
+        return lstitems;
+   	}
+
+	/**
+   	 * 根据讲师id查询班级
+   	 * @param orgTeacherId
+   	 * @return
+   	 */
+	public List<String> queryClassesByTeacher(String orgTeacherId) {
+		String hql = "select s.classId from SchClassSchedule s where s.teacherId=:teacherId and EXISTS (select 1 from ClsClass c where c.classId = s.classId and c.deleteFlag is FALSE) GROUP BY s.classId";
+		
+		return findByComplexHql(hql, CollectionUtils.newObjectMap("teacherId",orgTeacherId), String.class);
+	}
+	
+   	/**
+   	 * 查询讲师关联的直播
+   	 * 
+   	 * @param orgTeacherId
+   	 * @return
+   	 */
+	public List<String> queryClassesByLive(String orgTeacherId) {
+		
+		String hql = "select s.classId from MediaVideoLive s where s.anchorId=:teacherId and EXISTS (select 1 from ClsClass c where c.classId = s.classId and c.deleteFlag is FALSE) GROUP BY s.classId";
+		
+		return findByComplexHql(hql, CollectionUtils.newObjectMap("teacherId",orgTeacherId), String.class);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/dao/RankDAO.java b/src/main/java/com/qxueyou/scc/school/dao/RankDAO.java
new file mode 100644
index 0000000..81adbb5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/dao/RankDAO.java
@@ -0,0 +1,58 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.school.dao;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.school.model.SchRankHis;
+
+
+@Repository(value="RankDAO")
+/**
+ * 自动注入sessionFactory 排名
+ *
+ * @author ody.yuan
+ * @since JDK1.6
+ * @history 2015-04-23
+ */
+public class RankDAO extends BaseDAO {
+    
+    /**
+	 * 查询班级排名(刷新和分页)
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+	public List<SchRankHis> queryClassRankList(final String hql,final Pager page,final List<Object> args) {
+		// 查询得到结果
+		List<Object[]> lst  =    this.findList(hql, page, args, Object[].class);
+       
+       List<SchRankHis> rankLst = new ArrayList<SchRankHis>();
+       SchRankHis objRank = null;
+       
+       for (Object[] obj : lst) {
+    	   objRank = new SchRankHis();
+    	   objRank.setHisRankId(String.valueOf(obj[0]));
+    	   objRank.setImgPath(String.valueOf(obj[1]));
+    	   objRank.setName(String.valueOf(obj[2]));
+    	   objRank.setRank(Integer.parseInt(String.valueOf(obj[3])));
+    	   objRank.setValue((BigDecimal)obj[4]);
+    	   rankLst.add(objRank);
+       }
+       return rankLst;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/school/dao/SignDAO.java b/src/main/java/com/qxueyou/scc/school/dao/SignDAO.java
new file mode 100644
index 0000000..cce006f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/dao/SignDAO.java
@@ -0,0 +1,202 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.school.dao;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.transform.Transformers;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.FilePathConstants;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.school.model.SchSignItem;
+import com.qxueyou.scc.school.model.SchSignStatistics;
+
+
+@Repository(value="signDAO")
+/**
+ * 自动注入sessionFactory 签到明细
+ *
+ * @author ody.yuan
+ * @since JDK1.6
+ * @history 2015-04-23
+ */
+public class SignDAO extends BaseDAO {
+	
+    
+    /**
+	 * 查询签到明细
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+    @SuppressWarnings("unchecked")
+	public List<SchSignItem> querySignItemList(String sql,List<Object> args) {
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(SchSignItem.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	List<SchSignItem> lstItems = query.list();
+    	
+		return lstItems;
+	}
+    
+    /**
+	 * 查询签到明细(优化版本)
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+    @SuppressWarnings({ "unchecked" })
+	public List<SchSignStatistics> querySignItemListNew(final String sql,final List<Object> args) {
+       // 查询得到结果
+	   List<Object[]> resultLst = this.findBySql(sql, args);
+       
+       List<SchSignStatistics> lst = new ArrayList<SchSignStatistics>();
+       SchSignStatistics objSta = null;
+       
+       for (Object[] obj : resultLst) {
+    	   objSta = new SchSignStatistics();
+    	   objSta.setUserId(String.valueOf(obj[0]));
+    	   objSta.setUserName(String.valueOf(obj[1]));
+    	   objSta.setMobilePhone(obj[2] == null?null:String.valueOf(obj[2]));
+    	   objSta.setRegisteFlag(true);
+    	   if(Integer.parseInt(String.valueOf(obj[3]))==1){
+    		   objSta.setInstallFlag(true);
+    	   }else{
+    		   objSta.setInstallFlag(false);
+    	   }
+    	   objSta.setCompanyName(String.valueOf(obj[4]));
+    	   objSta.setStatisticsFlag(3);
+    	   lst.add(objSta);
+       }
+       return lst;
+	}
+    
+    /**
+   	 * 组装查询练习题目  顺序、随机练习
+   	 * @return
+   	 */
+   	@SuppressWarnings("unchecked")
+   	public List<SchSignStatistics> querySignItemListStat(String hql,
+   			List<Object> args) {
+       List<SchSignStatistics> lstitems = new ArrayList<SchSignStatistics>();
+       SchSignStatistics item;
+   	   List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+           	item = (SchSignStatistics) obj[0];
+           	item.setUserImgPath(null != obj[1] && StringUtils.isNotBlank(String.valueOf(obj[1])) ? String.valueOf(obj[1]) : FilePathConstants.USER_DEFAULT_IMG );
+           	lstitems.add(item);
+        }
+        return lstitems;
+   	}
+   	
+   	/**
+   	 * 组装查询签到历史
+   	 * @param hql
+   	 * @param page
+   	 * @param args
+   	 * @return
+   	 */
+	public List<Map<String, Object>> querySignHistoryList(final String hql, final Pager page, final List<Object> args) {
+   		
+   		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>();
+   		Map<String, Object> map = null;
+   		
+        List<Object[]> lst  =  this.findList(hql, page, args, Object[].class);
+        
+        for (Object[] obj : lst) {
+        	map = new HashMap<String, Object>(8);
+        	map.put("firstSignTime", obj[0]);
+        	map.put("firstSignStatus", obj[1]);
+        	map.put("lastSignTime", obj[2]);
+        	map.put("lastSignStatus", obj[3]);
+        	map.put("signAddress", obj[4]);
+        	map.put("signName", obj[5]);
+        	map.put("signType", obj[6]);
+        	map.put("signStatisticsId", obj[7]);
+        	lstMap.add(map);
+         }
+         return lstMap;
+	}
+   	
+   	/**
+   	 * 组装查询签到、公司名称
+   	 * @return 
+   	 */
+   	@SuppressWarnings("unchecked")
+   	public List<SchSignStatistics> querySignItemListCom(String hql,List<Object> args) {
+       List<SchSignStatistics> lstitems = new ArrayList<SchSignStatistics>();
+       SchSignStatistics item;
+   	   List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+           	item = (SchSignStatistics) obj[0];
+           	if(null != obj[1]){
+           		item.setAttribute1(String.valueOf(obj[1]));
+           	}else{
+           		item.setAttribute1("");
+           	}
+           	lstitems.add(item);
+        }
+        return lstitems;
+   	}
+   	
+   	/**
+	 * 组装签到记录
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<SchSignStatistics> querySchSignStatisticses(String hql,List<Object> args ) {
+		
+		List<SchSignStatistics> result = new ArrayList<SchSignStatistics>();
+		SchSignStatistics statistics ;
+		
+		List<Object[]> lst = (List<Object[]>) this.getHibernateTemplate().find(hql, args.toArray());
+        for (Object[] obj : lst) {
+        	
+        	statistics = new SchSignStatistics();
+        	
+        	statistics = (SchSignStatistics)obj[0] ;
+        	statistics.setCompanyName(null != obj[1] ? String.valueOf(obj[1]) : "" );
+        	
+        	result.add(statistics);
+        }
+        
+        return result;
+	}
+	
+   	public List<SchSignStatistics> querySignItemListCom(final String hql, final Pager page, final List<Object> args) {
+   		
+        List<Object[]> lst  = this.findList(hql, page, args, Object[].class);
+    	
+        List<SchSignStatistics> lstitems = new ArrayList<SchSignStatistics>();
+        SchSignStatistics item;
+    	for (Object[] obj : lst) {
+    		item = new SchSignStatistics();
+    		item = (SchSignStatistics) obj[0];
+    		item.setAttribute1(null != obj[1] ? String.valueOf(obj[1]) : "") ;
+    		lstitems.add(item);
+    		
+        }
+		return lstitems;
+        
+   	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java b/src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java
new file mode 100644
index 0000000..b85a5dc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java
@@ -0,0 +1,24 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+package com.qxueyou.scc.school.helper;
+
+/**
+ * 每日积分上限通用策略,目前只有总共积分,未涉及到单个模块
+ * 
+ * @author ody.yuan
+ *
+ */
+public interface IJudgeLimitStrategy {
+	
+	/**
+	 * 检测积分上限
+	 * @param userId
+	 * @return
+	 */
+	boolean checkLimitFlag(String userId) ;
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java b/src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java
new file mode 100644
index 0000000..4c8cd82
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java
@@ -0,0 +1,26 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+package com.qxueyou.scc.school.helper;
+
+
+/**
+ * 各积分业务点判断依据,当前触发是否增加积分
+ * 
+ * @author ody.yuan
+ *
+ */
+public interface IJudgeUpdateStrategy {
+
+	/**
+	 * 当前业务模块是否增加积分
+	 * @param businessId
+	 * @param userId
+	 * @return
+	 */
+	boolean checkUpdateFlag(String businessId,String userId );
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java b/src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java
new file mode 100644
index 0000000..337b49e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java
@@ -0,0 +1,28 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+package com.qxueyou.scc.school.helper.judge;
+
+import org.springframework.stereotype.Component;
+
+import com.qxueyou.scc.school.helper.IJudgeUpdateStrategy;
+
+/**
+ * 通用判断是否加分策略,默认增加
+ * 
+ * @author ody.yuan
+ *
+ */
+@Component
+public class CommonJudgeStrategy implements IJudgeUpdateStrategy {
+	
+	public boolean checkUpdateFlag(String businessId,String userId ) {
+		
+		return true;
+		
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java b/src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java
new file mode 100644
index 0000000..5fe478e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java
@@ -0,0 +1,175 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 听课证模板实体
+ * @author Delin
+ *
+ */
+@Entity
+@Table(name="class_card_templet")
+@NamedQuery(name="ClassCardTemplet.findAll", query="SELECT s FROM ClassCardTemplet s")
+public class ClassCardTemplet implements Serializable , ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="TEMPLET_ID", unique=true, nullable=false, length=32)
+	private String templetId;
+	
+	/**  听课证模板编号 */
+	@Column(name="TEMPLET_NO")
+	private Integer templetNo;
+	
+	/**  听课证模板字段名字  */
+	@Column(name="FIELD_NAME", length=256)
+	private String fieldName;
+	
+	/** 听课证模板字段类型  */
+	@Column(name="FIELD_TYPE", length=256)
+	private String fieldType;
+	
+	/**  创建者ID */
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getTempletId() {
+		return templetId;
+	}
+
+	public void setTempletId(String templetId) {
+		this.templetId = templetId;
+	}
+
+	public Integer getTempletNo() {
+		return templetNo;
+	}
+
+	public void setTempletNo(Integer templetNo) {
+		this.templetNo = templetNo;
+	}
+
+	public String getFieldName() {
+		return fieldName;
+	}
+
+	public void setFieldName(String fieldName) {
+		this.fieldName = fieldName;
+	}
+
+	public String getFieldType() {
+		return fieldType;
+	}
+
+	public void setFieldType(String fieldType) {
+		this.fieldType = fieldType;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java b/src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java
new file mode 100644
index 0000000..ff7163d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java
@@ -0,0 +1,192 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+
+/**
+ * 学员拥有的评估信息view
+ * 
+ */
+@Entity
+@Table(name="evaluate_stu_student_v")
+public class EvaluateStuStudentV implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private EvaluateStuStudentVId id;
+	
+	private String evaluateName;
+	private short status;
+	private BigDecimal score;
+	private BigInteger evaluateCount;
+	private String createId;
+	private Date createTime;
+	private String updateId; 
+	private Date updateTime;
+	private Date endTime;
+
+	private String exerciseRecordId;
+	private String groupId;
+	
+	private String evaluateId;
+	private String userId;
+	public EvaluateStuStudentV() {
+	}
+
+	public EvaluateStuStudentV(EvaluateStuStudentVId id) {
+		this.id = id;
+	}
+
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "userId", column = @Column(name = "USER_ID", length = 32)),
+			@AttributeOverride(name = "evaluateId", column = @Column(name = "EVALUATE_ID")),
+			})
+	public EvaluateStuStudentVId getId() {
+		return this.id;
+	}
+
+	public void setId(EvaluateStuStudentVId id) {
+		this.id = id;
+	}
+
+	/** 评估标题  */
+	@Column(name="evaluate_name", length=128)
+	public String getEvaluateName() {
+		return evaluateName;
+	}
+
+	public void setEvaluateName(String evaluateName) {
+		this.evaluateName = evaluateName;
+	}
+
+	@Column(name="STATUS") 
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	@Column(name="SCORE",precision=10, scale=2)
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	@Column(name="EVALUATE_COUNT")
+	public BigInteger getEvaluateCount() {
+		return evaluateCount;
+	}
+
+	public void setEvaluateCount(BigInteger evaluateCount) {
+		this.evaluateCount = evaluateCount;
+	}
+
+	@Column(name="CREATE_ID", nullable=false)
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name="UPDATE_ID")
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**   */
+	@Column(name="UPDATE_TIME")
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/** 结束时间  */
+	@Column(name="END_TIME")
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+	@Transient
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+	@Transient
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	@Transient
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	@Transient
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java b/src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java
new file mode 100644
index 0000000..96c6bc8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java
@@ -0,0 +1,86 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+
+/**
+ * 学员拥有的评估信息view
+ * 
+ */
+@Embeddable
+public class EvaluateStuStudentVId implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	
+	private String evaluateId;
+	private String userId;
+	
+
+	public EvaluateStuStudentVId() {
+		
+	}
+
+	public EvaluateStuStudentVId(String evaluateId, String userId) {
+		this.evaluateId = evaluateId;
+		this.userId = userId;
+	}
+	
+	public EvaluateStuStudentVId(String evaluateName, short status, BigDecimal score, BigInteger evaluateCount,
+			String createId, Date createTime, String updateId, Date updateTime, Date endTime,String evaluateId, String userId) {
+		this.evaluateId = evaluateId;
+		this.userId = userId;
+	}
+
+	/** 用户id */
+	@Column(name="USER_ID", length=32)
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+	
+	@Column(name="EVALUATE_ID", length=32)
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof EvaluateStuStudentVId))
+			return false;
+		EvaluateStuStudentVId castOther = (EvaluateStuStudentVId) other;
+
+		return (
+				((this.getEvaluateId() == castOther.getEvaluateId()) || (this.getEvaluateId() != null
+						&& castOther.getEvaluateId() != null && this.getEvaluateId().equals(castOther.getEvaluateId())))
+				&& ((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				)
+				;
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getEvaluateId() == null ? 0 : this.getEvaluateId().hashCode());
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		return result;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/ExportSchSignItem.java b/src/main/java/com/qxueyou/scc/school/model/ExportSchSignItem.java
new file mode 100644
index 0000000..df12924
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/ExportSchSignItem.java
@@ -0,0 +1,118 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * The persistent class for the sch_sign_item database table.
+ * 
+ */
+public class ExportSchSignItem implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private String userName;
+	
+	private String mobilePhone;
+	
+	private String registeFlag;
+	
+	private Integer signOrder;
+
+	private Date signTime;
+	
+	private String signStatus;
+	
+	private Date endTime;
+	
+	private String endStatus;
+
+	private String signAddress;
+	
+	private String installFlag;
+	
+	public ExportSchSignItem() {
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public Date getSignTime() {
+		return signTime;
+	}
+
+	public void setSignTime(Date signTime) {
+		this.signTime = signTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getSignStatus() {
+		return signStatus;
+	}
+
+	public void setSignStatus(String signStatus) {
+		this.signStatus = signStatus;
+	}
+
+	public String getEndStatus() {
+		return endStatus;
+	}
+
+	public void setEndStatus(String endStatus) {
+		this.endStatus = endStatus;
+	}
+
+	public Integer getSignOrder() {
+		return signOrder;
+	}
+
+	public void setSignOrder(Integer signOrder) {
+		this.signOrder = signOrder;
+	}
+
+	public String getSignAddress() {
+		return signAddress;
+	}
+
+	public void setSignAddress(String signAddress) {
+		this.signAddress = signAddress;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getRegisteFlag() {
+		return registeFlag;
+	}
+
+	public void setRegisteFlag(String registeFlag) {
+		this.registeFlag = registeFlag;
+	}
+
+	public String getInstallFlag() {
+		return installFlag;
+	}
+
+	public void setInstallFlag(String installFlag) {
+		this.installFlag = installFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java b/src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java
new file mode 100644
index 0000000..ae6939e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+/**
+ * 讲义收藏提交结果数据
+ * @author zhiyong
+ *
+ */
+public class HandoutAnswerData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+	
+	private String id;
+	
+	/** 当前讲义ID  */ 
+	private String handoutId;
+
+	/** 讲义当前页ID  */
+	private String handoutPageId;
+
+	/**  收藏or删除收藏     true:收藏     false:删除收藏  */
+	private boolean favor;
+
+	/**  用户ID */
+	private String userId;
+
+	/**  班级ID */
+	private String classId;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	public String getHandoutPageId() {
+		return handoutPageId;
+	}
+
+	public void setHandoutPageId(String handoutPageId) {
+		this.handoutPageId = handoutPageId;
+	}
+
+	public boolean getFavor() {
+		return favor;
+	}
+
+	public void setFavor(boolean favor) {
+		this.favor = favor;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java b/src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java
new file mode 100644
index 0000000..9ebdf5d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java
@@ -0,0 +1,24 @@
+package com.qxueyou.scc.school.model;
+
+import java.util.List;
+
+/**
+ * 讲义 收藏提交结果
+ * @author zhiyong
+ *
+ */
+public class HandoutAnswerResult {
+	
+
+	/** 收藏or删除收藏列表  */
+	private List<HandoutAnswerData> records;
+
+	public List<HandoutAnswerData> getRecords() {
+		return records;
+	}
+
+	public void setRecords(List<HandoutAnswerData> records) {
+		this.records = records;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java b/src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java
new file mode 100644
index 0000000..c111948
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java
@@ -0,0 +1,156 @@
+package com.qxueyou.scc.school.model;
+// Generated 2018-3-22 21:54:48 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * HandoutConverTask generated by hbm2java
+ */
+@Entity
+@Table(name = "handout_conver_task")
+public class HandoutConverTask implements java.io.Serializable {
+	private static final long serialVersionUID = -8930342549317530970L;
+	private String taskId;
+	private String handoutId;
+	private String handoutUrl;
+	private Integer status;
+	private boolean deleteFlag;
+	private Date createTime;
+	private Date updateTime;
+	/*
+	 * 草稿
+	 */
+	public static final Integer STATUS_DRAFT = 0;
+
+	/*
+	 * 转码中
+	 */
+	public static final Integer STATUS_TRANSFORMING = 1;
+
+	/*
+	 * 已发布
+	 */
+	public static final Integer STATUS_PUBLISHED = 2;
+
+	/*
+	 * 已下架
+	 */
+	public static final Integer STATUS_TAKEOFF = 3;
+
+	/*
+	 * 转码失败
+	 */
+	public static final Integer STATUS_TRANSFAILED = 4;
+
+	/*
+	 * 排队中
+	 */
+	public static final Integer STATUS_LINEUP = 5;
+
+	public HandoutConverTask() {
+	}
+
+	public HandoutConverTask(String taskId, String handoutId, Date createTime, Date updateTime) {
+		this.taskId = taskId;
+		this.handoutId = handoutId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+	}
+
+	public HandoutConverTask(String taskId, String handoutId, String handoutUrl, Integer status, boolean deleteFlag,
+			Date createTime, Date updateTime) {
+		this.taskId = taskId;
+		this.handoutId = handoutId;
+		this.handoutUrl = handoutUrl;
+		this.status = status;
+		this.deleteFlag = deleteFlag;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "task_id", unique = true, nullable = false, length = 36)
+	public String getTaskId() {
+		return this.taskId;
+	}
+
+	public void setTaskId(String taskId) {
+		this.taskId = taskId;
+	}
+
+	@Column(name = "handout_id", nullable = false, length = 36)
+	public String getHandoutId() {
+		return this.handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	@Column(name = "handout_url")
+	public String getHandoutUrl() {
+		return this.handoutUrl;
+	}
+
+	public void setHandoutUrl(String handoutUrl) {
+		this.handoutUrl = handoutUrl;
+	}
+
+	@Column(name = "status")
+	public Integer getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	@Column(name = "delete_flag")
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "create_time", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "update_time", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/InteractResultData.java b/src/main/java/com/qxueyou/scc/school/model/InteractResultData.java
new file mode 100644
index 0000000..8d4efa9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/InteractResultData.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 互动提交结果数据
+ * @author zhiyong
+ *
+ */
+public class InteractResultData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8218583798576628162L;
+	
+	/**  组id */
+	private String exerciseGroupId;
+	
+	/** 当前题号   */
+	private String currTitleNum;
+
+	/** 是否提交  0:未提交  1:提交  */
+	private int status;
+	
+	private List<InterateAnswer> items;
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getCurrTitleNum() {
+		return currTitleNum;
+	}
+
+	public void setCurrTitleNum(String currTitleNum) {
+		this.currTitleNum = currTitleNum;
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public List<InterateAnswer> getItems() {
+		return items;
+	}
+
+	public void setItems(List<InterateAnswer> items) {
+		this.items = items;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java b/src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java
new file mode 100644
index 0000000..be8689e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+/**
+ * 互动每道题答案
+ * 
+ * @author zhiyong
+ *
+ */
+public class InterateAnswer implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+
+	private String exerciseId;
+	
+	private int type;
+
+	private String answer;
+	
+	private String correct;
+	
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+
+	public int getType() {
+		return type;
+	}
+
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+
+	public String getAnswer() {
+		return answer;
+	}
+
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+
+	public String getCorrect() {
+		return correct;
+	}
+
+	public void setCorrect(String correct) {
+		this.correct = correct;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java b/src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java
new file mode 100644
index 0000000..1287d82
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java
@@ -0,0 +1,370 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 课程签到统计表
+ * 
+ */
+@Entity
+@Table(name="LESSION_SIGN_STATISTICS ")
+@NamedQuery(name="LessionSignStatistics.findAll", query="SELECT s FROM LessionSignStatistics s")
+public class LessionSignStatistics implements Serializable,ITrace {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="LESSION_SIGN_ID", unique=true, nullable=false, length=32)
+	private String lessionSignId;
+	
+	/** 签到班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/** 签到班级name */
+	@Column(name="CLASS_NAME", length=255)
+	private String className;
+	
+	/** 课程表ID */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+	
+	/** 课程表name */
+	@Column(name="CLASS_SCHEDULE_NAME", length=255)
+	private String classScheduleName;
+	
+	/** 课程表ID */
+	@Column(name="CLASS_SUBJECT_ID", length=32)
+	private String classSubjectId;
+	
+	/** 课程表name */
+	@Column(name="CLASS_SUBJECT_NAME", length=255)
+	private String classSubjectName;
+	
+	/** 统计时间 */
+	@Column(name="STATISTICS_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date statisticsTime;
+	
+	/** 科目id */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/** 科目name */
+	@Column(name="COLLEGE_COURSE_NAME", length=255)
+	private String collegeCourseName;
+	
+	/** 机构id */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/** 机构name */
+	@Column(name="ORG_NAME", length=255)
+	private String orgName;
+	
+	/** 顶层机构id */
+	@Column(name="TOP_ORGANIZATION_ID", length=32)
+	private String topOrganizationId;
+	
+	/** 课程开始时间 */
+	@Column(name="START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+	
+	/** 课程结束时间 */
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+	
+	/** 应到总人数 */
+	@Column(name="TOTAL_SIGN_USER_COUNT")
+	private Integer totalSignUserCount;
+	
+	/** 上课签到总人数 */
+	@Column(name="FIRST_SIGN_USER_COUNT")
+	private Integer firstSignUserCount;
+	
+	/** 下课签到总人数 */
+	@Column(name="LAST_SIGN_USER_COUNT")
+	private Integer lastSignUserCount;
+	
+	/** 签到类型,上课签到,上下课签到  */
+	@Column(name = "SIGN_TYPE")
+	private Short signType;
+	
+	/** 签到地址 */
+	@Column(name="ADDRESS", length=255)
+	private String address;
+	
+	/** 创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/** 修改时间 */
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+	
+	/** 创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/** 创建人ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	/** 修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/** 修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getTopOrganizationId() {
+		return topOrganizationId;
+	}
+
+	public void setTopOrganizationId(String topOrganizationId) {
+		this.topOrganizationId = topOrganizationId;
+	}
+
+	public String getCollegeCourseName() {
+		return collegeCourseName;
+	}
+
+	public void setCollegeCourseName(String collegeCourseName) {
+		this.collegeCourseName = collegeCourseName;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getLessionSignId() {
+		return lessionSignId;
+	}
+
+	public void setLessionSignId(String lessionSignId) {
+		this.lessionSignId = lessionSignId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public String getClassScheduleName() {
+		return classScheduleName;
+	}
+
+	public void setClassScheduleName(String classScheduleName) {
+		this.classScheduleName = classScheduleName;
+	}
+
+	public String getClassSubjectId() {
+		return classSubjectId;
+	}
+
+	public void setClassSubjectId(String classSubjectId) {
+		this.classSubjectId = classSubjectId;
+	}
+
+	public String getClassSubjectName() {
+		return classSubjectName;
+	}
+
+	public void setClassSubjectName(String classSubjectName) {
+		this.classSubjectName = classSubjectName;
+	}
+
+	public Date getStatisticsTime() {
+		return statisticsTime;
+	}
+
+	public void setStatisticsTime(Date statisticsTime) {
+		this.statisticsTime = statisticsTime;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Integer getTotalSignUserCount() {
+		return totalSignUserCount;
+	}
+
+	public void setTotalSignUserCount(Integer totalSignUserCount) {
+		this.totalSignUserCount = totalSignUserCount;
+	}
+
+	public Integer getFirstSignUserCount() {
+		return firstSignUserCount;
+	}
+
+	public void setFirstSignUserCount(Integer firstSignUserCount) {
+		this.firstSignUserCount = firstSignUserCount;
+	}
+
+	public Integer getLastSignUserCount() {
+		return lastSignUserCount;
+	}
+
+	public void setLastSignUserCount(Integer lastSignUserCount) {
+		this.lastSignUserCount = lastSignUserCount;
+	}
+
+	public Short getSignType() {
+		return signType;
+	}
+
+	public void setSignType(Short signType) {
+		this.signType = signType;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchArticle.java b/src/main/java/com/qxueyou/scc/school/model/SchArticle.java
new file mode 100644
index 0000000..ab40e7d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchArticle.java
@@ -0,0 +1,334 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 文章功能
+ * 
+ * @author zhiyong
+ *
+ */
+@Entity
+@Table(name="sch_article")
+@NamedQuery(name="SchArticle.findAll", query="SELECT s FROM SchArticle s")
+public class SchArticle implements Serializable , ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/*
+	 * 草稿
+	 */
+	public static final short STATUS_DRAFT = 0;
+	
+	/*
+	 * 已发布
+	 */
+	public static final short STATUS_PUBLISHED = 2;
+	
+	/*
+	 * 已下架
+	 */
+	public static final short STATUS_TAKEOFF = 3;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ARTICLE_ID", unique=true, nullable=false, length=32)
+	private String articleId;
+	
+	/**  地址  */
+	@Column(name="COVER_PAGE_URL", length=255)
+	private String coverPageUrl;
+	
+	/**  地址  */
+	@Column(name="URL", length=255)
+	private String url;
+	
+	/** 课程id  */
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	/** 课程名字  */
+	@Column(name="SUBJECT_NAME", length=255)
+	private String subjectName;
+	
+	/**  名称  */
+	@Column(name="NAME", length=255)
+	private String name;
+	
+	/** 机构ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**  班级ID  */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/** 科目ID  */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	/** 管理排序,班主任排序 */
+	@Column(name="ORDER_NUM")
+	private Integer orderNum;
+	
+	/** 原始文章ID  */
+	@Column(name="ORIGIN_ARTICLE_ID", length=32)
+	private String originArticleId;
+	
+	/**  观看次数  */
+	@Column(name="VIEW_COUNT", length=32)
+	private Integer viewCount;
+	
+	/**  评论次数  */
+	@Column(name="COMMENT_COUNT", length=32)
+	private Integer commentCount;
+	
+	/** 文本内容 */
+	@Transient
+	private String content;
+	
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+	
+	/**  状态 */
+	@Column(name="STATUS")
+	private short status;
+	
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+	
+	public Integer getCommentCount() {
+		return commentCount;
+	}
+
+	public void setCommentCount(Integer commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public Integer getViewCount() {
+		return viewCount;
+	}
+
+	public void setViewCount(Integer viewCount) {
+		this.viewCount = viewCount;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getArticleId() {
+		return articleId;
+	}
+
+	public void setArticleId(String articleId) {
+		this.articleId = articleId;
+	}
+
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getOriginArticleId() {
+		return originArticleId;
+	}
+
+	public void setOriginArticleId(String originArticleId) {
+		this.originArticleId = originArticleId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java b/src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java
new file mode 100644
index 0000000..62923a6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java
@@ -0,0 +1,184 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Table(name="sch_article_re_course")
+public class SchArticleReCourse implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ARTICLE_COURSE_ID", unique=true, nullable=false, length=32)
+	private String articleCourseId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  科目ID */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/**  讲义ID  */
+	@Column(name="ARTICLE_ID", length=32)
+	private String articleId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/**  orgID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;	
+
+	/** 讲义管理排序 */
+	@Column(name="ORDER_NUM")
+	private Integer orderNum;
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+	
+	public String getArticleCourseId() {
+		return articleCourseId;
+	}
+
+	public void setArticleCourseId(String articleCourseId) {
+		this.articleCourseId = articleCourseId;
+	}
+
+	public String getArticleId() {
+		return articleId;
+	}
+
+	public void setArticleId(String articleId) {
+		this.articleId = articleId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java b/src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java
new file mode 100644
index 0000000..f5fb0a9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java
@@ -0,0 +1,195 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the sch_article_statistic database table.
+ * 
+ */
+@Entity
+@Table(name="sch_article_statistic")
+@NamedQuery(name="SchArticleStatistic.findAll", query="SELECT s FROM SchArticleStatistic s")
+public class SchArticleStatistic implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ARTICLE_STATISTIC_ID", unique=true, nullable=false, length=32)
+	private String articleStatisticId;
+
+	@Column(name="ARTICLE_ID")
+	private String articleId;
+
+	@Column(name="ARTICLE_NAME")
+	private String articleName;
+
+	@Column(name="CLASS_ID")
+	private String classId;
+
+	@Column(name="COMP_DEGREE")
+	private double compDegree;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="ORG_ID")
+	private String orgId;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name="USER_ID")
+	private String userId;
+
+	@Column(name="USER_NAME")
+	private String userName;
+
+	public String getArticleStatisticId() {
+		return articleStatisticId;
+	}
+
+	public void setArticleStatisticId(String articleStatisticId) {
+		this.articleStatisticId = articleStatisticId;
+	}
+
+	public String getArticleId() {
+		return articleId;
+	}
+
+	public void setArticleId(String articleId) {
+		this.articleId = articleId;
+	}
+
+	public String getArticleName() {
+		return articleName;
+	}
+
+	public void setArticleName(String articleName) {
+		this.articleName = articleName;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public double getCompDegree() {
+		return this.compDegree;
+	}
+
+	public void setCompDegree(double compDegree) {
+		this.compDegree = compDegree;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchChapter.java b/src/main/java/com/qxueyou/scc/school/model/SchChapter.java
new file mode 100644
index 0000000..bd1ba9c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchChapter.java
@@ -0,0 +1,308 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+//import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+//import org.hibernate.annotations.Fetch;
+//import org.hibernate.annotations.FetchMode;
+//import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * The persistent class for the sch_chapter database table.
+ * 
+ */
+@Entity
+@Table(name = "SCH_CHAPTER")
+@NamedQuery(name = "SchChapter.findAll", query = "SELECT s FROM SchChapter s")
+public class SchChapter implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+
+	private String code;
+
+	@Column(name = "CREATE_ID")
+	private String createId;
+
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name = "DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name = "ORG_ID")
+	private String orgId;
+
+	@Column(name = "TOP_ORG_ID")
+	private String topOrgId;
+
+	private String name;
+
+	@Column(name = "PARENT_CHAPTER_ID")
+	private String parentChapterId;
+
+	@Column(name = "ORG_CHAPTER_ID")
+	private String orgChapterId;
+
+	@Column(name = "ORIG_CHAPTER_ID")
+	private String origChapterId;
+
+	@Column(name = "SUBJECT_ID")
+	private String subjectId;
+
+	@Column(name = "COLLEGE_COURSE_ID")
+	private String collegeCourseId;
+
+	@Column(name = "CLASS_ID")
+	private String classId;
+
+	@Column(name = "UPDATE_ID")
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name = "ORDER_NUM")
+	private int orderNum;
+
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	//,referencedColumnName="CHAPTER_ID"
+	@JoinColumn(name = "PARENT_CHAPTER_ID",updatable=false,insertable=false)	
+	private SchChapter parent;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
+	private List<SchChapter> childs;
+
+	/**
+	 * 
+	 */
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID", referencedColumnName = "CLASS_SUBJECT_ID", insertable = false, updatable = false)
+	@JsonIgnore
+	private SchClassSubject classSubject;
+
+	/** 课程 */
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID", referencedColumnName = "SUBJECT_ID", updatable = false, insertable = false)
+	@JsonIgnore
+	private Subject subject;
+	
+	
+	public SchChapter getParent() {
+		return parent;
+	}
+
+	public void setParent(SchChapter parent) {
+		this.parent = parent;
+	}
+
+	public List<SchChapter> getChilds() {
+		return childs;
+	}
+
+	public void setChilds(List<SchChapter> childs) {
+		this.childs = childs;
+	}
+	
+	
+	public SchClassSubject getClassSubject() {
+		return classSubject;
+	}
+
+	public void setClassSubject(SchClassSubject classSubject) {
+		this.classSubject = classSubject;
+	}
+
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgChapterId() {
+		return orgChapterId;
+	}
+
+	public void setOrgChapterId(String orgChapterId) {
+		this.orgChapterId = orgChapterId;
+	}
+
+	public String getOrigChapterId() {
+		return origChapterId;
+	}
+
+	public void setOrigChapterId(String origChapterId) {
+		this.origChapterId = origChapterId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getParentChapterId() {
+		return this.parentChapterId;
+	}
+
+	public void setParentChapterId(String parentChapterId) {
+		this.parentChapterId = parentChapterId;
+	}
+
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassCard.java b/src/main/java/com/qxueyou/scc/school/model/SchClassCard.java
new file mode 100644
index 0000000..466dc47
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassCard.java
@@ -0,0 +1,259 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 听课证实体
+ * @author Delin
+ *
+ */
+@Entity
+@Table(name="sch_class_card")
+@NamedQuery(name="SchClassCard.findAll", query="SELECT s FROM SchClassCard s")
+public class SchClassCard implements Serializable , ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CLASS_CARD_ID", unique=true, nullable=false, length=32)
+	private String classCardId;
+	
+	/**  班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/**  听课证模板编号 */
+	@Column(name="TEMPLET_NO")
+	private Integer templetNo;
+	
+	/**  是否双面(0、是,1、否。默认为0) */
+	@Column(name="DOUBLE_SIDED_FLAG", nullable=false)
+	private boolean doubleSidedFlag;
+	
+	/**  是否显示正面签到二维码(0、是,1、否。默认为0) */
+	@Column(name="SIGN_CODE_FLAG", nullable=false)
+	private boolean signCodeFlag;
+	
+	/**  是否显示反面二维码(0、是,1、否。默认为1) */
+	@Column(name="CODE_FLAG", nullable=false)
+	private boolean codeFlag;
+	
+	/**  反面二维码路径 */
+	@Column(name="CODE_URL", length=256)
+	private String codeUrl;
+	
+	/**  是否显示头像(0、是,1、否。默认为1) */
+	@Column(name="HEAD_IMG_FLAG", nullable=false)
+	private boolean headImgFlag;
+	
+	/**  存储显示头像的自定义字段Id,没有自定义字段显示个人头像字段(IMG_PATH) */
+	@Column(name="HEAD_IMG_FIELD", length=64)
+	private String headImgField;
+	
+	/**  证件名称 */
+	@Column(name="CARD_NAME", length=256)
+	private String cardName;
+	
+	/**  宣传语  */
+	@Column(name="SLOGAN", length=256)
+	private String slogan;
+	
+	/**  创建者ID */
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getClassCardId() {
+		return classCardId;
+	}
+
+	public void setClassCardId(String classCardId) {
+		this.classCardId = classCardId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public Integer getTempletNo() {
+		return templetNo;
+	}
+
+	public void setTempletNo(Integer templetNo) {
+		this.templetNo = templetNo;
+	}
+
+	public boolean getDoubleSidedFlag() {
+		return doubleSidedFlag;
+	}
+
+	public void setDoubleSidedFlag(boolean doubleSidedFlag) {
+		this.doubleSidedFlag = doubleSidedFlag;
+	}
+
+	public boolean getSignCodeFlag() {
+		return signCodeFlag;
+	}
+
+	public void setSignCodeFlag(boolean signCodeFlag) {
+		this.signCodeFlag = signCodeFlag;
+	}
+
+	public boolean getCodeFlag() {
+		return codeFlag;
+	}
+
+	public void setCodeFlag(boolean codeFlag) {
+		this.codeFlag = codeFlag;
+	}
+
+	public String getCodeUrl() {
+		return codeUrl;
+	}
+
+	public void setCodeUrl(String codeUrl) {
+		this.codeUrl = codeUrl;
+	}
+
+	public boolean getHeadImgFlag() {
+		return headImgFlag;
+	}
+
+	public void setHeadImgFlag(boolean headImgFlag) {
+		this.headImgFlag = headImgFlag;
+	}
+
+	public String getHeadImgField() {
+		return headImgField;
+	}
+
+	public void setHeadImgField(String headImgField) {
+		this.headImgField = headImgField;
+	}
+
+	public String getCardName() {
+		return cardName;
+	}
+
+	public void setCardName(String cardName) {
+		this.cardName = cardName;
+	}
+
+	public String getSlogan() {
+		return slogan;
+	}
+
+	public void setSlogan(String slogan) {
+		this.slogan = slogan;
+	}
+		
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java b/src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java
new file mode 100644
index 0000000..a7c47c0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java
@@ -0,0 +1,187 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 听课证模板值表
+ * @author Delin
+ *
+ */
+@Entity
+@Table(name="sch_class_card_templet")
+@NamedQuery(name="SchClassCardTemplet.findAll", query="SELECT s FROM SchClassCardTemplet s")
+public class SchClassCardTemplet implements Serializable , ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CARD_TEMPLET_ID", unique=true, nullable=false, length=32)
+	private String cardTempletId;
+	
+	/** 听课证ID  */
+	@Column(name="CLASS_CARD_ID", length=32)
+	private String classCardId;
+	
+	/** 模板ID  */
+	@Column(name="TEMPLET_ID", length=32)
+	private String templetid;
+	
+	/** 听课证模板字段值  */
+	@Column(name="FIELD_VALUE", length=1000)
+	private String fieldValue;
+	
+	/** 听课证模板字段值扩展  */
+	@Column(name="FIELD_VALUE_EXTEND", length=1000)
+	private String fieldValueExtend;
+	
+	/**  创建者ID */
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCardTempletId() {
+		return cardTempletId;
+	}
+
+	public void setCardTempletId(String cardTempletId) {
+		this.cardTempletId = cardTempletId;
+	}
+
+	public String getClassCardId() {
+		return classCardId;
+	}
+
+	public void setClassCardId(String classCardId) {
+		this.classCardId = classCardId;
+	}
+
+	public String getTempletid() {
+		return templetid;
+	}
+
+	public void setTempletid(String templetid) {
+		this.templetid = templetid;
+	}
+
+	public String getFieldValue() {
+		return fieldValue;
+	}
+
+	public void setFieldValue(String fieldValue) {
+		this.fieldValue = fieldValue;
+	}
+
+	public String getFieldValueExtend() {
+		return fieldValueExtend;
+	}
+
+	public void setFieldValueExtend(String fieldValueExtend) {
+		this.fieldValueExtend = fieldValueExtend;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassCircle.java b/src/main/java/com/qxueyou/scc/school/model/SchClassCircle.java
new file mode 100644
index 0000000..d7a32d4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassCircle.java
@@ -0,0 +1,181 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+import java.util.Date;
+
+
+/**
+ * The persistent class for the sch_class_circle database table.
+ * 
+ */
+@Entity
+@Table(name="sch_class_circle")
+@NamedQuery(name="SchClassCircle.findAll", query="SELECT s FROM SchClassCircle s")
+public class SchClassCircle implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	private int authorize;
+
+	@Column(name="authorize_to_other")
+	private int authorizeToOther;
+
+	@Column(name="background_url")
+	private String backgroundUrl;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="class_circle_id")
+	private String classCircleId;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@Temporal(TemporalType.DATE)
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	private boolean enable;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@Temporal(TemporalType.DATE)
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name="user_id")
+	private String userId;
+
+	@Column(name="user_name")
+	private String userName;
+
+	public SchClassCircle() {
+	}
+
+	public int getAuthorize() {
+		return this.authorize;
+	}
+
+	public void setAuthorize(int authorize) {
+		this.authorize = authorize;
+	}
+
+	public int getAuthorizeToOther() {
+		return this.authorizeToOther;
+	}
+
+	public void setAuthorizeToOther(int authorizeToOther) {
+		this.authorizeToOther = authorizeToOther;
+	}
+
+	public String getBackgroundUrl() {
+		return this.backgroundUrl;
+	}
+
+	public void setBackgroundUrl(String backgroundUrl) {
+		this.backgroundUrl = backgroundUrl;
+	}
+
+	public String getClassCircleId() {
+		return this.classCircleId;
+	}
+
+	public void setClassCircleId(String classCircleId) {
+		this.classCircleId = classCircleId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public boolean getEnable() {
+		return this.enable;
+	}
+
+	public void setEnable(boolean enable) {
+		this.enable = enable;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassCircleMsg.java b/src/main/java/com/qxueyou/scc/school/model/SchClassCircleMsg.java
new file mode 100644
index 0000000..36bcce2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassCircleMsg.java
@@ -0,0 +1,326 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.operation.comment.mode.Comment;
+import com.qxueyou.scc.user.model.User;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_class_circle_msg database table.
+ * 
+ */
+@Entity
+@Table(name="sch_class_circle_msg")
+@NamedQuery(name="SchClassCircleMsg.findAll", query="SELECT s FROM SchClassCircleMsg s")
+public class SchClassCircleMsg implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name="msg_id")
+	private String msgId;
+	
+	@Column(name="class_circle_id")
+	@JsonIgnore
+	private String classCircleId;
+
+	@Column(name="class_id")
+	@JsonIgnore
+	private String classId;
+
+	@Column(name="comment_count")
+	private Integer commentCount;
+
+	private String content;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="like_count")
+	private Integer likeCount;
+
+	@Column(name="msg_type")
+	@JsonIgnore
+	private Integer msgType;
+
+	@Column(name="org_id")
+	@JsonIgnore
+	private String orgId;
+
+	private String title;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="UPDATE_TIME")
+	@JsonIgnore
+	private Date updateTime;
+
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="user_id")
+	private String userId;
+	
+	@Transient
+	@JsonIgnore
+	private User user;
+	
+	@Transient
+	private String name;
+	
+	@Transient
+	private String imgPath;
+	
+	@Transient
+	private List<SchImg> imgs;
+	
+	@Transient
+	private List<SchFile> files;
+	
+	@Transient
+	private List<Comment> comments;
+	
+	@Transient
+	private boolean myLike;
+	
+	@Transient
+	private String imgsJson;
+	
+	@Transient
+	private String filesJson;
+
+	public String getImgsJson() {
+		return imgsJson;
+	}
+
+	public void setImgsJson(String imgsJson) {
+		this.imgsJson = imgsJson;
+	}
+
+	public String getFilesJson() {
+		return filesJson;
+	}
+
+	public void setFilesJson(String filesJson) {
+		this.filesJson = filesJson;
+	}
+
+	public boolean getMyLike() {
+		return myLike;
+	}
+
+	public void setMyLike(boolean myLike) {
+		this.myLike = myLike;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public List<SchImg> getImgs() {
+		return imgs;
+	}
+
+	public void setImgs(List<SchImg> imgs) {
+		this.imgs = imgs;
+	}
+
+	public List<SchFile> getFiles() {
+		return files;
+	}
+
+	public void setFiles(List<SchFile> files) {
+		this.files = files;
+	}
+
+	public List<Comment> getComments() {
+		return comments;
+	}
+
+	public void setComments(List<Comment> comments) {
+		this.comments = comments;
+	}
+
+	public String getClassCircleId() {
+		return this.classCircleId;
+	}
+
+	public void setClassCircleId(String classCircleId) {
+		this.classCircleId = classCircleId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public Integer getCommentCount() {
+		return this.commentCount;
+	}
+
+	public void setCommentCount(Integer commentCount) {
+		this.commentCount = commentCount;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Integer getLikeCount() {
+		return this.likeCount;
+	}
+
+	public void setLikeCount(Integer likeCount) {
+		this.likeCount = likeCount;
+	}
+
+	public String getMsgId() {
+		return this.msgId;
+	}
+
+	public void setMsgId(String msgId) {
+		this.msgId = msgId;
+	}
+
+	public Integer getMsgType() {
+		return this.msgType;
+	}
+
+	public void setMsgType(Integer msgType) {
+		this.msgType = msgType;
+	}
+
+	public String getOrgId() {
+		return this.orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java b/src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java
new file mode 100644
index 0000000..7eafe99
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java
@@ -0,0 +1,156 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+/**
+ * 课件视图实体
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="V_SCH_CLASS_COURSEWARE")
+@NamedQuery(name="SchClassCourseware.findAll", query="SELECT s FROM SchClassCourseware s")
+public class SchClassCourseware implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	public static String COURSEWARE_TYPE_VIDEO = "video";
+	public static String COURSEWARE_TYPE_HANDOUT = "handout";
+	public static String COURSEWARE_TYPE_EXERCISE = "exercise";
+	public static String COURSEWARE_TYPE_ARTICLE = "article";
+	
+	@Id
+	private String id;
+
+	private String name;
+	
+	private String remark;
+	
+	@Column(name="ORDER_NUM")
+	private int orderNum;
+
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+	
+	@Column(name="COLLEGE_COURSE_ID")
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID")
+	private String orgId;
+	
+	@Column(name="CLASS_ID")
+	private String classId;
+	
+	private String type;
+	
+	private String status;
+	
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+	
+	@Column(name="PARENT_CHAPTER_ID")
+	private String parentChapterId;
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getParentChapterId() {
+		return parentChapterId;
+	}
+
+	public void setParentChapterId(String parentChapterId) {
+		this.parentChapterId = parentChapterId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java b/src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java
new file mode 100644
index 0000000..3142af1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java
@@ -0,0 +1,512 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+//import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.exercise.model.ExerciseChapter;
+import com.qxueyou.scc.org.model.OrgTeacher;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+//import com.qxueyou.scc.school.model.SchHandout;
+
+
+/**
+ * 班级课表  实体类
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_CLASS_SCHEDULE")
+//@NamedQuery(name="SchClassSchedule.findAll", query="SELECT s FROM SchClassSchedule s")
+public class SchClassSchedule implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	/** 上课类型    4:公共课程*/
+	public static final short SCHEDULE_TYPE_TO_START = 1;
+	
+	public static final short SCHEDULE_TYPE_ON_GOING = 2;
+	
+	public static final short SCHEDULE_TYPE_IS_COMPLETED= 3;
+	
+	/**课程类型  1:公共课程  0:正常课程**/
+	public static final int SCHEDULE_TYPE_DEFAULT= 0;
+	public static final int SCHEDULE_TYPE_PUBLIC= 1;
+	
+	/**面授*/
+	public static final String SCH_FACE = "FACE_TO_FACE";
+	/**网络*/
+	public static final String SCH_NETWORK = "NETWORK";
+
+	/** 课程主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CLASS_SCHEDULE_ID", unique=true, nullable=false, length=32)
+	private String classScheduleId;
+	
+
+	
+	/** 课程名称*/
+	@Column(name="NAME", length=150)
+	private String name;
+
+	/** 状态 */
+	@Column(name="STATUS")
+	private short status;
+	
+//	public List<SchHandout> getHandouts() {
+//		return handouts;
+//	}
+//
+//	public void setHandouts(List<SchHandout> handouts) {
+//		this.handouts = handouts;
+//	}
+
+	/** 地址 */
+	@Column(name="ADDRESS", length=255)
+	private String address;
+
+	/** 结束时间 */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/** 开始时间 */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+
+	/** 班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/** 上课内容,简介 */
+	@Column(name="CONTENT")
+	private String content;
+
+	/** 学校专业  */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/** 高校课程ID,非高校,机构课程ID */
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	/** 非高校,班级课程ID */
+	@Column(name="CLASS_SUBJECT_ID", length=32)
+	private String classSubjectId;
+	
+	/** 图片路径  */
+	@Column(name="IMG_PATH", length=32)
+	private String imgPath;
+	
+	/** 学期ID  */
+	@Column(name="TERM_ID", length=32)
+	private String termId;
+	
+	/** 上课地址ID  */
+	@Column(name="ADDRESS_ID", length=32)
+	private String addressId;
+	
+	/** 高校课表使用:第几节课开始ID  */
+	@Column(name="DAY_START_ID", length=32)
+	private String dayStartId;
+	
+	/** 高校课表使用:第几节课开始序号  */
+	@Column(name="DAY_START_ORDER")
+	private short dayStartOrder;
+	
+	/** 高校课表使用:第几节课结束ID  */
+	@Column(name="DAY_END_ID", length=32)
+	private String dayEndId;
+	
+	/** 高校课表使用:第几节课结束序号  */
+	@Column(name="DAY_END_ORDER")
+	private short dayEndOrder;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	/** TYPE 类型  */
+	@Column(name="TYPE")
+	private Integer type;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "classSchedules")
+	@JsonIgnore
+	private List<ExerciseChapter> chapters;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "TEACHER_ID",referencedColumnName="ORG_TEACHER_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private OrgTeacher teacherClassSchedule;
+	
+	@Transient
+	private String handoutCount;
+	
+	@Transient
+	private String teacherImg;
+	
+	/** 课程模式(面授/网络)  */
+	@Column(name="MODE", length=20)
+	private String mode;
+	
+	@Column(name="SUBJECT_EXTEND_ID", length=32)
+	private String subjectExtendId;
+	
+	/*
+	 * 状态:未开始 
+	 */
+	public static final short STATUS_NOT_START=0;
+	
+	/*
+	 * 状态:上课中
+	 */
+	public static final short STATUS_IN_PROGRESS=1;
+	
+	/*
+	 * 状态:结束
+	 */
+	public static final short STATUS_END=2;
+
+	@Column(name="TEACHER",length=50)
+	private String teacher;
+
+	@Column(name="TEACHER_ID", length=32)
+	private String teacherId;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID",referencedColumnName="SUBJECT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Subject subject;
+	
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+
+	public String getMode() {
+		return mode;
+	}
+
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+
+	public String getSubjectExtendId() {
+		return subjectExtendId;
+	}
+
+	public void setSubjectExtendId(String subjectExtendId) {
+		this.subjectExtendId = subjectExtendId;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+	
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+	
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getStatusAlias() {
+		switch(this.status){
+			case STATUS_NOT_START:return "未开始";
+			case STATUS_IN_PROGRESS:return "进行中";
+			case STATUS_END:return "已结束";
+			default:return "未开始";
+		}
+	}
+
+	public short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getTeacher() {
+		return this.teacher;
+	}
+
+	public void setTeacher(String teacher) {
+		this.teacher = teacher;
+	}
+
+	public String getTeacherId() {
+		return this.teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<ExerciseChapter> getChapters() {
+		return chapters;
+	}
+
+	public void setChapters(List<ExerciseChapter> chapters) {
+		this.chapters = chapters;
+	}
+
+	public String getHandoutCount() {
+		return handoutCount;
+	}
+
+	public void setHandoutCount(String handoutCount) {
+		this.handoutCount = handoutCount;
+	}
+
+	public String getTeacherImg() {
+		return teacherImg;
+	}
+
+	public void setTeacherImg(String teacherImg) {
+		this.teacherImg = teacherImg;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getTermId() {
+		return termId;
+	}
+
+	public void setTermId(String termId) {
+		this.termId = termId;
+	}
+
+	public String getAddressId() {
+		return addressId;
+	}
+
+	public void setAddressId(String addressId) {
+		this.addressId = addressId;
+	}
+
+	public OrgTeacher getTeacherClassSchedule() {
+		return teacherClassSchedule;
+	}
+
+	public void setTeacherClassSchedule(OrgTeacher teacherClassSchedule) {
+		this.teacherClassSchedule = teacherClassSchedule;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public String getDayStartId() {
+		return dayStartId;
+	}
+
+	public void setDayStartId(String dayStartId) {
+		this.dayStartId = dayStartId;
+	}
+
+	public short getDayStartOrder() {
+		return dayStartOrder;
+	}
+
+	public void setDayStartOrder(short dayStartOrder) {
+		this.dayStartOrder = dayStartOrder;
+	}
+
+	public String getDayEndId() {
+		return dayEndId;
+	}
+
+	public void setDayEndId(String dayEndId) {
+		this.dayEndId = dayEndId;
+	}
+
+	public short getDayEndOrder() {
+		return dayEndOrder;
+	}
+
+	public void setDayEndOrder(short dayEndOrder) {
+		this.dayEndOrder = dayEndOrder;
+	}
+
+	public String getClassSubjectId() {
+		return classSubjectId;
+	}
+
+	public void setClassSubjectId(String classSubjectId) {
+		this.classSubjectId = classSubjectId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java b/src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java
new file mode 100644
index 0000000..92b4853
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java
@@ -0,0 +1,377 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+//import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+//import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+//import org.hibernate.annotations.Fetch;
+//import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 班级课程
+ * 
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name = "SCH_CLASS_SUBJECT")
+@NamedQuery(name = "SchClassSubject.findAll", query = "SELECT s FROM SchClassSubject s")
+public class SchClassSubject implements Serializable, ITrace {
+
+	private static final long serialVersionUID = 1L;
+	/** 1 必修 2 选修 **/
+	public static final short SUBJECT_TYPE_REQUIRED = 1;
+	public static final short SUBJECT_TYPE_ELECTIVE = 2;
+
+	/** 1 考试 2 考查 **/
+	public static final short SUBJECT_EXAMINATION_REQUIRED = 1;
+	public static final short SUBJECT_EXAMINATION_EXAMINE = 2;
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "CLASS_SUBJECT_ID", unique = true, nullable = false, length = 32)
+	private String classSubjectId;
+
+	/** 名称 */
+	@Column(name = "NAME", length = 150)
+	private String name;
+
+	/** 全称 */
+	@Column(name = "FULL_NAME", length = 255)
+	private String fullName;
+
+	/** 编码 */
+	@Column(name = "CODE", length = 64)
+	private String code;
+	
+	/** 排序顺序号 */
+	@Column(name = "ORDER_NUM")
+	private int orderNum;
+	
+
+	/** 内容简介 */
+	@Column(name = "CONTENT", length = 255)
+	private String content;
+
+	/** 学分 */
+	@Column(name = "CREDIT", precision = 4, scale = 2)
+	private BigDecimal credit;
+
+	/** 课程类别(必修、选修) */
+	@Column(name = "TYPE")
+	private short type;
+
+	/** 考试形式(考试、考查) */
+	@Column(name = "EXAMINATION_FORM")
+	private short examinationForm;
+
+	/** 机构拷贝专业ID,非高校拷贝科目ID */
+	@Column(name = "COURSE_ID", length = 32)
+	private String courseId;
+
+	/** 班级ID */
+	@Column(name = "CLASS_ID", length = 32)
+	private String classId;
+
+	/** 原始公共课程ID */
+	@Column(name = "ORIG_SUBJECT_ID", length = 32)
+	private String origSubjectId;
+
+	/** 班级复制:复制课程保存原始班级的课程ID */
+	@Column(name = "ORIG_CLASS_SUBJECT_ID", length = 32)
+	private String origClassSubjectId;
+
+	@Column(name = "CREATE_ID")
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name = "UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	/** 学生课表 */
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "subject")
+	@JsonIgnore
+	public List<SchStudentSchedule> studentSchedules;
+
+	/** 班级课表 */
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "subject")
+	@JsonIgnore
+	public List<SchClassSchedule> classSchedules;
+
+	@Transient
+	public List<SchClassSchedule> lstClassSchedules;
+
+	/** 签到类型 */
+	@Transient
+	private Short signType;
+
+	@Transient
+	private int videoCount;
+
+	@Transient
+	private int handoutCount;
+
+	@Transient
+	private int articleCount;
+
+	public int getVideoCount() {
+		return videoCount;
+	}
+
+	public void setVideoCount(int videoCount) {
+		this.videoCount = videoCount;
+	}
+
+	public int getHandoutCount() {
+		return handoutCount;
+	}
+
+	public void setHandoutCount(int handoutCount) {
+		this.handoutCount = handoutCount;
+	}
+
+	public int getArticleCount() {
+		return articleCount;
+	}
+
+	public void setArticleCount(int articleCount) {
+		this.articleCount = articleCount;
+	}
+
+	public Short getSignType() {
+		return signType;
+	}
+
+	public void setSignType(Short signType) {
+		this.signType = signType;
+	}
+
+	public List<SchClassSchedule> getLstClassSchedules() {
+		return lstClassSchedules;
+	}
+
+	public void setLstClassSchedules(List<SchClassSchedule> lstClassSchedules) {
+		this.lstClassSchedules = lstClassSchedules;
+	}
+
+	public List<SchStudentSchedule> getStudentSchedules() {
+		return studentSchedules;
+	}
+
+	public void setStudentSchedules(List<SchStudentSchedule> studentSchedules) {
+		this.studentSchedules = studentSchedules;
+	}
+
+	public List<SchClassSchedule> getClassSchedules() {
+		return classSchedules;
+	}
+
+	public void setClassSchedules(List<SchClassSchedule> classSchedules) {
+		this.classSchedules = classSchedules;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFullName() {
+		return fullName;
+	}
+
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public BigDecimal getCredit() {
+		return credit;
+	}
+
+	public void setCredit(BigDecimal credit) {
+		this.credit = credit;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public short getExaminationForm() {
+		return examinationForm;
+	}
+
+	public void setExaminationForm(short examinationForm) {
+		this.examinationForm = examinationForm;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getClassSubjectId() {
+		return classSubjectId;
+	}
+
+	public void setClassSubjectId(String classSubjectId) {
+		this.classSubjectId = classSubjectId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getOrigSubjectId() {
+		return origSubjectId;
+	}
+
+	public void setOrigSubjectId(String origSubjectId) {
+		this.origSubjectId = origSubjectId;
+	}
+
+	public String getOrigClassSubjectId() {
+		return origClassSubjectId;
+	}
+
+	public void setOrigClassSubjectId(String origClassSubjectId) {
+		this.origClassSubjectId = origClassSubjectId;
+	}
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+	
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchCourseware.java b/src/main/java/com/qxueyou/scc/school/model/SchCourseware.java
new file mode 100644
index 0000000..6891984
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchCourseware.java
@@ -0,0 +1,341 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 课件视图实体
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="SCH_COURSEWARE")
+@NamedQuery(name="SchCourseware.findAll", query="SELECT s FROM SchCourseware s")
+public class SchCourseware implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	public static String COURSEWARE_TYPE_VIDEO = "video";
+	public static String COURSEWARE_TYPE_HANDOUT = "handout";
+	public static String COURSEWARE_TYPE_EXERCISE = "exercise";
+	public static String COURSEWARE_TYPE_ARTICLE = "article";
+	
+	//最大排序号
+	public static int COURSEWARE_MAX_ORDER = 0;
+
+	@Id
+	@GeneratedValue(generator="hibernate-uuid")
+	@GenericGenerator(name="hibernate-uuid", strategy="uuid")
+	@Column(name="COURSEWARE_ID")
+	private String coursewareId;
+	
+	private String id;
+
+	private String name;
+	
+	private String remark;
+	
+	/**新增字段 :课件详情*/
+	@Column(name="describe_")
+	private  String describe;
+	
+	@Column(name="SCORE_VALUE")
+	private BigDecimal scoreValue;
+	
+	@Column(name="ORDER_NUM")
+	private Integer orderNum;
+	
+	@Column(name="SUBJECT_ORDER")
+	private Integer subjectOrder;
+	
+	@Column(name="CHAPTER_ORDER")
+	private Integer chapterOrder;
+	
+	@Column(name="PART_ORDER")
+	private Integer partOrder;
+
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+	
+	@Column(name="COLLEGE_COURSE_ID")
+	private String collegeCourseId;
+	
+	@Column(name="ORG_ID")
+	private String orgId;
+	
+	@Column(name="CLASS_ID")
+	private String classId;
+	
+	private String type;
+	
+	private Short status;
+	
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+	
+	@Column(name="PARENT_CHAPTER_ID")
+	private String parentChapterId;
+	
+	@Column(name="C_TYPE")
+	private int cType;
+	
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+
+	public BigDecimal getScoreValue() {
+		return scoreValue;
+	}
+
+	public void setScoreValue(BigDecimal scoreValue) {
+		this.scoreValue = scoreValue;
+	}
+
+	public String getCoursewareId() {
+		return coursewareId;
+	}
+
+	public void setCoursewareId(String coursewareId) {
+		this.coursewareId = coursewareId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public int getcType() {
+		return cType;
+	}
+
+	public void setcType(int cType) {
+		this.cType = cType;
+	}
+
+	public String getParentChapterId() {
+		return parentChapterId;
+	}
+
+	public void setParentChapterId(String parentChapterId) {
+		this.parentChapterId = parentChapterId;
+	}
+
+	public Short getStatus() {
+		return status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public String getDescribe() {
+		return describe;
+	}
+
+	public void setDescribe(String describe) {
+		this.describe = describe;
+	}
+
+	public Integer getSubjectOrder() {
+		return subjectOrder;
+	}
+
+	public void setSubjectOrder(Integer subjectOrder) {
+		this.subjectOrder = subjectOrder;
+	}
+
+	public Integer getChapterOrder() {
+		return chapterOrder;
+	}
+
+	public void setChapterOrder(Integer chapterOrder) {
+		this.chapterOrder = chapterOrder;
+	}
+
+	public Integer getPartOrder() {
+		return partOrder;
+	}
+
+	public void setPartOrder(Integer partOrder) {
+		this.partOrder = partOrder;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java b/src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java
new file mode 100644
index 0000000..b714984
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java
@@ -0,0 +1,98 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+
+
+/**
+ * The persistent class for the sch_eva_record_re database table.
+ * 
+ */
+@Entity
+@Table(name="sch_eva_record_re")
+@NamedQuery(name="SchEvaRecordRe.findAll", query="SELECT e FROM SchEvaRecordRe e")
+public class SchEvaRecordRe implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	@Column(name="EVALUATE_ID", length=32)
+	private String evaluateId;
+
+	@Column(name="EXERCISE_RECORD_ID", length=32)
+	private String exerciseRecordId;
+	
+	//答题时所在班级
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	//答题时所在班级
+	//@Formula("(select u.name from Org_Class u WHERE u.CLASS_ID=CLASS_ID and u.DELETE_FLAG = 0)")
+	@Transient
+	private String className;
+
+	//答题时所在机构
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java b/src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java
new file mode 100644
index 0000000..0c7a54c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java
@@ -0,0 +1,448 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_evaluate database table.
+ * 
+ */
+@Entity
+@Table(name="sch_evaluate")
+@NamedQuery(name="SchEvaluate.findAll", query="SELECT e FROM SchEvaluate e")
+public class SchEvaluate implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EVALUATE_ID", unique=true, nullable=false, length=32)
+	private String evaluateId;
+
+	/** 评估标题  */
+	@Column(name="evaluate_name", length=128)
+	private String evaluateName;
+	
+	/**   */
+	@Column(name="EVALUATE_TEMPLATE_ID", length=32)
+	private String evalTemplateId;
+
+	/**   */
+	@Column(name="EVALUATE_TEMPLATE_NAME", length=150)
+	private String evalTemplateName;
+
+	/**   */
+	@Column(name="EVALUATE_RANGE_ID", nullable=false, length=32)
+	private String evalRangeId;
+
+	/**   */
+	@Column(name="EVALUATE_RANGE_NAME", length=150)
+	private String evalRangeName;
+
+	/**   */
+	@Column(name="EVALUATE_RANGE_TYPE", length=100)
+	private String evalRangeType;
+	
+	/**   */
+	@Column(name="EVALUATE_RANGE_COUNT")
+	private BigInteger evalRangeCount;
+	
+	/** 评估范围类型--  teacher:老师的评价与建议     online:线上班级评价和建议      crequ:开课需求       offLine:线下班级评价与建议    */
+	public static final String EVALUATE_RANGE_TEACHER="teacher";
+	
+	public static final String EVALUATE_RANGE_CREQU="cRequ";
+	
+	public static final String EVALUATE_RANGE_ONLINE="onLine";
+	
+	public static final String EVALUATE_RANGE_OFFLINE="offLine";
+	
+	public static final String LUATE_RANGE_ALL="all";
+	
+	public static final String EVALUATE_RANGE_ORG="org";
+	
+	/** class:班级   lesson:课程  person:人员    */
+	
+	public static final String EVALUATE_RANGE_CLASS="class";
+	
+	public static final String EVALUATE_RANGE_LESSON="lesson";
+	
+	public static final String EVALUATE_RANGE_PERSON="person";
+	
+	/**   */
+	@Column(name="EVALUATE_OBJECT_ID", length=32)
+	private String evalObjectId;
+
+	/**   */
+	@Column(name="EVALUATE_OBJECT_NAME", length=150)
+	private String evalObjectName;
+
+	/**   */
+	@Column(name="TYPE") 
+	private short type;
+	
+	/** 1:学员  2:讲师  3:机构  */
+	public final static short TYPE_STUDENT = 1;
+	
+	public final static short TYPE_TEACHER = 2;
+	
+	public final static short TYPE_ORG = 3;
+
+	/**   */
+	@Column(name="STATUS") 
+	private short status;
+	
+	/** 0:未评估  1:评估中 2:评估完成 */
+	public final static short STATUS_NOT_EVA = 0;
+	
+	public final static short STATUS_EVA = 1;
+	
+	public final static short STATUS_EVA_OVER = 2;
+
+	/**   */
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+
+	/**   */
+	@Column(name="EVALUATE_COUNT")
+	private BigInteger evaluateCount;
+
+	/**   */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**   */
+	@Column(name="CREATE_TIME", nullable=false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**   */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**   */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**   */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**   */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**   */
+	@Column(name="ATTRIBUTE1", length=100)
+	@JsonIgnore
+	private String attribute1;
+
+	/**   */
+	@Column(name="ATTRIBUTE2", length=200)
+	@JsonIgnore
+	private String attribute2;
+	
+	/** 结束时间  */
+	@Column(name="END_TIME", nullable=true)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+	
+	/** 图片路径  */
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+	
+	/** 备注 */
+	@Column(name="REMARK", length=2000)
+	@JsonIgnore
+	private String remark;
+	
+	/** 问题组id */
+	@Transient
+	private String groupId;
+	
+	/** 问卷平均分 */
+	@Transient
+	private Double average;
+	
+	/** 模板类型 */
+	@Transient
+	private String templateType;
+	
+	/** 应评估总人数  */
+	@Transient
+	private BigInteger evaluateAllCount;
+	
+	public Double getAverage() {
+		return average;
+	}
+
+	public void setAverage(Double average) {
+		this.average = average;
+	}
+
+	public String getTemplateType() {
+		return templateType;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public void setTemplateType(String templateType) {
+		this.templateType = templateType;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	public String getEvalTemplateId() {
+		return evalTemplateId;
+	}
+
+	public void setEvalTemplateId(String evalTemplateId) {
+		this.evalTemplateId = evalTemplateId;
+	}
+
+	public String getEvalTemplateName() {
+		return evalTemplateName;
+	}
+
+	public void setEvalTemplateName(String evalTemplateName) {
+		this.evalTemplateName = evalTemplateName;
+	}
+
+	public String getEvalRangeId() {
+		return evalRangeId;
+	}
+
+	public void setEvalRangeId(String evalRangeId) {
+		this.evalRangeId = evalRangeId;
+	}
+
+	public String getEvalRangeName() {
+		return evalRangeName;
+	}
+
+	public void setEvalRangeName(String evalRangeName) {
+		this.evalRangeName = evalRangeName;
+	}
+
+	public String getEvalRangeType() {
+		return evalRangeType;
+	}
+
+	public void setEvalRangeType(String evalRangeType) {
+		this.evalRangeType = evalRangeType;
+	}
+
+	public String getEvalObjectId() {
+		return evalObjectId;
+	}
+
+	public void setEvalObjectId(String evalObjectId) {
+		this.evalObjectId = evalObjectId;
+	}
+
+	public String getEvalObjectName() {
+		return evalObjectName;
+	}
+
+	public void setEvalObjectName(String evalObjectName) {
+		this.evalObjectName = evalObjectName;
+	}
+
+	public BigInteger getEvaluateCount() {
+		return evaluateCount;
+	}
+
+	public void setEvaluateCount(BigInteger evaluateCount) {
+		this.evaluateCount = evaluateCount;
+	}
+
+	public String getEvaluateName() {
+		return evaluateName;
+	}
+
+	public void setEvaluateName(String evaluateName) {
+		this.evaluateName = evaluateName;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public BigInteger getEvalRangeCount() {
+		return evalRangeCount;
+	}
+
+	public void setEvalRangeCount(BigInteger evalRangeCount) {
+		this.evalRangeCount = evalRangeCount;
+	}
+
+	public BigInteger getEvaluateAllCount() {
+		return evaluateAllCount;
+	}
+
+	public void setEvaluateAllCount(BigInteger evaluateAllCount) {
+		this.evaluateAllCount = evaluateAllCount;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchEvaluateCategory.java b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateCategory.java
new file mode 100644
index 0000000..cb1df39
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateCategory.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the SCH_EVALUATE_CATEGORY database table.
+ * 
+ */
+@Entity
+@Table(name="SCH_EVALUATE_CATEGORY")
+@NamedQuery(name="SchEvaluateCategory.findAll", query="SELECT e FROM SchEvaluateCategory e")
+public class SchEvaluateCategory implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CATEGORY_ID", unique=true, nullable=false, length=32)
+	private String categoryId;
+	
+	@Column(name="EVALUATE_TEMPLATE_ID", length=32)
+	private String evalTemplateId;
+	
+	@Column(name="CATEGORY_KEY", length=150)
+	private String categoryKey;
+	
+	@Column(name="CATEGORY_VALUE", length=150)
+	private String categoryValue;
+	
+	@Column(name="CATEGORY_NAME", length=200)
+	private String categoryName;
+	
+	@Column(name="PARENT_CATEGORY_ID", length=32)
+	private String parentCategoryId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+	
+	public String getEvalTemplateId() {
+		return evalTemplateId;
+	}
+
+	public void setEvalTemplateId(String evalTemplateId) {
+		this.evalTemplateId = evalTemplateId;
+	}
+
+	public String getCategoryKey() {
+		return categoryKey;
+	}
+
+	public void setCategoryKey(String categoryKey) {
+		this.categoryKey = categoryKey;
+	}
+
+	public String getCategoryValue() {
+		return categoryValue;
+	}
+
+	public void setCategoryValue(String categoryValue) {
+		this.categoryValue = categoryValue;
+	}
+
+	public String getCategoryName() {
+		return categoryName;
+	}
+
+	public void setCategoryName(String categoryName) {
+		this.categoryName = categoryName;
+	}
+
+	public String getCategoryId() {
+		return categoryId;
+	}
+
+	public void setCategoryId(String categoryId) {
+		this.categoryId = categoryId;
+	}
+
+	public String getParentCategoryId() {
+		return parentCategoryId;
+	}
+
+	public void setParentCategoryId(String parentCategoryId) {
+		this.parentCategoryId = parentCategoryId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java
new file mode 100644
index 0000000..0448787
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java
@@ -0,0 +1,200 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * The persistent class for the SCH_EVALUATE_DETAIL database table.
+ * 
+ */
+@Entity
+@Table(name = "SCH_EVALUATE_DETAIL")
+@NamedQuery(name = "SchEvaluateDetail.findAll", query = "SELECT e FROM SchEvaluateDetail e")
+public class SchEvaluateDetail implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "EVALUATE_DETAIL_ID", unique = true, nullable = false, length = 32)
+	private String evaluateDetailId;
+
+	@Column(name = "EVALUATE_ID", length = 32)
+	private String evaluateId;
+
+	@Column(name = "EVALUATER_ID", length = 32)
+	private String evaluaterId;
+
+	@Column(name = "EVALUATER", length = 150)
+	private String evaluater;
+
+	@Column(name = "SCORE", precision = 10, scale = 2)
+	private BigDecimal score;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	/** 问卷标题 */
+	@Column(name = "ATTRIBUTE1", length = 100)
+	private String attribute1;
+
+	@Column(name = "ATTRIBUTE2", length = 200)
+	private String attribute2;
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getEvaluateDetailId() {
+		return evaluateDetailId;
+	}
+
+	public void setEvaluateDetailId(String evaluateDetailId) {
+		this.evaluateDetailId = evaluateDetailId;
+	}
+
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	public String getEvaluaterId() {
+		return evaluaterId;
+	}
+
+	public void setEvaluaterId(String evaluaterId) {
+		this.evaluaterId = evaluaterId;
+	}
+
+	public String getEvaluater() {
+		return evaluater;
+	}
+
+	public void setEvaluater(String evaluater) {
+		this.evaluater = evaluater;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchEvaluateQuota.java b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateQuota.java
new file mode 100644
index 0000000..c6c7597
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateQuota.java
@@ -0,0 +1,208 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the SCH_EVALUATE_QUOTA database table.
+ * 
+ */
+@Entity
+@Table(name="SCH_EVALUATE_QUOTA")
+@NamedQuery(name="SchEvaluateQuota.findAll", query="SELECT e FROM SchEvaluateQuota e")
+public class SchEvaluateQuota implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EVALUATE_QUOTA_ID", unique=true, nullable=false, length=32)
+	private String evaluateQuotaId;
+	
+	@Column(name="EVALUATE_ID", length=32)
+	private String evaluateId;
+	
+	@Column(name="EVALUATE_CATEGORY_ID", length=32)
+	private String evalCategoryId;
+	
+	@Column(name="EVALUATE_CATEGORY_KEY", length=150)
+	private String evalCategoryKey;
+	
+	@Column(name="EVALUATE_CATEGORY_NAME",length=150)
+	private String evalCategoryName;
+	
+	@Column(name="SCORE",precision=10, scale=2)
+	private BigDecimal score;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="ATTRIBUTE1", length=100)
+	private String attribute1;
+	
+	@Column(name="ATTRIBUTE2", length=200)
+	private String attribute2;
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	public String getEvaluateQuotaId() {
+		return evaluateQuotaId;
+	}
+
+	public void setEvaluateQuotaId(String evaluateQuotaId) {
+		this.evaluateQuotaId = evaluateQuotaId;
+	}
+	
+	public String getEvalCategoryId() {
+		return evalCategoryId;
+	}
+
+	public void setEvalCategoryId(String evalCategoryId) {
+		this.evalCategoryId = evalCategoryId;
+	}
+
+	public String getEvalCategoryName() {
+		return evalCategoryName;
+	}
+
+	public void setEvalCategoryName(String evalCategoryName) {
+		this.evalCategoryName = evalCategoryName;
+	}
+
+	public String getEvalCategoryKey() {
+		return evalCategoryKey;
+	}
+
+	public void setEvalCategoryKey(String evalCategoryKey) {
+		this.evalCategoryKey = evalCategoryKey;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java
new file mode 100644
index 0000000..b3b5a24
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java
@@ -0,0 +1,235 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_evaluate database table.
+ * 
+ */
+@Entity
+@Table(name="sch_evaluate_template")
+@NamedQuery(name="SchEvaluateTemplate.findAll", query="SELECT e FROM SchEvaluateTemplate e")
+public class SchEvaluateTemplate implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="EVALUATE_TEMPLATE_ID", unique=true, nullable=false, length=32)
+	private String evaluateTemplateId;
+	
+	@Column(name="EVALUATE_TEMPLATE_NAME", length=150)
+	private String evaluateTemplateName;
+	
+	@Column(name="GROUP_ID", length=32)
+	private String groupId;
+	
+	@Column(name="GROUP_NAME", length=150)
+	private String group_name;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="ORG_NAME", length=150)
+	private String orgName;
+	
+	/**
+	 *  课程内容,老师讲授,学校服务,支持新增
+	 */
+	@Column(name="TEMPLATE_TYPE", length=100)
+	private String templateType;
+	
+	/**
+	 * 范围类型 all:所有     org:机构 class:班级       lesson:课程  
+	 */
+	@Column(name="EVALUATE_RANGE_TYPE", length=10)
+	private String evaluateRangeType;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="ATTRIBUTE1", length=100)
+	private String attribute1;
+	
+	@Column(name="ATTRIBUTE2", length=200)
+	private String attribute2;
+
+	public String getTemplateType() {
+		return templateType;
+	}
+
+	public void setTemplateType(String templateType) {
+		this.templateType = templateType;
+	}
+
+	public String getEvaluateRangeType() {
+		return evaluateRangeType;
+	}
+
+	public void setEvaluateRangeType(String evaluateRangeType) {
+		this.evaluateRangeType = evaluateRangeType;
+	}
+
+	public String getEvaluateTemplateId() {
+		return evaluateTemplateId;
+	}
+
+	public void setEvaluateTemplateId(String evaluateTemplateId) {
+		this.evaluateTemplateId = evaluateTemplateId;
+	}
+
+	public String getEvaluateTemplateName() {
+		return evaluateTemplateName;
+	}
+
+	public void setEvaluateTemplateName(String evaluateTemplateName) {
+		this.evaluateTemplateName = evaluateTemplateName;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public String getGroup_name() {
+		return group_name;
+	}
+
+	public void setGroup_name(String group_name) {
+		this.group_name = group_name;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	public String getAttribute2() {
+		return attribute2;
+	}
+
+	public void setAttribute2(String attribute2) {
+		this.attribute2 = attribute2;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchFile.java b/src/main/java/com/qxueyou/scc/school/model/SchFile.java
new file mode 100644
index 0000000..459095a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchFile.java
@@ -0,0 +1,213 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 文件表
+ */
+@Entity
+@Table(name="sch_file")
+@NamedQuery(name="SchFile.findAll", query="SELECT s FROM SchFile s")
+public class SchFile implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name="file_id")
+	private String fileId;
+
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@JsonIgnore
+	private Date createTime;
+
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="file_type")
+	private String fileType;
+	
+	@Column(name="file_Name")
+	private String fileName;
+
+	@Column(name="object_id")
+	private String objectId;
+
+	@Column(name="object_type")
+	private String objectType;
+
+	@Column(name="order_no")
+	private int orderNo;
+
+	@JsonIgnore
+	@Column(name="REMARK")
+	private String remark;
+
+	@Column(name="SIZE")
+	private String size;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@JsonIgnore
+	private Date updateTime;
+
+	@JsonIgnore
+	private String updator;
+
+	private String url;
+
+	public String getFileName() {
+		try {
+			return this.fileName == null?"":URLDecoder.decode(this.fileName, "utf-8");
+		} catch (UnsupportedEncodingException e) {
+			return "";
+		} 
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getFileId() {
+		return this.fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getFileType() {
+		return this.fileType;
+	}
+
+	public void setFileType(String fileType) {
+		this.fileType = fileType;
+	}
+
+	public String getObjectId() {
+		return this.objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	public String getObjectType() {
+		return this.objectType;
+	}
+
+	public void setObjectType(String objectType) {
+		this.objectType = objectType;
+	}
+
+	public int getOrderNo() {
+		return this.orderNo;
+	}
+
+	public void setOrderNo(int orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getSize() {
+		return this.size;
+	}
+
+	public void setSize(String size) {
+		this.size = size;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUrl() {
+		return this.url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandout.java b/src/main/java/com/qxueyou/scc/school/model/SchHandout.java
new file mode 100644
index 0000000..e296d20
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandout.java
@@ -0,0 +1,598 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 讲义实体类
+ * 
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name = "sch_handout")
+@NamedQuery(name = "SchHandout.findAll", query = "SELECT s FROM SchHandout s")
+public class SchHandout implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/** 讲义ID */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "HANDOUT_ID", unique = true, nullable = false, length = 32)
+	private String handoutId;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	@JsonIgnore
+	private String createId;
+
+	/** 注意:此处的createTime需要返回前台app 不能用@JsonIgnore */
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	/** 文件原始路径 */
+	@Column(name = "ORIG_PATH")
+	@JsonIgnore
+	private String origPath;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/** 班级课表ID */
+	@Column(name = "CLASS_SCHEDULE_ID", length = 32)
+	private String classScheduleId;
+
+	/** 班级课表 */
+	@Column(name = "CLASS_SCHEDULE", length = 150)
+	private String classSchedule;
+
+	/** 班级ID */
+	@Column(name = "CLASS_ID", length = 32)
+	private String classId;
+
+	/** 讲义名称 */
+	@Column(name = "NAME", length = 150)
+	private String name;
+
+	/** 讲义观看数量 */
+	@Column(name = "PLAY_COUNT", length = 11)
+	private Integer playCount;
+
+	/** 讲义页码数量,总共多少页 */
+	@Column(name = "PAGE_COUNT")
+	private Integer pageCount;
+
+	/** 原始讲义ID */
+	@Column(name = "ORIGIN_HANDOUT_ID", length = 32)
+	private String originHandoutId;
+
+	/** 机构ID */
+	@Column(name = "ORG_ID", length = 32)
+	private String orgId;
+
+	/** 讲义收藏列表:表明当前收藏的讲义 页码总数,非收藏的页码数 */
+	@Transient
+	private int totalCount;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 讲义状态 0 草稿;1已发布;2已废弃;3处理中;4处理失败 */
+	@Column(name = "STATUS")
+	private short status;
+
+	/** 课程ID */
+	@Column(name = "SUBJECT_ID", length = 32)
+	private String subjectId;
+
+	/** 课程名字 */
+	@Column(name = "SUBJECT_NAME", length = 255)
+	private String subjectName;
+
+	/** 科目ID */
+	@Column(name = "COLLEGE_COURSE_ID", length = 32)
+	private String collegeCourseId;
+
+	/** 详情介绍 */
+	@Column(name = "remark", length = 4000)
+	private String remark;
+
+	/** 封面图片URL */
+	@Column(name = "COVER_PAGE_URL", length = 256)
+	private String coverPageUrl;
+
+	/** 下载路径URL */
+	@Column(name = "FULL_PATH", length = 256)
+	@JsonIgnore
+	private String fullPath;
+
+	/** 讲义大小 */
+	@Column(name = "FULL_LENGTH")
+	private Integer fullLength;
+
+	/** 讲义完成度 */
+	@Transient
+	private BigDecimal compDegree;
+
+	/** 草稿 */
+	public final static short STATUS_DRAFT = 0;
+
+	/** 已发布 */
+	public final static short STATUS_ISSUED = 1;
+
+	/** 已废弃 */
+	public final static short STATUS_DISCARD = 2;
+
+	/** 处理中 */
+	public final static short STATUS_PROCESSING = 3;
+
+	/** 处理失败 */
+	public final static short STATUS_FAILURE = 4;
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "handout")
+	@JsonIgnore
+	private List<SchHandoutPage> handoutPages;
+
+	/** 讲义管理排序,班主任排序 */
+	@Column(name = "ORDER_NUM")
+	private Integer orderNum;
+
+	@Column(name = "CHAPTER_ID")
+	private String chapterId;
+
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	/**
+	 * @return the handoutId
+	 */
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	/**
+	 * @param handoutId
+	 *            the handoutId to set
+	 */
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId
+	 *            the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime
+	 *            the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator
+	 *            the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag
+	 *            the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the classScheduleId
+	 */
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	/**
+	 * @param classScheduleId
+	 *            the classScheduleId to set
+	 */
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	/**
+	 * @return the classSchedule
+	 */
+	public String getClassSchedule() {
+		return classSchedule;
+	}
+
+	/**
+	 * @param classSchedule
+	 *            the classSchedule to set
+	 */
+	public void setClassSchedule(String classSchedule) {
+		this.classSchedule = classSchedule;
+	}
+
+	/**
+	 * @return the classId
+	 */
+	public String getClassId() {
+		return classId;
+	}
+
+	/**
+	 * @param classId
+	 *            the classId to set
+	 */
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name
+	 *            the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the playCount
+	 */
+	public Integer getPlayCount() {
+		return playCount;
+	}
+
+	/**
+	 * @param playCount
+	 *            the playCount to set
+	 */
+	public void setPlayCount(Integer playCount) {
+		this.playCount = playCount;
+	}
+
+	/**
+	 * @return the pageCount
+	 */
+	public Integer getPageCount() {
+		return pageCount;
+	}
+
+	/**
+	 * @param pageCount
+	 *            the pageCount to set
+	 */
+	public void setPageCount(Integer pageCount) {
+		this.pageCount = pageCount;
+	}
+
+	/**
+	 * @return the originHandoutId
+	 */
+	public String getOriginHandoutId() {
+		return originHandoutId;
+	}
+
+	/**
+	 * @param originHandoutId
+	 *            the originHandoutId to set
+	 */
+	public void setOriginHandoutId(String originHandoutId) {
+		this.originHandoutId = originHandoutId;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId
+	 *            the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the totalCount
+	 */
+	public int getTotalCount() {
+		return totalCount;
+	}
+
+	/**
+	 * @param totalCount
+	 *            the totalCount to set
+	 */
+	public void setTotalCount(int totalCount) {
+		this.totalCount = totalCount;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId
+	 *            the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime
+	 *            the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator
+	 *            the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	/**
+	 * @return the status
+	 */
+	public short getStatus() {
+		return status;
+	}
+
+	/**
+	 * @param status
+	 *            the status to set
+	 */
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	/**
+	 * @return the subjectId
+	 */
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	/**
+	 * @param subjectId
+	 *            the subjectId to set
+	 */
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	/**
+	 * @return the subjectName
+	 */
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	/**
+	 * @param subjectName
+	 *            the subjectName to set
+	 */
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	/**
+	 * @return the collegeCourseId
+	 */
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	/**
+	 * @param collegeCourseId
+	 *            the collegeCourseId to set
+	 */
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	/**
+	 * @return the compDegree
+	 */
+	public BigDecimal getCompDegree() {
+		return compDegree;
+	}
+
+	/**
+	 * @param compDegree
+	 *            the compDegree to set
+	 */
+	public void setCompDegree(BigDecimal compDegree) {
+		this.compDegree = compDegree;
+	}
+
+	/**
+	 * @return the handoutPages
+	 */
+	public List<SchHandoutPage> getHandoutPages() {
+		return handoutPages;
+	}
+
+	/**
+	 * @param handoutPages
+	 *            the handoutPages to set
+	 */
+	public void setHandoutPages(List<SchHandoutPage> handoutPages) {
+		this.handoutPages = handoutPages;
+	}
+
+	/**
+	 * @return the mainImg
+	 */
+	public String getMainImg() {
+		return coverPageUrl;
+	}
+
+	/**
+	 * @return the orderNum
+	 */
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	/**
+	 * @param orderNum
+	 *            the orderNum to set
+	 */
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	/**
+	 * @return the coverPageUrl
+	 */
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	/**
+	 * @param coverPageUrl
+	 *            the coverPageUrl to set
+	 */
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	public String getFullPath() {
+		return fullPath;
+	}
+
+	public void setFullPath(String fullPath) {
+		this.fullPath = fullPath;
+	}
+
+	public Integer getFullLength() {
+		return fullLength;
+	}
+
+	public void setFullLength(Integer fullLength) {
+		this.fullLength = fullLength;
+	}
+
+	public String getOrigPath() {
+		return origPath;
+	}
+
+	public void setOrigPath(String origPath) {
+		this.origPath = origPath;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java b/src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java
new file mode 100644
index 0000000..7c8de33
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java
@@ -0,0 +1,225 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_handout_page database table.
+ * 
+ */
+@Entity
+@Table(name="sch_handout_page")
+@NamedQuery(name="SchHandoutPage.findAll", query="SELECT s FROM SchHandoutPage s")
+public class SchHandoutPage implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  讲义明细ID  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="HANDOUT_PAGE_ID", unique=true, nullable=false, length=32)
+	private String handoutPageId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  讲义ID  */
+	@Column(name="HANDOUT_ID", length=32)
+	private String handoutId;
+
+	/**  讲义图片路径  */
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+
+	/**  讲义顺序的序号  */
+	@Column(name="PAGE_ORDER")
+	private int pageOrder;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "HANDOUT_ID",referencedColumnName="HANDOUT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private SchHandout handout;
+	
+	@Transient
+	private List<Map<String, Object>> extendLst;
+	
+	/**  评论标志  */
+	@Transient
+	private boolean commentFlag;
+	
+	/**  收藏标志  */
+	@Transient
+	private boolean favorFlag;
+
+	public SchHandoutPage() {
+	}
+	
+	public SchHandout getHandout() {
+		return handout;
+	}
+
+	public void setHandout(SchHandout handout) {
+		this.handout = handout;
+	}
+
+	public String getHandoutPageId() {
+		return this.handoutPageId;
+	}
+
+	public void setHandoutPageId(String handoutPageId) {
+		this.handoutPageId = handoutPageId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getHandoutId() {
+		return this.handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	public String getImgPath() {
+		return this.imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public int getPageOrder() {
+		return this.pageOrder;
+	}
+
+	public void setPageOrder(int pageOrder) {
+		this.pageOrder = pageOrder;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<Map<String, Object>> getExtendLst() {
+		return extendLst;
+	}
+
+	public void setExtendLst(List<Map<String, Object>> extendLst) {
+		this.extendLst = extendLst;
+	}
+
+	public boolean isCommentFlag() {
+		return commentFlag;
+	}
+
+	public void setCommentFlag(boolean commentFlag) {
+		this.commentFlag = commentFlag;
+	}
+
+	public boolean isFavorFlag() {
+		return favorFlag;
+	}
+
+	public void setFavorFlag(boolean favorFlag) {
+		this.favorFlag = favorFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandoutPageFavor.java b/src/main/java/com/qxueyou/scc/school/model/SchHandoutPageFavor.java
new file mode 100644
index 0000000..edb4406
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandoutPageFavor.java
@@ -0,0 +1,173 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import java.util.Date;
+
+
+/**
+ * The persistent class for the sch_handout_page database table.
+ * 
+ */
+@Entity
+@Table(name="sch_handout_page_favor")
+@NamedQuery(name="SchHandoutPageFavor.findAll", query="SELECT s FROM SchHandoutPageFavor s")
+public class SchHandoutPageFavor implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="HANDOUT_FAVORITE_ID", unique=true, nullable=false, length=32)
+	private String handoutFavoriteId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="HANDOUT_ID", length=32)
+	private String handoutId;
+	
+	@Column(name="HANDOUT_PAGE_ID", length=32)
+	private String handoutPageId;
+	
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	public SchHandoutPageFavor() {
+	}
+
+	public String getHandoutFavoriteId() {
+		return handoutFavoriteId;
+	}
+
+	public void setHandoutFavoriteId(String handoutFavoriteId) {
+		this.handoutFavoriteId = handoutFavoriteId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	public String getHandoutPageId() {
+		return handoutPageId;
+	}
+
+	public void setHandoutPageId(String handoutPageId) {
+		this.handoutPageId = handoutPageId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java b/src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java
new file mode 100644
index 0000000..6b81add
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java
@@ -0,0 +1,186 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Table(name="sch_handout_re_course")
+public class SchHandoutReCourse implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="HANDOUT_COURSE_ID", unique=true, nullable=false, length=32)
+	private String handoutCourseId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  科目ID */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/**  讲义ID  */
+	@Column(name="HANDOUT_ID", length=32)
+	private String handoutId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/**  orgID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;	
+
+	/** 讲义管理排序 */
+	@Column(name="ORDER_NUM")
+	private Integer orderNum;
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	
+
+	public String getHandoutCourseId() {
+		return handoutCourseId;
+	}
+
+	public void setHandoutCourseId(String handoutCourseId) {
+		this.handoutCourseId = handoutCourseId;
+	}
+
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java b/src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java
new file mode 100644
index 0000000..d5bd343
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java
@@ -0,0 +1,310 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="sch_handout_record")
+public class SchHandoutRecord implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="HANDOUT_RECORD_ID", unique=true, nullable=false, length=32)
+	private String handoutRecordId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/**  班级ID */
+	@Column(name="CLASS_ID",length=32)
+	private String classId;
+	
+	/**  讲义ID */
+	@Column(name="HANDOUT_ID",length=32)
+	private String handoutId;
+	
+	/**  用户ID */
+	@Column(name="USER_ID",length=32)
+	private String userId;
+	
+	/**  讲义总页数*/
+	@Column(name="PAGE_COUNT",length=11)
+	private Integer pageCount;
+	
+	/**  观看的总页数*/
+	@Column(name="PLAY_COUNT",length=11)
+	private Integer playCount;
+	/**  类型  1:收藏 2普通 */
+	@Column(name="TYPE",length=1)
+	private Integer type;
+	
+	/** 开始时间 */
+	@Column(name="BEGIN_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date beginTime;
+	
+	/** 结束时间()*/
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+	
+	/**  网络 */
+	@Column(name="NETWORK",length=15)
+	private String network;
+	
+	/**  平台 */
+	@Column(name="PLATFORM",length=15)
+	private String platform;
+	
+	/**  版本 */
+	@Column(name="VERSION",length=15)
+	private String version;
+	
+	/**  机型 */
+	@Column(name="model",length=50)
+	private String model;
+	
+	/**  app版本 */
+	@Column(name="APP_VERSION",length=15)
+	private String appVersion;
+	
+	/**  运营商 */
+	@Column(name="OPERATOR",length=15)
+	private String operator;
+
+	public String getHandoutRecordId() {
+		return handoutRecordId;
+	}
+
+	public void setHandoutRecordId(String handoutRecordId) {
+		this.handoutRecordId = handoutRecordId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public Integer getPageCount() {
+		return pageCount;
+	}
+
+	public void setPageCount(Integer pageCount) {
+		this.pageCount = pageCount;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public Date getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(Date beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getNetwork() {
+		return network;
+	}
+
+	public void setNetwork(String network) {
+		this.network = network;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getAppVersion() {
+		return appVersion;
+	}
+
+	public void setAppVersion(String appVersion) {
+		this.appVersion = appVersion;
+	}
+
+	public String getOperator() {
+		return operator;
+	}
+
+	public void setOperator(String operator) {
+		this.operator = operator;
+	}
+
+	public Integer getPlayCount() {
+		return playCount;
+	}
+
+	public void setPlayCount(Integer playCount) {
+		this.playCount = playCount;
+	}
+	
+	
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java b/src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java
new file mode 100644
index 0000000..d30330e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java
@@ -0,0 +1,176 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="sch_handout_record_detail")
+public class SchHandoutRecordDetail  implements Serializable,ITrace{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="HANDOUT_RECORD_DETAIL_ID", unique=true, nullable=false, length=32)
+	private String handoutRecordDetailId;
+	
+	/**  讲义ID */
+	@Column(name="HANDOUT_RECORD_ID", nullable=false, length=32)
+	private String handoutRecordId;
+	
+	/**  讲义页码*/
+	@Column(name="PAGE_NUM",length=11)
+	private Integer pageNum;
+	
+	/**  页码ID */
+	@Column(name="PAGE_ID", nullable=false, length=32)
+	private String pageId;
+	
+	/**  收没收藏 1:收藏 2:未收藏*/
+	@Column(name="COLLECTION",length=1)
+	private Integer collection;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getHandoutRecordDetailId() {
+		return handoutRecordDetailId;
+	}
+
+	public void setHandoutRecordDetailId(String handoutRecordDetailId) {
+		this.handoutRecordDetailId = handoutRecordDetailId;
+	}
+
+	public String getHandoutRecordId() {
+		return handoutRecordId;
+	}
+
+	public void setHandoutRecordId(String handoutRecordId) {
+		this.handoutRecordId = handoutRecordId;
+	}
+
+	public Integer getPageNum() {
+		return pageNum;
+	}
+
+	public void setPageNum(Integer pageNum) {
+		this.pageNum = pageNum;
+	}
+
+	public String getPageId() {
+		return pageId;
+	}
+
+	public void setPageId(String pageId) {
+		this.pageId = pageId;
+	}
+
+	public Integer getCollection() {
+		return collection;
+	}
+
+	public void setCollection(Integer collection) {
+		this.collection = collection;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java b/src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java
new file mode 100644
index 0000000..c9889e4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java
@@ -0,0 +1,215 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+@Entity
+@Table(name="sch_handout_statistic")
+public class SchHandoutStatistic implements Serializable, ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="HANDOUT_STATISTIC_ID", unique=true, nullable=false, length=32)
+	private String handoutStatisticId;
+	
+	/** HANDOUT_ID */
+	@Column(name="HANDOUT_ID", length=32)
+	private String handoutId;
+	
+	/** HANDOUT_NAME */
+	@Column(name="HANDOUT_NAME", length=255)
+	private String handoutName;
+	
+	/** userID */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** userName */
+	@Column(name="USER_NAME", length=255)
+	private String userName;
+	
+	/** COMP_DEGREE */
+	@Column(name="COMP_DEGREE", length=4)
+	private BigDecimal compDegree;
+	
+	/** classID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name = "DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Transient
+	private String degree;
+	
+	
+
+	public String getDegree() {
+		return degree;
+	}
+
+	public void setDegree(String degree) {
+		this.degree = degree;
+	}
+
+	public String getHandoutStatisticId() {
+		return handoutStatisticId;
+	}
+
+	public void setHandoutStatisticId(String handoutStatisticId) {
+		this.handoutStatisticId = handoutStatisticId;
+	}
+
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+	public String getHandoutName() {
+		return handoutName;
+	}
+
+	public void setHandoutName(String handoutName) {
+		this.handoutName = handoutName;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public BigDecimal getCompDegree() {
+		if(compDegree != null && compDegree.compareTo(BigDecimal.ONE) == 1){
+			return BigDecimal.ONE;
+		}
+		return compDegree;
+	}
+
+	public void setCompDegree(BigDecimal compDegree) {
+		this.compDegree = compDegree;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchImg.java b/src/main/java/com/qxueyou/scc/school/model/SchImg.java
new file mode 100644
index 0000000..e63d52b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchImg.java
@@ -0,0 +1,231 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 笔记本表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_img")
+@NamedQuery(name="SchImg.findAll", query="SELECT s FROM SchImg s")
+public class SchImg implements Serializable , ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**  对象类型:直播原视频缩略图 */
+	public static final String OBJECT_TYPE_LIVE_REPLAY = "LIVE_REPLAY_SCREEN_SHOT";
+	
+	/**  主键 */
+	@Id
+	@Column(name="IMG_ID", unique=true, nullable=false, length=32)
+	private String imgId;
+	
+	/**  图片地址  */
+	@Column(name="URL", length=255)
+	private String url;
+
+	/**  图片类型,jpg/png  */
+	@Column(name="IMG_TYPE", length=5)
+	private String imgType;
+
+	/**  图片大小 */
+	@Column(name="SIZE", length=10)
+	private String size;
+	
+	/** 对象id  */
+	@Column(name="object_id", length=32)
+	private String objectId;
+
+	/**  对象type */
+	@Column(name="OBJECT_TYPE" , length=10)
+	private String objectType;
+	
+	/**  排序 */
+	@Column(name="ORDER_NO", length=3)
+	private Integer orderNo;
+
+	/**  备注 */
+	@Column(name="REMARK", length=500)
+	private String remark;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+	
+	public SchImg() {
+		super();
+	}
+
+	public SchImg(String url) {
+		super();
+		this.url = url;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getImgId() {
+		return imgId;
+	}
+
+	public void setImgId(String imgId) {
+		this.imgId = imgId;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getImgType() {
+		return imgType;
+	}
+
+	public void setImgType(String imgType) {
+		this.imgType = imgType;
+	}
+
+	public String getSize() {
+		return size;
+	}
+
+	public void setSize(String size) {
+		this.size = size;
+	}
+
+	public String getObjectId() {
+		return objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	public String getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(String objectType) {
+		this.objectType = objectType;
+	}
+
+	public Integer getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(Integer orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchInteract.java b/src/main/java/com/qxueyou/scc/school/model/SchInteract.java
new file mode 100644
index 0000000..5d8fb49
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchInteract.java
@@ -0,0 +1,235 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Formula;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_interact database table.
+ * 
+ */
+@Entity
+@Table(name="sch_interact")
+@NamedQuery(name="SchInteract.findAll", query="SELECT s FROM SchInteract s")
+public class SchInteract implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="INTERACT_ID", unique=true, nullable=false, length=32)
+	private String interactId;
+
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="EXERCISE_GROUP_ID", length=32)
+	private String exerciseGroupId;
+
+	/** 班级课表ID  */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+
+	@Column(name="STATUS") 
+	private short status;
+	
+	public final static short STATUS_LOCK = 1;
+	
+	public final static short STATUS_INTERACTING = 2;
+	
+	public final static short STATUS_END = 3;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Formula(value="(select cur.name from EXERCISE_GROUP cur where cur.GROUP_ID= EXERCISE_GROUP_ID)")
+	private String name;
+
+	/**  图片路径  */
+	@Column(name="IMG_PATH", length=255)
+	private String imgPath;
+	
+	@Column(name="START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+	
+	@Column(name="STOP_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date stopTime;
+	
+	
+	
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getStopTime() {
+		return stopTime;
+	}
+
+	public void setStopTime(Date stopTime) {
+		this.stopTime = stopTime;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public SchInteract() {
+	}
+
+	public String getInteractId() {
+		return this.interactId;
+	}
+
+	public void setInteractId(String interactId) {
+		this.interactId = interactId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getExerciseGroupId() {
+		return this.exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java b/src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java
new file mode 100644
index 0000000..660ecb4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.exercise.model.ExerciseItem;
+import com.qxueyou.scc.exercise.model.ExerciseItemOption;
+
+/**
+ * 互动历史结果
+ * @author ody
+ *
+ */
+public class SchInteractResult implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	private ExerciseItem objItem ;
+	
+	private String answer;
+	
+	private List<Map<String, Object>> lstResult;
+	
+	private List<ExerciseItemOption> lstOption;
+	
+	private String analysis;
+	
+	public SchInteractResult(){
+		
+	}
+
+	public ExerciseItem getObjItem() {
+		return objItem;
+	}
+
+	public void setObjItem(ExerciseItem objItem) {
+		this.objItem = objItem;
+	}
+
+	public List<Map<String, Object>> getLstResult() {
+		return lstResult;
+	}
+
+	public void setLstResult(List<Map<String, Object>> lstResult) {
+		this.lstResult = lstResult;
+	}
+
+	public List<ExerciseItemOption> getLstOption() {
+		return lstOption;
+	}
+
+	public void setLstOption(List<ExerciseItemOption> lstOption) {
+		this.lstOption = lstOption;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getAnalysis() {
+		return analysis;
+	}
+
+	public void setAnalysis(String analysis) {
+		this.analysis = analysis;
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchLessonPeriod.java b/src/main/java/com/qxueyou/scc/school/model/SchLessonPeriod.java
new file mode 100644
index 0000000..15ed7b3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchLessonPeriod.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import java.util.Date;
+
+
+/**
+ * The persistent class for the sch_lesson_period database table.
+ * 
+ */
+@Entity
+@Table(name="sch_lesson_period")
+@NamedQuery(name="SchLessonPeriod.findAll", query="SELECT s FROM SchLessonPeriod s")
+public class SchLessonPeriod implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="LESSON_PERIOD_ID", unique=true, nullable=false, length=32)
+	private String lessonPeriodId;
+
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	@Column(name="COURSE_ID", length=32)
+	private String courseId;
+	
+	@Column(name="ADDRESS", length=255)
+	private String address;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date startTime;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public SchLessonPeriod() {
+	}
+	
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getLessonPeriodId() {
+		return this.lessonPeriodId;
+	}
+
+	public void setLessonPeriodId(String lessonPeriodId) {
+		this.lessonPeriodId = lessonPeriodId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCourseId() {
+		return this.courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getEndTime() {
+		return this.endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getStartTime() {
+		return this.startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchNote.java b/src/main/java/com/qxueyou/scc/school/model/SchNote.java
new file mode 100644
index 0000000..67b983a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchNote.java
@@ -0,0 +1,232 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 笔记本表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_note")
+@NamedQuery(name="SchNote.findAll", query="SELECT s FROM SchNote s")
+public class SchNote implements Serializable , ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/**  笔记对象类型 1:讲义单页  */
+	public static int NOTE_OBJECT_TYPE_HANDOUT_PAGE = 1 ;
+
+	/**  笔记共享范围 1:班级  */
+	public static int NOTE_SCOPE_CLASS = 1 ;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="NOTE_ID", unique=true, nullable=false, length=32)
+	private String noteId;
+	
+	/**  笔记对象ID  */
+	@Column(name="NOTE_OBJECT_ID", length=32)
+	private String noteObjectId;
+
+	/**  笔记对象类型  */
+	@Column(name="NOTE_OBJECT_TYPE")
+	private Integer noteObjectType;
+
+	/**  笔记内容 */
+	@Column(name="CONTENT", length=65535)
+	private String content;
+	
+	/** 共享标志  */
+	@Column(name="SHARE_FLAG", nullable=false)
+	private boolean shareFlag;
+
+	/**  共享范围 */
+	@Column(name="SHARE_SCOPE" )
+	private Integer shareScope;
+	
+	/**  userId */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/**  笔记时间 */
+	@Column(name="NOTE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date noteTime;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getNoteId() {
+		return noteId;
+	}
+
+	public void setNoteId(String noteId) {
+		this.noteId = noteId;
+	}
+
+	public String getNoteObjectId() {
+		return noteObjectId;
+	}
+
+	public void setNoteObjectId(String noteObjectId) {
+		this.noteObjectId = noteObjectId;
+	}
+
+	public Integer getNoteObjectType() {
+		return noteObjectType;
+	}
+
+	public void setNoteObjectType(Integer noteObjectType) {
+		this.noteObjectType = noteObjectType;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public boolean getShareFlag() {
+		return shareFlag;
+	}
+
+	public void setShareFlag(boolean shareFlag) {
+		this.shareFlag = shareFlag;
+	}
+
+	public Integer getShareScope() {
+		return shareScope;
+	}
+
+	public void setShareScope(Integer shareScope) {
+		this.shareScope = shareScope;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getNoteTime() {
+		return noteTime;
+	}
+
+	public void setNoteTime(Date noteTime) {
+		this.noteTime = noteTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java b/src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java
new file mode 100644
index 0000000..fa71b3b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java
@@ -0,0 +1,167 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * The persistent class for the sch_qr_url database table.
+ * 
+ */
+@Entity
+@Table(name="sch_qr_url")
+@NamedQuery(name="SchQRUrl.findAll", query="SELECT s FROM SchQRUrl s")
+public class SchQRUrl implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="QR_URL_ID", unique=true, nullable=false, length=32)
+	private String qrUrlId;
+
+	@Column(name="BUSINESS_ID", length=32)
+	private String businessId;
+
+	/** 类型:1:直播 2:视频 */
+	@Column(name="TYPE")
+	private int type;
+	
+	public static final int TYPE_VIDEO_LIVE = 1;
+	
+	public static final int TYPE_VIDEO = 2;
+	
+	@Column(name="URL", length=255)
+	private String url;
+	
+	@Column(name="QR_TEMPLATE_ID", length=255)
+	private String qrTemplateId;
+
+	@Column(name="CREATE_TIME" )
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="DELETE_FLAG" )
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getQrUrlId() {
+		return qrUrlId;
+	}
+
+	public void setQrUrlId(String qrUrlId) {
+		this.qrUrlId = qrUrlId;
+	}
+
+	public String getBusinessId() {
+		return businessId;
+	}
+
+	public void setBusinessId(String businessId) {
+		this.businessId = businessId;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getQrTemplateId() {
+		return qrTemplateId;
+	}
+
+	public void setQrTemplateId(String qrTemplateId) {
+		this.qrTemplateId = qrTemplateId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchRank.java b/src/main/java/com/qxueyou/scc/school/model/SchRank.java
new file mode 100644
index 0000000..3b0e840
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchRank.java
@@ -0,0 +1,234 @@
+package com.qxueyou.scc.school.model;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 学习排名表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name = "sch_rank")
+@NamedQuery(name="SchRank.findAll", query="SELECT s FROM SchRank s")
+public class SchRank implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = 5843514289817382614L;
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "RANK_ID", unique = true, nullable = false, length = 32)
+	private String rankId;
+
+	/**  排名类型  */
+	@Column(name = "RANK_TYPE",length=32)
+	private String rankType;
+	
+	/*
+	 * 排名类型:积分
+	 */
+	public static final String RANK_TYPE_SCORE = "SCORE";
+	
+	/*
+	 * 排名类型:传播大使积分
+	 */
+	public static final String RANK_TYPE_ATS_SCORE = "ATS_SCORE";
+	
+	/*
+	 * 排名类型:练习得分排名
+	 */
+	public static final String RANK_TYPE_EXERCISE_SCORE = "EXERCISE_SCORE";
+
+	/** 排名依据  */
+	@Column(name = "VALUE", precision = 20, scale = 6)
+	private BigDecimal value;
+
+	/** 排名范围 */
+	@Column(name = "SCOPE_TYPE", length = 32)
+	private String scopeType;
+	
+	/*
+	 * 排名范围:组
+	 */
+	public static final String SCOPE_TYPE_CLASS_GROUP = "GROUP";
+	
+	/*
+	 * 排名范围:班级 
+	 */
+	public static final String SCOPE_TYPE_CLASS = "CLASS";
+	
+	/*
+	 * 排名范围:Q学友
+	 */
+	public static final String SCOPE_TYPE_QXUEYOU = "QXUEYOU";
+	
+	/*
+	 * 排名范围:好友
+	 */
+	public static final String SCOPE_TYPE_FRIEND = "FRIEND";
+
+	/** 排名范围ID  */
+	@Column(name = "SCOPE_ID", length = 32)
+	private String scopeId;
+
+	/** 用户ID  */
+	@Column(name = "USER_ID", length = 32)
+	private String userId;
+
+	/** 创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  创建人ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getRankId() {
+		return this.rankId;
+	}
+
+	public void setRankId(String rankId) {
+		this.rankId = rankId;
+	}
+
+	public String getRankType() {
+		return this.rankType;
+	}
+
+	public void setRankType(String rankType) {
+		this.rankType = rankType;
+	}
+
+	public BigDecimal getValue() {
+		return this.value;
+	}
+
+	public void setValue(BigDecimal value) {
+		this.value = value;
+	}
+
+	public String getScopeType() {
+		return this.scopeType;
+	}
+
+	public void setScopeType(String scopeType) {
+		this.scopeType = scopeType;
+	}
+
+	public String getScopeId() {
+		return this.scopeId;
+	}
+
+	public void setScopeId(String scopeId) {
+		this.scopeId = scopeId;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchRankHis.java b/src/main/java/com/qxueyou/scc/school/model/SchRankHis.java
new file mode 100644
index 0000000..63d61a0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchRankHis.java
@@ -0,0 +1,268 @@
+package com.qxueyou.scc.school.model;
+// Generated 2015-8-20 16:41:37 by Hibernate Tools 4.0.0
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.Formula;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 学习排名历史表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_rank_his")
+@NamedQuery(name="SchRankHis.findAll", query="SELECT s FROM SchRankHis s")
+public class SchRankHis implements java.io.Serializable,ITrace {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -3377176468950409846L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "HIS_RANK_ID", unique = true, nullable = false, length = 32)
+	private String hisRankId;
+
+	/**  排名 */	
+	@Column(name = "RANK")
+	private Integer rank;
+
+	/**  排名依据 */
+	@Column(name = "VALUE", precision = 20, scale = 6)
+	private BigDecimal value;
+
+	/**  用户ID */
+	@Column(name = "USER_ID", length = 32)
+	private String userId;
+
+	/**  用户姓名 */
+	@Formula("(select u.NAME from USER u WHERE u.USER_ID=USER_ID)")
+	private String name;
+
+	/**  用户头像 */
+	@Formula("(select u.IMG_PATH from USER u WHERE u.USER_ID=USER_ID)")
+	private String imgPath;
+
+	/**  版本ID */
+	@Column(name = "VERSION_ID", length = 32)
+	private String versionId;
+
+	/**  排名时间 */
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "RANK_TIME", nullable = false, length = 19)
+	private Date rankTime;
+
+	/**  学习排名主键  */
+	@Column(name = "RANK_ID", length = 32)
+	private String rankId;
+
+	/** 创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 修改者  */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  修改者ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	/**  全站排名百分比  */
+	@Transient
+	private BigDecimal percentages;
+	
+	/** 等级  */
+	@Transient
+	private String level;
+	
+	public String getLevel() {
+		return level;
+	}
+
+	public void setLevel(String level) {
+		this.level = level;
+	}
+
+	public BigDecimal getPercentages() {
+		return percentages;
+	}
+
+	public void setPercentages(BigDecimal percentages) {
+		this.percentages = percentages;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public String getHisRankId() {
+		return this.hisRankId;
+	}
+
+	public void setHisRankId(String hisRankId) {
+		this.hisRankId = hisRankId;
+	}
+
+	public Integer getRank() {
+		return this.rank;
+	}
+
+	public void setRank(Integer rank) {
+		this.rank = rank;
+	}
+
+	public BigDecimal getValue() {
+		return this.value;
+	}
+
+	public void setValue(BigDecimal value) {
+		this.value = value;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public Date getRankTime() {
+		return this.rankTime;
+	}
+
+	public void setRankTime(Date rankTime) {
+		this.rankTime = rankTime;
+	}
+
+	public String getRankId() {
+		return this.rankId;
+	}
+
+	public void setRankId(String rankId) {
+		this.rankId = rankId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getVersionId() {
+		return versionId;
+	}
+
+	public void setVersionId(String versionId) {
+		this.versionId = versionId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchRankVer.java b/src/main/java/com/qxueyou/scc/school/model/SchRankVer.java
new file mode 100644
index 0000000..6b715cf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchRankVer.java
@@ -0,0 +1,210 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 排名版本表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_rank_ver")
+@NamedQuery(name="SchRankVer.findAll", query="SELECT s FROM SchRankVer s")
+public class SchRankVer implements Serializable, com.qxueyou.scc.base.model.ITrace {
+
+	private static final long serialVersionUID = -2874533009566392430L;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VERSION_ID", unique=true, nullable=false, length=32)
+	private String versionId;
+
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建人  */
+	@Column(name="CREATOR",nullable=false, length=100)
+	private String creator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  最近版本 */
+	@Column(name="LATEST")
+	private boolean latest;
+
+	/**  排名类型 */
+	@Column(name="RANK_TYPE")
+	private String rankType;
+
+	/**  排名范围ID */
+	@Column(name="SCOPE_ID", length=32)
+	private String scopeId;
+
+	/**  排名范围类型 */
+	@Column(name="SCOPE_TYPE", length=32)
+	private String scopeType;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR",length=100)
+	private String updator;
+
+	/**  版本号 */
+	@Column(name="VERSION")
+	private int version;
+
+	/**  版本生成时间 */
+	@Column(name="VERSION_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date versionTime;
+
+	public SchRankVer() {
+	}
+
+	public String getVersionId() {
+		return this.versionId;
+	}
+
+	public void setVersionId(String versionId) {
+		this.versionId = versionId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public boolean isLatest() {
+		return this.latest;
+	}
+
+	public void setLatest(boolean latest) {
+		this.latest = latest;
+	}
+
+	public String getRankType() {
+		return this.rankType;
+	}
+
+	public void setRankType(String rankType) {
+		this.rankType = rankType;
+	}
+
+	public String getScopeId() {
+		return this.scopeId;
+	}
+
+	public void setScopeId(String scopeId) {
+		this.scopeId = scopeId;
+	}
+
+	public String getScopeType() {
+		return this.scopeType;
+	}
+
+	public void setScopeType(String scopeType) {
+		this.scopeType = scopeType;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public int getVersion() {
+		return this.version;
+	}
+
+	public void setVersion(int version) {
+		this.version = version;
+	}
+
+	public Date getVersionTime() {
+		return this.versionTime;
+	}
+
+	public void setVersionTime(Date versionTime) {
+		this.versionTime = versionTime;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java b/src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java
new file mode 100644
index 0000000..6754535
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+
+/**
+ * 班级学员表实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_re_class_user")
+@NamedQuery(name="SchReClassUser.findAll", query="SELECT s FROM SchReClassUser s")
+public class SchReClassUser implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RE_ID", unique=true, nullable=false, length=32)
+	private String reId;
+
+	/**  班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/**  用户ID */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	public SchReClassUser() {
+	}
+
+	public String getReId() {
+		return this.reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java b/src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java
new file mode 100644
index 0000000..5c7937e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java
@@ -0,0 +1,163 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 课程-直播关系表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_RE_LESSON_LIVE_VIDEO")
+public class SchReLessonLiveVideo implements Serializable,ITrace {
+
+	private static final long serialVersionUID = -7223739750298125697L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  班级课表ID */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+
+	/**  直播ID  */
+	@Column(name="LIVE_VIDEO_ID", length=32)
+	private String liveVideoId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getLiveVideoId() {
+		return liveVideoId;
+	}
+
+	public void setLiveVideoId(String liveVideoId) {
+		this.liveVideoId = liveVideoId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java b/src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java
new file mode 100644
index 0000000..03eb0b1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java
@@ -0,0 +1,161 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import java.util.Date;
+
+
+/**
+ * 课时、课程关系表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_re_lesson_period")
+@NamedQuery(name="SchReLessonPeriod.findAll", query="SELECT s FROM SchReLessonPeriod s")
+public class SchReLessonPeriod implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	/** 主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RE_LESSON_PERIOD_ID", unique=true, nullable=false, length=32)
+	private String reLessonPeriodId;
+
+	/** 创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/** 创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/** 删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/** 课程ID */
+	@Column(name="LESSON_ID", length=32)
+	private String lessonId;
+
+	/** 课时ID */
+	@Column(name="LESSON_PERIOD_ID", length=32)
+	private String lessonPeriodId;
+
+	/** 修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public SchReLessonPeriod() {
+	}
+
+	public String getReLessonPeriodId() {
+		return this.reLessonPeriodId;
+	}
+
+	public void setReLessonPeriodId(String reLessonPeriodId) {
+		this.reLessonPeriodId = reLessonPeriodId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getLessonId() {
+		return this.lessonId;
+	}
+
+	public void setLessonId(String lessonId) {
+		this.lessonId = lessonId;
+	}
+
+	public String getLessonPeriodId() {
+		return this.lessonPeriodId;
+	}
+
+	public void setLessonPeriodId(String lessonPeriodId) {
+		this.lessonPeriodId = lessonPeriodId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java b/src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java
new file mode 100644
index 0000000..6800705
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java
@@ -0,0 +1,167 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 课程-视频关系表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_RE_LESSON_VIDEO")
+@NamedQuery(name="SchReLessonVideo.findAll", query="SELECT s FROM SchReLessonVideo s")
+public class SchReLessonVideo implements Serializable,ITrace {
+
+	private static final long serialVersionUID = -7223739750298125697L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  班级课表ID */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+	
+	/**  视频ID  */
+	@Column(name="VIDEO_ID", length=32)
+	private String videoId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public SchReLessonVideo() {
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java b/src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java
new file mode 100644
index 0000000..466a4ec
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java
@@ -0,0 +1,325 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 地址
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_SCHEDULE_ADDRESS")
+@NamedQuery(name="SchScheduleAddress.findAll", query="SELECT s FROM SchScheduleAddress s")
+public class SchScheduleAddress implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="ADDRESS_ID", unique=true, nullable=false, length=32)
+	private String addressId;
+
+	/**  校区  */
+	@Column(name="CAMPUS", length=150)
+	private String campus;
+	
+	/**  楼 */
+	@Column(name="BUILDING", length=50)
+	private String building;
+	
+	/**  楼层 */
+	@Column(name="FLOOR")
+	private Short floor;
+	
+	/**  门牌号 */
+	@Column(name="NUMBER", length=255)
+	private String number;
+	
+	/**  名称 */
+	@Column(name="NAME", length=255)
+	private String name;
+	
+	/**  机构id*/
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**  班级id */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+	
+	/** 机构地址id */
+	@Column(name="ORG_ADDRESS_ID", length=32)
+	private String orgAddressId;
+	
+	/**  全称 */
+	@Column(name="FULL_NAME", length=255)
+	private String fullName;
+	
+	/**  类型 */
+	@Column(name="TYPE")
+	private Short type;
+	
+	/**  容量(多少人)*/
+	@Column(name="CAPACITY")
+	private Short capacity;
+	
+	/**  可用面积 */
+	@Column(name="USABLE_AREA", precision=6, scale=2)
+	private BigDecimal usableArea;
+	
+	/**  经度  */
+	@Column(name="LONGITUDE_X", length=32)
+	private String longitudeX;
+	
+	/**  纬度  */
+	@Column(name="LATITUDE_Y", length=32)
+	private String latitudeY;
+	
+	/**  省  */
+	@Column(name="PROVINCE", length=64)
+	private String province;
+	
+	/**  城市  */
+	@Column(name="CITY", length=64)
+	private String city;
+	
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getOrgAddressId() {
+		return orgAddressId;
+	}
+
+	public void setOrgAddressId(String orgAddressId) {
+		this.orgAddressId = orgAddressId;
+	}
+
+	public String getAddressId() {
+		return addressId;
+	}
+
+	public void setAddressId(String addressId) {
+		this.addressId = addressId;
+	}
+	
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getCampus() {
+		return campus;
+	}
+
+	public void setCampus(String campus) {
+		this.campus = campus;
+	}
+
+	public String getBuilding() {
+		return building;
+	}
+
+	public void setBuilding(String building) {
+		this.building = building;
+	}
+
+	public Short getFloor() {
+		return floor;
+	}
+
+	public void setFloor(Short floor) {
+		this.floor = floor;
+	}
+
+	public String getNumber() {
+		return number;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFullName() {
+		return fullName;
+	}
+
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	public Short getType() {
+		return type;
+	}
+
+	public void setType(Short type) {
+		this.type = type;
+	}
+
+	public Short getCapacity() {
+		return capacity;
+	}
+
+	public void setCapacity(Short capacity) {
+		this.capacity = capacity;
+	}
+
+	public BigDecimal getUsableArea() {
+		return usableArea;
+	}
+
+	public void setUsableArea(BigDecimal usableArea) {
+		this.usableArea = usableArea;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getLongitudeX() {
+		return longitudeX;
+	}
+
+	public void setLongitudeX(String longitudeX) {
+		this.longitudeX = longitudeX;
+	}
+
+	public String getLatitudeY() {
+		return latitudeY;
+	}
+
+	public void setLatitudeY(String latitudeY) {
+		this.latitudeY = latitudeY;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java b/src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java
new file mode 100644
index 0000000..8ae1738
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java
@@ -0,0 +1,170 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 高校 作息时间模板
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_school_day")
+@NamedQuery(name="SchSchoolDay.findAll", query="SELECT s FROM SchSchoolDay s")
+public class SchSchoolDay implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SCHOOL_DAY_ID", unique=true, nullable=false, length=32)
+	private String schoolDayId;
+
+	/**  名称  */
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	/** 高校ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**  备注  */
+	@Column(name="REMARK", length=255)
+	private String remark;
+	
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	public String getSchoolDayId() {
+		return schoolDayId;
+	}
+
+	public void setSchoolDayId(String schoolDayId) {
+		this.schoolDayId = schoolDayId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java b/src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java
new file mode 100644
index 0000000..d4217bc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java
@@ -0,0 +1,197 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 高校 一天的作息时间   上课时间安排
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_school_day_item")
+@NamedQuery(name="SchSchoolDayItem.findAll", query="SELECT s FROM SchSchoolDayItem s")
+public class SchSchoolDayItem implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="DAY_ITEM_ID", unique=true, nullable=false, length=32)
+	private String dayItemId;
+
+	/**  名称  */
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	/** 开始时间  */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "HH:mm")
+	private Date startTime;
+	
+	/** 结束时间  */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "HH:mm")
+	private Date endTime;
+	
+	/**  第几堂课 */
+	@Column(name="DAY_ORDER")
+	private short dayOrder;
+	
+	/**  模板ID  */
+	@Column(name="SCHOOL_DAY_ID", unique=true, nullable=false, length=32)
+	private String schoolDayId;
+	
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	public String getDayItemId() {
+		return dayItemId;
+	}
+
+	public void setDayItemId(String dayItemId) {
+		this.dayItemId = dayItemId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public short getDayOrder() {
+		return dayOrder;
+	}
+
+	public void setDayOrder(short dayOrder) {
+		this.dayOrder = dayOrder;
+	}
+
+	public String getSchoolDayId() {
+		return schoolDayId;
+	}
+
+	public void setSchoolDayId(String schoolDayId) {
+		this.schoolDayId = schoolDayId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java b/src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java
new file mode 100644
index 0000000..0981fa5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java
@@ -0,0 +1,201 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+
+/**
+ * 学年
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_SCHOOL_YEAR")
+@NamedQuery(name="SchSchoolYear.findAll", query="SELECT s FROM SchSchoolYear s")
+@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
+public class SchSchoolYear implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SCHOOL_YEAR_ID", unique=true, nullable=false, length=32)
+	private String schoolYearId;
+
+	/**  名称  */
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	/** 开始时间  */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	/** 结束时间  */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "schYear")
+	@JsonIgnore
+	private List<SchTerm> schTerms;
+	
+	public String getSchoolYearId() {
+		return schoolYearId;
+	}
+
+	public void setSchoolYearId(String schoolYearId) {
+		this.schoolYearId = schoolYearId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public List<SchTerm> getSchTerms() {
+		return schTerms;
+	}
+
+	public void setSchTerms(List<SchTerm> schTerms) {
+		this.schTerms = schTerms;
+	}
+
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSign.java b/src/main/java/com/qxueyou/scc/school/model/SchSign.java
new file mode 100644
index 0000000..590af55
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSign.java
@@ -0,0 +1,475 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 签到表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_sign")
+@NamedQuery(name="SchSign.findAll", query="SELECT s FROM SchSign s")
+public class SchSign implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SIGN_ID", unique=true, nullable=false, length=32)
+	private String signId;
+	
+	/** 签到类型: 1: 仅上课(需要)签到;  2: 上下课(都需)签到, 3活动签到*/
+	public static final short SIGN_TYPE_FIRST = 1;
+	
+	public static final short SIGN_TYPE_ALL = 2;
+	
+	public static final short SIGN_TYPE_ACTIVITY = 3;
+	
+	/** 历史记录配置:1:不显示  2:显示**/
+	
+	public static final int SIGN_HIS_HIDDEN = 1;
+	public static final int SIGN_HIS_SHOW = 2;
+	
+	/** 姓名、号码,机构是否显示**/
+	public static final int HIDDEN = 2;
+	public static final int SHOW = 0;
+	public static final int SHOW_PART = 1;
+	
+	/** 未报名用户签到:1:不允许  2:允许**/
+	
+	public static final int SIGN_ACT_DISALLOW = 1;
+	public static final int SIGN_ACT_ALLOW = 2;
+	
+	/** 未付款用户签到:1:不允许  2:允许**/
+	
+	public static final int SIGN_PAY_DISALLOW = 1;
+	public static final int SIGN_PAY_ALLOW = 2;
+	
+	/**  签到码 */
+	@Column(name="CODE", length=32)
+	private String code;
+
+	/**  班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/**  科目 */
+	@Column(name="COURSE", length=150)
+	private String course;
+
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建者 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/** 删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/** 签到结束时间  */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/** 课程  */
+	@Column(name="LESSON", length=150)
+	private String lesson;
+
+	/** 班级课表ID  */
+	@Column(name="CLASS_SCHEDULE_ID", length=32)
+	private String classScheduleId;
+
+	/** 签到名称  */
+	@Column(name="NAME", length=32)
+	private String name;
+
+	/**  签到图片,暂未启用    */
+	@Lob
+	@Column(name="SIGN_IMAGE")
+	private byte[] signImage;
+
+	/** 签到开始时间  */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  签到类型  */
+	@Column(name="SIGN_TYPE")
+	private Short signType;
+
+	/**  微信活动签到:签到首页图片路径 */
+	@Column(name="HOME_IMG_PATH", length=255)
+	private String homeImgPath;
+
+	/**  微信活动签到:签到成功流程图片路径 */
+	@Column(name="FLOW_IMG_PATH", length=255)
+	private String flowImgPath;
+	
+	/**  微信签到:排名配置 */
+	@Column(name="HIS_SHOW", length=1)
+	private Integer hisShow;
+	
+	/**  微信签到:未报名用户允许签到配置 */
+	@Column(name="ACT_ALLOW", length=1)
+	private Integer actAllow;
+	
+	/**  微信签到:未报名用户允许签到配置 */
+	@Column(name="PAY_ALLOW", length=1)
+	private Integer payAllow;
+	
+	/** 是否显示姓名 */
+	@Column(name="NAME_SHOW", length=1)
+	private Integer nameShow;
+	
+	/**  是否显示手机号 */
+	@Column(name="PHONE_SHOW", length=1)
+	private Integer phoneShow;
+	
+	/**  是否显示机构信息  */
+	@Column(name="ORG_SHOW", length=1)
+	private Integer orgShow;
+	
+	/** 签到通知接收者用户ID */
+	@Column(name="NOTICE_USER_ID")
+	private String noticeUserId;
+	
+	/** 签到通知接收者密码 */
+	@Column(name="NOTICE_PASSWORD")
+	private String noticePassword;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "sign")
+	@JsonIgnore
+	private List<SchSignItem> signItems;
+	
+	/**  是否允许未激活签到  */
+	@Column(name="REGISTER_ALLOW", length=1)
+	private Integer registerAllow;
+	
+	/**  是否允许超过范围  */
+	@Column(name="OUT_RANGE_ALLOW", length=1)
+	private Integer outRangeAllow;
+	
+	/**  允许超出范围  */
+	@Column(name="OUT_RANGE", length=5)
+	private double outRange;
+	
+	/**  新学员是否验证手机号1、是,2、否  */
+	@Column(name="VALIDATE_PHONE", length=1)
+	private Integer validatePhone;
+	
+	public Integer getValidatePhone() {
+		return validatePhone;
+	}
+
+	public void setValidatePhone(Integer validatePhone) {
+		this.validatePhone = validatePhone;
+	}
+
+	public Integer getRegisterAllow() {
+		return registerAllow;
+	}
+
+	public void setRegisterAllow(Integer registerAllow) {
+		this.registerAllow = registerAllow;
+	}
+
+	public Integer getOutRangeAllow() {
+		return outRangeAllow;
+	}
+
+	public void setOutRangeAllow(Integer outRangeAllow) {
+		this.outRangeAllow = outRangeAllow;
+	}
+
+	public double getOutRange() {
+		return outRange;
+	}
+
+	public void setOutRange(double outRange) {
+		this.outRange = outRange;
+	}
+
+	public Integer getPayAllow() {
+		return payAllow;
+	}
+
+	public Integer getNameShow() {
+		return nameShow;
+	}
+
+	public void setNameShow(Integer nameShow) {
+		this.nameShow = nameShow;
+	}
+
+	public Integer getPhoneShow() {
+		return phoneShow;
+	}
+
+	public void setPhoneShow(Integer phoneShow) {
+		this.phoneShow = phoneShow;
+	}
+
+	public Integer getOrgShow() {
+		return orgShow;
+	}
+
+	public void setOrgShow(Integer orgShow) {
+		this.orgShow = orgShow;
+	}
+
+	public void setPayAllow(Integer payAllow) {
+		this.payAllow = payAllow;
+	}
+
+	public Integer getActAllow() {
+		return actAllow;
+	}
+
+	public void setActAllow(Integer actAllow) {
+		this.actAllow = actAllow;
+	}
+
+	public List<SchSignItem> getSignItems() {
+		return signItems;
+	}
+
+	public void setSignItems(List<SchSignItem> signItems) {
+		this.signItems = signItems;
+	}
+
+	public String getSignId() {
+		return this.signId;
+	}
+
+	public void setSignId(String signId) {
+		this.signId = signId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCourse() {
+		return this.course;
+	}
+
+	public void setCourse(String course) {
+		this.course = course;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getEndTime() {
+		return this.endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getLesson() {
+		return this.lesson;
+	}
+
+	public void setLesson(String lesson) {
+		this.lesson = lesson;
+	}
+
+	public byte[] getSignImage() {
+		return this.signImage == null?new byte[0]:this.signImage;
+	}
+
+	public void setSignImage(byte[] signImage) {
+		byte[] signImageCopy = signImage;
+		this.signImage = signImageCopy;
+	}
+
+	public Date getStartTime() {
+		return this.startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Short getSignType() {
+		return signType;
+	}
+
+	public void setSignType(Short signType) {
+		this.signType = signType;
+	}
+
+	public String getHomeImgPath() {
+		return homeImgPath;
+	}
+
+	public void setHomeImgPath(String homeImgPath) {
+		this.homeImgPath = homeImgPath;
+	}
+
+	public String getFlowImgPath() {
+		return flowImgPath;
+	}
+
+	public void setFlowImgPath(String flowImgPath) {
+		this.flowImgPath = flowImgPath;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public Integer getHisShow() {
+		return hisShow;
+	}
+
+	public void setHisShow(Integer hisShow) {
+		this.hisShow = hisShow;
+	}
+
+	public String getNoticeUserId() {
+		return noticeUserId;
+	}
+
+	public void setNoticeUserId(String noticeUserId) {
+		this.noticeUserId = noticeUserId;
+	}
+
+	public String getNoticePassword() {
+		return noticePassword;
+	}
+
+	public void setNoticePassword(String noticePassword) {
+		this.noticePassword = noticePassword;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSignCode.java b/src/main/java/com/qxueyou/scc/school/model/SchSignCode.java
new file mode 100644
index 0000000..403cc85
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSignCode.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.school.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * 签到码表  实体
+ * @author ody.yuan
+ * 
+ */
+@Entity
+@Table(name="sch_sign_code")
+@NamedQuery(name="SchSignCode.findAll", query="SELECT s FROM SchSignCode s")
+public class SchSignCode {
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SIGN_CODE_ID", unique=true, nullable=false, length=32)
+	private String signCodeId;
+
+	/** 签到code  */
+	@Column(name="CODE", nullable=false, length=32)
+	private String code;
+
+	/**  班级ID */
+	@Column(name="CLASS_ID", nullable=false, length=32)
+	private String classId;
+
+	public String getSignCodeId() {
+		return signCodeId;
+	}
+
+	public void setSignCodeId(String signCodeId) {
+		this.signCodeId = signCodeId;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSignItem.java b/src/main/java/com/qxueyou/scc/school/model/SchSignItem.java
new file mode 100644
index 0000000..9d9a529
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSignItem.java
@@ -0,0 +1,282 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 签到记录明细表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sch_sign_item")
+@NamedQuery(name="SchSignItem.findAll", query="SELECT s FROM SchSignItem s")
+public class SchSignItem implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SIGN_ITEM_ID", unique=true, nullable=false, length=32)
+	private String signItemId;
+
+	/**  创建人ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  签到地址 */
+	@Column(name="SIGN_ADDRESS", length=255)
+	private String signAddress;
+
+	/**  签到主表ID */
+	@Column(name="SIGN_ID", length=32)
+	private String signId;
+
+	/**  签到时间 */
+	@Column(name="SIGN_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date signTime;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/** 修改人  */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  签到用户ID  */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	/**  签到用户姓名 */
+	@Column(name="USER_NAME", length=150)
+	private String userName;
+
+	/**   */
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "SIGN_ID",referencedColumnName="SIGN_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private SchSign sign;
+	
+	//最后一次签到时间
+	@Transient
+	private Date endTime;
+	
+	//第一次签到排名
+	@Transient
+	private Short signOrder;
+	
+	//移动电话
+	@Transient
+	private String mobilePhone;
+	
+	//是否已报名
+	@Transient
+	private String registeFlag;
+	
+	//是否已下载
+	@Transient
+	private String installFlag;
+	
+	public SchSignItem() {
+	}
+	
+	public SchSign getSign() {
+		return sign;
+	}
+
+	public void setSign(SchSign sign) {
+		this.sign = sign;
+	}
+
+	public String getSignItemId() {
+		return this.signItemId;
+	}
+
+	public void setSignItemId(String signItemId) {
+		this.signItemId = signItemId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getSignAddress() {
+		return this.signAddress;
+	}
+
+	public void setSignAddress(String signAddress) {
+		this.signAddress = signAddress;
+	}
+
+	public String getSignId() {
+		return this.signId;
+	}
+
+	public void setSignId(String signId) {
+		this.signId = signId;
+	}
+
+	public Date getSignTime() {
+		return this.signTime;
+	}
+
+	public void setSignTime(Date signTime) {
+		this.signTime = signTime;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Short getSignOrder() {
+		return signOrder;
+	}
+
+	public void setSignOrder(Short signOrder) {
+		this.signOrder = signOrder;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getRegisteFlag() {
+		return registeFlag;
+	}
+
+	public void setRegisteFlag(String registeFlag) {
+		this.registeFlag = registeFlag;
+	}
+
+	public String getInstallFlag() {
+		return installFlag;
+	}
+
+	public void setInstallFlag(String installFlag) {
+		this.installFlag = installFlag;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java b/src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java
new file mode 100644
index 0000000..979694e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java
@@ -0,0 +1,190 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_sign_item database table. 签到次序表
+ * 
+ */
+@Entity
+@Table(name="sch_sign_order")
+@NamedQuery(name="SchSignOrder.findAll", query="SELECT s FROM SchSignOrder s")
+public class SchSignOrder implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SIGN_ORDER_ID", unique=true, nullable=false, length=32)
+	private String signOrderId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+
+	@Column(name="SIGN_ID", length=32)
+	private String signId;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="USER_NAME", length=150)
+	private String userName;
+	
+	@Column(name="SIGN_ORDER")
+	private int signOrder;
+	
+	@Column(name="SIGN_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date signTime;
+	
+	public SchSignOrder() {
+		
+	}
+
+	public String getSignOrderId() {
+		return signOrderId;
+	}
+
+	public void setSignOrderId(String signOrderId) {
+		this.signOrderId = signOrderId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getSignId() {
+		return signId;
+	}
+
+	public void setSignId(String signId) {
+		this.signId = signId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public int getSignOrder() {
+		return signOrder;
+	}
+
+	public void setSignOrder(int signOrder) {
+		this.signOrder = signOrder;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public Date getSignTime() {
+		return signTime;
+	}
+
+	public void setSignTime(Date signTime) {
+		this.signTime = signTime;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java b/src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java
new file mode 100644
index 0000000..8b4d627
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java
@@ -0,0 +1,588 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the sch_sign_item database table. 签到次序表
+ * 
+ */
+@Entity
+@Table(name="sch_sign_statistics")
+@NamedQuery(name="SchSignStatistics.findAll", query="SELECT s FROM SchSignStatistics s")
+public class SchSignStatistics implements Serializable,ITrace {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SIGN_STATISTICS_ID", unique=true, nullable=false, length=32)
+	private String signStatisticsId;
+	
+	/** 签到终端类型: 1:Q学友;  2: 微信 */
+	public static final short TERMINAL_TYPE_QXUEYOU = 1;
+	
+	public static final short TERMINAL_TYPE_WECHAT = 2;
+	
+	/** 签到状态类型: 1:正常;  2: 迟到  ;3:早退;4:未签到*/
+	public static final short SIGN_STATUS_NORMAL = 1;
+	
+	public static final short SIGN_STATUS_LATE = 2;
+	
+	/** 是否统计 1是2否 **/
+	public static final int STATISTICS_FLAG_YES = 1;
+	
+	public static final int STATISTICS_FLAG_NO = 2;
+	
+	public static final short SIGN_STATUS_EARLY = 3;
+	
+	public static final short SIGN_STATUS_NO = 4;
+	
+	/** 用户ID */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	/** 用户姓名 */
+	@Column(name="USER_NAME", length=150)
+	private String userName;
+
+	/** 手机号码 */
+	@Column(name="MOBILE_PHONE", length=15)
+	private String mobilePhone;
+
+	/** 签到ID */
+	@Column(name="SIGN_ID", length=32)
+	private String signId;
+	
+	/** 签到时间 */
+	@Column(name="SIGN_DATE")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date signDate;
+	
+	/** 上课签到时间 */
+	@Column(name="FIRST_SIGN_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date firstSignTime;
+	
+	/** 上课签到排名 */
+	@Column(name="FIRST_SIGN_ORDER")
+	private Integer firstSignOrder;
+	
+	/** 上课签到状态 */
+	@Column(name = "FIRST_SIGN_STATUS")
+	private Short firstSignStatus;
+	
+	/** 下课签到时间 */
+	@Column(name="LAST_SIGN_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date lastSignTime;
+	
+	/** 下课签到排名,未使用 */
+	@Column(name="LAST_SIGN_ORDER")
+	private Integer lastSignOrder;
+	
+	/** 下课签到状态 */
+	@Column(name = "LAST_SIGN_STATUS")
+	private Short lastSignStatus;
+	
+	/** 签到地址 */
+	@Column(name="SIGN_ADDRESS", length=255)
+	private String signAddress;
+	
+	/** 签到类型:q学友 Or 微信 */
+	@Column(name="TERMINAL_TYPE", length=255)
+	private Short terminalType;
+	
+	/** 是否当前班级激活学员  */
+	@Column(name="REGISTE_FLAG", length=255)
+	private boolean registeFlag;
+	
+	/** 是否有登录过q学友  */
+	@Column(name="INSTALL_FLAG", length=255)
+	private boolean installFlag;
+	
+	/** 创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/** 修改时间 */
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+	
+	/** 创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+	
+	/** 创建人ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+	
+	/** 修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	/** 修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	/** 是否统计 */
+	@Column(name="STATISTICS_FLAG", length=1)
+	private int statisticsFlag;
+	
+	/** 位置经度纬度 */
+	@Column(name="POSITION", length=20)
+	private String position;
+	
+	/** 距离 */
+	@Column(name="OUT_OF_RANGE", length=10)
+	private double outOfRange;
+
+	/** 班级课程ID  */
+	@Column(name="CLASS_SUBJECT_ID", length=32)
+	private String classSubjectId;
+	
+	/** 班级课程name  */
+	@Column(name="CLASS_SUBJECT_NAME", length=32)
+	private String classSubjectName;
+
+	/**公司名*/
+	@Transient
+	private String companyName;
+	
+	@Transient
+	private Integer signType;
+	
+	@Transient
+	private String userImgPath;
+	
+	@Transient
+	private String attribute1;
+	
+	@Transient
+	private String sex;
+	
+	@Transient
+	private String className;
+	
+	@Transient
+	private String salesCode;
+	
+	@Transient
+	private String regTime;
+	
+	@Transient
+	private String activationTime;
+	
+	public String getActivationTime() {
+		return activationTime;
+	}
+
+	public void setActivationTime(String activationTime) {
+		this.activationTime = activationTime;
+	}
+
+	public int getStatisticsFlag() {
+		return statisticsFlag;
+	}
+
+	public void setStatisticsFlag(int statisticsFlag) {
+		this.statisticsFlag = statisticsFlag;
+	}
+
+	public String getPosition() {
+		return position;
+	}
+
+	public void setPosition(String position) {
+		this.position = position;
+	}
+
+	public double getOutOfRange() {
+		return outOfRange;
+	}
+
+	public void setOutOfRange(double outOfRange) {
+		this.outOfRange = outOfRange;
+	}
+
+	public Date getSignDate() {
+		return signDate;
+	}
+
+	public void setSignDate(Date signDate) {
+		this.signDate = signDate;
+	}
+
+	public String getClassSubjectId() {
+		return classSubjectId;
+	}
+
+	public void setClassSubjectId(String classSubjectId) {
+		this.classSubjectId = classSubjectId;
+	}
+
+	public String getClassSubjectName() {
+		return classSubjectName;
+	}
+
+	public void setClassSubjectName(String classSubjectName) {
+		this.classSubjectName = classSubjectName;
+	}
+
+	public String getSex() {
+		return sex;
+	}
+
+	public void setSex(String sex) {
+		this.sex = sex;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getSalesCode() {
+		return salesCode;
+	}
+
+	public void setSalesCode(String salesCode) {
+		this.salesCode = salesCode;
+	}
+
+	public String getRegTime() {
+		return regTime;
+	}
+
+	public void setRegTime(String regTime) {
+		this.regTime = regTime;
+	}
+
+	public String getSignStatisticsId() {
+		return signStatisticsId;
+	}
+
+	public void setSignStatisticsId(String signStatisticsId) {
+		this.signStatisticsId = signStatisticsId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getSignId() {
+		return signId;
+	}
+
+	public void setSignId(String signId) {
+		this.signId = signId;
+	}
+
+	public Date getFirstSignTime() {
+		return firstSignTime;
+	}
+
+	public void setFirstSignTime(Date firstSignTime) {
+		this.firstSignTime = firstSignTime;
+	}
+
+	public Integer getFirstSignOrder() {
+		return firstSignOrder;
+	}
+
+	public void setFirstSignOrder(Integer firstSignOrder) {
+		this.firstSignOrder = firstSignOrder;
+	}
+
+	public Short getFirstSignStatus() {
+		return firstSignStatus;
+	}
+
+	public void setFirstSignStatus(Short firstSignStatus) {
+		this.firstSignStatus = firstSignStatus;
+	}
+
+	public Date getLastSignTime() {
+		return lastSignTime;
+	}
+
+	public void setLastSignTime(Date lastSignTime) {
+		this.lastSignTime = lastSignTime;
+	}
+
+	public Integer getLastSignOrder() {
+		return lastSignOrder;
+	}
+
+	public void setLastSignOrder(Integer lastSignOrder) {
+		this.lastSignOrder = lastSignOrder;
+	}
+
+	public Short getLastSignStatus() {
+		return lastSignStatus;
+	}
+
+	public void setLastSignStatus(Short lastSignStatus) {
+		this.lastSignStatus = lastSignStatus;
+	}
+
+	public String getSignAddress() {
+		return signAddress;
+	}
+
+	public void setSignAddress(String signAddress) {
+		this.signAddress = signAddress;
+	}
+
+	public Short getTerminalType() {
+		return terminalType;
+	}
+
+	public void setTerminalType(Short terminalType) {
+		this.terminalType = terminalType;
+	}
+
+	public boolean isRegisteFlag() {
+		return registeFlag;
+	}
+
+	public void setRegisteFlag(boolean registeFlag) {
+		this.registeFlag = registeFlag;
+	}
+
+	public boolean isInstallFlag() {
+		return installFlag;
+	}
+
+	public void setInstallFlag(boolean installFlag) {
+		this.installFlag = installFlag;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+	public String getCompanyName() {
+		return companyName;
+	}
+
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+
+	public String getFirstStatusValue(){
+		String value = "";
+		if(this.firstSignStatus != null ){
+			if(SchSignStatistics.SIGN_STATUS_NORMAL == this.firstSignStatus){
+				value = "正常";
+			}else if(SchSignStatistics.SIGN_STATUS_LATE == this.firstSignStatus){
+				value = "迟到";
+			}else if(SchSignStatistics.SIGN_STATUS_NO == this.firstSignStatus){
+				value = "未到";
+			}
+		}
+		return value;
+	}
+	
+	public String getLastStatusValue(){
+		String value = "";
+		if(this.lastSignStatus != null){
+			if(SchSignStatistics.SIGN_STATUS_NORMAL == this.lastSignStatus){
+				value = "正常";
+			}else if(SchSignStatistics.SIGN_STATUS_EARLY == this.lastSignStatus){
+				value = "早退";
+			}else if(SchSignStatistics.SIGN_STATUS_NO == this.firstSignStatus){
+				value = "未到";
+			}
+		}
+		return value;
+	}
+	
+	public String getTerminalTypeValue(){
+		String value = "";
+		if(this.terminalType != null ){
+			if(SchSignStatistics.TERMINAL_TYPE_QXUEYOU == this.terminalType){
+				value = "Q学友";
+			}else if(SchSignStatistics.TERMINAL_TYPE_WECHAT == this.terminalType){
+				value = "微信";
+			}
+			return value;
+		}
+		return null;
+	}
+	
+	public String getInstallValue(){
+		String value = "否";
+		if(this.installFlag){
+			value = "是";
+		}
+		return value;
+	}
+	
+	public String getRegisteValue(){
+		String value = "否";
+		if(this.registeFlag){
+			value = "是";
+		}
+		return value;
+	}
+
+	public Integer getSignType() {
+		return signType;
+	}
+
+	public void setSignType(Integer signType) {
+		this.signType = signType;
+	}
+
+	public String getUserImgPath() {
+		return userImgPath;
+	}
+
+	public void setUserImgPath(String userImgPath) {
+		this.userImgPath = userImgPath;
+	}
+
+	public String getAttribute1() {
+		return attribute1;
+	}
+
+	public void setAttribute1(String attribute1) {
+		this.attribute1 = attribute1;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((signStatisticsId == null) ? 0 : signStatisticsId.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj){
+			return true;
+		}
+		if (obj == null){
+			return false;
+		}
+		if (getClass() != obj.getClass()){
+			return false;
+		}
+		SchSignStatistics other = (SchSignStatistics) obj;
+		if (signStatisticsId == null) {
+			if (other.signStatisticsId != null){
+				return false;
+			}
+		} else if (!signStatisticsId.equals(other.signStatisticsId)){
+			return false;
+		}
+		return true;
+	}
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java b/src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java
new file mode 100644
index 0000000..3173eb4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java
@@ -0,0 +1,301 @@
+package com.qxueyou.scc.school.model;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 课程、视频、讲义记录传播轨迹
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name = "SCH_SPREAD_FOOTPRINT")
+@NamedQuery(name="SchSpreadFootprint.findAll", query="SELECT s FROM SchSpreadFootprint s")
+public class SchSpreadFootprint implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = 5843514289817382614L;
+	
+	/** 操作类型:查看 */
+	public static final short TYPE_VIEW = 1;
+	
+	/** 操作类型:分享 */
+	public static final short TYPE_SHARE = 2;
+	
+	/** 操作类型:报名 */
+	public static final short TYPE_SIGNUP = 3;
+	
+	/** 操作类型:支付 */
+	public static final short TYPE_PAY = 4;
+	
+	
+	/** 对象类型:课程 */
+	public static final short OBJECT_TYPE_CLASS = 1;
+	
+	/** 对象类型:视频 */
+	public static final short OBJECT_TYPE_VIDEO = 2;
+	
+	/** 对象类型:讲义 */
+	public static final short OBJECT_TYPE_HANDOUT = 3;
+	
+	/** 对象类型:分享 */
+	public static final short OBJECT_TYPE_SHARE = 4;
+	
+
+	/** 主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "SPREAD_ID", unique = true, nullable = false, length = 32)
+	private String spreadId;
+
+	/**类型  */
+	@Column(name = "TYPE", precision = 2)
+	private short type;
+	
+	/** 操作时间  */
+	@Column(name="OPERATION_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date operationTime;
+	
+	/** ip地址*/
+	@Column(name = "IP", length = 50)
+	private String ip;
+	
+	/** 扩展*/
+	@Column(name = "CONTENT", length = 100)
+	private String content;
+	
+	/** 操作用户*/
+	@Column(name = "USER_ID", length = 32)
+	private String userId;
+
+	/** 操作用户名称*/
+	@Column(name = "USER_NAME", length = 128)
+	private String userName;
+	
+	/** 请求头信息*/
+	@Column(name = "user_agent", length = 255)
+	private String userAgent;
+	
+	/** 机型*/
+	@Column(name = "MODEL", length = 64)
+	private String model;
+	
+	/** 对象类型*/
+	@Column(name = "OBJECT_TYPE", precision = 2)
+	private short objectType;
+	
+	/** 对象类型Id*/
+	@Column(name = "OBJECT_ID", length = 32)
+	private String objectId;
+
+	/** 微信openId*/
+	@Column(name = "OPEN_ID", length = 50)
+	private String openId;
+
+	/** 创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+	
+	/** 修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  创建人ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getOpenId() {
+		return openId;
+	}
+
+	public void setOpenId(String openId) {
+		this.openId = openId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getSpreadId() {
+		return spreadId;
+	}
+
+	public void setSpreadId(String spreadId) {
+		this.spreadId = spreadId;
+	}
+
+	public short getType() {
+		return type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public Date getOperationTime() {
+		return operationTime;
+	}
+
+	public void setOperationTime(Date operationTime) {
+		this.operationTime = operationTime;
+	}
+
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getUserAgent() {
+		return userAgent;
+	}
+
+	public void setUserAgent(String userAgent) {
+		this.userAgent = userAgent;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public short getObjectType() {
+		return objectType;
+	}
+
+	public void setObjectType(short objectType) {
+		this.objectType = objectType;
+	}
+
+	public String getObjectId() {
+		return objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java b/src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java
new file mode 100644
index 0000000..f4d82ec
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java
@@ -0,0 +1,242 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 学生课程成绩
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_STUDENT_ACHIEVEMENT")
+@NamedQuery(name="SchStudentAchievement.findAll", query="SELECT s FROM SchStudentAchievement s")
+public class SchStudentAchievement implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="STUDENT_ACHIENEMENT_ID", unique=true, nullable=false, length=32)
+	private String studentAchienementId;
+
+	/** 学员ID */
+	@Column(name="STUDENT_ID", length=32)
+	private String studentId;
+
+	/** 课程ID  */
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+
+	/** 学期ID  */
+	@Column(name="TERM_ID", length=32)
+	private String termId;
+
+	/** 期中成绩  */
+	@Column(name="PERIOD_ACHIEVEMENT", precision=4, scale=2)
+	private BigDecimal periodAchievement;
+	
+	/** 期末成绩  */
+	@Column(name="FINAL_ACHIEVEMENT", precision=4, scale=2)
+	private BigDecimal finalAchievement;
+
+	/** 平时成绩  */
+	@Column(name="PERFORMANCE", precision=4, scale=2)
+	private BigDecimal performance;
+	
+	/** 最终成绩-分数  */
+	@Column(name="ACHIEVEMENT_SCORE", precision=4, scale=2)
+	private BigDecimal achievementScore;
+	
+	/** 最终成绩-等级  */
+	@Column(name="ACHIEVEMENT_LEVEL")
+	private short achievementLevel;
+	
+	/** 备注  */
+	@Column(name="REMARK", length=255)
+	private String remark;
+	
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	public String getStudentAchienementId() {
+		return studentAchienementId;
+	}
+
+	public void setStudentAchienementId(String studentAchienementId) {
+		this.studentAchienementId = studentAchienementId;
+	}
+
+	public String getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getTermId() {
+		return termId;
+	}
+
+	public void setTermId(String termId) {
+		this.termId = termId;
+	}
+
+	public BigDecimal getPeriodAchievement() {
+		return periodAchievement;
+	}
+
+	public void setPeriodAchievement(BigDecimal periodAchievement) {
+		this.periodAchievement = periodAchievement;
+	}
+
+	public BigDecimal getFinalAchievement() {
+		return finalAchievement;
+	}
+
+	public void setFinalAchievement(BigDecimal finalAchievement) {
+		this.finalAchievement = finalAchievement;
+	}
+
+	public BigDecimal getPerformance() {
+		return performance;
+	}
+
+	public void setPerformance(BigDecimal performance) {
+		this.performance = performance;
+	}
+
+	public BigDecimal getAchievementScore() {
+		return achievementScore;
+	}
+
+	public void setAchievementScore(BigDecimal achievementScore) {
+		this.achievementScore = achievementScore;
+	}
+
+	public short getAchievementLevel() {
+		return achievementLevel;
+	}
+
+	public void setAchievementLevel(short achievementLevel) {
+		this.achievementLevel = achievementLevel;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java b/src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java
new file mode 100644
index 0000000..ec60f08
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java
@@ -0,0 +1,409 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.user.model.UserStudent;
+
+
+/**
+ * 学生课表  实体类
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_STUDENT_SCHEDULE")
+@NamedQuery(name="SchStudentSchedule.findAll", query="SELECT s FROM SchStudentSchedule s")
+public class SchStudentSchedule implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	/** 课程主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="STUDENT_SCHEDULE_ID", unique=true, nullable=false, length=32)
+	private String studentScheduleId;
+
+	/** 课程名称*/
+	@Column(name="NAME", length=150)
+	private String name;
+
+	/** 上课内容,简介 */
+	@Column(name="CONTENT")
+	private String content;
+	
+	@Column(name="TEACHER",length=50)
+	private String teacher;
+
+	@Column(name="TEACHER_ID", length=32)
+	private String teacherId;
+	
+	/** 班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/** 学校专业  */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+	
+	/** 课程ID */
+	@Column(name="SUBJECT_ID", length=32)
+	private String subjectId;
+	
+	/** 图片路径  */
+	@Column(name="IMG_PATH", length=32)
+	private String imgPath;
+	
+	/** 学期ID  */
+	@Column(name="TERM_ID", length=32)
+	private String termId;
+	
+	/** 学员ID */
+	@Column(name="STUDENT_ID", length=32)
+	private String studentId;
+	
+	/** 上课地址ID  */
+	@Column(name="ADDRESS_ID", length=32)
+	private String addressId;
+
+	/** 状态 */
+	@Column(name="STATUS")
+	private short status;
+	
+	/** 地址 */
+	@Column(name="ADDRESS", length=255)
+	private String address;
+
+	/** 结束时间 */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/** 开始时间 */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	/** 高校课表使用:第几节课开始ID  */
+	@Column(name="DAY_START_ID", length=32)
+	private String dayStartId;
+	
+	/** 高校课表使用:第几节课开始序号  */
+	@Column(name="DAY_START_ORDER")
+	private short dayStartOrder;
+	
+	/** 高校课表使用:第几节课结束ID  */
+	@Column(name="DAY_END_ID", length=32)
+	private String dayEndId;
+	
+	/** 高校课表使用:第几节课结束序号  */
+	@Column(name="DAY_END_ORDER")
+	private short dayEndOrder;
+	
+	/**班级课表主键*/
+	@Column(name="CLASS_SCHEDULE_ID",  length=32)
+	private String classScheduleId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人  */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	/** 学生 */
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "STUDENT_ID",referencedColumnName="STUDENT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private UserStudent userStudent;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID",referencedColumnName="SUBJECT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Subject subject;
+
+	public String getStudentScheduleId() {
+		return studentScheduleId;
+	}
+
+	public void setStudentScheduleId(String studentScheduleId) {
+		this.studentScheduleId = studentScheduleId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getTeacher() {
+		return teacher;
+	}
+
+	public void setTeacher(String teacher) {
+		this.teacher = teacher;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getTermId() {
+		return termId;
+	}
+
+	public void setTermId(String termId) {
+		this.termId = termId;
+	}
+
+	public String getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getAddressId() {
+		return addressId;
+	}
+
+	public void setAddressId(String addressId) {
+		this.addressId = addressId;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getDayStartId() {
+		return dayStartId;
+	}
+
+	public void setDayStartId(String dayStartId) {
+		this.dayStartId = dayStartId;
+	}
+
+	public short getDayStartOrder() {
+		return dayStartOrder;
+	}
+
+	public void setDayStartOrder(short dayStartOrder) {
+		this.dayStartOrder = dayStartOrder;
+	}
+
+	public String getDayEndId() {
+		return dayEndId;
+	}
+
+	public void setDayEndId(String dayEndId) {
+		this.dayEndId = dayEndId;
+	}
+
+	public short getDayEndOrder() {
+		return dayEndOrder;
+	}
+
+	public void setDayEndOrder(short dayEndOrder) {
+		this.dayEndOrder = dayEndOrder;
+	}
+
+	public UserStudent getUserStudent() {
+		return userStudent;
+	}
+
+	public void setUserStudent(UserStudent userStudent) {
+		this.userStudent = userStudent;
+	}
+
+	public String getClassScheduleId() {
+		return classScheduleId;
+	}
+
+	public void setClassScheduleId(String classScheduleId) {
+		this.classScheduleId = classScheduleId;
+	}
+
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchStudentScore.java b/src/main/java/com/qxueyou/scc/school/model/SchStudentScore.java
new file mode 100644
index 0000000..1d7d3b0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchStudentScore.java
@@ -0,0 +1,161 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * The persistent class for the SCH_STUDENT_SCORE database table.
+ * 
+ */
+@Entity
+@Table(name = "SCH_STUDENT_SCORE")
+@NamedQuery(name = "SchStudentScore.findAll", query = "SELECT s FROM SchStudentScore s")
+public class SchStudentScore implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "SCORE_ID", unique = true, nullable = false, length = 32)
+	private String scoreId;
+
+	@Column(name = "CLASS_ID")
+	private String classId;
+
+	@Column(name = "CREATE_ID")
+	private String createId;
+
+	@Temporal(TemporalType.DATE)
+	@Column(name = "CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name = "DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name = "SCORE_VALUE")
+	private BigDecimal scoreValue;
+
+	@Column(name = "STUDENT_ID")
+	private String studentId;
+
+	@Column(name = "UPDATE_ID")
+	private String updateId;
+
+	@Temporal(TemporalType.DATE)
+	@Column(name = "UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name = "VIDEO_ID")
+	private String videoId;
+
+	public SchStudentScore() {
+	}
+
+	public String getScoreId() {
+		return this.scoreId;
+	}
+
+	public void setScoreId(String scoreId) {
+		this.scoreId = scoreId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public BigDecimal getScoreValue() {
+		return this.scoreValue;
+	}
+
+	public void setScoreValue(BigDecimal scoreValue) {
+		this.scoreValue = scoreValue;
+	}
+
+	public String getStudentId() {
+		return this.studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getVideoId() {
+		return this.videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java b/src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java
new file mode 100644
index 0000000..0a5ee34
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java
@@ -0,0 +1,457 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 学习报告实体
+ * 
+ * @author xiadehu
+ * 
+ */
+@Entity
+@Table(name = "sch_study_report")
+@NamedQuery(name = "SchStudyReport.findAll", query = "SELECT s FROM SchStudyReport s")
+public class SchStudyReport implements Serializable, ITrace {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -8939330124338289188L;
+
+	/** 主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "STUDY_ID", unique = true, nullable = false, length = 32)
+	private String studyId;
+
+	/** 创建时间 */
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/** 创建者 */
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	@JsonIgnore
+	private String creator;
+
+	/** 修改人ID */
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/** 修改人 */
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	/** 删除标志 */
+	@Column(name = "DELETE_FLAG", nullable = false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	/*
+	 * 用户ID
+	 */
+	@Column(name = "USER_ID", length = 32)
+	private String userId;
+
+	/*
+	 * 用户名
+	 */
+	@Column(name = "NAME", length = 150)
+	private String name;
+
+	/*
+	 * 学员先后顺序排名
+	 */
+	@Column(name = "STUDENT_ORDER")
+	private int studentOrder;
+
+	/*
+	 * 学习天数
+	 */
+	@Column(name = "STUDY_PERIOD")
+	private int studyPeriod;
+
+	/*
+	 * 总共学习了多少门课程
+	 */
+	@Column(name = "COURSE_COUNT")
+	private int courseCount;
+
+	/*
+	 * 第一个课程
+	 */
+	@Column(name = "FIRST_COURSE", length = 255)
+	private String firstCourse;
+
+	/*
+	 * 第一个班级
+	 */
+	@Column(name = "FIRST_CLASS", length = 255)
+	private String firstClass;
+
+	/*
+	 * 学习讲义的个数
+	 */
+	@Column(name = "STUDY_HANDOUT_COUNT")
+	private int studyHandoutCount;
+
+	/*
+	 * 学习视频的个数
+	 */
+	@Column(name = "STUDY_VIDEO_COUNT")
+	private int studyVideoCount;
+
+	/*
+	 * 观看直播次数
+	 */
+	@Column(name = "VIEW_LIVE_COUNT")
+	private int viewLiveCount;
+
+	/*
+	 * 做练习题个数
+	 */
+	@Column(name = "DO_EXERCISE_COUNT")
+	private int doExerciseCount;
+
+	/*
+	 * 练习准确率
+	 */
+	@Column(name = "EXERCISE_ACCURACY", precision = 10, scale = 4)
+	private BigDecimal exerciseAccuracy;
+
+	/*
+	 * 练习正确率排行
+	 */
+	@Column(name = "ACCURACY_ORDER", precision = 10, scale = 4)
+	private BigDecimal accuracyOrder;
+
+	/*
+	 * 第一次分享的课程
+	 */
+	@Column(name = "FIRST_SHARE_COURSE", length = 255)
+	private String firstShareCourse;
+
+	/*
+	 * 分享被浏览次数
+	 */
+	@Column(name = "VIEW_COUNT_OF_SHARE")
+	private int viewCountOfShare;
+
+	/*
+	 * 分享赚取奖金
+	 */
+	@Column(name = "AWARD_AMOUNT_OF_SHARE", precision = 10, scale = 4)
+	private BigDecimal awardAmountOfShare;
+
+	/*
+	 * 传播大使排名打败全国百分之多少学员
+	 */
+	@Column(name = "ATS_ORDER", precision = 10, scale = 4)
+	private BigDecimal atsOrder;
+
+	/*
+	 * 学习时间,json字符串保存
+	 */
+	@Column(name = "STUDY_TIME", length = 4096)
+	private String studyTime;
+	
+	/*
+	 * 学习时间分布图
+	 */
+	@Column(name = "STUDY_TIME_IMG", length = 512)
+	private String studyTimeImg;
+
+	/*
+	 * 学习过的机构,json结构
+	 */
+	@Column(name = "ORGS", length = 4096)
+	private String orgs;
+
+	/*
+	 * 推荐课程
+	 */
+	@Column(name = "REC_COURSES", length = 4096)
+	private String recCourses;
+	
+	/*
+	 * 更多课程链接
+	 */
+	@Column(name = "MORE_REC_URL", length = 512)
+	private String moreRecUrl;
+	
+	public String getStudyTimeImg() {
+		return studyTimeImg;
+	}
+
+	public void setStudyTimeImg(String studyTimeImg) {
+		this.studyTimeImg = studyTimeImg;
+	}
+
+	public String getMoreRecUrl() {
+		return moreRecUrl;
+	}
+
+	public void setMoreRecUrl(String moreRecUrl) {
+		this.moreRecUrl = moreRecUrl;
+	}
+
+	public SchStudyReport() {
+		super();
+	}
+
+	public String getStudyId() {
+		return studyId;
+	}
+
+	public void setStudyId(String studyId) {
+		this.studyId = studyId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int getStudentOrder() {
+		return studentOrder;
+	}
+
+	public void setStudentOrder(int studentOrder) {
+		this.studentOrder = studentOrder;
+	}
+
+	public int getStudyPeriod() {
+		return studyPeriod;
+	}
+
+	public void setStudyPeriod(int studyPeriod) {
+		this.studyPeriod = studyPeriod;
+	}
+
+	public int getCourseCount() {
+		return courseCount;
+	}
+
+	public void setCourseCount(int courseCount) {
+		this.courseCount = courseCount;
+	}
+
+	public String getFirstCourse() {
+		return firstCourse;
+	}
+
+	public void setFirstCourse(String firstCourse) {
+		this.firstCourse = firstCourse;
+	}
+
+	public String getFirstClass() {
+		return firstClass;
+	}
+
+	public void setFirstClass(String firstClass) {
+		this.firstClass = firstClass;
+	}
+
+	public int getStudyHandoutCount() {
+		return studyHandoutCount;
+	}
+
+	public void setStudyHandoutCount(int studyHandoutCount) {
+		this.studyHandoutCount = studyHandoutCount;
+	}
+
+	public int getStudyVideoCount() {
+		return studyVideoCount;
+	}
+
+	public void setStudyVideoCount(int studyVideoCount) {
+		this.studyVideoCount = studyVideoCount;
+	}
+
+	public int getViewLiveCount() {
+		return viewLiveCount;
+	}
+
+	public void setViewLiveCount(int viewLiveCount) {
+		this.viewLiveCount = viewLiveCount;
+	}
+
+	public int getDoExerciseCount() {
+		return doExerciseCount;
+	}
+
+	public void setDoExerciseCount(int doExerciseCount) {
+		this.doExerciseCount = doExerciseCount;
+	}
+
+	public BigDecimal getExerciseAccuracy() {
+		return exerciseAccuracy;
+	}
+
+	public void setExerciseAccuracy(BigDecimal exerciseAccuracy) {
+		this.exerciseAccuracy = exerciseAccuracy;
+	}
+
+	public BigDecimal getAccuracyOrder() {
+		return accuracyOrder;
+	}
+
+	public void setAccuracyOrder(BigDecimal accuracyOrder) {
+		this.accuracyOrder = accuracyOrder;
+	}
+
+	public String getFirstShareCourse() {
+		return firstShareCourse;
+	}
+
+	public void setFirstShareCourse(String firstShareCourse) {
+		this.firstShareCourse = firstShareCourse;
+	}
+
+	public int getViewCountOfShare() {
+		return viewCountOfShare;
+	}
+
+	public void setViewCountOfShare(int viewCountOfShare) {
+		this.viewCountOfShare = viewCountOfShare;
+	}
+
+	public BigDecimal getAwardAmountOfShare() {
+		return awardAmountOfShare;
+	}
+
+	public void setAwardAmountOfShare(BigDecimal awardAmountOfShare) {
+		this.awardAmountOfShare = awardAmountOfShare;
+	}
+
+	public BigDecimal getAtsOrder() {
+		return atsOrder;
+	}
+
+	public void setAtsOrder(BigDecimal atsOrder) {
+		this.atsOrder = atsOrder;
+	}
+
+	public String getStudyTime() {
+		return studyTime;
+	}
+
+	public void setStudyTime(String studyTime) {
+		this.studyTime = studyTime;
+	}
+
+	public String getOrgs() {
+		return orgs;
+	}
+
+	public void setOrgs(String orgs) {
+		this.orgs = orgs;
+	}
+
+	public String getRecCourses() {
+		return recCourses;
+	}
+
+	public void setRecCourses(String recCourses) {
+		this.recCourses = recCourses;
+	}
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java b/src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java
new file mode 100644
index 0000000..a95ee69
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java
@@ -0,0 +1,310 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 课程扩展表
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="SCH_SUBJECT_EXTEND")
+@NamedQuery(name="SchSubjectExtend.findAll", query="SELECT s FROM SchSubjectExtend s")
+public class SchSubjectExtend implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	/** 课程主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SUBJECT_EXTEND_ID", unique=true, nullable=false, length=32)
+	private String subjectExtendId;
+	
+	/** 课程名称*/
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	/** 地址 */
+	@Column(name="ADDRESS", length=255)
+	private String address;
+
+	/** 结束时间 */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/** 开始时间 */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	/** 课程上课开始日期 */
+	@Column(name="SUBJECT_START_DATE")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date subjectStartDate;
+	
+	/** 课程上课结束日期 */
+	@Column(name="SUBJECT_END_DATE")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date subjectEndDate;
+
+	/** 班级ID */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/** 上课内容,简介 */
+	@Column(name="CONTENT", length=1000)
+	private String content;
+	
+	/** 课程id */
+	@Column(name="CLASS_SUBJECT_ID", length=32)
+	private String classSubjectId;
+	
+	/** 是否重复 */
+	@Column(name="REPEAT_FLAG", length=1)
+	private int repeatFlag;
+	
+	/** 重复日期 */
+	@Column(name="REPEAT_DATE", length=30)
+	private String repeatDate;
+	
+	/** 上课地址ID  */
+	@Column(name="ADDRESS_ID", length=32)
+	private String addressId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="TEACHER",length=50)
+	private String teacher;
+
+	@Column(name="TEACHER_ID", length=32)
+	private String teacherId;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/** 课程模式(面授/网络)  */
+	@Column(name="MODE", length=20)
+	private String mode;
+
+	public String getMode() {
+		return mode;
+	}
+
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+
+	public Date getSubjectStartDate() {
+		return subjectStartDate;
+	}
+
+	public void setSubjectStartDate(Date subjectStartDate) {
+		this.subjectStartDate = subjectStartDate;
+	}
+
+	public Date getSubjectEndDate() {
+		return subjectEndDate;
+	}
+
+	public void setSubjectEndDate(Date subjectEndDate) {
+		this.subjectEndDate = subjectEndDate;
+	}
+
+	public String getClassSubjectId() {
+		return classSubjectId;
+	}
+
+	public void setClassSubjectId(String classSubjectId) {
+		this.classSubjectId = classSubjectId;
+	}
+
+	public int getRepeatFlag() {
+		return repeatFlag;
+	}
+
+	public void setRepeatFlag(int repeatFlag) {
+		this.repeatFlag = repeatFlag;
+	}
+
+	public String getRepeatDate() {
+		return repeatDate;
+	}
+
+	public void setRepeatDate(String repeatDate) {
+		this.repeatDate = repeatDate;
+	}
+
+	public String getSubjectExtendId() {
+		return subjectExtendId;
+	}
+
+	public void setSubjectExtendId(String subjectExtendId) {
+		this.subjectExtendId = subjectExtendId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getAddressId() {
+		return addressId;
+	}
+
+	public void setAddressId(String addressId) {
+		this.addressId = addressId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getTeacher() {
+		return teacher;
+	}
+
+	public void setTeacher(String teacher) {
+		this.teacher = teacher;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java b/src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java
new file mode 100644
index 0000000..f97150e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java
@@ -0,0 +1,177 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Table(name="SCH_SUBJECT_RE_COURSE")
+public class SchSubjectReCourse implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RE_ID", unique=true, nullable=false, length=32)
+	private String reId;
+
+	/**  科目ID  */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+
+	/**  orgId */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	/**  topOrgId */
+	@Column(name="TOP_ORG_ID", length=32)
+	private String topOrgId;
+	
+	/**  课程ID */
+	@Column(name="SUBJECT_ID", length=255)
+	private String subjectId;
+	
+	
+
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+
+	public String getReId() {
+		return reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchTerm.java b/src/main/java/com/qxueyou/scc/school/model/SchTerm.java
new file mode 100644
index 0000000..fc443a2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchTerm.java
@@ -0,0 +1,240 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 学期
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_TERM")
+@NamedQuery(name="SchTerm.findAll", query="SELECT s FROM SchTerm s")
+public class SchTerm implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="TERM_ID", unique=true, nullable=false, length=32)
+	private String termId;
+
+	/**  名称  */
+	@Column(name="NAME", length=150)
+	private String name;
+	
+	/** 开始时间  */
+	@Column(name="START_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	/** 结束时间  */
+	@Column(name="END_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+
+	/**  学年ID */
+	@Column(name="SCHOOL_YEAR_ID", length=32)
+	private String schoolYearId;
+	
+	/**  该学年第几学期 */
+	@Column(name="TERM_ORDER")
+	private short termOrder;
+	
+	/**  备注 */
+	@Column(name="REMARK", length=255)
+	private String REMARK;
+	
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+	
+	@ManyToOne(cascade = CascadeType.REFRESH,fetch = FetchType.LAZY)
+    @JoinColumn(name = "SCHOOL_YEAR_ID",referencedColumnName="SCHOOL_YEAR_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private SchSchoolYear schYear;
+	
+	//作息时间
+	@Transient
+	private String dayItem;
+	
+	
+	
+	public String getDayItem() {
+		return dayItem;
+	}
+
+	public void setDayItem(String dayItem) {
+		this.dayItem = dayItem;
+	}
+
+	public String getTermId() {
+		return termId;
+	}
+
+	public void setTermId(String termId) {
+		this.termId = termId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getREMARK() {
+		return REMARK;
+	}
+
+	public void setREMARK(String rEMARK) {
+		REMARK = rEMARK;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getSchoolYearId() {
+		return schoolYearId;
+	}
+
+	public void setSchoolYearId(String schoolYearId) {
+		this.schoolYearId = schoolYearId;
+	}
+
+	public short getTermOrder() {
+		return termOrder;
+	}
+
+	public void setTermOrder(short termOrder) {
+		this.termOrder = termOrder;
+	}
+
+	public SchSchoolYear getSchYear() {
+		return schYear;
+	}
+
+	public void setSchYear(SchSchoolYear schYear) {
+		this.schYear = schYear;
+	}
+
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java b/src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java
new file mode 100644
index 0000000..6e1387e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java
@@ -0,0 +1,163 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 学期 - 作息时间 关系表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_TERM_RE_DAY")
+public class SchTermReDay implements Serializable,ITrace {
+
+	private static final long serialVersionUID = -7223739750298125697L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  学期ID */
+	@Column(name="TERM_ID", length=32)
+	private String termId;
+	
+	/**  作息模板ID  */
+	@Column(name="SCHOOL_DAY_ID", length=32)
+	private String schoolDayId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getTermId() {
+		return termId;
+	}
+
+	public void setTermId(String termId) {
+		this.termId = termId;
+	}
+
+	public String getSchoolDayId() {
+		return schoolDayId;
+	}
+
+	public void setSchoolDayId(String schoolDayId) {
+		this.schoolDayId = schoolDayId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java b/src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java
new file mode 100644
index 0000000..5768b32
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java
@@ -0,0 +1,156 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * The persistent class for the sch_video_file database table.
+ * 
+ */
+@Entity
+@Table(name="sch_video_file")
+@NamedQuery(name="SchVideoFile.findAll", query="SELECT s FROM SchVideoFile s")
+public class SchVideoFile implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_FILE_ID", unique=true, nullable=false, length=32)
+	private String qrUrlId;
+
+	@Column(name="BUSINESS_ID", length=32)
+	private String businessId;
+	
+	@Column(name="FILE_ID", length=32)
+	private String fileId;
+
+	/** 类型:1:直播 2:视频 */
+	@Column(name="TYPE")
+	private int type;
+	
+	public static final int TYPE_VIDEO_LIVE = 1;
+	
+	public static final int TYPE_VIDEO = 2;
+	
+	@Column(name="CREATE_TIME" )
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="DELETE_FLAG" )
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getQrUrlId() {
+		return qrUrlId;
+	}
+
+	public void setQrUrlId(String qrUrlId) {
+		this.qrUrlId = qrUrlId;
+	}
+
+	public String getBusinessId() {
+		return businessId;
+	}
+
+	public void setBusinessId(String businessId) {
+		this.businessId = businessId;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getFileId() {
+		return fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java b/src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java
new file mode 100644
index 0000000..8e37140
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java
@@ -0,0 +1,166 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 学年 - 班级关系表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_YEAR_RE_CLASS")
+public class SchYearReClass implements Serializable,ITrace {
+
+	private static final long serialVersionUID = -7223739750298125697L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  学年ID */
+	@Column(name="SCHOOL_YEAR_ID", length=32)
+	private String schoolYearId;
+	
+	/**  班级ID  */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public SchYearReClass() {
+	}
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getSchoolYearId() {
+		return schoolYearId;
+	}
+
+	public void setSchoolYearId(String schoolYearId) {
+		this.schoolYearId = schoolYearId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java b/src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java
new file mode 100644
index 0000000..b35e21b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java
@@ -0,0 +1,167 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 学年 - 机构 关系表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SCH_YEAR_RE_ORG")
+public class SchYearReOrg implements Serializable,ITrace {
+
+	private static final long serialVersionUID = -7223739750298125697L;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RELATION_ID", unique=true, nullable=false, length=32)
+	private String relationId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  学期ID */
+	@Column(name="SCHOOL_YEAR_ID", length=32)
+	private String schoolYearId;
+	
+	/**  机构ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**   修改人 */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	public SchYearReOrg() {
+	}
+
+	public String getRelationId() {
+		return relationId;
+	}
+
+	public void setRelationId(String relationId) {
+		this.relationId = relationId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getSchoolYearId() {
+		return schoolYearId;
+	}
+
+	public void setSchoolYearId(String schoolYearId) {
+		this.schoolYearId = schoolYearId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/SignResult.java b/src/main/java/com/qxueyou/scc/school/model/SignResult.java
new file mode 100644
index 0000000..17c8f3c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SignResult.java
@@ -0,0 +1,51 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 签到历史结果
+ * @author zhiyong
+ *
+ */
+public class SignResult implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8653663526121648525L;
+	
+	/** 当前用户签到顺序 */
+	private int signIndex;
+	
+	/** 当前用户签到地址 */
+	private String signAddr;
+	
+	/** 签到历史item,具体字段参考类:SchSignStatistics */
+	private List<SchSignOrder> signOrders;
+
+	public int getSignIndex() {
+		return signIndex;
+	}
+
+	public void setSignIndex(int signIndex) {
+		this.signIndex = signIndex;
+	}
+
+	public String getSignAddr() {
+		return signAddr;
+	}
+
+	public void setSignAddr(String signAddr) {
+		this.signAddr = signAddr;
+	}
+
+	public List<SchSignOrder> getSignOrders() {
+		return signOrders;
+	}
+
+	public void setSignOrders(List<SchSignOrder> signOrders) {
+		this.signOrders = signOrders;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java b/src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java
new file mode 100644
index 0000000..330b0bf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 签到上大屏结果
+ * @author ody
+ *
+ */
+public class SignScreenResult implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	private String orgName ;
+	
+	private String orgLogoPath ;
+
+	private SchSign signvo ;
+	
+	/** 签到历史item */
+	private List<SchSignStatistics> signStatisticss;
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+	
+	public SchSign getSignvo() {
+		return signvo;
+	}
+
+	public void setSignvo(SchSign signvo) {
+		this.signvo = signvo;
+	}
+
+	public List<SchSignStatistics> getSignStatisticss() {
+		return signStatisticss;
+	}
+
+	public void setSignStatisticss(List<SchSignStatistics> signStatisticss) {
+		this.signStatisticss = signStatisticss;
+	}
+
+	public String getOrgLogoPath() {
+		return orgLogoPath;
+	}
+
+	public void setOrgLogoPath(String orgLogoPath) {
+		this.orgLogoPath = orgLogoPath;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java b/src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java
new file mode 100644
index 0000000..3414bd5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java
@@ -0,0 +1,159 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 签到历史结果
+ * @author ody
+ *
+ */
+public class SignStatisResult implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/** 签到类型: 1: 上课签到;  2: 下课签到, 3活动签到*/
+	public static final Integer SIGN_TYPE_FIRST = 1;
+	
+	public static final Integer SIGN_TYPE_LAST = 2;
+	
+	public static final Integer SIGN_TYPE_ACTIVITY = 3;
+	
+	/** 当前是否正确返回结果,result为false:表示签到异常,result为true:表示签到成功 */
+	private boolean result ;
+	
+	/** 如果result为false:errorMessage为错误提示 */
+	private String errMsg ;
+	
+	/** 当前用户签到顺序 */
+	private Integer signIndex;
+	
+	/** 当前用户签到地址 */
+	private String signAddr;
+	
+	/** 签到距离 */
+	private double range;
+	
+	/** 是否班级成员:false: 非班级成员;true:班级成员 */
+	private boolean regFlag;
+	
+	/** 班主任姓名 */
+	private String classCharger;
+	
+	
+	/** 历史记录显示不显示 1:不显示 2:显示 */
+	private Integer hisShow;
+	
+	/** 当前用户签到类型:上课签到、下课签到 */
+	private Integer signType;
+	
+	/** 签到历史item */
+	private List<SchSignStatistics> signStatisticss;
+
+	/** 返回当前签到 */
+	private SchSignStatistics signStatistics;
+	
+	/** 构造方法 */
+	public SignStatisResult(){
+		super();
+	}
+	
+	public double getRange() {
+		return range;
+	}
+
+	public void setRange(double range) {
+		this.range = range;
+	}
+
+	public SchSignStatistics getSignStatistics() {
+		return signStatistics;
+	}
+
+	public void setSignStatistics(SchSignStatistics signStatistics) {
+		this.signStatistics = signStatistics;
+	}
+
+	/** 构造方法 */
+	public SignStatisResult(boolean result,String errMsg){
+		this.result = result ;
+		this.errMsg = errMsg ;
+	}
+
+	public Integer getSignIndex() {
+		return signIndex;
+	}
+
+	public void setSignIndex(Integer signIndex) {
+		this.signIndex = signIndex;
+	}
+
+	public String getSignAddr() {
+		return signAddr;
+	}
+
+	public void setSignAddr(String signAddr) {
+		this.signAddr = signAddr;
+	}
+
+	public Integer getSignType() {
+		return signType;
+	}
+
+	public void setSignType(Integer signType) {
+		this.signType = signType;
+	}
+
+	public List<SchSignStatistics> getSignStatisticss() {
+		return signStatisticss;
+	}
+
+	public void setSignStatisticss(List<SchSignStatistics> signStatisticss) {
+		this.signStatisticss = signStatisticss;
+	}
+
+	public boolean isRegFlag() {
+		return regFlag;
+	}
+
+	public void setRegFlag(boolean regFlag) {
+		this.regFlag = regFlag;
+	}
+
+	public String getClassCharger() {
+		return classCharger;
+	}
+
+	public void setClassCharger(String classCharger) {
+		this.classCharger = classCharger;
+	}
+
+	public boolean getResult() {
+		return result;
+	}
+
+	public void setResult(boolean result) {
+		this.result = result;
+	}
+
+	public String getErrMsg() {
+		return errMsg;
+	}
+
+	public void setErrMsg(String errMsg) {
+		this.errMsg = errMsg;
+	}
+
+	public Integer getHisShow() {
+		return hisShow;
+	}
+
+	public void setHisShow(Integer hisShow) {
+		this.hisShow = hisShow;
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java b/src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java
new file mode 100644
index 0000000..239f490
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java
@@ -0,0 +1,36 @@
+package com.qxueyou.scc.school.model;
+
+
+/**
+ * 学员评估分类实体类
+ * 
+ * @author zhiyong
+ *
+ */
+public class StudentEvaCategory {
+	
+	/** 学习态度  */
+	public static final String STUDENT_ATTRIBUTE ="student_attribute";
+	
+	/** 学习进度*/
+	public static final String STUDENT_SCHEDULE ="student_schedule";	
+	
+	/** 做题(考试)结果 */
+	public static final String EXAM_RESULT ="exam_result";
+	
+	/** 出勤率  */
+	public static final String ATTENDANCE ="attendance";
+	
+	/** 签到排名 */
+	public static final String SIGN_RANK ="sign_rank";
+	
+	/** 家庭作业提交及时性  */
+	public static final String HOMEWORK_TIMELINESS ="homework_timeliness";
+	
+	/** 家庭作业完成度  */
+	public static final String HOMEWORK_COMPLETENESS ="homework_completeness";
+	
+	/** 家庭作业答题分数  */
+	public static final String HOMEWORK_SCORE ="homework_score";
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java b/src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java
new file mode 100644
index 0000000..46e4c57
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java
@@ -0,0 +1,64 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+
+/**
+ * 教学评估分数提交结果数据
+ * 
+ * @author zhiyong
+ *
+ */
+public class TeachEvaScoreData implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5231270523566561011L;
+
+	private String exerciseId;
+	
+	private int type;
+
+	private String answer;
+	
+	private String score;
+
+	public String getExerciseId() {
+		return exerciseId;
+	}
+
+
+	public int getType() {
+		return type;
+	}
+
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+
+	public String getAnswer() {
+		return answer;
+	}
+
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+
+	public String getScore() {
+		return score;
+	}
+
+
+	public void setScore(String score) {
+		this.score = score;
+	}
+
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java b/src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java
new file mode 100644
index 0000000..f9db312
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java
@@ -0,0 +1,95 @@
+package com.qxueyou.scc.school.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 教学评估分数结果提交vo
+ * @author zhiyong
+ *
+ */
+public class TeachEvaScoreResult implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8218583798576628162L;
+	
+	/**  评估id */
+	private String evaluateId;
+	
+	/**  组id */
+	private String exerciseGroupId;
+	
+	/** 记录id  */
+	private String exerciseRecordId;
+
+	/** 当前题号   */
+	private String currTitleNum;
+	
+	/** 总分数   */
+	private BigDecimal score;
+
+	/** 是否提交  0:未提交  1:提交  */
+	private int status;
+	
+	private List<TeachEvaScoreData> items;
+
+	public List<TeachEvaScoreData> getItems() {
+		return items;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public void setItems(List<TeachEvaScoreData> items) {
+		this.items = items;
+	}
+
+	public String getEvaluateId() {
+		return evaluateId;
+	}
+
+	public void setEvaluateId(String evaluateId) {
+		this.evaluateId = evaluateId;
+	}
+
+	public String getExerciseGroupId() {
+		return exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	public String getExerciseRecordId() {
+		return exerciseRecordId;
+	}
+
+	public void setExerciseRecordId(String exerciseRecordId) {
+		this.exerciseRecordId = exerciseRecordId;
+	}
+
+	public String getCurrTitleNum() {
+		return currTitleNum;
+	}
+
+	public void setCurrTitleNum(String currTitleNum) {
+		this.currTitleNum = currTitleNum;
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java
new file mode 100644
index 0000000..49f15d8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java
@@ -0,0 +1,137 @@
+package com.qxueyou.scc.school.model.viewvo;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 封装笔记本对象
+ * @author ody.yuan
+ *
+ */
+public class SchNoteViewVO implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	private String noteId;
+	
+	/**  笔记对象ID  */
+	private String noteObjectId;
+
+	/**  笔记对象类型  */
+	private Integer noteObjectType;
+
+	/**  笔记内容 */
+	private String content;
+	
+	/** 共享标志  */
+	private boolean shareFlag;
+
+	/**  共享范围 */
+	private Integer shareScope;
+	
+	/**  笔记拥有者ID */
+	private String userId;
+
+	/**  笔记拥有者姓名 */
+	private String userName;
+	
+	/**  笔记拥有者头像 */
+	private String userImg;
+	
+	/**  笔记时间 */
+	private Date noteTime;
+	
+	/**  总个数  */
+	private Integer allCount;
+
+	public String getNoteId() {
+		return noteId;
+	}
+
+	public void setNoteId(String noteId) {
+		this.noteId = noteId;
+	}
+
+	public String getNoteObjectId() {
+		return noteObjectId;
+	}
+
+	public void setNoteObjectId(String noteObjectId) {
+		this.noteObjectId = noteObjectId;
+	}
+
+	public Integer getNoteObjectType() {
+		return noteObjectType;
+	}
+
+	public void setNoteObjectType(Integer noteObjectType) {
+		this.noteObjectType = noteObjectType;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public boolean getShareFlag() {
+		return shareFlag;
+	}
+
+	public void setShareFlag(boolean shareFlag) {
+		this.shareFlag = shareFlag;
+	}
+
+	public Integer getShareScope() {
+		return shareScope;
+	}
+
+	public void setShareScope(Integer shareScope) {
+		this.shareScope = shareScope;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getUserImg() {
+		return userImg;
+	}
+
+	public void setUserImg(String userImg) {
+		this.userImg = userImg;
+	}
+
+	public Date getNoteTime() {
+		return noteTime;
+	}
+
+	public void setNoteTime(Date noteTime) {
+		this.noteTime = noteTime;
+	}
+
+	public Integer getAllCount() {
+		return allCount;
+	}
+
+	public void setAllCount(Integer allCount) {
+		this.allCount = allCount;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java
new file mode 100644
index 0000000..e755794
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.school.model.viewvo;
+
+import java.io.Serializable;
+
+/**
+ * 课表:   学期 组装VO   提供给app接口使用
+ * @author ody.yuan
+ *
+ */
+public class SchSemesterViewVO implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 8477677566169747902L;
+	
+	/** 第几学期,排序 */
+	private Integer termIndex ;
+
+	/** ID */
+	private String termId ;
+	
+	/** 开始时间 */
+	private long startTime ;
+	
+	/** 结束时间 */
+	private long endTime ;
+	
+	/** 总共多少周 */
+	private Integer weekNumbers ;
+
+	public Integer getTermIndex() {
+		return termIndex;
+	}
+
+	public void setTermIndex(Integer termIndex) {
+		this.termIndex = termIndex;
+	}
+
+	public String getTermId() {
+		return termId;
+	}
+
+	public void setTermId(String termId) {
+		this.termId = termId;
+	}
+
+	public long getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(long startTime) {
+		this.startTime = startTime;
+	}
+
+	public long getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(long endTime) {
+		this.endTime = endTime;
+	}
+
+	public Integer getWeekNumbers() {
+		return weekNumbers;
+	}
+
+	public void setWeekNumbers(Integer weekNumbers) {
+		this.weekNumbers = weekNumbers;
+	}
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java
new file mode 100644
index 0000000..b023fc2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java
@@ -0,0 +1,210 @@
+package com.qxueyou.scc.school.model.viewvo;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 学生 课表组装VO   提供给app接口使用
+ * @author ody.yuan
+ *
+ */
+public class SchStudentScheduleViewVO implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2825937229558844909L;
+	
+	/** 课表基础信息  */
+	
+	/** 第几节课,排序 */
+	private Integer lessonIndex ;
+	
+	/** 课程主键 */
+	private String lessonId;
+	
+	/** 班级ID */
+	private String classId;
+
+	/** 上课内容,简介 */
+	private String content;
+	
+	/** 课程名称*/
+	private String name;
+
+	/** 地址 */
+	private String address;
+
+	/** 结束时间 */
+	private Date endTime;
+
+	/** 开始时间 */
+	private Date startTime;
+	
+	/** 课程图片路径  */
+	private String imgPath;
+	
+	
+	/** 课表组装信息  */
+	
+	/** 上课日期 */
+	private String classDate;
+	
+	/** 普通:上课时间段开始  */
+	private String timeBucketStart;
+	
+	/** 普通:上课时间段结束  */
+	private String timeBucketEnd;
+	
+	/** 星期几  */
+	private String weekDay;
+	
+	/** 状态 0 未上课   1 上课中  2 已上课 */
+	private short status;
+	
+	/** 背景色:R,G,B,A   rgb三原色+透明度  166,0,0,255   */
+	private String lessonColor ;
+	
+	/** 课程时间 高校  :  某天的第几节课开始 */
+	private Integer dayStartIndex ;
+	
+	/** 课程时间 高校  :  某天的第几节课结束 */
+	private Integer dayEndIndex ;
+
+	public Integer getLessonIndex() {
+		return lessonIndex;
+	}
+
+	public void setLessonIndex(Integer lessonIndex) {
+		this.lessonIndex = lessonIndex;
+	}
+
+	public String getLessonId() {
+		return lessonId;
+	}
+
+	public void setLessonId(String lessonId) {
+		this.lessonId = lessonId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	public String getClassDate() {
+		return classDate;
+	}
+
+	public void setClassDate(String classDate) {
+		this.classDate = classDate;
+	}
+
+	public String getTimeBucketStart() {
+		return timeBucketStart;
+	}
+
+	public void setTimeBucketStart(String timeBucketStart) {
+		this.timeBucketStart = timeBucketStart;
+	}
+
+	public String getTimeBucketEnd() {
+		return timeBucketEnd;
+	}
+
+	public void setTimeBucketEnd(String timeBucketEnd) {
+		this.timeBucketEnd = timeBucketEnd;
+	}
+
+	public String getWeekDay() {
+		return weekDay;
+	}
+
+	public void setWeekDay(String weekDay) {
+		this.weekDay = weekDay;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getLessonColor() {
+		return lessonColor;
+	}
+
+	public void setLessonColor(String lessonColor) {
+		this.lessonColor = lessonColor;
+	}
+
+	public Integer getDayStartIndex() {
+		return dayStartIndex;
+	}
+
+	public void setDayStartIndex(Integer dayStartIndex) {
+		this.dayStartIndex = dayStartIndex;
+	}
+
+	public Integer getDayEndIndex() {
+		return dayEndIndex;
+	}
+
+	public void setDayEndIndex(Integer dayEndIndex) {
+		this.dayEndIndex = dayEndIndex;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java
new file mode 100644
index 0000000..e8c231d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java
@@ -0,0 +1,45 @@
+package com.qxueyou.scc.school.model.viewvo;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 学生 周课表组装VO   提供给app接口使用
+ * @author ody.yuan
+ *
+ */
+public class SchWeekScheduleViewVO implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6136166308539114271L;
+	
+	/** 周课表索引 */
+	private Integer weekScheduleIndex ;
+	
+	/** 周课表*/
+	private List<SchStudentScheduleViewVO> lstStudentSchedule;
+
+	public Integer getWeekScheduleIndex() {
+		return weekScheduleIndex;
+	}
+
+	public void setWeekScheduleIndex(Integer weekScheduleIndex) {
+		this.weekScheduleIndex = weekScheduleIndex;
+	}
+
+	public List<SchStudentScheduleViewVO> getLstStudentSchedule() {
+		return lstStudentSchedule;
+	}
+
+	public void setLstStudentSchedule(
+			List<SchStudentScheduleViewVO> lstStudentSchedule) {
+		this.lstStudentSchedule = lstStudentSchedule;
+	}
+
+
+
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java
new file mode 100644
index 0000000..c55ee33
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.school.model.viewvo;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 课表:  学年 组装VO   提供给app接口使用
+ * @author ody.yuan
+ *
+ */
+public class SchYearViewVO implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6950974079708097252L;
+
+	/** 学年ID */
+	private String yearId ;
+	
+	/** 第几学年,排序 */
+	private Integer yearIndex ;
+	
+	/** 开始年 */
+	private Integer startYear ;
+	
+	/** 结束年 */
+	private Integer endYear ;
+	
+	/** 学年下有多少个学期 */
+	List<SchSemesterViewVO> lstSemester ;
+
+	public Integer getYearIndex() {
+		return yearIndex;
+	}
+
+	public void setYearIndex(Integer yearIndex) {
+		this.yearIndex = yearIndex;
+	}
+
+	public Integer getStartYear() {
+		return startYear;
+	}
+
+	public void setStartYear(Integer startYear) {
+		this.startYear = startYear;
+	}
+
+	public Integer getEndYear() {
+		return endYear;
+	}
+
+	public void setEndYear(Integer endYear) {
+		this.endYear = endYear;
+	}
+
+	public List<SchSemesterViewVO> getLstSemester() {
+		return lstSemester;
+	}
+
+	public void setLstSemester(List<SchSemesterViewVO> lstSemester) {
+		this.lstSemester = lstSemester;
+	}
+
+	public String getYearId() {
+		return yearId;
+	}
+
+	public void setYearId(String yearId) {
+		this.yearId = yearId;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IArticleService.java b/src/main/java/com/qxueyou/scc/school/service/IArticleService.java
new file mode 100644
index 0000000..f6a4e23
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IArticleService.java
@@ -0,0 +1,150 @@
+package com.qxueyou.scc.school.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchArticle;
+
+/**
+ * 文章接口
+ * 
+ * @author zhiyong
+ *
+ */
+public interface IArticleService {
+	
+	/**
+	 * 查询列表数据
+	 * 
+	 * @param type
+	 * @return
+	 */
+	List<SchArticle> queryClassListData();
+	
+	/**
+	 * 查询科目文章list
+	 * @param collegeCourseId
+	 * @return
+	 */
+	List<Map<String, Object>> queryArticleOrgLst(String collegeCourseId, String subjectId);
+	 
+	/**
+	 * 查询基本信息
+	 * @param articleId
+	 * @return
+	 */
+	Result queryInfo(String articleId);
+	
+	/**
+	 * 新增或更新列表数据 班级
+	 * 
+	 * @param articleId
+	 * @param name
+	 * @return
+	 */
+	Result updateArticle(SchArticle article);
+	
+	/**
+	 * 新增或更新列表数据  机构
+	 * 
+	 * @return
+	 */
+	Result updateOrgArticle(SchArticle article, String collegeCourseId);
+	
+	/**
+	 * 删除文章
+	 * @param articleIds
+	 * @return
+	 */
+	Result deleteArticle(String articleIds);
+	
+	/**
+	 * 排序
+	 * 
+	 * @param ids
+	 * @param index
+	 * @return
+	 */
+	Result doitemOrder(List<String> ids,  List<Integer> index);
+	
+	/**
+	 * 删除机构文章信息
+	 * @param articleIds
+	 * @param delAll
+	 * @param orgIds
+	 * @param classIds
+	 */
+	Result deleteOrgArticleIds(String[] articleIds, Integer delAll, String orgIds[], String classIds[]);
+	
+	/**
+	 * 下发机构文件
+	 * @param articleId
+	 * @param orgId
+	 * @param classIds
+	 * @param collegeCourseId
+	 * @return
+	 */
+	Result insertAppointArticle(String articleId[], String orgId[], String classIds[], String collegeCourseId);
+	
+	/**
+	 * 获取文章列表
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	public Result articleList(Pager pager, String sortType, String sortField, String collegeCourseId, String subjectId);
+	
+	/**
+	 * 点赞
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	public Result doLike(String commentId);
+	
+	/**
+	 * 删除评论
+	 * 
+	 * @param msgId
+	 * @param commentId
+	 * @return
+	 */
+	public Result deleteComment(String articleId, String commentId);
+	
+	/**
+	 * 评论列表
+	 * 
+	 * @param articleId
+	 * @return
+	 */
+	public Result commentList(String articleId);
+	
+	/**
+	 * 评论
+	 * 
+	 * @param msgId
+	 * @param content
+	 * @param parentCommentId
+	 * @return
+	 */
+	public Result addComment(String articleId, String content, String parentCommentId);
+	
+	/**
+	 * 观看进度
+	 * 
+	 * @param articleId
+	 * @param compDegree
+	 * @return
+	 */
+	public Result doSubmitSchedule(String articleId, double compDegree);
+	
+	/**
+	 * 保存文章接口
+	 * 
+	 * @param article
+	 * @return
+	 */
+	public Result saveArticle(SchArticle article);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IClassCardService.java b/src/main/java/com/qxueyou/scc/school/service/IClassCardService.java
new file mode 100644
index 0000000..56ae805
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IClassCardService.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.school.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchClassCard;
+import com.qxueyou.scc.school.model.SchSign;
+
+/**
+ * 听课证接口
+ * @author Delin
+ *
+ */
+public interface IClassCardService {
+	
+	/**
+	 * 保存听课证信息
+	 * @param classCard
+	 * @param templetData
+	 * @return
+	 */
+	Result doSaveClassCard(SchClassCard classCard,String templetData);
+	
+	/**
+	 * 读取听课证信息
+	 * @return
+	 */
+	Map<String,Object> readClassCard();
+	
+	/**
+	 * 获取显示头像的字段
+	 * @return
+	 */
+	List<Map<String,String>> getHeadimgField();
+	
+	/**
+	 * 获取用户头像
+	 * 
+	 * @param userId
+	 * @param classId
+	 * @param imgPath
+	 * @return
+	 */
+	String getUserHeadimg(String userId, String classId);
+	
+	/**
+	 * 提交签到
+	 * @param sign
+	 * @param userId
+	 * @return
+	 */
+	Result doSubmitSign(SchSign sign,String userId);
+	
+	/**
+	 * 获取签到
+	 * @param signId
+	 * @return
+	 */
+	SchSign getSchSign(String signId);
+	
+	/**
+	 * 获取听课证
+	 * @param signId
+	 * @return
+	 */
+	SchClassCard getSchClassCard(String classId);
+	
+	/**
+	 * 获取用户所有的听课证
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	List<Map<String,Object>> getAllUserCard(String userId);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java b/src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java
new file mode 100644
index 0000000..924e0fa
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchClassCircleMsg;
+
+/**
+ * 课程、视频、讲义记录传播轨迹service
+ * 
+ * @author lihanqi
+ *
+ */
+public interface IClassCircleService {
+	/**
+	 * 获取朋友圈
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	public Result doGetMsgList(Pager pager);
+	
+	/**
+	 * 发朋友圈
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	public Result addMsg(SchClassCircleMsg classCircleMsg);
+	
+	/**
+	 * 点赞
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	public Result doLike(String msgId);
+	
+	/**
+	 * 点赞
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	public Result deleteLike(String msgId);
+	
+	
+	/**
+	 * 删除评论
+	 * 
+	 * @param msgId
+	 * @param commentId
+	 * @return
+	 */
+	public Result deleteComment(String msgId, String commentId);
+	
+	/**
+	 * 评论
+	 * 
+	 * @param msgId
+	 * @param content
+	 * @param parentCommentId
+	 * @return
+	 */
+	public Result addComment(String msgId, String content, String parentCommentId);
+	
+	/**
+	 * 新增文件
+	 * 
+	 * @param filesJson
+	 * @param fileType
+	 * @return
+	 */
+	public Result addFile(String filesJson, String msgId, String fileType);
+	
+	/**
+	 * 获取消息的评论图片和文件
+	 * 
+	 * @param objSchClassCircleMsg
+	 * @return
+	 */
+	public SchClassCircleMsg packageMsg(SchClassCircleMsg objSchClassCircleMsg);
+	
+	/**
+	 * 删除文件
+	 * 
+	 * @param filesJson
+	 * @param fileType
+	 * @return
+	 */
+	public Result deleteFile(String fileId, String fileType);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java b/src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java
new file mode 100644
index 0000000..f4a4d4d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java
@@ -0,0 +1,207 @@
+package com.qxueyou.scc.school.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 课件管理
+ * 
+ * @author lihanqi
+ *
+ */
+public interface ICourseWareService {
+	
+	/**
+	 * 新增章节
+	 * 
+	 * @param name
+	 * @param parentChapterId
+	 * @return
+	 */
+	Result addOrUpdateChapter(String chapterId, String subjectId, String name, String parentChapterId);
+	
+	/**
+	 * 删除章节
+	 * 
+	 * @param chapterId
+	 * @return
+	 */
+	Result deleteChapter(String[] chapterIds);
+	
+	/**
+	 * 拷贝课件
+	 * 
+	 * @param type 课件类型
+	 * @param id 主键
+	 * @param subjectId 课程
+	 * @param collegeCourseId 科目
+	 * @param chapterId 章节
+	 * @return
+	 */
+	Result doCopyCourseware(String type, String id, String subjectId, String collegeCourseId, String chapterId);
+	
+	/**
+	 * 移动课件
+	 * 
+	 * @param type 课件类型
+	 * @param id 主键
+	 * @param subjectId 课程
+	 * @param collegeCourseId 科目
+	 * @param chapterId 章节
+	 * @return
+	 */
+	Result doMoveCourseware(String type, String id, String subjectId, String collegeCourseId, String chapterId);
+	
+	/**
+	 * 删除课件
+	 * 
+	 * @param types
+	 * @param ids
+	 * @param delAll
+	 * @param orgIds
+	 * @param classIds
+	 * @return
+	 */
+	Result deleteCourseware(String[] types, String[] ids, Integer delAll, String orgIds[], String classIds[]);
+	
+	/**
+	 * 下发课件
+	 * 
+	 * @param types
+	 * @param ids
+	 * @param orgIds
+	 * @param classIds
+	 * @return
+	 */
+	Result doAppointCourseware(String[] types, String[] ids, String orgIds[], String classIds[], String collegeCourseId);
+	
+	/**
+	 * 查询已下发的班级
+	 * 
+	 * @param types
+	 * @param ids
+	 * @return
+	 */
+	Result findAlready(String[] types, String[] ids);
+	
+	/**
+	 * 课件树排序
+	 * 
+	 * @param ids
+	 * @param type
+	 * @param parentId
+	 * @return
+	 */
+	Result doOrder(String[] ids, String type, String parentId);
+	
+	/**
+	 * 删除课件
+	 * 
+	 * @param types
+	 * @param ids
+	 * @return
+	 */
+	public Result deleteClassCourseware(String[] types, String[] ids);
+	
+	/**
+	 * 拷贝课件
+	 * 
+	 * @param type 课件类型
+	 * @param id 主键
+	 * @param subjectId 课程
+	 * @param collegeCourseId 科目
+	 * @param chapterId 章节
+	 * @return
+	 */
+	public Result doCopyClassCourseware(String type, String id, String subjectId, String chapterId);
+	
+	/**
+	 * 发布和停用
+	 * 
+	 * @param types
+	 * @param ids
+	 * @param status
+	 * @return
+	 */
+	public Result updateStatus(String[] types, String[] ids, int status);
+	
+	/**
+	 * 删除课程和章节级联删除课件
+	 *  
+	 * @param subjectId 机构课程id
+	 * @param chapterId 章节id
+	 * @param classSubjectId 班级课程id
+	 * @return
+	 */
+	public Result deleteCourseWare(String subjectId, String chapterId);
+	
+	/**
+	 * 同步更新课件课程名称
+	 * 
+	 * @param subjectId
+	 * @param subjectName
+	 * @return
+	 */
+	public Result updateCourseWare(String subjectId, String subjectName);
+	
+	/**
+	 * 下发课件到子机构
+	 * 
+	 * @param id
+	 * @param sourceOrgId
+	 * @param targetOrgId
+	 * @param collegeCourseId
+	 * @return
+	 */
+	public Result insertOrgCourseware(String id, String sourceOrgId, String targetOrgId, String collegeCourseId);
+	
+	/**
+	 * 撤回
+	 * 
+	 * @param id
+	 * @param orgId
+	 * @return
+	 */
+	public Result deleteOrgCourseware(String id, String orgId);
+	
+	/**
+	 * 设置学分
+	 * @param id
+	 * @param score
+	 * @return
+	 */
+	public Result updateCoursewareScore(String id ,int score) ;
+
+	/**
+	 * 查找课件
+	 * @param id 
+	 * @param type
+	 * @return
+	 */
+	public List<Map<String, Object>> queryCourseware(String id, String type);
+	
+	/**
+	 * 更新课件的学分值
+	 * @param coursewareId
+	 * @return
+	 */
+	public @ResponseBody Result updateCoursewareScoreValue(String coursewareId,BigDecimal scoreValue);
+	
+	
+	/**
+	 * 获取排序
+	 * 
+	 * @param isOrg
+	 * @param subjectId
+	 * @param chapterId
+	 * @return
+	 */
+	public Map<String, Integer> getOrder(boolean isOrg, String subjectId, String chapterId);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java b/src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java
new file mode 100644
index 0000000..9086162
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java
@@ -0,0 +1,14 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 发送新文档处理消息
+ * @author 德虎
+ *
+ */
+public interface IDocdealMsgSenderService {
+
+	Result sendMsg(String docPath,String handoutId,String uploadModule,String userId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IHandoutService.java b/src/main/java/com/qxueyou/scc/school/service/IHandoutService.java
new file mode 100644
index 0000000..a8549cd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IHandoutService.java
@@ -0,0 +1,253 @@
+package com.qxueyou.scc.school.service;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.school.model.SchHandoutPage;
+import com.qxueyou.scc.school.model.SchHandoutPageFavor;
+import com.qxueyou.scc.school.model.SchHandoutRecord;
+
+public interface IHandoutService {
+
+	/**
+	 * 新增讲义
+	 * @param file 讲义文件
+	 * @param handout 讲义vo对象
+	 * @return 新增结果
+	 */
+	Result insertHandout(String fullPath, String module,SchHandout handout);
+	
+	/**
+	 * 机构新增讲义
+	 * @param file 讲义文件
+	 * @param handout 讲义vo对象
+	 * @return 新增结果
+	 */
+	Result insertOrgHandout(String fullPath, String module,SchHandout handout,String collegeCourseId);
+	
+	/**
+	 * 编辑讲义
+	 * @param handoutId
+	 * @param handoutName
+	 * @param subjectId
+	 * @param subjectName
+	 * @return
+	 */
+	Result doEditHandout(SchHandout handout,String type);
+
+	/**
+	 * 批量删除讲义
+	 * @param handoutIds 讲义id的数组
+	 * @return 操作结果
+	 */
+	Result deleteHandouts(String[] handoutIds);
+	
+	/**
+	 * 批量删除机构讲义
+	 * @param handoutIds
+	 * @param delAll
+	 * @param orgIds
+	 * @param classIds
+	 * @return
+	 */
+	Result deleteOrgHandouts(String[] handoutIds, Integer delAll, String orgIds[], String classIds[]);
+
+	/**
+	 * 批量启动讲义
+	 * @param handoutIds 讲义id的数组
+	 * @return 操作结果
+	 */
+	Result doStartHandouts(String handoutIds);
+
+	/**
+	 * 批量停止讲义
+	 * @param handoutIds 讲义id的数组
+	 * @return 操作结果
+	 */
+	Result doStopHandouts(String[] handoutIds);
+	
+	/**
+	 * 插入历史讲义
+	 * @param handout
+	 * @param oldHandoutId
+	 * @return
+	 */
+	Result insertChooseHandout(SchHandout handout,String oldHandoutId);
+	
+	/**
+	 * 查询讲义列表
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<SchHandout> schHandoutList(int type,final String hql, final Pager page, final List<Object> args);
+	
+	/**
+	 * 批量操作讲义收藏记录
+	 * @param lstFavor
+	 * @return
+	 */
+	Result doOperHandoutFavorDataBatch(List<SchHandoutPageFavor> lstFavor);
+	
+	/**
+	 * 后台获取列表数据
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	List<SchHandout> queryDataList(String sql,List<Object> args);
+	
+	/**
+	 * 查询选择班级下历史讲义
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<SchHandout> queryChooseHandoutList(String sql, List<Object> args);
+	
+	/**
+	 * 使用jacob另存为图片,需要测试多个请求同时调用情况
+	 * 1.office2013报错,但是用office2013另存為效果最好
+	 * 2.office2007解析不完美,字体偏粗,边上有较明显锯齿,可以用jacob調用
+	 * 3.office2010解析基本正常,但是较于office2013,大字体和边框会有非常少量锯齿(推荐使用)
+	 * 
+	 * info:服务器推荐使用office2010,jacob.jar包更新后如果支持office2013,测试哪个版本会效果更好,可以替换服务器office版本
+	 * 
+	 * @param file ppt文件
+	 * @param docPath docPath
+	 * @return
+	 */
+	List<SchHandoutPage> convertPPTToJPG(File file,String docPath, String handoutId);
+	
+	/**
+	 * docdeal 消息队列调用
+	 * @param docPath
+	 * @param handoutId
+	 * @return
+	 */
+	Result insertHandoutPages(String docPath,String handoutId,String uploadModule,String userId,String type);
+	
+	/**
+	 * 旋转讲义图片
+	 * @param angle
+	 * @param handoutPageId
+	 * @return
+	 */
+	Result doRotatePic(String angle, String handoutPageId);
+	
+	/**
+	 * 查询讲义
+	 * @param keyWord   查询关键字
+	 * @return
+	 */
+	List<SchHandout> queryHandoutByKeyWord(String keyWord);
+
+	/**
+	 * 获取讲义列表数据
+	 * 
+	 * @return
+	 */
+	List<Map<String, Object>> handoutLst(String tid);
+	
+	/**
+	 * 获取机构讲义列表数据
+	 * 
+	 * @return
+	 */
+	List<Map<String, Object>> handoutOrgLst(String collegeCourseId, String subjectId);
+	/**
+	 * 指定讲义
+	 * */
+	Result insertAppointHandout(String handoutId[],String orgId[],String classIds[],String collegeCourseId);
+	
+	/**
+	 * 更新讲义观看量
+	 * 
+	 */
+	Result updatePlayCount(String handoutId);
+	
+	
+	/**
+	 * 插入讲义观看记录(新版)
+	 * 
+	 */
+	Result insertplayRecordNew(SchHandoutRecord record,String pageNums);
+	
+	
+	/**
+	 * 插入讲义观看记录
+	 * 
+	 */
+	Result insertplayRecord(SchHandoutRecord record,String pageNums);
+	
+	/**
+	 * 讲义上传重复数据处理
+	 * @param handoutId
+	 * @return
+	 */
+	Result doInitHandoutRepeatData( String handoutId );
+	
+	/**
+	 * 排序
+	 * 
+	 * @param ids 排序id
+	 * @param index 序号
+	 * @return
+	 */
+	Result doOrder(List<String> ids,  List<Integer> index);
+	
+	/**
+	 * 转码PDF发送消息
+	 * @param handoutId
+	 * @param fullPath
+	 * @param module 
+	 * @param userId
+	 * @return
+	 */
+	Result sendMsgConvertPDF(String handoutId,String fullPath,String module,String userId);
+	
+	/**
+	 * 拷贝讲义
+	 * 
+	 * @param id
+	 * @param subjectId
+	 * @param collegeCourseId
+	 * @param chapterId
+	 * @return
+	 */
+	Result doCopyHandout(String id, String subjectId, String collegeCourseId, String chapterId, String subjectName) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException;
+	
+	/**
+	 * 保存讲义接口
+	 * 
+	 * @param handout
+	 * @return
+	 */
+	public Result saveHandout(SchHandout handout);
+	
+	
+	/**
+	 * 监管委直接转码
+	 * @param handoutId
+	 * @param fullPath
+	 * @param module
+	 * @param userId
+	 */
+	public void doConvertPDF(String handoutId, String fullPath, String module, String userId);
+	
+	/**
+	 * 转码DOC
+	 * @param docPath
+	 * @param handoutId
+	 * @param uploadModule
+	 * @param userId
+	 */
+	public void doConvertDOC(String docPath, String handoutId,String uploadModule,String userId);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IInteractService.java b/src/main/java/com/qxueyou/scc/school/service/IInteractService.java
new file mode 100644
index 0000000..6ec01d7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IInteractService.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.school.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.InteractResultData;
+
+public interface IInteractService {
+	
+	/**
+	 * 新增互动
+	 * @param sign
+	 * @return
+	 */
+	public abstract Result insertInteract(String interactName, String exerciseTime);
+	
+	
+	/**
+	 * 删除互动
+	 * @param intractIds 互动id
+	 * @return
+	 */
+	public abstract Result deleteInteracts(String[] intractIds);
+	
+	/**
+	 * 启动互动
+	 * @param intractIds 互动id
+	 * @return
+	 */
+	public abstract Result doStartInteracts(String[] interactIds);
+	
+	/**
+	 * 停止互动
+	 * @param intractIds 互动id
+	 * @return
+	 */
+	public abstract Result doStopInteracts(String[] interactIds);
+	
+	
+	/**
+	 * 操作互动练习答案记录
+	 * @return
+	 */
+	public abstract Result doOperInteractExerciseAnswer(String interactGroupId, 
+			String exerciseId, String answers, byte corrects,String currTitleNumber);
+	
+	/**
+	 * 操作互动练习答案记录
+	 * @return
+	 */
+	public abstract Result doOperInteractExerciseAnswerNew(InteractResultData resultData);
+	
+	/**
+	 * 操作互动练习答案记录
+	 * @return
+	 */
+	public abstract Result doSubmitInteractResult(String interactGroupId);
+	
+	/**
+	 * 查询互动练习结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	public List<Map<String, Object>> queryResultByInteractExer(String hql, List<Object> args);
+	
+	/**
+	 * 查询互动练习结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	public abstract List<Map<String, Object>> queryResultByInteract(String hql, List<Object> args) ;
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ILessonService.java b/src/main/java/com/qxueyou/scc/school/service/ILessonService.java
new file mode 100644
index 0000000..2f18507
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ILessonService.java
@@ -0,0 +1,133 @@
+package com.qxueyou.scc.school.service;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.web.servlet.ModelAndView;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+
+/**
+ * 课程相关服务
+ * @author 德虎
+ *
+ */
+public interface ILessonService {
+	
+	/**
+	 * 添加视频
+	 * @param video
+	 * @param lessonId
+	 * @return
+	 */
+	Result insertVideo(MediaVideo video,String lessonId, boolean isCopy);
+	/**
+	 * 机构指定视频
+	 * 
+	 * **/
+	Result insertAppointOrgVideo(String videoIds[],String orgIds[],String classIds[]);
+	
+	
+	/**
+	 * 机构添加视频
+	 * @param video
+	 * @param lessonId
+	 * @return
+	 */
+	Result insertOrgVideo(MediaVideo video,String collegeCourseId, boolean isCopy);
+
+	/**
+	 * 删除视频
+	 * @param videoIds
+	 * @return
+	 */
+	Result deleteVideos(String videoIds);
+	/**
+	 * 编辑视频
+	 * @param video
+	 * @return
+	 */
+	Result updateMediaVideo(MediaVideo video);
+	/**
+	 * 删除机构视频
+	 * @param videoIds
+	 * @return
+	 */
+	Result deleteOrgVideo(String videoId,Integer delAll,String orgIds[],String classIds[]);
+	
+	/**
+	 * 课程表列表
+	 * @return
+	 */
+	List<SchClassSchedule> queryLessonList(Date monthFirst,Date monthLast);
+	
+	/**
+	 * 课程表列表
+	 * @param classId 课程ID
+	 * @return
+	 */
+	List<SchClassSchedule> queryLessonList(String classId,Date monthFirst,Date monthLast);
+	
+	/**
+	 * 查询课程表记录
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<SchClassSchedule> queryAppLessonList(final String hql, final Pager page, final List<Object> args);
+	
+	/**
+	 * 根据
+	 * @param orgTeacher
+	 * @return
+	 */
+	List<String> queryClassesByTeacher(String orgTeacherId);
+	
+	/**
+	 * 分享课程页面的全部课程表
+	 * @param classId
+	 * @return
+	 */
+	Result queryScheduleList(String classId,ModelAndView mv,ClsClass cls);
+	
+	/**
+	 * 发布视频
+	 * @param videoId
+	 * @return
+	 */
+	Result doStartVideos(String videoIds);
+	
+	/**
+	 * 停用视频
+	 * @param videoId
+	 * @return
+	 */
+	Result doStopVideos(String videoIds);
+	
+	/**
+	 * 定时发布、停用
+	 */
+	Result doVideoIssueStop();
+	
+	/**
+	 * 单个处理视频发布与上传
+	 */
+	Result doSingleVideoIssueStop(String videoId, String operateType);
+	
+	/**
+	 * 添加视频,不调用转码
+	 */
+	Result insertVideoSingle(MediaVideo video, String lessonId, boolean isCopy);
+	
+	/**
+   	 * 根据直播查询讲师
+   	 * 
+   	 * @param orgTeacherId
+   	 * @return
+   	 */
+	List<String> queryClassesByLive(String orgTeacherId);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/INoteService.java b/src/main/java/com/qxueyou/scc/school/service/INoteService.java
new file mode 100644
index 0000000..d4068e0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/INoteService.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.school.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchNote;
+import com.qxueyou.scc.school.model.viewvo.SchNoteViewVO;
+
+/**
+ * 笔记服务接口
+ * @author ody.yuan
+ *
+ */
+public interface INoteService {
+	
+	/**
+	 * 添加笔记
+	 * @param note
+	 * @return
+	 */
+	Result insertOrUpdateNote(SchNote note);
+
+	/**
+	 * 删除某页讲一下的一条笔记
+	 * @param noteIds
+	 * @return
+	 */
+	Result deleteNotes(String noteIds);
+	
+	/**
+	 * 删除某页讲义下的所有笔记
+	 * @param handoutPageId  讲义pageID
+	 * @param strObjectType  笔记对象类型
+	 * @return
+	 */
+	Result deleteAllNotes(String handoutPageId,int strObjectType);
+	
+	/**
+	 * 笔记列表
+	 * @param handoutPageId 讲义pageID
+	 * @return
+	 */
+	List<SchNoteViewVO> queryNoteList(String handoutPageId,Pager pager);
+	
+	/**
+	 * 讲义笔记列表
+	 * @param handoutPageId
+	 * @param type (我的讲义笔记:0,同学笔记 :1,全部笔记:2)
+	 * @return
+	 */
+	List<SchNoteViewVO> queryHandoutNoteList(String handoutPageId,Integer type,Pager pager);
+	
+	/**
+	 * 单个讲义全部笔记列表
+	 * @param type (我的讲义笔记:0,同学笔记 :1,全部笔记:2)
+	 * @return
+	 */
+	List<Map<String,Object>> queryAllHandoutNoteList(Integer type,String handoutId,Pager pager);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IRankService.java b/src/main/java/com/qxueyou/scc/school/service/IRankService.java
new file mode 100644
index 0000000..4119878
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IRankService.java
@@ -0,0 +1,120 @@
+package com.qxueyou.scc.school.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchRankHis;
+
+/**
+ * 排名处理服务
+ * @author 德虎
+ *
+ */
+public interface IRankService {
+
+	/**
+	 * 请求更新排名
+	 * @return 
+	 */
+	Result reqUpdateRankOld(String userId);
+	
+	/**
+	 * 请求更新排名
+	 * @return 
+	 */
+	Result reqUpdateRank(String userId, String rankType, String scopeType, String scopeId);
+	
+	
+	/**
+	 * 请求班级排名
+	 * @return -1代表还没有名次
+	 */
+	int getRankInClass(String userId,String classId);
+	
+	/**
+	 * 请求班级排名
+	 * @return -1代表还没有名次
+	 */
+	int getRankInScope(String userId, String rankType, String scopeType, String scopeId);
+	
+	/**
+	 * 请求班级排名列表
+	 * @return
+	 */
+	List<SchRankHis> getClassRankLst(String classId);
+	
+	/**
+	 * 请求班级排名列表
+	 * @return
+	 */
+	List<SchRankHis> getClassRankLst(String classId,Pager page);
+	
+	/**
+	 * 请求整个Q学友排名
+	 * @return -1代表还没有名次
+	 */
+	int getRankInQxueyou(String userId);
+	
+	/**
+	 * 请求Qxueyou Top 100 排名
+	 * @return
+	 */
+	List<SchRankHis> getQxueyouTopRankLst();
+	
+	
+	/**
+	 * 
+	 * @param userId
+	 * @param rankType
+	 * @param value
+	 */
+	void updateRankValue(String userId,String rankType,BigDecimal delta,BigDecimal total,String remark,boolean isSendMsg);
+	
+	
+	
+	/**
+	 * 请求好友排名
+	 * @return -1代表还没有名次
+	 */
+	int getRankInFriend(String userId);
+	
+	/**
+	 * 请求好友排名列表
+	 * @return
+	 */
+	List<SchRankHis> getFriendRankLst(String userId,Pager page);
+	
+	/**
+	 * 指定user 最近num天班级排名状态变化
+	 */
+	List<Map<String,Object>> getPersonalClassRankTrend(String userId,String classId,Pager page,int num);
+	
+	/**
+	 * 指定user 最近num天全站排名状态变化
+	 */
+	List<Map<String,Object>> getPersonalQxueyouRankTrend(String userId,Pager page,int num);
+	
+	/**
+	 * 指定user 最近num天好友排名状态变化
+	 */
+	List<Map<String,Object>> getPersonalFriendRankTrend(String userId,Pager page,int num);
+	
+	/**
+	 * 得到排名数据(班级、好友、全站)排名 及排名上升下降     
+	 * @return
+	 */
+	Map<String,Object> getScoreRankPageData();
+	
+
+	/**
+	 * 获取用户个人传播大使积分和排名信息
+	 * 
+	 * @param userId 用户id
+	 * @return
+	 */
+	SchRankHis doGetUserRank(String userId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java b/src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java
new file mode 100644
index 0000000..9abb99f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchSchoolDay;
+import com.qxueyou.scc.school.model.SchSchoolDayItem;
+
+public interface ISchoolDayService {
+	
+	/**
+	 * 新增作息时间
+	 * @param schSchoolDay
+	 * @return
+	 */
+	public abstract Result insertSchoolDay(SchSchoolDay schSchoolDay);
+	
+	
+	/**
+	 * 删除作息时间
+	 * @param schoolDayIds
+	 * @return
+	 */
+	public abstract Result deleteSchoolDay(String[] schoolDayIds);
+	
+	/**
+	 * 新增作息时间明细
+	 * @param schSchoolDayItem
+	 * @return
+	 */
+	public abstract Result insertSchoolDayItem(SchSchoolDayItem schSchoolDayItem);
+	
+	
+	/**
+	 * 删除作息时间明细
+	 * @param dayItemIds
+	 * @return
+	 */
+	public abstract Result deleteSchoolDayItem(String[] dayItemIds);
+	
+	/**
+	 * 开始时间的回调函数
+	 * startTime
+	 * @return
+	 */
+	Result startCallback(SchSchoolDayItem schoolDayItem);
+
+	/**
+	 * 结束时间的回调函数
+	 * startTime
+	 * @return
+	 */
+	Result endCallback(SchSchoolDayItem schoolDayItem);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ISchoolSubjectService.java b/src/main/java/com/qxueyou/scc/school/service/ISchoolSubjectService.java
new file mode 100644
index 0000000..3d57f08
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ISchoolSubjectService.java
@@ -0,0 +1,10 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+public interface ISchoolSubjectService {
+	public abstract Result insertSubject(Subject ss);
+	
+	public abstract Result delete(String [] subjectIds);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java b/src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java
new file mode 100644
index 0000000..a133e1b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java
@@ -0,0 +1,37 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchTerm;
+
+public interface ISchoolTermService {
+	
+	/**
+	 * 新增学期
+	 * @param schTerm
+	 * @return
+	 */
+	public abstract Result insertSchoolTerm(SchTerm schTerm,String schoolDayId);
+	
+	
+	/**
+	 * 删除学期
+	 * @param termIds
+	 * @return
+	 */
+	public abstract Result deleteSchoolTerm(String[] termIds);
+	
+	/**
+	 * 开始时间的回调函数
+	 * startTime
+	 * @return
+	 */
+	Result startCallback(String termId,String startTime,String shoolYearId);
+
+	/**
+	 * 结束时间的回调函数
+	 * startTime
+	 * @return
+	 */
+	Result endCallback(String termId,String endTime,String shoolYearId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java b/src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java
new file mode 100644
index 0000000..c1c72b5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java
@@ -0,0 +1,37 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchSchoolYear;
+
+public interface ISchoolYearService {
+	
+	/**
+	 * 新增学年
+	 * @param schSchoolYear
+	 * @return
+	 */
+	public abstract Result insertSchoolYear(SchSchoolYear schSchoolYear);
+	
+	
+	/**
+	 * 删除学年
+	 * @param yearIds
+	 * @return
+	 */
+	public abstract Result deleteSchoolYear(String[] yearIds);
+
+	/**
+	 * 开始时间的回调函数
+	 * startTime
+	 * @return
+	 */
+	Result startCallback( SchSchoolYear schSchoolYear);
+
+	/**
+	 * 结束时间的回调函数
+	 * startTime
+	 * @return
+	 */
+	Result endCallback(SchSchoolYear schSchoolYear);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java b/src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java
new file mode 100644
index 0000000..493ad61
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java
@@ -0,0 +1,146 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 
+ * @author ody.yuan
+ *
+ */
+public interface IScoreChangeService {
+	
+	/**
+	 * 评论被赞积分变动
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doCommentPraised(String userId,String businessId);
+	
+	/**
+	 * 评论点赞积分变动
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doCommentPraise(String userId,String businessId);
+	
+	/**
+	 * 提交评论积分变动
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doComment(String userId,String businessId);
+
+	/**
+	 * 提交纠错积分变动
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doExerCor(String userId,String businessId);
+	
+	/**
+	 * 纠错被处理积分变动
+	 * 一个纠错题可能有多人提交纠错信息,全部增加积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doExerCorDeal(String userId,String businessId);
+	
+	/**
+	 * 登录积分变动
+	 * 当天首次登录获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doLogin(String userId,String businessId);
+	
+	/**
+	 * 签到积分变动
+	 * 一个签到一天一次增加积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doSign(String userId,String businessId);
+	
+	/**
+	 * 问答:发布问题获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQANewQuestion(String userId,String businessId);
+	
+	/**
+	 * 问答:问答点赞获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQAPraise(String userId,String businessId);
+	
+	/**
+	 * 问答:问答被赞获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQAPraised(String userId,String businessId);
+	
+	/**
+	 * 问答:问答回复获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQACommentReply(String userId,String businessId);
+	
+	/**
+	 * 问答:问答被回获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQACommentReplyed(String userId,String businessId);
+	
+	/**
+	 * 问答:回答问题获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQAAnswer(String userId,String businessId);
+	
+	/**
+	 * 问答:问答被分享获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQAShared(String userId,String businessId);
+	
+	/**
+	 * 问答:问答分享获取积分
+	 * 
+	 * @param userId
+	 * @param businessId
+	 * @return
+	 */
+	Result doQAShare(String userId,String businessId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ISignService.java b/src/main/java/com/qxueyou/scc/school/service/ISignService.java
new file mode 100644
index 0000000..786003e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ISignService.java
@@ -0,0 +1,279 @@
+package com.qxueyou.scc.school.service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.ExportSchSignItem;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+import com.qxueyou.scc.school.model.SchScheduleAddress;
+import com.qxueyou.scc.school.model.SchSign;
+import com.qxueyou.scc.school.model.SchSignItem;
+import com.qxueyou.scc.school.model.SchSignStatistics;
+import com.qxueyou.scc.school.model.SignStatisResult;
+import com.qxueyou.scc.user.model.User;
+
+
+public interface ISignService {
+	
+	/**
+	 * 新增签名
+	 * @param sign
+	 * @return
+	 */
+	Result insertSign(SchSign sign);
+	
+	
+	/**
+	 * 删除签名
+	 * @param signIds 签名id
+	 * @return
+	 */
+	Result deleteSigns(String[] signIds);
+	
+	/**
+	 * 新增签到历史
+	 * @param sign
+	 * @return
+	 */
+	Result insertSignItem(SchSign sign, String signAddress, Date signTime,String userId,String userName);
+	
+	/**
+	 * 新增签到次序
+	 * @param sign
+	 * @return
+	 */
+	int insertSignOrder(SchSign signVO, Date signTime);
+	
+	/**
+	 *  得到满足要求的签到明细
+	 * @param signId
+	 * @return
+	 */
+	List<SchSignItem> getSignItems(String signId);
+	
+	/**
+	 * 新增签到统计
+	 * @param sign
+	 * @return
+	 */
+	SignStatisResult insertSignStatistics(SchSign sign, String signAddress, Date signTime,
+			Short terminalType,String userId,String userName,String mobilePhone,String location);
+	
+	/**
+	 * 查询是否班级成员(通过账号登录记录)
+	 */
+	boolean queryRegistrationFlag(String userId,String classId);
+	
+	/**
+	 *  得到满足要求的签到明细(优化版本)
+	 * @param signId
+	 * @return
+	 */
+	List<SchSignStatistics> getSimpleSignItems(String signId, String signDate);
+	
+	/**
+	 * 导出(优化版本)
+	 * @param signId
+	 * @param objSchSign
+	 * @return
+	 */
+	List<ExportSchSignItem> exportSimpleItems(String signId, String signDate);
+	
+	
+	/**
+	 * 查询签到历史new
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<SchSignStatistics> querySignItemListStat(String hql, List<Object> args);
+	
+	/**
+	 * 签到历史
+	 * @return
+	 */
+	 List<Map<String, Object>> querySignHistory(final String hql, final Pager page, final List<Object> args);
+	
+	/**
+	 * 查询签到历史new
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<SchSignStatistics> querySignItemListCom(String hql, List<Object> args);
+	
+	/**
+	 * 查询签到历史new
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	List<SchSignStatistics> querySignItemListCom( String hql,List<Object> args,Pager page,Integer signType,String signId  );
+	
+	/**
+	 * 微信签到高级设置
+	 * @param sign
+	 * @return
+	 */
+	Result updateSign(SchSign sign);
+	
+	/**
+	 * 签到 发送消息
+	 * @param signType
+	 * @param signIndex
+	 * @param signId
+	 * @return
+	 */
+	Result updateSignMessage(Integer signType,Integer signIndex, String signId, User user);
+	
+	/**
+	 * 初始化签到信息
+	 * @param signId
+	 * @param userId
+	 * @param initType
+	 * @return
+	 */
+	Result doInitSignDatas(String signId, String userId,int initType);
+	
+	/**
+	 * 根据课程信息获取签到信息
+	 * 
+	 * @param strClassSubjectId
+	 * @return
+	 */
+	List<SchSign> querySign(String strClassSubjectId);
+	
+	/**
+	 * 根据课程信息获取签到人员记录
+	 * 
+	 * @param strClassSubjectId
+	 * @return
+	 */
+	List<SchSignStatistics> queryUserSign(String strClassSubjectId);
+	
+	/**
+	 * 获取当天是否已经签到
+	 * 
+	 * @param signId
+	 * @return
+	 */
+	SchSignStatistics getSchSignStatistics(String signId, String userId);
+	
+	/**
+	 * 查询签到历史
+	 * @param hql
+	 * @param args
+	 * @param page
+	 * @return
+	 */
+	List<SchSignStatistics> queryPageLstSignStatistics(SchSignStatistics objSignStatistics, Pager page,Integer signType,String signId);
+	
+	/**
+	 * 签到,根据signId得到schSign
+	 * @param signId
+	 * @return
+	 */
+	SchSign getSignFromCacheOrDB(String signId);
+	
+	/**
+	 * 根据sign得到相对应的机构图像
+	 * @param signId
+	 * @return
+	 */
+	String getOrgLogoFromCacheOrDB(SchSign sign);
+	
+	/**
+	 * 签到异步处理部分代码
+	 * @param userId
+	 * @param userName
+	 * @param mobilePhone
+	 * @param appId
+	 * @param openId
+	 * @return
+	 */
+	Result sendSignQueueMsg(String args);
+	
+	/**
+	 * 签到异步处理部分代码
+	 * 
+	 * @param args
+	 * @return
+	 */
+	Result doHandleSignQueueMsg(String args);
+	
+	/**
+	 * 查询是否安装(通过账号登录记录)
+	 */
+	boolean queryInstallFlag(String userId);
+	
+	/**
+	 * 查询是否班级激活
+	 */
+	boolean queryActiveflag(String userId,String classId);
+	
+	/**
+	 * 查询签到当天的课次
+	 * 
+	 * @param signId
+	 * @return
+	 */
+	SchClassSchedule getSchClassSchedule(String signId);
+	
+	/**
+	 * 查询
+	 * 
+	 * @param signId
+	 * @param signDate
+	 * @return
+	 */
+	List<SchSignStatistics> getNotSignUser(String signId, String signDate);
+	
+	/**
+	 * 未签到统计页面
+	 * 
+	 * @param signId
+	 * @param signDate
+	 * @return
+	 */
+	Result updateFlag(String signStatisticsIds);
+	
+	/**
+	 * 获取当天签到地址
+	 * 
+	 * @param signId
+	 * @return
+	 */
+	SchScheduleAddress getSchScheduleAddress(String signId);
+	
+	/**
+	 * 通过openId得到user
+	 * @param openId
+	 * @return
+	 */
+	User getUserFromOpenId(String openId);
+	
+	/**
+	 * 插入签到
+	 * 
+	 * @param signVO
+	 * @param signAddress
+	 * @param userId
+	 * @param userName
+	 * @param mobilePhone
+	 * @return
+	 */
+	SignStatisResult insertSignStatistics(SchSign signVO, String signAddress, String userId, String userName, String mobilePhone, short type);
+	
+	/**
+	 * 班级听课证签到
+	 * 
+	 * @param signVO
+	 * @param userId
+	 * @param type
+	 * @return
+	 */
+	SignStatisResult doSignByClassCard(SchSign signVO, String userId);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java b/src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java
new file mode 100644
index 0000000..8b35ab1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java
@@ -0,0 +1,20 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.school.model.SchSpreadFootprint;
+
+/**
+ * 课程、视频、讲义记录传播轨迹service
+ * 
+ * @author lihanqi
+ *
+ */
+public interface ISpreadFootprintService {
+	/**
+	 * 新增
+	 * 
+	 * @param schSpreadFootprint
+	 * @return
+	 */
+	Result insert(SchSpreadFootprint schSpreadFootprint);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java b/src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java
new file mode 100644
index 0000000..9dfd442
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java
@@ -0,0 +1,28 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 学员学分服务层
+ * 
+ * @author junliang
+ * @createTime 2017-12-10
+ */
+public interface IStudentScoreService {
+	/**
+	 * 保存学员学分
+	 * 
+	 * @param classId
+	 * @param videoId
+	 * @param score
+	 * @return
+	 */
+	Result addStudentScore(String classId, String videoId, Integer score);
+	/**
+	 * 获取学员学分
+	 * @return
+	 */
+	 Result  getStudentScore();
+	 
+	 Result checkStudyStatus(String classId);
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java b/src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java
new file mode 100644
index 0000000..0f2eddb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java
@@ -0,0 +1,54 @@
+package com.qxueyou.scc.school.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface IStudyReportService {
+	
+	/**
+	 * 获取年终报告数据<br>
+	 * 返回json格式: {result:true|false,msg:"错误信息",data:[{},{}]}<br>
+	 * 当result为true时,data返回结果数据,否则msg返回错误信息。<br>
+	 * <pre>
+	 * data:[
+	 * 	{
+	 * 		name:"姓名",
+	 * 		studentOrder:"加入Q学友的先后排序", //12
+	 *      studyPeriod:"学习天数",
+	 *      courseCount:"总共学习了多少门课程",
+	 *      firstCourse:"第一门课程",
+	 *      firstClass:"第一个班级",
+	 *      studyHandoutCount:"学习讲义的个数",
+	 *      studyVideoCount:"学习视频的个数",
+	 *      viewLiveCount:"观看直播次数",
+	 *      doExerciseCount:"做练习题个数",
+	 *      exerciseAccuracy:"练习准确率",
+	 *      accuracyNo:"练习正确率排行",
+	 *      studyTime:[
+	 *      	{name:"中午",timeFrom:"开始时间",timeTo:"结束时间"},
+	 *      	{name:"下午",timeFrom:"开始时间",timeTo:"结束时间"}
+	 *      ],
+	 *      1stShareCourse:"第一次分享的课程",
+	 *      viewCountOfShare:"分享被浏览次数",
+	 *      awardAmountOfShare:"分享赚取奖金",
+	 *      atsBeatRank:"传播大使排名打败全国百分之多少学员",
+	 *      orgs:[
+	 *      	{name:"机构名称",logoUrl:"http://"},
+	 *      	{name:"机构名称",logoUrl:"http://"}
+	 *      ],
+	 *      recCourses:[
+	 *      	{imgUrl:"http://",name:"课程名称",teacher:"讲师名字",clickUrl:"点击课程链接"},
+	 *      	{imgUrl:"http://",name:"课程名称",teacher:"讲师名字",clickUrl:"点击课程链接"}
+	 *      ],
+	 *      atsWithAwardCount:已通过传播大使获得佣金的人数,
+	 *      moreRecUrl:"更多推荐课程链接"
+	 *      
+	 *  },
+	 * ]
+	 * </pre>
+	 * @return json数据: {result:true|false,msg:"错误信息",data:[{},{}]}
+	 * @author xiaehu
+	 * @history 2017-1-17 add by xiadehu
+	 */
+	Result doGetOrCreateStudyReport();
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java b/src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java
new file mode 100644
index 0000000..f8ae7d1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java
@@ -0,0 +1,965 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+//import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+//import com.qxueyou.scc.base.util.CacheUtils;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.operation.comment.mode.Comment;
+import com.qxueyou.scc.operation.comment.mode.CommentPraise;
+//import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.model.SchArticle;
+import com.qxueyou.scc.school.model.SchArticleReCourse;
+import com.qxueyou.scc.school.model.SchArticleStatistic;
+import com.qxueyou.scc.school.model.SchClassCircleMsg;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchCourseware;
+import com.qxueyou.scc.school.model.SchFile;
+import com.qxueyou.scc.school.model.SchImg;
+import com.qxueyou.scc.school.service.IArticleService;
+import com.qxueyou.scc.school.service.ICourseWareService;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+
+/**
+ * 文章实现类
+ * 
+ * @author zhiyong
+ *
+ */
+@Service
+public class ArticleService extends CommonAppService implements IArticleService {
+
+	// @Autowired
+	// ICacheService cache;
+	//
+	// @Autowired
+	// IOssService ossService;
+
+	@Autowired
+	IOrgTextService orgTextService;
+
+	@Autowired
+	private ICourseWareService courseWareService;
+
+	// 缓存
+	@SuppressWarnings("unused")
+	private static final String CACHE_MSG_IMGS = "CACHE_MSG_IMGS_";
+	@SuppressWarnings("unused")
+	private static final String CACHE_MSG_FILES = "CACHE_MSG_FILES_";
+	@SuppressWarnings("unused")
+	private static final String CACHE_ARTICLE_COMMENTS = "CACHE_ARTICLE_COMMENTS";
+
+	@SuppressWarnings("unused")
+	private static final int ONE_DAY = 60 * 60 * 24;
+
+	/**
+	 * 查询列表数据
+	 * 
+	 * @param type
+	 * @return
+	 */
+	@Override
+	public List<SchArticle> queryClassListData() {
+
+		List<SchArticle> resultLst = this.find(
+				"from SchArticle where deleteFlag is false and classId=? order by orderNum ",
+				CollectionUtils.newList(ClientUtils.getClassId()), SchArticle.class);
+
+		return resultLst;
+	}
+
+	/**
+	 * 新增或更新列表数据
+	 * 
+	 * @param articleId
+	 * @param name
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public Result updateArticle(SchArticle article) {
+
+		String articleId = article.getArticleId();
+		if (StringUtils.isBlank(articleId)) {// 新增
+			article.setArticleId(null);
+			article.setClassId(ClientUtils.getClassId());
+			article.setOrgId(ClientUtils.getOrgId());
+			article.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(article);
+
+			// 序号
+			String hql = "select MAX(c.orderNum) from SchArticle c where c.deleteFlag is false and c.classId= ? ";
+			Integer iMax = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getClassId()), Integer.class);
+
+			if (iMax == null || iMax == 0) {
+				iMax = 1;
+			} else {
+				iMax = iMax + 1;
+			}
+
+			article.setOrderNum(iMax);
+
+			this.saveArticle(article);
+			article.setOriginArticleId(article.getArticleId());
+			this.saveArticle(article);
+
+			articleId = article.getArticleId();
+		} else {// 更新
+
+			SchArticle articleNew = this.read(SchArticle.class, articleId);
+
+			// 原上传的文件url
+			String originUrl = articleNew.getUrl();
+
+			articleNew.setCoverPageUrl(article.getCoverPageUrl());
+			// articleNew.setSubjectId(article.getSubjectId());
+			// articleNew.setSubjectName(article.getSubjectName());
+			articleNew.setName(article.getName());
+			articleNew.setUrl(article.getUrl());
+			TraceUtils.setUpdateTrace(articleNew);
+
+			this.saveArticle(articleNew);
+
+			// // 删除原上传的文件
+			// if(StringUtils.isNotBlank(originUrl)){
+			// ossService.deleteOSSFile(originUrl.substring(1));
+			// }
+		}
+
+		// 保存OrgText —— 文章内容
+		orgTextService.doSaveOrgText(articleId, OrgText.TABLE_NAME_ARTICLE, article.getContent());
+
+		// 删除该班级所有缓存
+		// new CacheUtils().deleteWBProjectCacheData();
+
+		return new Result(true, "操作成功", articleId);
+	}
+
+	/**
+	 * 新增或更新列表数据 机构
+	 * 
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public Result updateOrgArticle(SchArticle article, String collegeCourseId) {
+
+		String articleId = article.getArticleId();
+		// jgw 直接将文章修改为已发布
+		article.setStatus(SchArticle.STATUS_PUBLISHED);
+
+		if (StringUtils.isBlank(articleId)) {// 新增
+			article.setArticleId(null);
+			article.setOrgId(ClientUtils.getOrgId());
+			article.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(article);
+
+			this.saveArticle(article);
+			article.setOriginArticleId(article.getArticleId());
+			this.saveArticle(article);
+
+			articleId = article.getArticleId();
+			// 保存文章课程关联关系
+			saveSchArticleReCourse(collegeCourseId, article.getArticleId());
+		} else {// 更新
+
+			SchArticle articleNew = this.read(SchArticle.class, articleId);
+			// 原上传的文件url
+			String originUrl = articleNew.getUrl();
+
+			articleNew.setCoverPageUrl(article.getCoverPageUrl());
+			// articleNew.setSubjectId(article.getSubjectId());
+			// articleNew.setSubjectName(article.getSubjectName());
+			articleNew.setName(article.getName());
+			articleNew.setUrl(article.getUrl());
+			TraceUtils.setUpdateTrace(articleNew);
+
+			this.saveArticle(articleNew);
+
+			// // 删除原上传的文件
+			// if(StringUtils.isNotBlank(originUrl)){
+			// ossService.deleteOSSFile(originUrl.substring(1));
+			// }
+		}
+
+		// 保存OrgText —— 文章内容
+		orgTextService.doSaveOrgText(articleId, OrgText.TABLE_NAME_ARTICLE, article.getContent());
+
+		// 删除该班级所有缓存
+		// new CacheUtils().deleteWBProjectCacheData();
+
+		return new Result(true, "操作成功", articleId);
+	}
+
+	/**
+	 * 保存文章课程关联关系
+	 * 
+	 * @param collegeCourseId
+	 * @param articleId
+	 */
+	private void saveSchArticleReCourse(String collegeCourseId, String articleId) {
+		SchArticleReCourse course = new SchArticleReCourse();
+		course.setCollegeCourseId(collegeCourseId);
+		course.setDeleteFlag(false);
+		course.setArticleId(articleId);
+		course.setOrgId(ClientUtils.getOrgId());
+		TraceUtils.setCreateTrace(course);
+
+		// 序号
+		String hql = "select MAX(c.orderNum) from SchArticleReCourse c where c.deleteFlag is false and c.collegeCourseId = ? and orgId = ? ";
+		Integer iMax = this.findUnique(hql, CollectionUtils.newList(collegeCourseId, ClientUtils.getOrgId()),
+				Integer.class);
+
+		if (iMax == null || iMax == 0) {
+			iMax = 1;
+		} else {
+			iMax = iMax + 1;
+		}
+
+		course.setOrderNum(iMax);
+
+		save(course);
+	}
+
+	/**
+	 * 删除文章
+	 * 
+	 * @param articleIds
+	 * @return
+	 */
+	@Override
+	public Result deleteArticle(String articleIds) {
+
+		if (StringUtils.isBlank(articleIds)) {
+			return new Result(false, "提交数据异常");
+		}
+
+		String[] aIds = articleIds.split(",");
+
+		this.bulkUpdateInLoop("update SchArticle set deleteFlag=1 where articleId=?", aIds);
+		this.bulkUpdateInLoop("update SchCourseware set deleteFlag=1 where id=?", aIds);
+
+		// 删除微商项目所有缓存
+		// new CacheUtils().deleteWBProjectCacheData();
+
+		return new Result(true, "操作功能");
+	}
+
+	/**
+	 * 
+	 * 查询基本信息
+	 * 
+	 * @param articleId
+	 * @return
+	 */
+	@Override
+	public Result queryInfo(String articleId) {
+
+		SchArticle article = this.read(SchArticle.class, articleId);
+
+		String content = this.findUnique(
+				"select content from OrgText where key=? and tableName=? and deleteFlag is false",
+				CollectionUtils.newList(articleId, OrgText.TABLE_NAME_ARTICLE), String.class);
+
+		if (StringUtils.isBlank(content)) {
+			content = "";
+		}
+		article.setCommentCount(this.findCount("from Comment where deleteFlag is false and commentObjectId = ?",
+				CollectionUtils.newList(articleId)));
+		article.setContent(content);
+		return new Result(true, "查询成功", article);
+	}
+
+	/**
+	 * 查询科目文章list
+	 * 
+	 * @param collegeCourseId
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> queryArticleOrgLst(String collegeCourseId, String subjectId) {
+		List<Object[]> handoutLst = null;
+
+		List<Object> args = new ArrayList<Object>();
+		String hql = "";
+		// 其他
+		if (("-" + collegeCourseId).equals(subjectId)) {
+			hql = "select v.articleId,v.name,'','','',0,'' from SchArticle v,SchArticleReCourse r where v.collegeCourseId = ? and r.deleteFlag is false and r.articleId = v.articleId and v.deleteFlag is false and r.orgId = ?  "
+					+ "and not EXISTS (select 1 from SchSubject t where t.deleteFlag is false and t.subjectId = v.subjectId)";
+			args.add(collegeCourseId);
+			args.add(ClientUtils.getOrgId());
+		} else {
+			hql = "select h.articleId,h.name,o.courseCategoryName,o.name,h.subjectName,s.orderNum,h.subjectId "
+					+ " from SchArticleReCourse s , SchArticle h,OrgCollegeCourse o"
+					+ " where s.deleteFlag is false and h.deleteFlag is false "
+					+ " and o.collegeCourseId = s.collegeCourseId" + " and s.orgId = ?"
+					+ " and s.articleId = h.articleId ";
+			args.add(ClientUtils.getOrgId());
+			if (StringUtils.isNotBlank(subjectId)) {
+				hql = hql.concat(" and h.subjectId = ?");
+				args.add(subjectId);
+			}
+			hql = hql.concat(" and s.collegeCourseId = ? ORDER BY s.orderNum ASC");
+			args.add(collegeCourseId);
+		}
+
+		handoutLst = findwithRawResult(hql, args);
+
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(handoutLst.size());
+		Map<String, Object> map = null;
+
+		for (Object[] obj : handoutLst) {
+			map = new HashMap<String, Object>();
+			map.put("articleId", obj[0]);
+			map.put("name", obj[1]);
+			map.put("courseCategoryName", obj[2]);
+			map.put("courseName", obj[3]);
+			map.put("subjectName", obj[4]);
+			map.put("orderNum", obj[5]);
+			map.put("subjectId", obj[6]);
+
+			lstMap.add(map);
+		}
+		return lstMap;
+	}
+
+	/**
+	 * 排序
+	 */
+	@Override
+	public Result doitemOrder(List<String> ids, List<Integer> index) {
+		// 循环修改order
+		for (int i = 0; i < ids.size(); i++) {
+			String id = ids.get(i);
+			if (UserInfoWrapper.ROLE_TEACHER.equals(ClientUtils.getCurrentRole())
+					|| UserInfoWrapper.ROLE_CHARGER.equals(ClientUtils.getCurrentRole())) {
+				this.bulkUpdate("update SchArticle set orderNum = " + index.get(i) + " where articleId = ?",
+						new Object[] { id });
+			} else {
+				this.bulkUpdate("update SchArticleReCourse set orderNum = " + index.get(i) + " where articleId = ?",
+						new Object[] { id });
+			}
+			this.bulkUpdate("update SchCourseware set orderNum = " + index.get(i) + " where id = ?",
+					new Object[] { id });
+		}
+
+		// 删除微商项目所有缓存
+		// new CacheUtils().deleteWBProjectCacheData();
+
+		return new Result(true, "修改成功");
+	}
+
+	/**
+	 * 删除机构文章信息
+	 * 
+	 * @param articleIds
+	 * @param delAll
+	 * @param orgIds
+	 * @param classIds
+	 */
+	@Override
+	public Result deleteOrgArticleIds(String[] articleIds, Integer delAll, String[] orgIds, String[] classIds) {
+		for (String articleId : articleIds) {
+
+			if ((orgIds != null && orgIds.length != 0) || (classIds != null && classIds.length != 0)) {
+				// 删除需要回撤的讲义
+				deleteAppoint(articleId, orgIds, classIds);
+			} else {
+				// 删除讲义
+				String hql = " from SchArticleReCourse where articleId = ? and deleteFlag is false and orgId = ?";
+				SchArticleReCourse shr = findUnique(hql, CollectionUtils.newList(articleId, ClientUtils.getOrgId()),
+						SchArticleReCourse.class);
+				if (shr != null) {
+					TraceUtils.setUpdateTrace(shr);
+					shr.setDeleteFlag(true);
+					save(shr);
+
+					this.courseWareService.deleteOrgCourseware(shr.getArticleId(), shr.getOrgId());
+				}
+				/*
+				 * SchArticle article = this.read(SchArticle.class, articleId); if(article !=
+				 * null){ TraceUtils.setUpdateTrace(article); article.setDeleteFlag(true);
+				 * this.saveArticle(article); }
+				 */
+				// 用户选择同时删除下级讲义
+				if (delAll == 1) {
+					deleteSub(articleId, ClientUtils.getOrgId());
+				}
+			}
+
+		}
+
+		return new Result(true, "删除成功");
+	}
+
+	private Result deleteAppoint(String articleId, String orgIds[], String classIds[]) {
+		Map<String, Object> args = new HashMap<String, Object>();
+		// 删除需要回撤的机构讲义
+		if (orgIds.length != 0) {
+
+			String hql = " from SchArticleReCourse where articleId = :articleId and deleteFlag is false and orgId in (:orgIds) and orgId != :currOrgId";
+			args = new HashMap<String, Object>();
+			args.put("articleId", articleId);
+			args.put("orgIds", orgIds);
+			args.put("currOrgId", ClientUtils.getOrgId());
+			List<SchArticleReCourse> courses = findByComplexHql(hql, args, SchArticleReCourse.class);
+			for (SchArticleReCourse course : courses) {
+				TraceUtils.setUpdateTrace(course);
+				course.setDeleteFlag(true);
+				save(course);
+
+				this.courseWareService.deleteOrgCourseware(course.getArticleId(), course.getOrgId());
+			}
+		}
+
+		// 删除需要回撤的班主任讲义
+		if (classIds.length != 0) {
+			args = new HashMap<String, Object>();
+			args.put("articleId", articleId);
+			args.put("classIds", classIds);
+			String hql = " from SchArticle where originArticleId = :articleId and deleteFlag is false and classId in (:classIds)";
+			List<SchArticle> articles = findByComplexHql(hql, args, SchArticle.class);
+			for (SchArticle article : articles) {
+				TraceUtils.setUpdateTrace(article);
+				article.setDeleteFlag(true);
+				this.saveArticle(article);
+			}
+
+		}
+
+		return new Result(true);
+	}
+
+	@SuppressWarnings("unchecked")
+	private void deleteSub(String articleId, String currOrgId) {
+		// 机构层级视频是没有重新new ,查询出机构下级ID再删关联表
+		String sql = " select oa.organization_id from organization as oa,organization ob " + " where "
+				+ " ob.ORGANIZATION_ID = ? " + " and  " + " oa.org_code like  CONCAT(ob.org_code,'%' ) "
+				+ " and oa.delete_flag is false and ob.delete_flag is false " + " order by oa.level,oa.org_code asc ";
+
+		List<String> orgIds = this.findBySql(sql, CollectionUtils.newList(currOrgId));
+
+		String hql = " from SchArticleReCourse where articleId = :articleId and deleteFlag is false and orgId in (:orgIds)";
+		Map<String, Object> map = new HashMap<String, Object>();
+		map.put("articleId", articleId);
+		map.put("orgIds", orgIds.toArray());
+		List<SchArticleReCourse> artCourses = findByComplexHql(hql, map, SchArticleReCourse.class);
+		for (SchArticleReCourse artCourse : artCourses) {
+			artCourse.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(artCourse);
+			save(artCourse);
+		}
+
+		// 班主任层面视频指定过后都是new 出来的,通过originVideoId 可以查出所有指定过去的视频
+		hql = "select classId from ClsClass where orgId in (:orgIds) and deleteFlag is false";
+		map = new HashMap<String, Object>();
+		map.put("orgIds", orgIds.toArray());
+		List<String> clsIds = findByComplexHql(hql, map, String.class);
+		if (!clsIds.isEmpty()) {
+			hql = " from SchArticle where originArticleId = :articleId and deleteFlag is false and articleId!=originArticleId and classId in (:classIds)";
+			map = new HashMap<String, Object>();
+			map.put("articleId", articleId);
+			map.put("classIds", clsIds.toArray());
+			List<SchArticle> lstArticle = findByComplexHql(hql, map, SchArticle.class);
+			for (SchArticle article : lstArticle) {
+				article.setDeleteFlag(true);
+				TraceUtils.setUpdateTrace(article);
+				this.saveArticle(article);
+			}
+		}
+	}
+
+	/**
+	 * 下发机构文件
+	 * 
+	 * @param articleId
+	 * @param orgId
+	 * @param classIds
+	 * @param collegeCourseId
+	 * @return
+	 */
+	@Override
+	public Result insertAppointArticle(String[] articleIds, String[] orgIds, String[] classIds,
+			String collegeCourseId) {
+		if (null == articleIds || articleIds.length == 0) {
+			return new Result(false, "参数错误");
+		}
+		// 一次性查询classId对应的orgId
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Map<String, String> classMap = new HashMap<String, String>();
+		if (classIds.length > 0) {
+			String hql = " from ClsClass where classId in (:classIds) and deleteFlag is false";
+			argsMap = new HashMap<String, Object>();
+			argsMap.put("classIds", classIds);
+			List<ClsClass> classList = findByComplexHql(hql, argsMap, ClsClass.class);
+
+			// 放入map中 KEY:classId VALUE:orgId
+
+			for (ClsClass orgClass : classList) {
+				classMap.put(orgClass.getClassId(), orgClass.getOrgId());
+			}
+		}
+
+		// 一次性查出handoutId对应的handoutOrder
+		Map<String, Integer> orderMap = new HashMap<String, Integer>();
+		String hql = " from SchArticleReCourse where articleId in (:articleIds) and deleteFlag is false and orgId = :currOrgId";
+		argsMap = new HashMap<String, Object>();
+		argsMap.put("articleIds", articleIds);
+		argsMap.put("currOrgId", ClientUtils.getOrgId());
+		List<SchArticleReCourse> articleCourse = findByComplexHql(hql, argsMap, SchArticleReCourse.class);
+		for (SchArticleReCourse schArticleReCourse : articleCourse) {
+			orderMap.put(schArticleReCourse.getArticleId(), schArticleReCourse.getOrderNum());
+		}
+
+		for (String articleId : articleIds) {
+			if (orgIds.length > 0) { // 指定给机构
+				insertAppointOrg(orgIds, articleId, collegeCourseId, orderMap);
+			}
+			if (classIds.length > 0) { // 指定给班级
+				insertAppointClass(classIds, articleId, collegeCourseId, orderMap);
+			}
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 指定给机构
+	 * 
+	 * @param orgIds
+	 * @param handoutId
+	 * @param collegeCourseId
+	 */
+	private void insertAppointOrg(String orgIds[], String articleId, String collegeCourseId,
+			Map<String, Integer> orderMap) {
+		String hql = "select orgId from SchArticleReCourse where articleId = :articleId and deleteFlag is false and orgId in (:orgIds)";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put("articleId", articleId);
+		args.put("orgIds", orgIds);
+		List<String> strings = findByComplexHql(hql, args, String.class);
+		List<String> orgList = new ArrayList<String>();
+		for (String orgId : orgIds) {
+			orgList.add(orgId);
+		}
+		// 剔除掉不符合条件的orgId
+		orgList.removeAll(strings);
+		if (orgList.isEmpty()) {
+			return;
+		}
+		for (String orgId : orgList) {
+			SchArticleReCourse shrc = new SchArticleReCourse();
+			shrc.setCollegeCourseId(collegeCourseId);
+			shrc.setDeleteFlag(false);
+			shrc.setArticleId(articleId);
+			shrc.setOrderNum(orderMap.get(articleId));
+			shrc.setOrgId(orgId);
+			TraceUtils.setCreateTrace(shrc);
+			save(shrc);
+
+			this.courseWareService.insertOrgCourseware(articleId, ClientUtils.getOrgId(), orgId, collegeCourseId);
+		}
+	}
+
+	/**
+	 * 指定给班级
+	 * 
+	 * @param classIds
+	 * @param handoutId
+	 * @param classMap
+	 */
+	private void insertAppointClass(String classIds[], String articleId, String collegeCourseId,
+			Map<String, Integer> orderMap) {
+		// 章节id
+		Map<String, SubjectChapter> origChapterMap = new HashMap<String, SubjectChapter>();
+		SchArticle article = read(SchArticle.class, articleId);
+
+		String hql = "select classId from SchArticle where deleteFlag is false and originArticleId = :articleId and classId in (:classIds)";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put("classIds", classIds);
+		args.put("articleId", articleId);
+		List<String> strings = findByComplexHql(hql, args, String.class);
+		List<String> classList = new ArrayList<String>();
+		for (String classId : classIds) {
+			classList.add(classId);
+		}
+		classList.removeAll(strings);
+		if (classList.isEmpty()) {
+			return;
+		}
+		// 一次性查询班级ID对应的classSubjectId
+		hql = " from SchClassSubject where classId in(:classIds) and origSubjectId = :subjectId and deleteFlag is false";
+		args = new HashMap<String, Object>();
+		args.put("classIds", classList.toArray());
+		args.put("subjectId", article.getSubjectId());
+		List<SchClassSubject> lstClassSubject = findByComplexHql(hql, args, SchClassSubject.class);
+		Map<String, String> subjectMap = new HashMap<String, String>();
+		for (SchClassSubject schClassSubject : lstClassSubject) {
+			subjectMap.put(schClassSubject.getClassId(), schClassSubject.getClassSubjectId());
+		}
+		OrgText oldOrgText = orgTextService.getOrgText(articleId, OrgText.TABLE_NAME_ARTICLE);
+		SchArticle sh;
+		for (String classId : classList) {
+
+			sh = new SchArticle();
+			sh.setDeleteFlag(false);
+			sh.setName(article.getName());
+			sh.setClassId(classId);
+			sh.setOrgId(article.getOrgId());
+			sh.setOriginArticleId(articleId);
+			sh.setSubjectId(subjectMap.get(classId));
+			sh.setSubjectName(article.getSubjectName());
+			sh.setCoverPageUrl(article.getCoverPageUrl());
+			sh.setCollegeCourseId(collegeCourseId);
+			sh.setUrl(article.getUrl());
+			sh.setOrderNum(1000);
+			if (null != origChapterMap.get(classId)) {
+				sh.setChapterId(origChapterMap.get(classId).getChapterId());
+			} else {
+				sh.setChapterId(null);
+			}
+			TraceUtils.setCreateTrace(sh);
+			this.saveArticle(sh);
+
+			// 插入OrgText
+			orgTextService.doInsertOrgText(sh.getArticleId(), OrgText.TABLE_NAME_ARTICLE,
+					oldOrgText == null ? "" : oldOrgText.getContent());
+		}
+	}
+
+	/**
+	 * 获取朋友圈
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Result articleList(Pager pager, String sortType, String sortField, String collegeCourseId,
+			String subjectId) {
+		List<Object> args = new ArrayList<Object>();
+		StringBuffer sb = new StringBuffer(512);
+		sb.append(" SELECT ");
+		sb.append(" 	aa.ARTICLE_ID, ");
+		sb.append(" 	aa.NAME, ");
+		sb.append(" 	aa.COLLEGE_COURSE_ID, ");
+		sb.append(" 	aa.SUBJECT_ID, ");
+		sb.append(" 	aa.COVER_PAGE_URL, ");
+		sb.append(" 	aa.VIEW_COUNT, ");
+		sb.append(" 	aa.ORDER_NUM, ");
+		sb.append(" 	aa.CREATE_TIME, ");
+		sb.append(" 	ss.COMP_DEGREE ");
+		sb.append(" FROM ");
+		sb.append(" 	( ");
+		sb.append(" 		SELECT * FROM sch_article a ");
+		sb.append(" 		WHERE ");
+		sb.append(" 			a.CLASS_ID = ? ");
+		sb.append(" 		AND a.DELETE_FLAG IS FALSE ");
+		sb.append(" 	) aa ");
+		sb.append(" LEFT JOIN ( ");
+		sb.append(" 	SELECT * FROM ");
+		sb.append(" 		sch_article_statistic s ");
+		sb.append(" 	WHERE ");
+		sb.append(" 		s.delete_flag IS FALSE ");
+		sb.append(" 	AND s.user_id = ? ");
+		sb.append(" ) ss ON ss.article_ID = aa.ARTICLE_ID ");
+
+		args.add(ClientUtils.getClassId());
+		args.add(ClientUtils.getUserId());
+		if (StringUtils.isNotBlank(collegeCourseId)) {
+			sb.append(" and college_CourseId = ?");
+			args.add(collegeCourseId);
+		}
+		if (StringUtils.isNotBlank(subjectId)) {
+			sb.append(" and SUBJECT_ID = ?");
+			args.add(subjectId);
+		}
+
+		if (StringUtils.isNotBlank(sortType) && StringUtils.isNotBlank(sortField)) {
+			sb.append(" order by " + sortField + " " + sortType);
+		} else {
+			sb.append(" order by order_Num ");
+		}
+
+		List<Object[]> lstSchArticle = this.findByPageSql(sb.toString(), args, pager);
+		List<Map<String, Object>> lstResult = new ArrayList<Map<String, Object>>();
+		if (lstSchArticle != null && !lstSchArticle.isEmpty()) {
+			for (Object[] obj : lstSchArticle) {
+				lstResult.add(CollectionUtils.newObjectMap("articleId", obj[0], "name", obj[1], "coverPageUrl", obj[3],
+						"viewCount", obj[4], "compDegree", obj[7], "createTime", obj[6]));
+			}
+		}
+
+		return new Result(true, "", lstResult);
+	}
+
+	/**
+	 * 获取消息的评论图片和文件
+	 * 
+	 * @param objSchClassCircleMsg
+	 * @return
+	 */
+	public SchClassCircleMsg packageMsg(SchClassCircleMsg objSchClassCircleMsg) {
+		String msgId = objSchClassCircleMsg.getMsgId();
+		// List<SchImg> imgs = cache.get(CACHE_MSG_IMGS + msgId, List.class);
+		//
+		// List<SchFile> files = cache.get(CACHE_MSG_FILES + msgId, List.class);
+		List<SchImg> imgs = null;
+		List<SchFile> files = null;
+
+		@SuppressWarnings("unused")
+		List<Comment> comments = this.updateComment(msgId, false);
+
+		if (imgs == null || imgs.isEmpty()) {
+			imgs = this.find("from SchImg where deleteFlag is false and objectId = ? order by createTime asc",
+					CollectionUtils.newList(msgId), SchImg.class);
+
+			// cache.set(CACHE_MSG_IMGS + msgId, ONE_DAY, imgs);
+		}
+
+		if (files == null || files.isEmpty()) {
+			files = this.find("from SchFile where deleteFlag is false and objectId = ? order by createTime asc",
+					CollectionUtils.newList(msgId), SchFile.class);
+
+			// cache.set(CACHE_MSG_FILES + msgId, ONE_DAY, files);
+		}
+
+		objSchClassCircleMsg.setImgs(imgs);
+		objSchClassCircleMsg.setFiles(files);
+		//objSchClassCircleMsg.setComments(comments);
+
+		return objSchClassCircleMsg;
+	}
+
+	/**
+	 * 点赞
+	 * 
+	 * @param commentId
+	 * @return
+	 */
+	public Result doLike(String commentId) {
+
+		CommentPraise praiseObj = new CommentPraise();
+		praiseObj.setCommentId(commentId);
+		praiseObj.setPraise(true);
+		praiseObj.setCommentterId(ClientUtils.getUserId());
+		praiseObj.setCommentter(ClientUtils.getUserName());
+		praiseObj.setPraiseTime(new Date(System.currentTimeMillis()));
+		praiseObj.setDeleteFlag(false);
+
+		TraceUtils.setCreateTrace(praiseObj);
+
+		this.save(praiseObj);
+
+		this.bulkUpdate("update Comment set commentPraiseCount = commentPraiseCount +1 where commentId = ?",
+				new Object[] { commentId });
+
+		return new Result(true);
+	}
+
+	/**
+	 * 评论
+	 * 
+	 * @param msgId
+	 * @param content
+	 * @param parentCommentId
+	 * @return
+	 */
+	public Result addComment(String articleId, String content, String parentCommentId) {
+
+		// 评论表
+		Comment comment = new Comment();
+		comment.setCommentterId(ClientUtils.getUserId());
+		comment.setCommentter(ClientUtils.getUserName());
+		comment.setCommentterHeadimg(ClientUtils.getUserImg());
+		comment.setContent(content);
+		comment.setCommentCount(BigInteger.ZERO);
+		comment.setCommentPraiseCount(BigInteger.ZERO);
+		comment.setCommentObjectId(articleId);
+		comment.setCommentTime(new Date(System.currentTimeMillis()));
+		comment.setCommentParentId(parentCommentId);
+		comment.setClassId(ClientUtils.getClassId());
+		TraceUtils.setCreateTrace(comment);
+
+		if (StringUtils.isNotEmpty(parentCommentId)) {
+			Comment parentComment = this.read(Comment.class, parentCommentId);
+
+			comment.setCommentedName(parentComment.getCommentter());
+			comment.setCommentedId(parentComment.getCommentterId());
+		}
+
+		this.save(comment);
+
+		this.bulkUpdate("update SchArticle set commentCount = commentCount +1 where articleId = ?",
+				new Object[] { articleId });
+
+		this.updateComment(articleId, true);
+
+		return new Result(true, "", comment);
+	}
+
+	/**
+	 * 删除评论
+	 * 
+	 * @param msgId
+	 * @param commentId
+	 * @return
+	 */
+	public Result deleteComment(String articleId, String commentId) {
+
+		this.bulkUpdate("update Comment set deleteFlag = 1 where commentId = ? ", new Object[] { commentId });
+		this.bulkUpdate("update SchArticle set commentCount = commentCount -1 where articleId = ?",
+				new Object[] { articleId });
+
+		this.updateComment(articleId, true);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 缓存获取评论
+	 * 
+	 * @param articleId
+	 * @param isUpdate
+	 * @return
+	 */
+	private List<Comment> updateComment(String articleId, boolean isUpdate) {
+		// List<Comment> comments = cache.get(CACHE_ARTICLE_COMMENTS + articleId,
+		// List.class);
+		List<Comment> comments = null;
+
+		if (comments == null || comments.isEmpty() || isUpdate) {
+			comments = this.find(
+					"from Comment where deleteFlag is false and commentObjectId = ? order by createTime asc",
+					CollectionUtils.newList(articleId), Comment.class);
+
+			// cache.set(CACHE_ARTICLE_COMMENTS + articleId, ONE_DAY, comments);
+		}
+
+		return comments;
+	}
+
+	/**
+	 * 评论列表
+	 * 
+	 * @param articleId
+	 * @return
+	 */
+	public Result commentList(String articleId) {
+		return new Result(true, "", this.updateComment(articleId, false));
+	}
+
+	/**
+	 * 观看进度
+	 * 
+	 * @param articleId
+	 * @param compDegree
+	 * @return
+	 */
+	public Result doSubmitSchedule(String articleId, double compDegree) {
+		SchArticleStatistic objSchArticleStatistic = this.findUnique(
+				"from SchArticleStatistic where deleteFlag is false and userId = ? and articleId = ?",
+				CollectionUtils.newList(ClientUtils.getUserId(), articleId), SchArticleStatistic.class);
+
+		if (objSchArticleStatistic == null) {
+			objSchArticleStatistic = new SchArticleStatistic();
+			objSchArticleStatistic.setClassId(ClientUtils.getClassId());
+			objSchArticleStatistic.setDeleteFlag(false);
+			objSchArticleStatistic.setArticleId(articleId);
+			objSchArticleStatistic.setCompDegree(compDegree);
+			objSchArticleStatistic.setOrgId(ClientUtils.getOrgId());
+			objSchArticleStatistic.setUserId(ClientUtils.getUserId());
+
+			TraceUtils.setCreateTrace(objSchArticleStatistic);
+
+			this.save(objSchArticleStatistic);
+		} else {
+			this.bulkUpdate(
+					"update SchArticleStatistic set compDegree = ? where deleteFlag is false and userId = ? and articleId = ?",
+					new Object[] { compDegree, ClientUtils.getUserId(), articleId });
+		}
+
+		return new Result(true);
+
+	}
+
+	/**
+	 * 保存文章接口
+	 * 
+	 * @param article
+	 * @return
+	 */
+	public Result saveArticle(SchArticle article) {
+		Result result = new Result(false);
+		result = this.save(article);
+		String parentChapterId = null;
+		if (StringUtils.isNotEmpty(article.getChapterId())) {
+			SubjectChapter chapter = this.read(SubjectChapter.class, article.getChapterId());
+			parentChapterId = chapter == null ? null : chapter.getParentChapterId();
+		}
+		boolean isClass = StringUtils.isNotEmpty(ClientUtils.getClassId())
+				|| StringUtils.isNotEmpty(article.getClassId());
+		SchCourseware courseware = null;
+		if (isClass) {
+			courseware = this.findUnique("from SchCourseware where id = ? and classId = ? and deleteFlag is false",
+					CollectionUtils.newList(article.getArticleId(), article.getClassId()), SchCourseware.class);
+		} else {
+			courseware = this.findUnique(
+					"from SchCourseware where id = ? and orgId = ? and classId is null and deleteFlag is false",
+					CollectionUtils.newList(article.getArticleId(), ClientUtils.getOrgId()), SchCourseware.class);
+
+			this.bulkUpdate("update SchCourseware set name = ? where id = ?",
+					new Object[] { article.getName(), article.getArticleId() });
+		}
+		// 同步课件表
+		if (courseware == null) {
+			courseware = new SchCourseware();
+			courseware.setChapterId(article.getChapterId());
+			courseware.setId(article.getArticleId());
+			courseware.setCollegeCourseId(article.getCollegeCourseId());
+			courseware.setcType(-1);
+			courseware.setType(SchCourseware.COURSEWARE_TYPE_ARTICLE);
+			courseware.setName(article.getName());
+			courseware.setDeleteFlag(article.getDeleteFlag());
+			courseware.setOrderNum(1000);
+			courseware.setSubjectId(article.getSubjectId());
+			courseware.setStatus(article.getStatus());
+			courseware.setOrgId(ClientUtils.getOrgId());
+			courseware.setClassId(article.getClassId());
+			courseware.setParentChapterId(parentChapterId);
+
+			TraceUtils.setCreateTrace(courseware);
+		} else {
+			courseware.setChapterId(article.getChapterId());
+			// courseware.setCollegeCourseId(article.getCollegeCourseId());
+			courseware.setcType(-1);
+			courseware.setName(article.getName());
+			courseware.setDeleteFlag(article.getDeleteFlag());
+			courseware.setOrderNum(article.getOrderNum() == null ? 1000 : article.getOrderNum());
+			courseware.setSubjectId(article.getSubjectId());
+			courseware.setStatus(article.getStatus());
+			courseware.setParentChapterId(parentChapterId);
+
+			TraceUtils.setUpdateTrace(courseware);
+		}
+
+		this.save(courseware);
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java b/src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java
new file mode 100644
index 0000000..36ed701
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java
@@ -0,0 +1,288 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.org.model.OrgClassUserCustom;
+import com.qxueyou.scc.school.model.SchClassCard;
+import com.qxueyou.scc.school.model.SchSign;
+import com.qxueyou.scc.school.model.SignStatisResult;
+import com.qxueyou.scc.school.service.IClassCardService;
+import com.qxueyou.scc.school.service.ISignService;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRegistration;
+
+
+/**
+ * 听课证实现类
+ * @author Delin
+ *
+ */
+@Service
+public class ClassCardService extends CommonAppService implements IClassCardService {
+
+	private static final String IMG_PATH = "IMG_PATH";
+
+	@Autowired
+	ISignService signService;
+	
+	/**
+	 * 保存听课证信息
+	 */
+	@Override
+	public Result doSaveClassCard(SchClassCard classCard,String templetData) {
+		
+		if(StringUtils.isNotBlank(classCard.getClassCardId())){ // 编辑
+			SchClassCard card = read(SchClassCard.class, classCard.getClassCardId());
+			card.setTempletNo(classCard.getTempletNo());
+			card.setDoubleSidedFlag(classCard.getDoubleSidedFlag());
+			card.setSignCodeFlag(classCard.getSignCodeFlag());
+			card.setCodeFlag(classCard.getCodeFlag());
+			card.setCodeUrl(classCard.getCodeUrl());
+			card.setHeadImgFlag(classCard.getHeadImgFlag());
+			card.setHeadImgField(classCard.getHeadImgField());
+			card.setCardName(classCard.getCardName());
+			card.setSlogan(classCard.getSlogan());
+			TraceUtils.setUpdateTrace(card);
+			save(card);
+		}else{ // 新增
+			classCard.setClassId(ClientUtils.getClassId());
+			classCard.setClassCardId(null);
+			TraceUtils.setCreateTrace(classCard);
+			save(classCard);
+		}
+		
+		// 添加模板后使用
+//		//将JSON字符串转换成JSONArray  
+//	    JSONArray array_news =new JSONArray();  
+//	    array_news = JSONArray.fromObject(templetData); 
+//		//将JSONArray转换成List列表  
+//        List<SchClassCardTemplet> cardTempletLst =(List<SchClassCardTemplet>) JSONArray.toCollection(array_news, SchClassCardTemplet.class);
+//		for (SchClassCardTemplet cardTemplet : cardTempletLst) {
+//			SchClassCardTemplet ct = null;
+//			if(StringUtils.isNotBlank(cardTemplet.getCardTempletId())){
+//				ct = read(SchClassCardTemplet.class, cardTemplet.getCardTempletId());
+//				ct.setFieldValue(cardTemplet.getFieldValue());
+//				TraceUtils.setUpdateTrace(ct);
+//			}else{
+//				ct = new SchClassCardTemplet();
+//				ct.setClassCardId(classCard.getClassCardId());
+//				ct.setTempletid(cardTemplet.getTempletid());
+//				ct.setFieldValue(cardTemplet.getFieldValue());
+//				TraceUtils.setCreateTrace(ct);
+//			}
+//			save(ct);
+//		}
+		
+		return new Result(true,"",classCard.getClassCardId());
+	}
+	
+	/**
+	 * 读取听课证信息
+	 */
+	@Override
+	public Map<String,Object> readClassCard() {
+		
+		SchClassCard classCard = getSchClassCard(ClientUtils.getClassId());
+		
+		Map<String,Object> map = new HashMap<String,Object>();
+		map.put("classCard", classCard);
+		map.put("orgLogo", ClientUtils.getOrgLogoPath());
+		map.put("orgName", ClientUtils.getOrgShortName());
+		map.put("className", ClientUtils.getClassName());
+		return map;
+		
+		// 添加模板后使用
+//		map.put("templetLst", "");
+//		map.put("cardTempletLst", "");
+//		List<ClassCardTemplet> templetLst = null;
+//		if(null == classCard){
+//			String hql_te = "select from ClassCardTemplet t1 where deleteFlag is false order by templetNo";
+//			templetLst = find(hql_te, CollectionUtils.newList(), ClassCardTemplet.class);
+//			map.put("templetLst", templetLst);
+//			
+//			return map;
+//		}
+//		
+//		// 查询模板
+//		String hql_te = "select from ClassCardTemplet t1 where deleteFlag is false templetNo = ? ";
+//		templetLst = find(hql_te, CollectionUtils.newList(classCard.getTempletNo()), ClassCardTemplet.class);
+//		
+//		// 查询模板值
+//		String hql_re = "select from SchClassCardTemplet t1 where deleteFlag is false classCardId = ? ";
+//		List<SchClassCardTemplet> cardTempletLst = find(hql_re, CollectionUtils.newList(classCard.getClassCardId()), SchClassCardTemplet.class);
+//		
+//		map.put("classCard", classCard);
+//		map.put("templetLst", templetLst);
+//		map.put("cardTempletLst", cardTempletLst);
+//		
+//		return map;
+	}
+	
+	/**
+	 * 获取显示头像的字段
+	 */
+	@Override
+	public List<Map<String,String>> getHeadimgField(){
+		
+		String hql = "from OrgClassUserCustom where deleteFlag is false and classId = ? and objectType = ?";
+		List<OrgClassUserCustom> customLst = find(hql, CollectionUtils.newList(
+				ClientUtils.getClassId(),OrgClassUserCustom.OBJECT_TYPE_IMG), OrgClassUserCustom.class);
+		
+		List<Map<String,String>> mapLst = new ArrayList<Map<String,String>>(customLst.size() + 1);
+		for (OrgClassUserCustom custom : customLst) {
+			Map<String,String> map = new HashMap<String,String>();
+			map.put("fieldId", custom.getCustomId());
+			map.put("fieldName", custom.getObjectName());
+			mapLst.add(map);
+		}
+		
+		Map<String,String> map = new HashMap<String,String>();
+		map.put("fieldId", IMG_PATH);
+		map.put("fieldName", "个人头像");
+		mapLst.add(map);
+		
+		return mapLst;
+	}
+	
+	/**
+	 * 获取用户头像
+	 * 
+	 * @param userId
+	 * @param classId
+	 * @return
+	 */
+	@Override
+	public String getUserHeadimg(String userId, String classId){
+		
+		SchClassCard classCard = getSchClassCard(classId);
+		if(classCard == null || !classCard.getHeadImgFlag()){ // 未设置
+			return "";
+		}
+		
+		String headImgField = classCard.getHeadImgField();
+		if(IMG_PATH.equals(headImgField)){
+			User u = this.read(User.class, userId);
+			return u == null?"":u.getImgPath();
+		}
+		
+		String userRegHql = "select customValue from UserRegistrationCustom where deleteFlag is false and classId = ? and customId = ? and userId = ?";
+		
+		return this.findUnique(userRegHql, CollectionUtils.newList(classId, headImgField, userId), String.class);
+	}
+	
+	/**
+	 * 获取用户所有的听课证
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	public List<Map<String,Object>> getAllUserCard(String userId){
+		
+		StringBuffer sbHql = new StringBuffer(256);
+		sbHql.append(" SELECT ");
+		sbHql.append(" r.registrationId AS regId, ");
+		sbHql.append(" c.name AS className, ");
+		sbHql.append(" c.classId AS classId, ");
+		sbHql.append(" d.cardName AS cardName, ");
+		sbHql.append(" d.headImgFlag AS headImgFlag ");
+		sbHql.append(" FROM ");
+		sbHql.append(" UserRegistration r, ");
+		sbHql.append(" ClsClass c, ");
+		sbHql.append(" SchClassCard d ");
+		sbHql.append(" WHERE ");
+		sbHql.append(" d.deleteFlag IS FALSE ");
+		sbHql.append(" AND c.deleteFlag IS FALSE ");
+		sbHql.append(" AND r.deleteFlag IS FALSE ");
+		sbHql.append(" AND r.classId = c.classId ");
+		sbHql.append(" AND r.classId = d.classId ");
+		sbHql.append(" AND r.status =:status ");
+		sbHql.append(" AND r.userId =:userId ");
+		sbHql.append(" ORDER BY ");
+		sbHql.append(" r.activationTime DESC ");
+		
+		List<Map<String,Object>> lstclassCardList = this.findListWithMapByHql(sbHql.toString(),
+				CollectionUtils.newObjectMap("status", UserRegistration.STATUS_ACTIVE, "userId", userId));
+		for(Map<String,Object> map : lstclassCardList){
+			map.put("userHeadimg", this.getUserHeadimg(userId, (String)map.get("classId")));
+			map.put("className", this.formatClassName((String)map.get("className")));
+		}
+		
+		return lstclassCardList;
+	}
+	
+	/**
+	 * 格式化班级名称
+	 * @param {} name
+	 * @returns {} 
+	 */
+	private String formatClassName(String name){
+		
+		if(name.length() >= 11 && name.length() <= 12){
+			String text = "<span style='display: inline-block;'>";
+			text = text.concat(name.substring(0,8));
+			text = text.concat("</span><span style='display: inline-block;'>");
+			text = text.concat(name.substring(8,name.length()));
+			text = text.concat("</span>");
+			return text;
+		}
+		return name;
+	}
+	
+	/**
+	 * 签到
+	 * @param sign
+	 * @param userId
+	 * @return
+	 */
+	@Override
+	public Result doSubmitSign(SchSign sign,String userId){
+		
+		User user = read(User.class, userId);
+		
+		// 签到成功 获取签到历史
+		SignStatisResult history = signService.doSignByClassCard(sign, user.getUserId());
+		if(!history.getResult()){
+			return new Result(false,history.getErrMsg());
+		}	
+		//异步发送消息处理
+		String args = JSON.toJSONString(CollectionUtils.newObjectMap(
+				"userId", user.getUserId(),
+				"userName", user.getName(),
+				"mobilePhone", user.getMobilePhone(),
+				"userImg", user.getImgPath(),
+				"signType", history.getSignType(),
+				"signIndex", history.getSignIndex(),
+				"signId", sign.getSignId()
+//				"source", UserReWeixin.SOURCE_WEIXIN_SIGN
+			));
+				
+		return signService.sendSignQueueMsg(args);
+	}
+	
+	@Override
+	public SchSign getSchSign(String signId){
+		
+		String hql = "from SchSign where deleteFlag is false and signId = ?";
+		return findUnique(hql, CollectionUtils.newList(signId), SchSign.class);
+	}
+	
+	@Override
+	public SchClassCard getSchClassCard(String classId){
+		
+		String hql = "from SchClassCard where deleteFlag is false and classId = ?";
+		return findUnique(hql, CollectionUtils.newList(classId), SchClassCard.class);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java b/src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java
new file mode 100644
index 0000000..3e4c7d1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java
@@ -0,0 +1,375 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.qxueyou.scc.base.model.FileMeta;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.operation.comment.mode.Comment;
+import com.qxueyou.scc.operation.comment.mode.CommentPraise;
+//import com.qxueyou.scc.comment.service.ICommentService;
+import com.qxueyou.scc.school.model.SchClassCircle;
+import com.qxueyou.scc.school.model.SchClassCircleMsg;
+import com.qxueyou.scc.school.model.SchFile;
+import com.qxueyou.scc.school.model.SchImg;
+import com.qxueyou.scc.school.service.IClassCircleService;
+import com.qxueyou.scc.user.model.User;
+
+/**
+ * 课程、视频、讲义记录传播轨迹service
+ * 
+ * @author lihanqi
+ *
+ */
+@Service
+public class ClassCircleService extends CommonAppService implements IClassCircleService {
+
+	// //共用评论模块
+	// @Autowired
+	// ICommentService commentService;
+	//
+	// //缓存
+	// @Autowired
+	// ICacheService cache;
+
+	// 缓存
+	@SuppressWarnings("unused")
+	private static final String CACHE_MSG_IMGS = "CACHE_MSG_IMGS_";
+	@SuppressWarnings("unused")
+	private static final String CACHE_MSG_FILES = "CACHE_MSG_FILES_";
+	@SuppressWarnings("unused")
+	private static final String CACHE_MSG_COMMENTS = "CACHE_MSG_COMMENTS_";
+
+	@SuppressWarnings("unused")
+	private static final int ONE_DAY = 60 * 60 * 24;
+
+	/**
+	 * 获取朋友圈
+	 * 
+	 * @param pager
+	 * @return
+	 */
+	public Result doGetMsgList(Pager pager) {
+		String userId = ClientUtils.getUserId();
+		SchClassCircle objSchClassCircle = this.getSchClassCircle(userId);
+		if (objSchClassCircle == null) {
+			this.addSchClassCircle(userId);
+		}
+
+		List<SchClassCircleMsg> lstSchClassCircleMsg = this.findList(
+				"from SchClassCircleMsg where deleteFlag is false and classId = ? order by createTime desc", pager,
+				CollectionUtils.newList(ClientUtils.getClassId()), SchClassCircleMsg.class);
+
+		if (lstSchClassCircleMsg != null && !lstSchClassCircleMsg.isEmpty()) {
+			// 缓存中获取评论
+			for (SchClassCircleMsg objSchClassCircleMsg : lstSchClassCircleMsg) {
+				objSchClassCircleMsg = this.packageMsg(objSchClassCircleMsg);
+				User user = this.read(User.class, objSchClassCircleMsg.getUserId());
+				objSchClassCircleMsg.setName(user.getName());
+				objSchClassCircleMsg.setImgPath(user.getImgPath());
+				objSchClassCircleMsg
+						.setMyLike(this.findCount("from CommentPraise where commentId = ? and commentterId = ?",
+								CollectionUtils.newList(objSchClassCircleMsg.getMsgId(), userId)) > 0 ? true : false);
+			}
+		}
+
+		return new Result(true, "", lstSchClassCircleMsg);
+	}
+
+	/**
+	 * 获取消息的评论图片和文件
+	 * 
+	 * @param objSchClassCircleMsg
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	public SchClassCircleMsg packageMsg(SchClassCircleMsg objSchClassCircleMsg) {
+		String msgId = objSchClassCircleMsg.getMsgId();
+		// List<SchImg> imgs = cache.get(CACHE_MSG_IMGS + msgId, List.class);
+		//
+		// List<SchFile> files = cache.get(CACHE_MSG_FILES + msgId, List.class);
+
+		List<Comment> comments = this.updateComment(msgId, false);
+
+		// if(imgs == null || imgs.isEmpty()){
+		// imgs = this.find("from SchImg where deleteFlag is false and objectId = ?
+		// order by orderNo asc, createTime asc", CollectionUtils.newList(msgId),
+		// SchImg.class);
+		//
+		// cache.set(CACHE_MSG_IMGS + msgId, ONE_DAY, imgs);
+		// }
+		//
+		// if(files == null || files.isEmpty()){
+		// files = this.find("from SchFile where deleteFlag is false and objectId = ?
+		// order by orderNo asc, createTime asc", CollectionUtils.newList(msgId),
+		// SchFile.class);
+		//
+		// cache.set(CACHE_MSG_FILES + msgId, ONE_DAY, files);
+		// }
+		//
+		// objSchClassCircleMsg.setImgs(imgs);
+		// objSchClassCircleMsg.setFiles(files);
+		// objSchClassCircleMsg.setComments(comments);
+
+		return objSchClassCircleMsg;
+	}
+
+	/**
+	 * 获取评论
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	private List<Comment> updateComment(String msgId, boolean isUpdate) {
+		// List<Comment> comments = cache.get(CACHE_MSG_COMMENTS + msgId, List.class);
+		List<Comment> comments = null;
+
+		if (comments == null || comments.isEmpty() || isUpdate) {
+			comments = this.find(
+					"from Comment where deleteFlag is false and commentObjectId = ? order by createTime asc",
+					CollectionUtils.newList(msgId), Comment.class);
+
+			// cache.set(CACHE_MSG_COMMENTS + msgId, ONE_DAY, comments);
+		}
+
+		return comments;
+	}
+
+	/**
+	 * 获取朋友圈
+	 * 
+	 * @return
+	 */
+	private SchClassCircle getSchClassCircle(String userId) {
+		return this.findUnique("from SchClassCircle where deleteFlag is false and userId = ?",
+				CollectionUtils.newList(userId), SchClassCircle.class);
+	}
+
+	/**
+	 * 初始化朋友圈
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	public String addSchClassCircle(String userId) {
+		SchClassCircle objSchClassCircle = new SchClassCircle();
+		objSchClassCircle.setUserId(userId);
+		objSchClassCircle.setEnable(true);
+
+		TraceUtils.setCreateTrace(objSchClassCircle);
+
+		this.save(objSchClassCircle);
+
+		return objSchClassCircle.getClassCircleId();
+	}
+
+	/**
+	 * 发朋友圈
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	public Result addMsg(SchClassCircleMsg classCircleMsg) {
+
+		classCircleMsg.setUserId(ClientUtils.getUserId());
+		classCircleMsg.setClassId(ClientUtils.getClassId());
+		classCircleMsg.setOrgId(ClientUtils.getOrgId());
+		classCircleMsg.setCommentCount(0);
+		classCircleMsg.setLikeCount(0);
+		classCircleMsg.setMyLike(false);
+		classCircleMsg.setDeleteFlag(false);
+
+		TraceUtils.setCreateTrace(classCircleMsg);
+
+		this.save(classCircleMsg);
+
+		// 添加图片
+		if (StringUtils.isNoneBlank(classCircleMsg.getImgsJson())) {
+			this.addFile(classCircleMsg.getImgsJson(), classCircleMsg.getMsgId(), "class_circle_img");
+		}
+
+		// 添加文件
+		if (StringUtils.isNoneBlank(classCircleMsg.getFilesJson())) {
+			this.addFile(classCircleMsg.getFilesJson(), classCircleMsg.getMsgId(), "class_circle_file");
+		}
+
+		return new Result(true, "", classCircleMsg);
+	}
+
+	/**
+	 * 点赞
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	public Result doLike(String msgId) {
+
+		CommentPraise praiseObj = new CommentPraise();
+		praiseObj.setCommentId(msgId);
+		praiseObj.setPraise(true);
+		praiseObj.setCommentterId(ClientUtils.getUserId());
+		praiseObj.setCommentter(ClientUtils.getUserName());
+		praiseObj.setPraiseTime(new Date(System.currentTimeMillis()));
+		praiseObj.setDeleteFlag(false);
+
+		TraceUtils.setCreateTrace(praiseObj);
+
+		this.save(praiseObj);
+
+		this.bulkUpdate("update SchClassCircleMsg set likeCount = likeCount +1 where msgId = ?",
+				new Object[] { msgId });
+
+		Integer likeCount = this.findUnique("select likeCount from SchClassCircleMsg where msgId = ?",
+				CollectionUtils.newList(msgId), Integer.class);
+		return new Result(true, "", likeCount);
+	}
+
+	/**
+	 * 评论
+	 * 
+	 * @param msgId
+	 * @param content
+	 * @param parentCommentId
+	 * @return
+	 */
+	public Result addComment(String msgId, String content, String parentCommentId) {
+
+		// 评论表
+		Comment comment = new Comment();
+		comment.setCommentterId(ClientUtils.getUserId());
+		comment.setCommentter(ClientUtils.getUserName());
+		comment.setCommentterHeadimg(ClientUtils.getUserImg());
+		comment.setContent(content);
+		comment.setCommentCount(BigInteger.ZERO);
+		comment.setCommentPraiseCount(BigInteger.ZERO);
+		comment.setCommentObjectId(msgId);
+		comment.setCommentTime(new Date(System.currentTimeMillis()));
+		comment.setCommentParentId(parentCommentId);
+		comment.setClassId(ClientUtils.getClassId());
+		TraceUtils.setCreateTrace(comment);
+
+		if (StringUtils.isNotEmpty(parentCommentId)) {
+			Comment parentComment = this.read(Comment.class, parentCommentId);
+
+			comment.setCommentedName(parentComment.getCommentter());
+			comment.setCommentedId(parentComment.getCommentterId());
+		}
+
+		this.save(comment);
+
+		this.bulkUpdate("update SchClassCircleMsg set commentCount = commentCount +1 where msgId = ?",
+				new Object[] { msgId });
+
+		this.updateComment(msgId, true);
+
+		return new Result(true, "", comment);
+	}
+
+	/**
+	 * 删除评论
+	 * 
+	 * @param msgId
+	 * @param commentId
+	 * @return
+	 */
+	public Result deleteComment(String msgId, String commentId) {
+
+		this.bulkUpdate("update Comment set deleteFlag = 1 where commentId = ? ", new Object[] { commentId });
+		this.bulkUpdate("update SchClassCircleMsg set commentCount = commentCount - 1 where msgId = ?",
+				new Object[] { msgId });
+
+		this.updateComment(msgId, true);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 点赞
+	 * 
+	 * @param msgId
+	 * @return
+	 */
+	public Result deleteLike(String msgId) {
+
+		this.bulkUpdate("update CommentPraise set deleteFlag = 1 where commentId = ? and commentterId = ?",
+				new Object[] { msgId, ClientUtils.getUserId() });
+		this.bulkUpdate("update SchClassCircleMsg set likeCount = likeCount - 1 where msgId = ?",
+				new Object[] { msgId });
+
+		return new Result(true);
+	}
+
+	/**
+	 * 删除文件
+	 * 
+	 * @param filesJson
+	 * @param fileType
+	 * @return
+	 */
+	public Result deleteFile(String fileId, String fileType) {
+		if ("class_circle_img".equals(fileType)) {
+			this.bulkUpdate("update SchImg set deleteFlag = true where imgId = ?", new Object[] { fileId });
+		} else {
+			this.bulkUpdate("update SchFile set deleteFlag = true where fileId = ?", new Object[] { fileId });
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 新增文件
+	 * 
+	 * @param filesJson
+	 * @param fileType
+	 * @return
+	 */
+	public Result addFile(String filesJson, String msgId, String fileType) {
+
+		List<FileMeta> files = JSONArray.parseArray(filesJson, FileMeta.class);
+
+		SchImg img = null;
+		SchFile file = null;
+		int i = 0;
+		for (FileMeta fileMeta : files) {
+			if ("class_circle_file".equals(fileType)) {
+				file = new SchFile();
+				file.setDeleteFlag(false);
+				file.setObjectId(msgId);
+				file.setFileType(fileMeta.getFileType());
+				file.setObjectType("SCH_CLASS_CIRCLE");
+				file.setSize(fileMeta.getFileSize());
+				file.setFileName(fileMeta.getFileName());
+				file.setOrderNo(i);
+				TraceUtils.setCreateTrace(file);
+
+				i++;
+				this.save(file);
+			} else {
+				img = new SchImg();
+				img.setDeleteFlag(false);
+				img.setObjectId(msgId);
+				img.setImgType(fileMeta.getFileType());
+				img.setObjectType("SCH_CLASS_CIRCLE");
+				img.setSize(fileMeta.getFileSize());
+				img.setOrderNo(i);
+				TraceUtils.setCreateTrace(img);
+
+				i++;
+				this.save(img);
+			}
+		}
+		return new Result(true);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java b/src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java
new file mode 100644
index 0000000..ab511b2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java
@@ -0,0 +1,802 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.service.IMediaVideoService;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.model.SchArticle;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchCourseware;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.school.service.IArticleService;
+import com.qxueyou.scc.school.service.ICourseWareService;
+import com.qxueyou.scc.school.service.IHandoutService;
+import com.qxueyou.scc.school.service.ILessonService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+
+/**
+ * 课件管理
+ * 
+ * @author lihanqi
+ *
+ */
+@Service
+public class CoursewareService extends CommonAppService implements ICourseWareService {
+	private static Logger log = LogManager.getLogger("CoursewareService");
+	
+	@Autowired
+	IArticleService articleService;
+	
+	@Autowired
+	IExerciseService exerciseService;
+	
+	@Autowired
+	IHandoutService handoutService;
+	
+	@Autowired
+	ILessonService lessonService;
+	
+	@Autowired
+	IMediaVideoService mediaVideoService;
+	
+	@Autowired
+	IOrgTextService orgTextService;
+	
+	/**
+	 * 新增章节
+	 * 
+	 * @param name
+	 * @param parentChapterId
+	 * @return
+	 */
+	public Result addOrUpdateChapter(String chapterId, String subjectId, String name, String parentChapterId){
+		if(StringUtils.isEmpty(subjectId) || StringUtils.isEmpty(name)){
+			return new Result(false, "参数错误");
+		}
+		SubjectChapter objSchChapter = null;
+		if(StringUtils.isEmpty(chapterId)){
+			objSchChapter = new SubjectChapter();
+			String uuid = UUIDUtils.generateUUID().replace("-", "");
+			objSchChapter.setChapterId(uuid);
+			objSchChapter.setParentChapterId(StringUtils.isEmpty(parentChapterId) ? uuid : parentChapterId);
+			objSchChapter.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(objSchChapter);
+		}else{
+			objSchChapter = this.read(SubjectChapter.class, chapterId);
+			TraceUtils.setUpdateTrace(objSchChapter);
+		}
+		
+		objSchChapter.setName(name);
+		objSchChapter.setParentChapterId(parentChapterId);
+		objSchChapter.setSubjectId(subjectId);
+		
+		this.save(objSchChapter);
+		
+		return new Result(true,"",objSchChapter);
+	}
+	
+	/**
+	 * 删除章节
+	 * 
+	 * @param chapterId
+	 * @return
+	 */
+	public Result deleteChapter(String[] chapterIds){
+		if(chapterIds.length == 0){
+			return new Result(false, "参数错误");
+		}
+		int iCount = 0;
+		for(String chapterId : chapterIds){//级联删除课件
+			SubjectChapter chapter = this.read(SubjectChapter.class, chapterId);
+			if(chapter != null && StringUtils.isEmpty(chapter.getParentChapterId())){
+				iCount += this.findCount("from SchCourseware where chapterId = ? and cType = ?", CollectionUtils.newList(chapterId, 6));
+			}
+			this.deleteCourseWare(null, chapterId);
+		}
+		this.bulkUpdateInLoop("update SchChapter set deleteFlag = true where chapterId = ?", chapterIds);
+		return new Result(true, "", iCount);
+	}
+	
+	/**
+	 * 拷贝课件
+	 * 
+	 * @param type 课件类型
+	 * @param id 主键
+	 * @param subjectId 课程
+	 * @param collegeCourseId 科目
+	 * @param chapterId 章节
+	 * @return
+	 */
+	public Result doCopyCourseware(String type, String id, String subjectId, String collegeCourseId, String chapterId){
+		try {
+			subjectId = StringUtils.isEmpty(subjectId)?null:subjectId;
+			chapterId = StringUtils.isEmpty(chapterId)?null:chapterId;
+			collegeCourseId = StringUtils.isEmpty(collegeCourseId)?null:collegeCourseId;
+			Subject subject = this.read(Subject.class, subjectId);
+			String subjectName = subject == null?null:subject.getName();
+			
+			if(SchCourseware.COURSEWARE_TYPE_ARTICLE.equals(type)){
+				SchArticle article = this.read(SchArticle.class, id);
+				SchArticle newArticle = (SchArticle) BeanUtils.cloneBean(article);
+				newArticle.setArticleId(null);
+				
+				newArticle.setChapterId(chapterId);
+				newArticle.setSubjectId(subjectId);
+				newArticle.setSubjectName(subjectName);
+				newArticle.setOrderNum(1000);
+				newArticle.setCollegeCourseId(collegeCourseId);
+				OrgText text = orgTextService.getOrgText(id, OrgText.TABLE_NAME_ARTICLE);
+				newArticle.setContent(text == null?null:text.getContent());
+				
+				articleService.updateOrgArticle(newArticle, collegeCourseId);
+			}else if(SchCourseware.COURSEWARE_TYPE_EXERCISE.equals(type)){
+				exerciseService.doCopyExerciseGroup(id, subjectId, collegeCourseId, chapterId);
+			}else if(SchCourseware.COURSEWARE_TYPE_HANDOUT.equals(type)){
+				handoutService.doCopyHandout(id, subjectId, collegeCourseId, chapterId, subjectName);
+			}else if(SchCourseware.COURSEWARE_TYPE_VIDEO.equals(type)){
+				MediaVideo video = this.read(MediaVideo.class, id);
+				MediaVideo newVideo = (MediaVideo) BeanUtils.cloneBean(video);
+				newVideo.setVideoId(null);
+				
+				//newVideo.setChapterId(chapterId);
+				newVideo.setSubjectId(subjectId);
+				newVideo.setSubjectName(subjectName);
+				newVideo.setCollegeCourseId(collegeCourseId);
+				newVideo.setVideoOrder(1000);
+				
+				lessonService.insertOrgVideo(newVideo, collegeCourseId, true);
+			}
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 移动课件
+	 * 
+	 * @param type 课件类型
+	 * @param id 主键
+	 * @param subjectId 课程
+	 * @param collegeCourseId 科目
+	 * @param chapterId 章节
+	 * @return
+	 */
+	public Result doMoveCourseware(String type, String id, String subjectId, String collegeCourseId, String chapterId){
+		
+		boolean isOrg = StringUtils.isEmpty(ClientUtils.getClassId());
+		subjectId = StringUtils.isEmpty(subjectId)?null:subjectId;
+		chapterId = StringUtils.isEmpty(chapterId)?null:chapterId;
+		collegeCourseId = StringUtils.isEmpty(collegeCourseId)?null:collegeCourseId;
+		String subjectName = null;
+		if(StringUtils.isNoneBlank(subjectId)){
+			if(isOrg){
+				subjectName = this.read(Subject.class, subjectId).getName();
+			}else{
+				subjectName = this.read(SchClassSubject.class, subjectId).getName();
+			}
+		}
+		
+		if(SchCourseware.COURSEWARE_TYPE_ARTICLE.equals(type)){
+			SchArticle article = this.read(SchArticle.class, id);
+			article.setSubjectId(subjectId);
+			article.setSubjectName(subjectName);
+			article.setChapterId(chapterId);
+			TraceUtils.setUpdateTrace(article);
+			article.setOrderNum(1000);
+			
+			this.articleService.saveArticle(article);
+			
+			this.bulkUpdate("update SchArticleReCourse set collegeCourseId = ? where articleId = ?", new Object[]{collegeCourseId, id});
+		}else if(SchCourseware.COURSEWARE_TYPE_EXERCISE.equals(type)){
+			ExerciseGroup exercise = this.read(ExerciseGroup.class, id);
+			exercise.setSubjectId(subjectId);
+			exercise.setChapterId(chapterId);
+			TraceUtils.setUpdateTrace(exercise);
+			exercise.setOrderNum(BigInteger.valueOf(1000));
+			
+			this.exerciseService.saveExerciseGroup(exercise);
+			
+			this.bulkUpdate("update ExerciseReCourse set collegeCourseId = ? where groupId = ?", new Object[]{collegeCourseId, id});
+		}else if(SchCourseware.COURSEWARE_TYPE_HANDOUT.equals(type)){
+			SchHandout handout = this.read(SchHandout.class, id);
+			handout.setSubjectId(subjectId);
+			handout.setSubjectName(subjectName);
+			handout.setChapterId(chapterId);
+			TraceUtils.setUpdateTrace(handout);
+			handout.setOrderNum(1000);
+			
+			this.handoutService.saveHandout(handout);
+			
+			this.bulkUpdate("update SchHandoutReCourse set collegeCourseId = ? where handoutId = ?", new Object[]{collegeCourseId, id});
+		}else if(SchCourseware.COURSEWARE_TYPE_VIDEO.equals(type)){
+			MediaVideo video = this.read(MediaVideo.class, id);
+			video.setSubjectId(subjectId);
+			video.setSubjectName(subjectName);
+			//video.setChapterId(chapterId);
+			TraceUtils.setUpdateTrace(video);
+			video.setVideoOrder(1000);
+			
+			this.mediaVideoService.saveVideo(video);
+			
+			this.bulkUpdate("update MediaVideoReCourse set collegeCourseId = ? where videoId = ?", new Object[]{collegeCourseId, id});
+		}
+		if(isOrg){
+			this.bulkUpdate("update SchCourseware set collegeCourseId = ? where id = ? and orgId = ?", new Object[]{collegeCourseId, id, ClientUtils.getOrgId()});
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 删除课件
+	 * 
+	 * @param types
+	 * @param ids
+	 * @param delAll
+	 * @param orgIds
+	 * @param classIds
+	 * @return
+	 */
+	public Result deleteCourseware(String[] types, String[] ids, Integer delAll, String orgIds[], String classIds[]){
+		
+		for(String id: ids) {
+			this.bulkUpdate("update SchCourseware set deleteFlag = 1 where id=? ", new Object[] {id});
+		}
+		
+		
+		Map<String, String[]> result = this.coursewareClassify(types, ids);
+		
+		this.articleService.deleteOrgArticleIds(result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE), delAll, orgIds, classIds);
+		String [] groupIds = result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE);
+		if(groupIds != null && groupIds.length > 0){
+			String [] groupTypes = new String[groupIds.length];
+			for(int i=0;i<groupIds.length;i++){
+				ExerciseGroup objExerciseGroup = this.read(ExerciseGroup.class, groupIds[i]);
+				groupTypes[i] = String.valueOf(objExerciseGroup.getType());
+			}
+			this.exerciseService.deleteExerciseGroup(StringUtils.join(groupIds, ","), StringUtils.join(groupTypes, ","), "org", delAll, orgIds, classIds);
+		}
+		this.handoutService.deleteOrgHandouts(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT), delAll, orgIds, classIds);
+		String [] videoIds = result.get(SchCourseware.COURSEWARE_TYPE_VIDEO);
+		if(videoIds != null && videoIds.length > 0){
+			for(int i=0;i<videoIds.length;i++){
+				this.lessonService.deleteOrgVideo(videoIds[i], delAll, orgIds, classIds);
+			}
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 下发课件
+	 * 
+	 * @param types
+	 * @param ids
+	 * @param orgIds
+	 * @param classIds
+	 * @return
+	 */
+	public Result doAppointCourseware(String[] types, String[] ids, String orgIds[], String classIds[], String collegeCourseId){
+		Map<String, String[]> result = this.coursewareClassify(types, ids);
+		
+		this.articleService.insertAppointArticle(result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE), orgIds, classIds, collegeCourseId);
+		this.exerciseService.insertAppointExercise(result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE), orgIds, classIds);
+		this.handoutService.insertAppointHandout(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT), orgIds, classIds, collegeCourseId);
+		this.lessonService.insertAppointOrgVideo(result.get(SchCourseware.COURSEWARE_TYPE_VIDEO), orgIds, classIds);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 下发课件到子机构
+	 * 
+	 * @param id
+	 * @param sourceOrgId
+	 * @param targetOrgId
+	 * @param collegeCourseId
+	 * @return
+	 */
+	public Result insertOrgCourseware(String id, String sourceOrgId, String targetOrgId, String collegeCourseId){
+		SchCourseware courseware = this.findUnique("from SchCourseware where id = ? and orgId = ? and deleteFlag is false",
+				CollectionUtils.newList(id, sourceOrgId), SchCourseware.class);
+		
+		if(courseware == null){
+			return new Result(false, "原课件不存在");
+		}
+		SchCourseware newCourseware = new SchCourseware();
+		try {
+			BeanUtils.copyProperties(newCourseware, courseware);
+			
+			newCourseware.setCoursewareId(null);
+			newCourseware.setOrgId(targetOrgId);
+			TraceUtils.setCreateTrace(newCourseware);
+			
+			this.save(newCourseware);
+		} catch (Exception e) {
+			log.error("机构下发课件报错:课件id:"+id+",子机构id:"+targetOrgId, e);
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 撤回
+	 * 
+	 * @param id
+	 * @param orgId
+	 * @return
+	 */
+	public Result deleteOrgCourseware(String id, String orgId){
+		SchCourseware courseware = this.findUnique("from SchCourseware where id = ? and orgId = ? and deleteFlag is false",
+				CollectionUtils.newList(id, orgId), SchCourseware.class);
+		if(courseware != null){
+			courseware.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(courseware);
+			
+			this.save(courseware);
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 查询已下发的班级
+	 * 
+	 * @param types
+	 * @param ids
+	 * @return
+	 */
+	public Result findAlready(String[] types, String[] ids){
+		Map<String, String[]> classify = this.coursewareClassify(types, ids);
+		
+		String[] articleId = classify.get(SchCourseware.COURSEWARE_TYPE_ARTICLE);
+		String[] groupId = classify.get(SchCourseware.COURSEWARE_TYPE_EXERCISE);
+		String[] handoutId = classify.get(SchCourseware.COURSEWARE_TYPE_HANDOUT);
+		String[] videoId = classify.get(SchCourseware.COURSEWARE_TYPE_VIDEO);
+		
+		List<String> lstOrg = new ArrayList<String>();
+		List<String> lstClass = new ArrayList<String>();
+		if(articleId.length > 0){
+			String hql = " select c.orgId from SchArticleReCourse c" 
+					   + " where c.deleteFlag is false" 
+					   + " and c.articleId in(:articleId)";
+			lstOrg.addAll(this.findByComplexHql(hql, CollectionUtils.newObjectMap("articleId", articleId), String.class));
+			lstClass.addAll(this.findByComplexHql("select distinct classId from SchArticle where deleteFlag is false and originArticleId in(:articleId) and classId is not null", CollectionUtils.newObjectMap("articleId", articleId), String.class));
+		}
+		if(groupId.length > 0){
+			String hql = " select c.orgId from ExerciseReCourse c"
+					+ " where c.deleteFlag is false"
+					+ " and c.groupId in (:groupId)";
+			lstOrg.addAll(this.findByComplexHql(hql, CollectionUtils.newObjectMap("groupId", groupId), String.class));
+			lstClass.addAll(this.findByComplexHql("select distinct classId from ExerciseGroup where  deleteFlag is false and originExerciseId in (:groupId) and classId is not null", CollectionUtils.newObjectMap("groupId", groupId), String.class));	
+		}
+		if(handoutId.length > 0){
+			String hql = " select c.orgId from SchHandoutReCourse c" 
+					   + " where c.deleteFlag is false" 
+					   + " and c.handoutId in(:handoutId)";
+			lstOrg.addAll(this.findByComplexHql(hql, CollectionUtils.newObjectMap("handoutId", handoutId), String.class));
+			lstClass.addAll(this.findByComplexHql("select distinct classId from SchHandout where deleteFlag is false and originHandoutId in(:handoutId) and classId is not null", CollectionUtils.newObjectMap("handoutId", handoutId), String.class));
+		}
+		if(videoId.length > 0){
+			String hql = " select c.orgId from MediaVideoReCourse c"
+					+ " where c.deleteFlag is false"
+					+ " and c.videoId in(:videoId)";
+			lstOrg.addAll(this.findByComplexHql(hql, CollectionUtils.newObjectMap("videoId", videoId), String.class));
+			lstClass.addAll(this.findByComplexHql("select distinct classId from MediaVideo where deleteFlag is false and originVideoId in(:videoId) and classId is not null", CollectionUtils.newObjectMap("videoId", videoId), String.class));
+		}
+		return new Result(true, "", CollectionUtils.newObjectMap("orgs", lstOrg, "classes", lstClass));
+	}
+	
+	/**
+	 * 课件分类
+	 * 
+	 * @param types
+	 * @param ids
+	 * @return
+	 */
+	private Map<String, String[]> coursewareClassify(String[] types, String[] ids){
+		List<String> articleId = new ArrayList<String>();
+		List<String> groupId = new ArrayList<String>();
+		List<String> handoutId = new ArrayList<String>();
+		List<String> videoId = new ArrayList<String>();
+		for(int i=0;i<ids.length;i++){
+			String type = types[i];
+			if(SchCourseware.COURSEWARE_TYPE_ARTICLE.equals(type)){
+				articleId.add(ids[i]);
+			}else if(SchCourseware.COURSEWARE_TYPE_EXERCISE.equals(type)){
+				groupId.add(ids[i]);
+			}else if(SchCourseware.COURSEWARE_TYPE_HANDOUT.equals(type)){
+				handoutId.add(ids[i]);
+			}else if(SchCourseware.COURSEWARE_TYPE_VIDEO.equals(type)){
+				videoId.add(ids[i]);
+			}
+		}
+		Map<String, String[]> result = new HashMap<String, String[]>();
+		result.put(SchCourseware.COURSEWARE_TYPE_ARTICLE, articleId.toArray(new String[articleId.size()]));
+		result.put(SchCourseware.COURSEWARE_TYPE_EXERCISE, groupId.toArray(new String[groupId.size()]));
+		result.put(SchCourseware.COURSEWARE_TYPE_HANDOUT, handoutId.toArray(new String[handoutId.size()]));
+		result.put(SchCourseware.COURSEWARE_TYPE_VIDEO, videoId.toArray(new String[videoId.size()]));
+		
+		return result;
+	}
+	
+	/**
+	 * 课件树排序
+	 * 
+	 * @param ids[] 排序的id
+	 * @param type 排序类型
+	 * @param parentId 父节点id
+	 * @return
+	 */
+	public Result doOrder(String[] ids, String type, String parentId){
+		for(int i=0;i<ids.length;i++){
+			int index = ids.length - i;
+			if("courseCategory".equals(type)){//科目类别
+				this.bulkUpdate("update OrgCategoryLevel set orderNum = ? where categoryLevelId = ?", new Object[]{index, ids[i]});
+			}else if("course".equals(type)){//科目
+				this.bulkUpdate("update OrgCollegeCourse set orderNum = ? where collegeCourseId = ? and courseCategoryId = ?", new Object[]{index, ids[i], parentId});
+			}else if("subject".equals(type)){//课程
+				this.bulkUpdate("update SchSubject set orderNum = ? where subjectId = ? ", new Object[]{index, ids[i]});
+			}else if("chapter".equals(type)){//章
+				this.bulkUpdate("update SchChapter set orderNum = ? where chapterId = ? and subjectId = ?", new Object[]{index, ids[i], parentId});
+			}else if("section".equals(type)){//节
+				this.bulkUpdate("update SchChapter set orderNum = ? where chapterId = ? and parentChapterId = ?", new Object[]{index, ids[i], parentId});
+			}else if("classSubject".equals(type)){//班级课程
+				this.bulkUpdate("update SchClassSubject set orderNum = ? where classSubjectId = ? ", new Object[]{index, ids[i]});
+			}
+		}
+		
+		return new Result(true);
+	}
+	
+	/*****************************************************班主任课件管理**************************************************************************************************/
+	
+	/**
+	 * 删除课件
+	 * 
+	 * @param types
+	 * @param ids
+	 * @return
+	 */
+	public Result deleteClassCourseware(String[] types, String[] ids){
+		Map<String, String[]> result = this.coursewareClassify(types, ids);
+		
+		for(String id:ids) {
+			bulkUpdate("update SchCourseware set deleteFlag=true where id=?", new Object[] {id});
+		}
+		
+		this.articleService.deleteArticle(StringUtils.join(result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE), ","));
+		this.exerciseService.deleteExerciseGroup(StringUtils.join(result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE), ","));
+		this.handoutService.deleteHandouts(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT));
+		this.lessonService.deleteVideos(StringUtils.join(result.get(SchCourseware.COURSEWARE_TYPE_VIDEO), ","));
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 拷贝课件
+	 * 
+	 * @param type 课件类型
+	 * @param id 主键
+	 * @param subjectId 课程
+	 * @param collegeCourseId 科目
+	 * @param chapterId 章节
+	 * @return
+	 */
+	public Result doCopyClassCourseware(String type, String id, String subjectId, String chapterId){
+		try {
+			subjectId = StringUtils.isEmpty(subjectId)?null:subjectId;
+			chapterId = StringUtils.isEmpty(chapterId)?null:chapterId;
+			SchClassSubject subject = this.read(SchClassSubject.class, subjectId);
+			String subjectName = subject == null?null:subject.getName();
+			
+			if(SchCourseware.COURSEWARE_TYPE_ARTICLE.equals(type)){
+				SchArticle article = this.read(SchArticle.class, id);
+				SchArticle newArticle = (SchArticle) BeanUtils.cloneBean(article);
+				newArticle.setArticleId(null);
+				
+				newArticle.setChapterId(chapterId);
+				newArticle.setSubjectId(subjectId);
+				newArticle.setSubjectName(subjectName);
+				newArticle.setCollegeCourseId(ClientUtils.getCourseId());
+				OrgText text = orgTextService.getOrgText(id, OrgText.TABLE_NAME_ARTICLE);
+				newArticle.setContent(text == null?null:text.getContent());
+				
+				articleService.updateArticle(newArticle);
+			}else if(SchCourseware.COURSEWARE_TYPE_EXERCISE.equals(type)){
+				exerciseService.doCopyExerciseGroup(id, subjectId, ClientUtils.getCourseId(), chapterId);
+			}else if(SchCourseware.COURSEWARE_TYPE_HANDOUT.equals(type)){
+				handoutService.doCopyHandout(id, subjectId, ClientUtils.getCourseId(), chapterId, subjectName);
+			}else if(SchCourseware.COURSEWARE_TYPE_VIDEO.equals(type)){
+				MediaVideo video = this.read(MediaVideo.class, id);
+				MediaVideo newVideo = (MediaVideo) BeanUtils.cloneBean(video);
+				newVideo.setVideoId(null);
+				
+				//newVideo.setChapterId(chapterId);
+				newVideo.setSubjectId(subjectId);
+				newVideo.setSubjectName(subjectName);
+				newVideo.setCollegeCourseId(ClientUtils.getCourseId());
+				
+				lessonService.insertVideo(newVideo,"", true);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 发布和停用
+	 * 
+	 * @param types
+	 * @param ids
+	 * @param status
+	 * @return
+	 */
+	public Result updateStatus(String[] types, String[] ids, int status){
+		Map<String, String[]> result = this.coursewareClassify(types, ids);
+		if(status == 1){
+			if(result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE).length > 0){
+				this.bulkUpdateInLoop("update SchArticle set status = 2 where articleId = ?", result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE));
+				this.bulkUpdateInLoop("update SchCourseware set status = 2 where id = ?", result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE));
+			}
+			if(result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE).length > 0){
+				this.bulkUpdateInLoop("update ExerciseGroup set status = 2 where groupId = ?", result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE));
+				this.bulkUpdateInLoop("update SchCourseware set status = 2 where id = ?", result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE));
+			}
+			if(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT).length > 0){
+				this.handoutService.doStartHandouts(StringUtils.join(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT), ","));
+			}
+			if(result.get(SchCourseware.COURSEWARE_TYPE_VIDEO).length > 0){
+				this.lessonService.doStartVideos(StringUtils.join(result.get(SchCourseware.COURSEWARE_TYPE_VIDEO), ","));
+			}
+			
+		}else if(status == 2){
+			if(result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE).length > 0){
+				this.bulkUpdateInLoop("update SchArticle set status = 3 where articleId = ?", result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE));
+				this.bulkUpdateInLoop("update SchCourseware set status = 3 where id = ?", result.get(SchCourseware.COURSEWARE_TYPE_ARTICLE));
+			}
+			if(result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE).length > 0){
+				this.bulkUpdateInLoop("update ExerciseGroup set status = 3 where groupId = ?", result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE));
+				this.bulkUpdateInLoop("update SchCourseware set status = 3 where id = ?", result.get(SchCourseware.COURSEWARE_TYPE_EXERCISE));
+			}
+			if(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT).length > 0){
+				this.handoutService.doStopHandouts(result.get(SchCourseware.COURSEWARE_TYPE_HANDOUT));
+			}
+			if(result.get(SchCourseware.COURSEWARE_TYPE_VIDEO).length > 0){
+				this.lessonService.doStopVideos(StringUtils.join(result.get(SchCourseware.COURSEWARE_TYPE_VIDEO), ","));
+			}
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 删除课程和章节级联删除课件
+	 *  
+	 * @param subjectId 机构课程id
+	 * @param chapterId 章节id
+	 * @param classSubjectId 班级课程id
+	 * @return
+	 */
+	public Result deleteCourseWare(String subjectId, String chapterId){
+		if(StringUtils.isNotEmpty(chapterId)){
+			SubjectChapter chapter = this.read(SubjectChapter.class, chapterId);
+			String newChapterId = null;
+			if(StringUtils.isNotEmpty(chapter.getParentChapterId())){
+				newChapterId = chapter.getParentChapterId();
+			}else{
+				//删除章节练习
+				this.bulkUpdate("update ExerciseGroup set deleteFlag = ? where chapterId = ? and type = ?", new Object[]{true, chapterId, ExerciseGroup.TYPE_CHAPTER_ITEM});
+				this.bulkUpdate("update SchCourseware set deleteFlag = ? where chapterId = ? and cType = ?", new Object[]{true, chapterId, 6});
+			}
+			
+			this.bulkUpdate("update MediaVideo set chapterId = ? where chapterId = ?", new Object[]{newChapterId, chapterId});
+			this.bulkUpdate("update SchHandout set chapterId = ? where chapterId = ?", new Object[]{newChapterId, chapterId});
+			this.bulkUpdate("update ExerciseGroup set chapterId = ? where chapterId = ?", new Object[]{newChapterId, chapterId});
+			this.bulkUpdate("update SchArticle set chapterId = ? where chapterId = ?", new Object[]{newChapterId, chapterId});
+			
+			this.bulkUpdate("update SchCourseware set chapterId = ? where chapterId = ?", new Object[]{newChapterId, chapterId});
+		}
+		if(StringUtils.isNotEmpty(subjectId)){
+			this.bulkUpdate("update MediaVideo set subjectId = null,subjectName = null where subjectId = ?", new Object[]{subjectId});
+			this.bulkUpdate("update SchHandout set subjectId = null,subjectName = null where subjectId = ?", new Object[]{subjectId});
+			this.bulkUpdate("update ExerciseGroup set subjectId = null where subjectId = ?", new Object[]{subjectId});
+			this.bulkUpdate("update SchArticle set subjectId = null,subjectName = null where subjectId = ?", new Object[]{subjectId});
+			
+			this.bulkUpdate("update SchCourseware set subjectId = null where subjectId = ?", new Object[]{subjectId});
+			
+			//删除章节练习
+			this.bulkUpdate("update ExerciseGroup set deleteFlag = ? where subjectId = ? and type = ?", new Object[]{true, subjectId, ExerciseGroup.TYPE_CHAPTER_ITEM});
+			this.bulkUpdate("update SchCourseware set deleteFlag = ? where subjectId = ? and cType = ?", new Object[]{true, subjectId, 6});
+		}
+		return new Result(true);
+	}
+	
+	/**
+	 * 同步更新课件课程名称
+	 * 
+	 * @param subjectId
+	 * @param subjectName
+	 * @return
+	 */
+	public Result updateCourseWare(String subjectId, String subjectName){
+		if(StringUtils.isNotEmpty(subjectId)){
+			this.bulkUpdate("update MediaVideo set subjectName = ? where subjectId = ?", new Object[]{subjectName, subjectId});
+			this.bulkUpdate("update SchHandout set subjectName = ? where subjectId = ?", new Object[]{subjectName, subjectId});
+			this.bulkUpdate("update SchArticle set subjectName = ? where subjectId = ?", new Object[]{subjectName, subjectId});
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * 设置学分
+	 */
+	public Result updateCoursewareScore(String id, int score) {
+		if(StringUtils.isNotEmpty(id)){
+			this.bulkUpdate("update Schchapter set score = ? where id = ?", new Object[]{score, id});
+		}
+		return new Result(true);
+	}
+
+
+	/**
+	 * 查询课件
+	 */
+	public List<Map<String, Object>> queryCourseware(String id, String type) {
+		 if(type.equals("category")) {
+				 
+			 List<Map<String, Object>> items=new ArrayList<Map<String, Object>>();
+			 //查询项目列表
+				String hql1="select collegeCourseId as id from OrgCollegeCourse where courseCategoryId=? and deleteFlag is false ";
+				List<String> courseList =find(hql1, CollectionUtils.newList(id),String.class);
+             //查询机构课程
+				for (String courseId : courseList) {
+					List<Map<String, Object>> result = queryCoursewareByCourseId(courseId);
+					items.addAll(result);
+				}
+				return items;
+		}else if(type.equals("course"))
+		{
+			return queryCoursewareByCourseId(id);
+		}else {
+			return queryCoursewareById( id ,type);
+		}
+
+	}
+	
+	
+	
+	/**
+	 * 根据项目id查询所有机构课程的课件
+	 * @param id
+	 * @return
+	 */
+	public List<Map<String, Object>> queryCoursewareByCourseId(String id){
+		List<Map<String, Object>> items=new ArrayList<Map<String, Object>>();
+		
+		String hql="select subjectId from  SchSubject where  collegeCourseId=?  and  deleteFlag is false";
+		List<String> subjectList  =find(hql, CollectionUtils.newList(id),String.class);
+		
+		for (String subjectId : subjectList) {
+			 List<Map<String, Object>> courseware = queryCoursewareById(subjectId ,"subject");
+			 items.addAll(courseware);
+		}
+		return items;
+	}
+	
+	/**
+	 * 根据项目id查询课件
+	 * @param courseId
+	 * @return
+	 */
+	public  List<Map<String, Object>> queryCoursewareById(String id ,String type ){
+		String hql="select id as id,name as name, describe as desc,type as type,score as score from SchCourseware "
+				+ "where deleteFlag is false";
+		
+		 
+		if(type.equals("course")) {
+			hql+=" and collegeCourseId=:courseId";
+			 
+			   
+		    return findListWithMapByHql(hql, CollectionUtils.newObjectMap("courseId",id));
+		}
+		
+		if(type.equals("subject")) {
+			hql+=" and subjectId=:subjectId";
+			 
+	
+		    return findListWithMapByHql(hql, CollectionUtils.newObjectMap("subjectId",id));
+		}
+		
+		if(type.equals("chapter")) {
+			hql+=" and chapterId=:chapterId or parentChapterId=:parentChapterId";
+
+			   
+		    return  findListWithMapByHql(hql, CollectionUtils.newObjectMap("chapterId",id,"parentChapterId",id));
+		}
+		
+		if(type.equals("section")) {
+			hql+=" and chapterId=:chapterId";
+			   
+		    return findListWithMapByHql(hql, CollectionUtils.newObjectMap("chapterId",id));
+		}
+		
+		return null;
+		
+	}
+
+	@Override
+	public Result updateCoursewareScoreValue(String id,BigDecimal scoreValue) {
+		String hql = "from SchCourseware c where c.id=? and c.deleteFlag is false";
+		SchCourseware  courseWare = this.findUnique(hql, CollectionUtils.newList(id), SchCourseware.class);
+		courseWare.setScoreValue(scoreValue);
+		this.save(courseWare);
+		return new Result(true);
+	}
+	
+
+	/**
+	 * 获取排序
+	 * 
+	 * @param isOrg
+	 * @param subjectId
+	 * @param chapterId
+	 * @return
+	 */
+	@Override
+	public Map<String, Integer> getOrder(boolean isOrg, String subjectId, String chapterId){
+		Map<String, Integer> result = new HashMap<>();
+		//同步排序
+		int subjectOrder = 0;
+		int chapterOrder = 0;
+		int partOrder = 0;
+		if(StringUtils.isNoneBlank(subjectId)){
+			if(isOrg){
+				Subject subject = this.read(Subject.class, subjectId);
+				subjectOrder = subject.getOrderNum();
+			}else{
+				SchClassSubject subject = this.read(SchClassSubject.class, subjectId);
+				subjectOrder = subject.getOrderNum();
+			}
+		}
+		if(StringUtils.isNoneBlank(chapterId)){
+			SubjectChapter chapter = this.read(SubjectChapter.class, chapterId);
+			if(StringUtils.isEmpty(chapter.getParentChapterId())){
+				chapterOrder = chapter.getOrderNum();
+			}else{
+				SubjectChapter parentChapter = this.read(SubjectChapter.class, chapter.getParentChapterId());
+				chapterOrder = parentChapter.getOrderNum();
+				partOrder = chapter.getOrderNum();
+			}
+		}
+		result.put("subjectOrder", subjectOrder);
+		result.put("chapterOrder", chapterOrder);
+		result.put("partOrder", partOrder);
+		
+		return result;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java b/src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java
new file mode 100644
index 0000000..5a979b1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java
@@ -0,0 +1,104 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.Enumeration;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+import com.qxueyou.scc.config.AliOnsConfig;
+import com.qxueyou.scc.school.service.IHandoutService;
+
+/**
+ * 文档处理消息队列接收服务
+ * 
+ * @author 德虎
+ * 
+ */
+@Service("DocdealMsgDealService")
+@EnableConfigurationProperties(AliOnsConfig.class)
+public class DocdealMsgDealService{
+//public class DocdealMsgDealService extends ONSBaseMsgConsumer implements IONSMsgDealService {
+
+	@Autowired
+	AliOnsConfig aliOnsConfig;
+	
+	@Autowired
+	IHandoutService handoutService;
+	
+	@Autowired
+	IONSExceptionLogService onsExceptionLogService;
+	
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ONSExceptionLogService");
+	
+
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+//		
+//		//TODO 严格异常处理,两次就直接返回,暂时一次
+//		try {
+//			// get params
+//			String docPath = msg.getUserProperties("docPath");
+//			String handoutId = msg.getUserProperties("handoutId");
+//			String uploadModule = msg.getUserProperties("uploadModule");
+//			String userId = msg.getUserProperties("userId");
+//
+//			// parse office file(ppt\pptx)
+//			
+//			handoutService.insertHandoutPages(docPath, handoutId,uploadModule,userId,"PPT");
+//			
+//		}catch(Exception e){
+//			
+//			String businessId = getTopic() + "-" + UUIDUtils.generateUUID();
+//			String desp = "handoutId:" + msg.getUserProperties("handoutId")+ 
+//					";docPath:" + msg.getUserProperties("docPath") +
+//					";userId:" + msg.getUserProperties("userId") + 
+//					";uploadModule:" + msg.getUserProperties("uploadModule") ;
+//
+//			log.error( businessId + " :上传讲义ppt消息发送失败:" + e , e);
+//			onsExceptionLogService.logSaveExceptionLog(getTopic(), "", businessId , desp );
+//		}
+//		
+//	}
+//	
+	/**
+	 * 配置项ons-docdeal-receive-urls配置了多个ip地址,如果其中包含本机地址,说明支持文档处理
+	 */
+	protected boolean turnOn(){
+		String docdealUrls =aliOnsConfig.getDocdealReceiveUrls();
+		try {
+			Enumeration<NetworkInterface> nienum = NetworkInterface.getNetworkInterfaces();
+			while (nienum.hasMoreElements()) {
+				NetworkInterface ni = nienum.nextElement();
+				Enumeration<InetAddress> iaenum = ni.getInetAddresses();
+				while (iaenum.hasMoreElements()) {
+					InetAddress ia = iaenum.nextElement();
+					if (ia instanceof Inet4Address&&docdealUrls.contains("#" + ia.getHostAddress() + "#")) {
+							return true;
+					}
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return false;
+	}
+
+//	@Override
+//	protected String getConsumerId() {
+//		return cfg.getConfigByEnv("ons-docdeal-customer-id");
+//	}
+//
+//	@Override
+//	protected String getTopic() {
+//		return cfg.getConfigByEnv("ons-docdeal-topic");
+//	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java b/src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java
new file mode 100644
index 0000000..c3e0969
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.service.impl;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Service;
+
+//import com.qxueyou.scc.base.model.ONSMsg;
+import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.service.impl.ONSBaseMsgProducer;
+import com.qxueyou.scc.school.service.IDocdealMsgSenderService;
+
+/**
+ * 
+ * @author 德虎
+ * 
+ */
+@Service
+public class DocdealMsgSenderService implements IDocdealMsgSenderService {
+//public class DocdealMsgSenderService extends ONSBaseMsgProducer implements IDocdealMsgSenderService {
+	
+	@SuppressWarnings("unused")
+	private Logger log = LogManager.getLogger("DocdealMsgSenderService");
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.qxueyou.scc.school.service.IDocdealMsgSenderService#sendMsg(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Result sendMsg(String docPath, String handoutId,String uploadModule,String userId) {
+		
+//		ONSMsg msg = new ONSMsg(getTopic());
+//		
+//		msg.put("msgType", "SCH_DOCDEAL");
+//		msg.put("docPath", docPath);
+//		msg.put("handoutId", handoutId);
+//		msg.put("uploadModule", uploadModule);
+//		msg.put("userId", userId);
+//		
+//		try {
+//			
+//			producer.send(msg.toONSMsg());
+//			
+//			return new Result(true);
+//			
+//		} catch (Exception e) {
+//			log.error("call DocdealMsgSendService fail.docPath: "+ docPath + " ;handoutId= " + handoutId,e);
+//		}
+//		
+		return new Result(false);
+	}
+
+//	@Override
+//	protected String getProducerId() {
+//		return cfg.getConfigByEnv("ons-docdeal-producer-id");
+//	}
+//
+//	@Override
+//	protected String getTopic() {
+//		return cfg.getConfigByEnv("ons-docdeal-topic");
+//	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java b/src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java
new file mode 100644
index 0000000..ff806f2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java
@@ -0,0 +1,68 @@
+package com.qxueyou.scc.school.service.impl;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+//import com.qxueyou.scc.base.service.IONSMsgDealService;
+//import com.qxueyou.scc.base.service.impl.CommonONSConsumer;
+//import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.school.service.IHandoutService;
+
+/**
+ * pdf 转图片相关消息
+ * 
+ * @author charkraMin
+ *
+ */
+@Service("HandoutConvertPDFDealService")
+public class HandoutConvertPDFDealService{
+//public class HandoutConvertPDFDealService implements IONSMsgDealService {
+
+	@Autowired
+	IHandoutService handoutService;
+
+	@Autowired
+	IONSExceptionLogService onsExceptionLogService;
+
+
+
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ONSExceptionLogService");
+
+	@PostConstruct
+	void init() {
+
+//		CommonONSConsumer.registerHandler("CONVERT_PDF", "HandoutConvertPDFDealService");
+
+	}
+
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+//		
+//		try {
+//			String handoutId = msg.getUserProperties("handoutId");
+//			String fullPath = msg.getUserProperties("fullPath");
+//			String module = msg.getUserProperties("module");
+//			String userId = msg.getUserProperties("userId");
+//	
+//			handoutService.insertHandoutPages(fullPath, handoutId, module, userId, "PDF");
+//		}catch(Exception e){
+//			
+//			String businessId = cfg.getConfigByEnv("ons-common-topic") + "-" + UUIDUtils.generateUUID();
+//			String desp = "handoutId:" + msg.getUserProperties("handoutId") 
+//					+ ";fullPath:" + msg.getUserProperties("fullPath")
+//					+ ";module:" + msg.getUserProperties("module")
+//					+ ";classId:" + msg.getUserProperties("classId")
+//					+ ";userId:" + msg.getUserProperties("userId");
+//
+//			log.error( businessId + " :转码PDF讲义失败:" + e, e);
+//			onsExceptionLogService.logSaveExceptionLog(cfg.getConfigByEnv("ons-common-topic"), "CONVERT_PDF", businessId , desp );
+//		}
+//	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java b/src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java
new file mode 100644
index 0000000..d41a716
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java
@@ -0,0 +1,2026 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Transparency;
+import java.awt.geom.AffineTransform;
+import java.awt.image.AffineTransformOp;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.hslf.HSLFSlideShow;
+import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
+import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
+import org.apache.poi.poifs.crypt.Decryptor;
+import org.apache.poi.poifs.crypt.EncryptionInfo;
+import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+//import org.jpedal.examples.images.ConvertPagesToImages;
+//import org.jpedal.exception.PdfException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.base.service.IFileUploadService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.JacobUtil;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.AliOnsConfig;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.dao.HandoutDAO;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchCourseware;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.school.model.SchHandoutPage;
+import com.qxueyou.scc.school.model.SchHandoutPageFavor;
+import com.qxueyou.scc.school.model.SchHandoutReCourse;
+import com.qxueyou.scc.school.model.SchHandoutRecord;
+import com.qxueyou.scc.school.model.SchHandoutRecordDetail;
+import com.qxueyou.scc.school.model.SchHandoutStatistic;
+import com.qxueyou.scc.school.service.ICourseWareService;
+import com.qxueyou.scc.school.service.IDocdealMsgSenderService;
+import com.qxueyou.scc.school.service.IHandoutService;
+import com.qxueyou.scc.sys.model.SysFileUploadTrace;
+import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.service.IUserService;
+import com.jacob.activeX.ActiveXComponent;
+import com.jacob.com.ComFailException;
+import com.jacob.com.ComThread;
+import com.jacob.com.Dispatch;
+import com.jacob.com.Variant;
+
+/**
+ * 讲义管理服务
+ * 
+ * @author 德虎 2015-1-4
+ *
+ */
+@Service
+@EnableConfigurationProperties({ SccConfig.class, AliOnsConfig.class })
+public class HandoutService extends CommonAppService implements IHandoutService {
+	private final Logger log = LogManager.getLogger(HandoutService.class);
+
+	private static final String HANDOUT_ID = "handoutId";
+
+	// @Autowired
+	// CommonONSProducer onsProducer;
+	//
+
+	@Autowired
+	AliOnsConfig aliOnsConfig;
+
+	@Autowired
+	SccConfig sccConfig;
+
+	//
+	@Autowired
+	IOssService ossService;
+
+	@Autowired
+	IFileUploadService fileUploadService;
+
+	@Autowired
+	IUserService userService;
+
+	@Autowired
+	IOrgTextService orgTextService;
+
+	// /** 极光推送替换信鸽 */
+	// @Autowired
+	// IJPushService jpushService;
+
+	@Autowired
+	IDocdealMsgSenderService docdealMsgSenderService;
+
+	private HandoutDAO handoutDAO;
+
+	//
+	// @Autowired
+	// private ICacheService cacheService;
+
+	@Autowired
+	private ICourseWareService courseWareService;
+
+	/**
+	 * 依赖注入
+	 *
+	 * @param handoutDAO
+	 */
+	@Autowired(required = false)
+	public void setHandoutDAO(@Qualifier("handoutDAO") HandoutDAO handoutDAO) {
+		this.handoutDAO = handoutDAO;
+	}
+
+	/**
+	 * PPT\PPTX (office文件不直接处理,发送消息,使用特定的文档处理服务器处理) PDF直接处理
+	 * 
+	 * 
+	 */
+	@Override
+	public Result insertHandout(String fullPath, String module, SchHandout handout) {
+		File file = null;
+		try {
+			// 取得当前上传文件类型:office(ppt、pptx)或者pdf,直接用后缀名来判断格式(office还是pdf)
+			String filePart[] = fullPath.split("\\.");
+			String fileType = filePart[filePart.length - 1];
+
+			// 1.下载到应用服务器本地
+			String uuid = UUIDUtils.generateUUID();
+			String filePath = HandoutService.class.getClassLoader().getResource("../uploads").getPath()
+					.concat("handout/" + uuid + "/" + uuid + "." + fileType);
+			file = fileUploadService.doGetOssFile(fullPath, filePath, module, ClientUtils.getUserId());
+			// 是否是office
+			boolean pptFlag = false;
+
+			if ("PPT".equals(fileType.toUpperCase()) || "PPTX".equals(fileType.toUpperCase())) {
+
+				// 如果有密码,返回前台提示 07+ 无打开密码有权限密码无法检测出来
+				if (getDecryptFlag(file, fileType.toUpperCase())) {
+					return new Result(false, "导入失败:您提交的文件有密码,请上传没有密码的文件!");
+				}
+				pptFlag = true;
+			}
+
+			TraceUtils.setCreateTrace(handout);
+			handout.setHandoutId(null);
+			handout.setStatus(SchHandout.STATUS_PROCESSING);
+			handout.setClassId(ClientUtils.getClassId());
+			handout.setPlayCount(0);
+			handout.setFullPath(fullPath);
+			handout.setOrigPath(fullPath);
+			handout.setFullLength((int) (file.length() > 0 ? file.length() / 1024 : 0));
+			handout.setOrgId(ClientUtils.getOrgId());
+			this.saveHandout(handout);
+			handout.setOriginHandoutId(handout.getHandoutId());
+
+			// 保存OrgText —— 讲义详情
+			orgTextService.doSaveOrgText(handout.getHandoutId(), OrgText.TABLE_NAME_HANDOUT, handout.getRemark());
+
+			// 更新上传文件使用轨迹
+			fileUploadService.updateUploadTrace(fullPath, module, SysFileUploadTrace.FILE_USE, handout.getHandoutId());
+
+			// 序号
+			String hql = "select MAX(c.orderNum) from SchHandout c where c.deleteFlag is false and c.classId = ? ";
+			Integer iMax = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getClassId()), Integer.class);
+
+			if (iMax == null || iMax == 0) {
+				iMax = 1;
+			} else {
+				iMax = iMax + 1;
+			}
+			handout.setOrderNum(iMax);
+			this.saveHandout(handout);
+
+			// 标记班级有讲义
+			ClsClass cls = read(ClsClass.class, ClientUtils.getClassId());
+			if (cls != null && cls.getHaveHandout() == ClsClass.NOT_HAVE_HANDOUT) {
+				cls.setHaveHandout(ClsClass.HAVE_HANDOUT);
+				save(cls);
+			}
+
+			Result result = new Result(true);
+			result.addData("pptFlag", pptFlag);
+			return result;
+		} catch (Exception e) {
+			this.log.error("讲义转码失败" + fullPath, e);
+		} finally {
+			if (file != null) {
+				// 删除下载到应用服务器的文档
+				fileUploadService.doDeleteTempOssFile(file.getParentFile(), module, ClientUtils.getUserId());
+			}
+		}
+		return new Result(false);
+	}
+
+	/**
+	 * 转码PDF发送消息
+	 * 
+	 * @param handoutId
+	 * @param fullPath
+	 * @param module
+	 * @param userId
+	 * @return
+	 */
+	public Result sendMsgConvertPDF(String handoutId, String fullPath, String module, String userId) {
+
+		// ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+		//
+		// msg.put("msgType", "CONVERT_PDF");
+		// msg.put(HANDOUT_ID, handoutId);
+		// msg.put("fullPath", fullPath);
+		// msg.put("module", module);
+		// msg.put("userId", userId);
+		//
+		// try {
+		//
+		// onsProducer.sendMsg(msg);
+		// return new Result(true);
+		//
+		// } catch (Exception e) {
+		// log.error("call handoutService fail.handoutId: " + handoutId, e);
+		// }
+
+		return new Result(false);
+	}
+
+	@SuppressWarnings("unused")
+	@Override
+	public void doConvertPDF(String handoutId, String fullPath, String module, String userId) {
+		try {
+			insertHandoutPages(fullPath, handoutId, module, userId, "PDF");
+		} catch (Exception e) {
+			String businessId = aliOnsConfig.getCommonTopic() + "-" + UUIDUtils.generateUUID();
+			String desp = "handoutId:" + handoutId + ";fullPath:" + fullPath + ";module:" + module;
+			log.error(businessId + " :转码PDF讲义失败:" + e, e);
+		}
+	}
+
+	@SuppressWarnings("unused")
+	@Override
+	public void doConvertDOC(String docPath, String handoutId, String uploadModule, String userId) {
+		try {
+			insertHandoutPages(docPath, handoutId, uploadModule, userId, "PPT");
+		} catch (Exception e) {
+
+			String desp = "handoutId:" + handoutId + ";docPath:" + docPath + ";uploadModule:" + uploadModule;
+			log.error(handoutId + " :上传讲义ppt消息发送失败:" + e, e);
+		}
+
+	}
+
+	/**
+	 * docdeal 消息队列调用,将office文件从oss下载到web server上,解析成图片,将解析后的图片传到oss上
+	 * 20150915:正式环境出现同一个ppt解析了两份,(消息队列处理前删除前面内容,用最新内容,这样操作,收藏的讲义可能会出现问题),已处理过不处理
+	 * 修改bug:ppt和jpg当前不在同一个目录下面,修改到同一个目录下面
+	 * 
+	 * @param docPath
+	 * @param handoutId
+	 * @return
+	 */
+	@SuppressWarnings({ "unchecked", "unused" })
+	@Override
+	public Result insertHandoutPages(String docPath, String handoutId, String uploadModule, String userId,
+			String type) {
+
+		log.debug("start...docDealMsgReceiveService call insertHandoutPages success: docPath:  " + docPath
+				+ " ;handoutId:  " + handoutId);
+		File objOfficeFile = null;
+		try {
+			// 0. judge
+			String hql = "from SchHandoutPage s where s.handoutId = ? and s.deleteFlag is false ";
+			int iCount = this.findCount(hql, CollectionUtils.newList(handoutId));
+			if (iCount > 0) {
+				log.debug("end0...docDealMsgReceiveService call insertHandoutPages already: docPath:  " + docPath
+						+ " ;handoutId:  " + handoutId);
+				return new Result(true);
+			}
+
+			// 1.download File to local web server
+			String uuid = UUIDUtils.generateUUID();
+			String filePart[] = docPath.split("\\.");
+			String fileType = filePart[filePart.length - 1];
+			// String directory =
+			// HandoutService.class.getClassLoader().getResource("../uploads").getPath().concat("/handout/"
+			// + uuid + "/" + "downLoadOfficeFile" +
+			// docPath.substring(docPath.lastIndexOf('.')));
+			// File file = new
+			// File(HandoutService.class.getClassLoader().getResource("../uploads").getPath().concat("/handout/"
+			// + uuid));
+			//
+			objOfficeFile = fileUploadService.doGetOssFile(docPath,
+					"/temp/uploads/handout/" + UUIDUtils.generateUUID() + "/" + fileType + "." + fileType, uploadModule,
+					ClientUtils.getUserId());
+			//
+			// file.mkdirs();
+			// objOfficeFile = fileUploadService.doGetOssFile(docPath, directory,
+			// uploadModule, userId);
+
+			// 2.deal doc
+			// 使用新方式解析讲义,有个缺陷:上传img及数据库中handoutpage默认排序(15页ppt为例):1,10,11,12,13,14,15,2,3,4,5,6,7,8,9
+			List<SchHandoutPage> lstPages = Collections.EMPTY_LIST;
+			if ("PPT".equals(type)) {
+				lstPages = this.convertPPTToJPG(objOfficeFile, docPath, handoutId);
+			}
+			if ("PDF".equals(type)) {
+				lstPages = this.convertPDFToPNG(objOfficeFile, docPath, handoutId);
+			}
+
+			// 3.insert pages
+			if (lstPages.isEmpty()) {
+				log.error("转换ppt为空:" + handoutId + "-" + docPath + "-" + userId + "-" + uploadModule);
+				// 4.modify handout status and pageCount
+				SchHandout objHandout = this.read(SchHandout.class, handoutId);
+				// jgw ,直接修改为发布
+				objHandout.setStatus(SchHandout.STATUS_FAILURE);
+
+				this.saveHandout(objHandout);
+				return new Result(false, "office讲义转换失败");
+			}
+			for (SchHandoutPage page : lstPages) {
+				page.setHandoutId(handoutId);
+			}
+			saveOrUpdateAll(lstPages);
+
+			// 4.modify handout status and pageCount
+			SchHandout objHandout = this.read(SchHandout.class, handoutId);
+			objHandout.setPageCount(lstPages.size());
+			// jgw ,直接修改为发布
+			objHandout.setStatus(SchHandout.STATUS_ISSUED);
+
+			// 如果首页图片为null 并且 lstPages不为空
+			if (StringUtils.isBlank(objHandout.getCoverPageUrl())) {
+				objHandout.setCoverPageUrl(lstPages.get(0).getImgPath());
+			}
+
+			this.saveHandout(objHandout);
+
+			// 如果是管理员上传,处理指定到别处的数据
+			doInitClassHandout(objHandout, lstPages);
+
+			log.debug("end1...docDealMsgReceiveService call insertHandoutPages success: docPath:  " + docPath
+					+ " ;handoutId:  " + handoutId);
+		} catch (Exception e) {
+			log.error("调用docdeal服务器解析ppt失败,失败原因:" + handoutId, e);
+			SchHandout objHandout = this.read(SchHandout.class, handoutId);
+			if (null != objHandout) {
+				objHandout.setStatus(SchHandout.STATUS_FAILURE);
+				this.saveHandout(objHandout);
+			}
+			// throw e;
+		} finally {
+			if (null != objOfficeFile) {
+				fileUploadService.doDeleteTempOssFile(objOfficeFile.getParentFile(), uploadModule, userId);
+			}
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * PPT\PPTX (office文件不直接处理,发送消息,使用特定的文档处理服务器处理) PDF直接处理
+	 * 
+	 * 
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public Result insertOrgHandout(String fullPath, String module, SchHandout handout, String collegeCourseId) {
+		File file = null;
+		try {
+			// 取得当前上传文件类型:office(ppt、pptx)或者pdf,直接用后缀名来判断格式(office还是pdf)
+			String filePart[] = fullPath.split("\\.");
+			String fileType = filePart[filePart.length - 1];
+
+			String rootPath = sccConfig.getResRootPath();
+			String outputPath = rootPath.concat(filePart[0].substring(1, filePart[0].length()));
+
+			// 1.下载到应用服务器本地
+			file = fileUploadService.doGetOssFile(fullPath,
+					"/temp/uploads/handout/" + UUIDUtils.generateUUID() + "/" + fileType + "." + fileType, module,
+					ClientUtils.getUserId());
+
+			// 是否是office
+			boolean pptFlag = false;
+
+			if ("PPT".equals(fileType.toUpperCase()) || "PPTX".equals(fileType.toUpperCase())) {
+
+				// 如果有密码,返回前台提示 07+ 无打开密码有权限密码无法检测出来
+				if (getDecryptFlag(file, fileType.toUpperCase())) {
+					return new Result(false, "导入失败:您提交的文件有密码,请上传没有密码的文件!");
+				}
+
+				pptFlag = true;
+			}
+
+			if (!"PDF".equals(fileType.toUpperCase())) {
+				/*
+				 * docConverterUtil dcu=new docConverterUtil(file.getPath());
+				 * dcu.setOutputPath(outputPath); dcu.conver(); fullPath=filePart[0]+".pdf";
+				 */
+				JacobUtil.formatConvert(fileType, rootPath.concat(fullPath.substring(1, fullPath.length())));
+				fullPath = filePart[0] + ".pdf";
+			}
+
+			TraceUtils.setCreateTrace(handout);
+			handout.setPlayCount(0);
+			handout.setStatus(SchHandout.STATUS_PROCESSING);
+			handout.setClassId(ClientUtils.getClassId());
+			handout.setFullPath(fullPath);
+			handout.setFullLength((int) (file.length() > 0 ? file.length() / 1024 : 0));
+			handout.setOrgId(ClientUtils.getOrgId());
+			this.saveHandout(handout);
+			handout.setOriginHandoutId(handout.getHandoutId());
+			this.saveHandout(handout);
+
+			// 保存OrgText —— 讲义详情
+			orgTextService.doSaveOrgText(handout.getHandoutId(), OrgText.TABLE_NAME_HANDOUT, handout.getRemark());
+
+			// 更新上传文件使用轨迹
+			fileUploadService.updateUploadTrace(fullPath, module, SysFileUploadTrace.FILE_USE, handout.getHandoutId());
+
+			// 讲义和科目关联
+			this.insertReCourse(collegeCourseId, handout.getHandoutId());
+
+			// 删除pdf ppt原文件,已上传至阿里与服务器
+			// FileUtils.deleteQuietly(file);
+			// insertAppointSelfOrg(handout.getHandoutId(),ClientUtils.getOrgId(),collegeCourseId);
+			Result result = new Result(true);
+			result.addData("pptFlag", pptFlag);
+			return result;
+		} catch (Exception e) {
+			this.log.error("讲义转码失败" + fullPath, e);
+		} finally {
+			if (file != null) {
+				// 删除下载到应用服务器的文档
+				fileUploadService.doDeleteTempOssFile(file.getParentFile(), module, ClientUtils.getUserId());
+			}
+		}
+		return new Result(false);
+	}
+
+	/**
+	 * 编辑讲义
+	 */
+	public Result doEditHandout(SchHandout newhandout, String type) {
+		SchHandout handout = read(SchHandout.class, newhandout.getHandoutId());
+		handout.setName(newhandout.getName());
+		// handout.setSubjectId(newhandout.getSubjectId());
+		// handout.setSubjectName(newhandout.getSubjectName());
+		handout.setRemark(newhandout.getRemark());
+		if (StringUtils.isNotBlank(newhandout.getCoverPageUrl())) {
+			handout.setCoverPageUrl(newhandout.getCoverPageUrl());
+		}
+		TraceUtils.setUpdateTrace(handout);
+		this.saveHandout(handout);
+
+		// 保存OrgText —— 讲义详情
+		orgTextService.doSaveOrgText(handout.getHandoutId(), OrgText.TABLE_NAME_HANDOUT, newhandout.getRemark());
+
+		// 更新统计表讲义名字
+		updateHandoutStatisticName(handout.getHandoutId(), handout.getName());
+
+		/*
+		 * if ("class".equals(type)) { return new Result(true); } String hql =
+		 * " from SchHandout where handoutId != ? and originHandoutId = ?";
+		 * List<SchHandout> lstHandout = find(hql,
+		 * CollectionUtils.newList(handout.getHandoutId(), handout.getHandoutId()),
+		 * SchHandout.class); List<String> classIds = new ArrayList<String>();
+		 * List<String> origSubjectIds = new ArrayList<String>(); List<String>
+		 * handoutIds = new ArrayList<String>(); for (SchHandout schHandout :
+		 * lstHandout) { classIds.add(schHandout.getClassId());
+		 * origSubjectIds.add(schHandout.getSubjectId());
+		 * handoutIds.add(schHandout.getHandoutId()); }
+		 */
+		/*
+		 * if (classIds.isEmpty() || origSubjectIds.isEmpty()) { return new
+		 * Result(true); } hql =
+		 * " from SchClassSubject where deleteFlag is false and classId in (:classIds) and origSubjectId in (:origSubjectIds)"
+		 * ; Map<String, Object> args = new HashMap<String, Object>();
+		 * args.put("classIds", classIds.toArray()); args.put("origSubjectIds",
+		 * origSubjectIds.toArray()); List<SchClassSubject> lstSubject =
+		 * findByComplexHql(hql, args, SchClassSubject.class); Map<String,
+		 * SchClassSubject> map = new HashMap<String, SchClassSubject>(); for
+		 * (SchClassSubject schClassSubject : lstSubject) {
+		 * map.put(schClassSubject.getClassId() + schClassSubject.getOrigSubjectId(),
+		 * schClassSubject); } for (SchHandout schHandout : lstHandout) {
+		 * 
+		 * SchClassSubject scs = map.get(schHandout.getClassId() +
+		 * schHandout.getSubjectId()); if (scs == null) { continue; }
+		 * TraceUtils.setUpdateTrace(schHandout); schHandout.setName(handout.getName());
+		 * schHandout.setSubjectId(scs.getClassSubjectId());
+		 * schHandout.setSubjectName(scs.getName()); this.saveHandout(schHandout); }
+		 * 
+		 * // 保存OrgText —— 讲义详情 orgTextService.doSaveOrgTexts(handoutIds,
+		 * OrgText.TABLE_NAME_HANDOUT, newhandout.getRemark());
+		 */
+
+		return new Result(true);
+	}
+
+	/**
+	 * 更新统计表讲义名字
+	 * 
+	 * @param handoutId
+	 * @param handoutName
+	 */
+	private void updateHandoutStatisticName(String handoutId, String handoutName) {
+		String hql = " from SchHandoutStatistic where handoutId = ? and deleteFlag is false";
+		List<SchHandoutStatistic> handoutStatistics = find(hql, CollectionUtils.newList(handoutId),
+				SchHandoutStatistic.class);
+		for (SchHandoutStatistic schHandoutStatistic : handoutStatistics) {
+			schHandoutStatistic.setHandoutName(handoutName);
+			TraceUtils.setUpdateTrace(schHandoutStatistic);
+			save(schHandoutStatistic);
+		}
+	}
+
+	/**
+	 * 得到office 文档是否有密码
+	 * 
+	 * @param file
+	 * @param fileType
+	 * @return
+	 */
+	private boolean getDecryptFlag(File file, String fileType) {
+
+		if ("PPT".equals(fileType.toUpperCase())) {
+			return getPPTDecryptFlag(file);
+		} else if ("PPTX".equals(fileType.toUpperCase())) {
+			return getPPTXDecryptFlag(file);
+		}
+
+		return false;
+	}
+
+	/**
+	 * ppt 检测是否包含密码
+	 * 
+	 * @param file
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private boolean getPPTDecryptFlag(File file) {
+
+		boolean flag = false;
+
+		Biff8EncryptionKey.setCurrentUserPassword(null);
+		NPOIFSFileSystem fs = null;
+
+		try {
+			fs = new NPOIFSFileSystem(file, true);
+			HSLFSlideShow hss = new HSLFSlideShow(fs);
+			IOUtils.closeQuietly(fs);
+		} catch (IOException e) {
+			log.error("PPT: getPPTDecryptFlag IOException :" + e);
+		} catch (EncryptedPowerPointFileException e) {
+			if ("The CurrentUserAtom specifies that the document is encrypted".equals(e.getMessage())
+					|| "Encrypted PowerPoint files are not supported".equals(e.getMessage())) {
+				flag = true;
+			}
+		} catch (Exception e) {
+			log.error("PPT: getPPTDecryptFlag Exception :" + e);
+		}
+
+		return flag;
+
+	}
+
+	/**
+	 * pptx 检测是否有密码,07+ 无打开文件密码,有编辑密码,暂时判断不出来
+	 * 
+	 * @param file
+	 * @return
+	 */
+	private boolean getPPTXDecryptFlag(File file) {
+		boolean flag = false;
+		InputStream in = null;
+		POIFSFileSystem fs = null;
+		EncryptionInfo encInfo = null;
+
+		try {
+			in = new FileInputStream(file);
+			fs = new POIFSFileSystem(in);
+			encInfo = new EncryptionInfo(fs);
+			if (null != encInfo) {
+				Decryptor dec = Decryptor.getInstance(encInfo);
+				if (!dec.verifyPassword(null)) {
+					flag = true;
+				}
+			}
+		} catch (FileNotFoundException e) {
+			log.error("getPPTXDecryptFlag()_获取InputStream 异常:" + e);
+		} catch (IOException e) {
+			log.error("getPPTXDecryptFlag()_获取POIFSFileSystem 异常:" + e);
+		} catch (NullPointerException e) {
+			log.error("getPPTXDecryptFlag()_获取EncryptionInfo,07+ 异常:" + e);
+		} catch (GeneralSecurityException e) {
+			log.error("getPPTXDecryptFlag()_获取verifyPassword 异常:" + e);
+		} catch (Exception e) {
+			log.error("PPTX: getPPTXDecryptFlag Exception :" + e);
+		}
+
+		return flag;
+	}
+
+	/**
+	 * 使用jacob另存为图片,需要测试多个请求同时调用情况 1.office2013报错,但是用office2013另存為效果最好
+	 * 2.office2007解析不完美,字体偏粗,边上有较明显锯齿,可以用jacob調用
+	 * 3.office2010解析基本正常,但是较于office2013,大字体和边框会有非常少量锯齿(推荐使用)
+	 * 
+	 * info:服务器推荐使用office2010,jacob.jar包更新后如果支持office2013,测试哪个版本会效果更好,可以替换服务器office版本
+	 * 
+	 * @param file
+	 *            ppt文件
+	 * @param docPath
+	 *            oss 存放office文件的路径
+	 * @return
+	 */
+	@Override
+	public List<SchHandoutPage> convertPPTToJPG(File file, String docPath, String handoutId) {
+
+		ActiveXComponent application = null;
+		Dispatch ppt = null;
+		List<SchHandoutPage> results = new ArrayList<SchHandoutPage>(30);
+		try {
+
+			if (!file.exists()) {
+				throw new Exception("文件不存在!");
+			}
+			// 获取另存为图片时的文件
+			File imgFile = getHandoutImgPath(file.getParentFile().getPath());
+
+			log.debug("消息调用JACOB解析ppt成功,进入解析方法,开始初始化JACOB组件!");
+			ComThread.InitSTA();
+			log.debug("开始初始化JACOB组件,ComThread.InitSTA()调用成功!");
+
+			application = new ActiveXComponent("PowerPoint.Application");
+			// 默认不可见,但是大文件另存为时,会出现“ESC可取消保存”的进度框,暂时不知道如何不显示进度条
+			// Dispatch.put(application, "Visible", new Variant(true));
+			// 打开一个现有的 Presentation 对象
+
+			Dispatch ppts = application.getProperty("Presentations").toDispatch();
+
+			ppt = Dispatch.call(ppts, "Open", file.getPath(), true, // ReadOnly
+					false, // Untitled指定文件是否有标题
+					false// WithWindow指定文件是否可见
+			).toDispatch();
+
+			// 另存为图片 (17):图片类型
+			// 将web服务器中的ppt另存为图片,调用ppt的另存为方法,图片格式为(幻灯片1.JPG,幻灯片2.JPG...)
+			Dispatch.call(ppt, "SaveAs", imgFile.getPath(), new Variant(17));
+
+			// 上传图片到oss服务器并准备需要保存到数据库的handoutpage数据
+			results = uploadImgPrepareData(imgFile, docPath, handoutId);
+
+		} catch (ComFailException e) {
+			log.error("ComFailException解析保存ppt异常:" + e, e);
+		} catch (Exception e) {
+			log.error("Exception解析保存ppt异常:" + e, e);
+		} finally {
+			if (ppt != null) {
+				Dispatch.call(ppt, "Close");
+			}
+			if (application != null) {
+				application.invoke("Quit");
+			}
+			ComThread.Release();
+			ComThread.quitMainSTA();
+		}
+		return results;
+	}
+
+	/**
+	 * 创建另存为图片文件路径,ppt解析的图片存在ppt同级目录image文件夹下,默认命名方式为:幻灯片1.JPG
+	 * 
+	 * @param path
+	 *            ppt上传到web服务器的路径
+	 * @return
+	 */
+	private File getHandoutImgPath(String path) {
+		File f = new File(path + "/image");
+		f.mkdirs();
+		return f;
+	}
+
+	/**
+	 * 将解析后的图片上传到oss,并且返回需要存储到数据库的handoutpage信息
+	 * @param imgFileDir
+	 * @param docPath
+	 * @param handoutId
+	 * @return
+	 * @throws IOException
+	 */
+	@SuppressWarnings({ "unchecked", "unused" })
+	private List<SchHandoutPage> uploadImgPrepareData(File imgFileDir, String docPath, String handoutId)
+			throws IOException {
+		List<SchHandoutPage> results = Collections.EMPTY_LIST;
+		try {
+			if (imgFileDir != null && imgFileDir.exists()) {
+
+				String[] filelist = imgFileDir.list();
+
+				// 判断是否有另存为的图片
+				if (null != filelist && filelist.length > 0) {
+					results = new ArrayList<SchHandoutPage>(filelist.length);
+					File imgFile;
+
+					String startPath = "";
+					int iPosition = docPath.lastIndexOf('/');
+					if (iPosition != -1) {
+						startPath = docPath.substring(0, iPosition);
+					}
+					int i = 1;
+					for (String strFile : filelist) {
+						// cacheService.set("handout_upload_schedule_"+handoutId, 60,
+						// i*100f/filelist.length);
+						// 直接使用strPath构造imgFile,会导致获取输入流时,报错,file只给文件名,默认为工程目录,和src同级,用全路径构造
+						imgFile = new File(imgFileDir.getPath() + "/" + strFile);
+						if (imgFile.getName().indexOf(".") != -1) {
+							// 图片文件名
+							String imgFileName = imgFile.getName().split("\\.")[0];
+							// 图片文件类型
+							String imgFileType = imgFile.getName().split("\\.")[1];
+
+							if (StringUtils.isNotBlank(imgFileName) && imgFileName.length() > 3) {
+								// prepare image data
+								String ossFileName = imgFileName.substring(3, imgFileName.length());
+
+								String destPath = startPath + "/" + ossFileName + "." + imgFileType;
+
+								// upload data
+								ossService.uplpadImage(imgFile, destPath);
+
+								// prepare DB data
+								results.add(newHandoutPage(destPath, Integer.parseInt(ossFileName)));
+							}
+						}
+					}
+
+				} else {
+					log.error("jacob解析失败,无另存为的图片,image文件夹为空:" + imgFileDir.getPath());
+					return Collections.EMPTY_LIST;
+				}
+			} else {
+				log.error("jacob解析失败,未生成imgFileDir文件夹");
+				return Collections.EMPTY_LIST;
+			}
+		} finally {
+			FileUtils.deleteDirectory(imgFileDir);
+		}
+		return results;
+	}
+
+	/**
+	 * 使用jpedal转换pdf为图片,默认格式为1.PNG、2.PNG、3.PNG
+	 * 
+	 * @param
+	 *
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private List<SchHandoutPage> convertPDFToPNG(File file, String module, String handoutId) {
+
+//		List<SchHandoutPage> results = new ArrayList<SchHandoutPage>(30);
+//		// 得到转换对象
+//		ConvertPagesToImages objConvert = new ConvertPagesToImages(file.getPath());
+//		try {
+//			if (objConvert.openPDFFile()) {
+//				int pageCount = objConvert.getPageCount();
+//				String webPath = HandoutService.class.getClassLoader().getResource("../../web").getPath();
+//
+//				for (int iPage = 1; iPage <= pageCount; iPage++) {
+//					// cacheService.set("handout_upload_schedule_"+handoutId, 60,
+//					// iPage*100f/pageCount);
+//					// 得到解析的每一页图片
+//					BufferedImage img = objConvert.getPageAsImage(iPage, true);
+//
+//					// 判断图片是否高大于宽
+//					int width = img.getWidth();
+//					int height = img.getHeight();
+//					BufferedImage handlerImg = null;
+//					if (width < height) {
+//						handlerImg = rotatePdfImg(img, 270, null);
+//					}
+//
+//					// 上传
+//					String destPath = "/web/res/img/school/handout/" + file.getParentFile().getName() + "/" + iPage
+//							+ ".PNG";
+//					String directory = webPath + "res/img/school/handout/" + file.getParentFile().getName();
+//					String path = directory + "/" + iPage + ".PNG";
+//
+//					ByteArrayOutputStream baos = new ByteArrayOutputStream();
+//					ImageIO.write(handlerImg == null ? img : handlerImg, "png", baos);
+//					InputStream is = new ByteArrayInputStream(baos.toByteArray());
+//
+//					ossService.uplpadImage(is, "PNG", destPath);
+//
+//					IOUtils.closeQuietly(baos);
+//
+//					results.add(newHandoutPage(path, iPage));
+//				}
+//			}
+//			objConvert.closePDFfile();
+//		} catch (PdfException e) {
+//			log.error("jpedal解析pdf为图片失败:", e);
+//			return Collections.EMPTY_LIST;
+//		} catch (IOException e) {
+//			log.error("pdf解析为图片失败:", e);
+//			return Collections.EMPTY_LIST;
+//		} finally {
+//			// 删除下载到应用服务器的文档
+//			fileUploadService.doDeleteTempOssFile(file.getParentFile(), module, ClientUtils.getUserId());
+//		}
+
+		return null;
+	}
+
+	private BufferedImage rotatePdfImg(BufferedImage image, int degree, Color bgcolor) {
+		int degree0 = degree;
+		// 原始图象的宽高
+		int iwidth = image.getWidth();
+		int iheight = image.getHeight();
+
+		// 处理的宽高
+		int width = 0;
+		int height = 0;
+		int positionX = 0;
+		int positionY = 0;
+		degree0 = degree0 % 360;
+		if (degree0 < 0) {
+			degree0 = 360 + degree0;
+		}
+
+		// 将角度转为弧度
+		double ang = Math.toRadians(degree0);
+
+		// 确定旋转后的图象的高度和宽度
+		if (degree0 == 180 || degree0 == 0 || degree0 == 360) {
+			width = iwidth;
+			height = iheight;
+		} else if (degree0 == 90 || degree0 == 270) {
+			width = iheight;
+			height = iwidth;
+		} else {
+			double cosVal = Math.abs(Math.cos(ang));
+			double sinVal = Math.abs(Math.sin(ang));
+			width = (int) (sinVal * iheight) + (int) (cosVal * iwidth);
+			height = (int) (sinVal * iwidth) + (int) (cosVal * iheight);
+		}
+
+		// 确定原点坐标
+		positionX = (width - iwidth) / 2;
+		positionY = (height - iheight) / 2;
+		BufferedImage rotatedImage = new BufferedImage(width, height, image.getType());
+		Graphics2D gs = (Graphics2D) rotatedImage.getGraphics();
+		if (bgcolor == null) {
+			rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
+		} else {
+			gs.setColor(bgcolor);
+			gs.fillRect(0, 0, width, height);
+		}
+
+		AffineTransform at = new AffineTransform();
+		// 旋转图象
+		at.rotate(ang, width / 2, height / 2);
+		at.translate(positionX, positionY);
+		AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
+		op.filter(image, rotatedImage);
+
+		return rotatedImage;
+
+	}
+
+	/**
+	 * 新增HandoutPage对象
+	 * @param path
+	 * @param i
+	 * @return
+	 */
+	private SchHandoutPage newHandoutPage(String path, int i) {
+		String path0 = path;
+		SchHandoutPage page = new SchHandoutPage();
+
+		path0 = path0.replace('\\', '/');
+		int startIdx = path0.indexOf("/web/");
+		path0 = path0.substring(startIdx);
+
+		page.setImgPath(path0);
+
+		// 旧版本convertPPTToPNG 这里为(i + 1) convertPPTToJPG 为i
+		page.setPageOrder(i);
+		TraceUtils.setCreateTrace(page);
+		return page;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.school.service.IHandoutService#deleteHandouts(java.lang.
+	 * String[])
+	 */
+	@Override
+	public Result deleteHandouts(String[] handoutIds) {
+		if (handoutIds.length == 0) {
+			return new Result(false, "参数错误");
+		}
+		for (String handoutId : handoutIds) {
+			SchHandout interact = read(SchHandout.class, handoutId);
+			interact.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(interact);
+			this.saveHandout(interact);
+		}
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result deleteOrgHandouts(String[] handoutIds, Integer delAll, String orgIds[], String classIds[]) {
+
+		for (String handoutId : handoutIds) {
+
+			if ((orgIds != null && orgIds.length != 0) || (classIds != null && classIds.length != 0)) {
+				// 删除需要回撤的讲义
+				deleteAppoint(handoutId, orgIds, classIds);
+			} else {
+				// 删除讲义
+				String hql = " from SchHandoutReCourse where handoutId = ? and deleteFlag is false and orgId = ?";
+				SchHandoutReCourse shr = findUnique(hql, CollectionUtils.newList(handoutId, ClientUtils.getOrgId()),
+						SchHandoutReCourse.class);
+				if (shr != null) {
+					TraceUtils.setUpdateTrace(shr);
+					shr.setDeleteFlag(true);
+					save(shr);
+
+					this.courseWareService.deleteOrgCourseware(shr.getHandoutId(), shr.getOrgId());
+				}
+				/*
+				 * SchHandout handout = this.read(SchHandout.class, handoutId); if(handout !=
+				 * null){ TraceUtils.setUpdateTrace(handout); handout.setDeleteFlag(true);
+				 * this.saveHandout(handout); }
+				 */
+				// 用户选择同时删除下级讲义
+				if (delAll == 1) {
+					deleteSub(handoutId, ClientUtils.getOrgId());
+				}
+			}
+
+		}
+
+		return new Result(true);
+	}
+
+	@SuppressWarnings("unchecked")
+	private void deleteSub(String handoutId, String currOrgId) {
+		// 机构层级视频是没有重新new ,查询出机构下级ID再删关联表
+		String sql = " select oa.organization_id from organization as oa,organization ob " + " where "
+				+ " ob.ORGANIZATION_ID = ? " + " and  " + " oa.org_code like  CONCAT(ob.org_code,'%' ) "
+				+ " and oa.delete_flag is false and ob.delete_flag is false " + " order by oa.level,oa.org_code asc ";
+
+		List<String> orgIds = this.findBySql(sql, CollectionUtils.newList(currOrgId));
+
+		String hql = " from SchHandoutReCourse where handoutId = :handoutId and deleteFlag is false and orgId in (:orgIds)";
+		Map<String, Object> map = new HashMap<String, Object>();
+		map.put(HANDOUT_ID, handoutId);
+		map.put("orgIds", orgIds.toArray());
+		List<SchHandoutReCourse> handoutCourses = findByComplexHql(hql, map, SchHandoutReCourse.class);
+		for (SchHandoutReCourse schHandoutReCourse : handoutCourses) {
+			schHandoutReCourse.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(schHandoutReCourse);
+			save(schHandoutReCourse);
+		}
+
+		// 班主任层面视频指定过后都是new 出来的,通过originVideoId 可以查出所有指定过去的视频
+		hql = "select classId from ClsClass where orgId in (:orgIds) and deleteFlag is false";
+		map = new HashMap<String, Object>();
+		map.put("orgIds", orgIds.toArray());
+		List<String> clsIds = findByComplexHql(hql, map, String.class);
+		if (!clsIds.isEmpty()) {
+			hql = " from SchHandout where originHandoutId = :handoutId and deleteFlag is false and handoutId!=originHandoutId and classId in (:classIds)";
+			map = new HashMap<String, Object>();
+			map.put(HANDOUT_ID, handoutId);
+			map.put("classIds", clsIds.toArray());
+			List<SchHandout> lstHandout = findByComplexHql(hql, map, SchHandout.class);
+			for (SchHandout schHandout : lstHandout) {
+				schHandout.setDeleteFlag(true);
+				TraceUtils.setUpdateTrace(schHandout);
+				this.saveHandout(schHandout);
+			}
+		}
+	}
+
+	private Result deleteAppoint(String handoutId, String orgIds[], String classIds[]) {
+		Map<String, Object> args = new HashMap<String, Object>();
+		// 删除需要回撤的机构讲义
+		if (orgIds.length != 0) {
+
+			String hql = " from SchHandoutReCourse where handoutId = :handoutId and deleteFlag is false and orgId in (:orgIds) and orgId != :currOrgId";
+			args = new HashMap<String, Object>();
+			args.put(HANDOUT_ID, handoutId);
+			args.put("orgIds", orgIds);
+			args.put("currOrgId", ClientUtils.getOrgId());
+			List<SchHandoutReCourse> courses = findByComplexHql(hql, args, SchHandoutReCourse.class);
+			for (SchHandoutReCourse course : courses) {
+				TraceUtils.setUpdateTrace(course);
+				course.setDeleteFlag(true);
+				save(course);
+
+				this.courseWareService.deleteOrgCourseware(course.getHandoutId(), course.getOrgId());
+			}
+		}
+
+		// 删除需要回撤的班主任讲义
+		if (classIds.length != 0) {
+			args = new HashMap<String, Object>();
+			args.put(HANDOUT_ID, handoutId);
+			args.put("classIds", classIds);
+			String hql = " from SchHandout where originHandoutId = :handoutId and deleteFlag is false and classId in (:classIds)";
+			List<SchHandout> handouts = findByComplexHql(hql, args, SchHandout.class);
+			for (SchHandout handout : handouts) {
+				TraceUtils.setUpdateTrace(handout);
+				handout.setDeleteFlag(true);
+				this.saveHandout(handout);
+			}
+
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 获取讲义列表数据
+	 * 
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> handoutLst(String tid) {
+
+		User user = read(User.class, ClientUtils.getUserId());
+		List<Object[]> handoutLst = null;
+
+		String hql = "";
+		List<Object> agrs = new ArrayList<Object>();
+		agrs.add(ClientUtils.getClassId());
+		// 1班主任:获取该班级(class_id)下面的讲师负责课程下的讲义;
+		// 2讲师:获取该讲师(teacher_id)负责课程下的讲义
+		if (user != null && UserInfoWrapper.ROLE_CHARGER.equals(ClientUtils.getCurrentRole())) {
+			hql = "select h.handoutId,h.name,h.pageCount,h.status,h.subjectId,h.subjectName, h.orderNum, h.remark  "
+					+ " from SchHandout h " + " where h.deleteFlag is false " + " and h.classId = ?";
+		} else if (user != null && UserInfoWrapper.ROLE_TEACHER.equals(ClientUtils.getCurrentRole())) {
+			hql = "select h.handoutId,h.name,h.pageCount,h.status,h.subjectId,h.subjectName,h.orderNum, h.remark  "
+					+ " from SchHandout h " + " where h.deleteFlag is false " + " and h.classId = ?";
+		}
+		if (StringUtils.isNotBlank(tid)) {
+			// 其他
+			if ("-1".equals(tid)) {
+				hql = hql.concat(
+						" and not EXISTS (select 1 from SchClassSubject t where t.deleteFlag is false and t.classSubjectId = h.subjectId) ");
+			} else {
+				hql = hql.concat(" and h.subjectId = ?");
+				agrs.add(tid);
+			}
+		}
+		hql = hql.concat(" ORDER BY h.orderNum ASC");
+		handoutLst = findwithRawResult(hql, agrs);
+
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(handoutLst.size());
+		Map<String, Object> map = null;
+
+		for (Object[] obj : handoutLst) {
+			map = new HashMap<String, Object>(6);
+			map.put(HANDOUT_ID, obj[0]);
+			map.put("name", obj[1]);
+			map.put("pageCount", obj[2]);
+			map.put("status", obj[3]);
+			map.put("subjectId", obj[4]);
+			map.put("subjectName", obj[5]);
+			map.put("orderNum", obj[6]);
+			map.put("remark", obj[7]);
+			lstMap.add(map);
+		}
+		return lstMap;
+	}
+
+	/**
+	 * 获取机构讲义列表数据
+	 * 
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> handoutOrgLst(String collegeCourseId, String subjectId) {
+
+		List<Object[]> handoutLst = null;
+		List<Object> args = new ArrayList<Object>();
+		String hql = "";
+		// 其他
+		if (("-" + collegeCourseId).equals(subjectId)) {
+			hql = "select v.handoutId,v.name,v.pageCount,v.status,'','','',0,v.subjectId from SchHandout v,SchHandoutReCourse r where v.collegeCourseId = ? and v.deleteFlag is false and r.deleteFlag is false and r.handoutId = v.handoutId and r.orgId = ? and"
+					+ " not EXISTS (select 1 from SchSubject t where t.deleteFlag is false and t.subjectId = v.subjectId)";
+			args.add(collegeCourseId);
+			args.add(ClientUtils.getOrgId());
+		} else {
+			hql = "select h.handoutId,h.name,h.pageCount,h.status,o.courseCategoryName,o.name,h.subjectName,s.orderNum,h.subjectId "
+					+ " from SchHandoutReCourse s , SchHandout h,OrgCollegeCourse o"
+					+ " where s.deleteFlag is false and h.deleteFlag is false "
+					+ " and o.collegeCourseId = s.collegeCourseId" + " and s.orgId = ?"
+					+ " and s.handoutId = h.handoutId ";
+			args.add(ClientUtils.getOrgId());
+			if (StringUtils.isNotBlank(subjectId)) {
+				hql = hql.concat(" and h.subjectId = ?");
+				args.add(subjectId);
+			}
+			hql = hql.concat(" and s.collegeCourseId = ? ORDER BY s.orderNum ASC");
+			args.add(collegeCourseId);
+		}
+		handoutLst = find(hql, args, Object[].class);
+
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(handoutLst.size());
+		Map<String, Object> map = null;
+
+		for (Object[] obj : handoutLst) {
+			map = new HashMap<String, Object>();
+			map.put(HANDOUT_ID, obj[0]);
+			map.put("name", obj[1]);
+			map.put("pageCount", obj[2]);
+			map.put("status", obj[3]);
+			map.put("courseCategoryName", obj[4]);
+			map.put("courseName", obj[5]);
+			map.put("subjectName", obj[6]);
+			map.put("orderNum", obj[7]);
+			map.put("subjectId", obj[8]);
+
+			// findAlreadyOrg(map,obj);
+
+			lstMap.add(map);
+		}
+		return lstMap;
+	}
+
+	/**
+	 * 指定机构讲义
+	 * 
+	 * @return
+	 */
+	@Override
+	public Result insertAppointHandout(String handoutIds[], String orgIds[], String classIds[],
+			String collegeCourseId) {
+
+		if (null == handoutIds || handoutIds.length == 0) {
+			return new Result(false, "参数错误");
+		}
+		// 一次性查询classId对应的orgId
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		Map<String, String> classMap = new HashMap<String, String>();
+		if (classIds.length > 0) {
+			String hql = " from ClsClass where classId in (:classIds) and deleteFlag is false";
+			argsMap = new HashMap<String, Object>();
+			argsMap.put("classIds", classIds);
+			List<ClsClass> classList = findByComplexHql(hql, argsMap, ClsClass.class);
+
+			// 放入map中 KEY:classId VALUE:orgId
+
+			for (ClsClass orgClass : classList) {
+				classMap.put(orgClass.getClassId(), orgClass.getOrgId());
+			}
+		}
+
+		// 一次性查出handoutId对应的handoutOrder
+		Map<String, Integer> orderMap = new HashMap<String, Integer>();
+		String hql = " from SchHandoutReCourse where handoutId in (:handoutIds) and deleteFlag is false and orgId = :currOrgId";
+		argsMap = new HashMap<String, Object>();
+		argsMap.put("handoutIds", handoutIds);
+		argsMap.put("currOrgId", ClientUtils.getOrgId());
+		List<SchHandoutReCourse> handoutCourse = findByComplexHql(hql, argsMap, SchHandoutReCourse.class);
+		for (SchHandoutReCourse schHandoutReCourse : handoutCourse) {
+			orderMap.put(schHandoutReCourse.getHandoutId(), schHandoutReCourse.getOrderNum());
+		}
+
+		for (String handoutId : handoutIds) {
+			if (orgIds.length > 0) { // 指定给机构
+				insertAppointOrg(orgIds, handoutId, collegeCourseId, orderMap);
+			}
+			if (classIds.length > 0) { // 指定给班级
+				insertAppointClass(classIds, handoutId, classMap, collegeCourseId, orderMap);
+			}
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 指定给机构
+	 * 
+	 * @param orgIds
+	 * @param handoutId
+	 * @param collegeCourseId
+	 */
+	private void insertAppointOrg(String orgIds[], String handoutId, String collegeCourseId,
+			Map<String, Integer> orderMap) {
+		String hql = "select orgId from SchHandoutReCourse where handoutId = :handoutId and deleteFlag is false and orgId in (:orgIds)";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put(HANDOUT_ID, handoutId);
+		args.put("orgIds", orgIds);
+		List<String> strings = findByComplexHql(hql, args, String.class);
+		List<String> orgList = new ArrayList<String>();
+		for (String orgId : orgIds) {
+			orgList.add(orgId);
+		}
+		// 剔除掉不符合条件的orgId
+		orgList.removeAll(strings);
+		if (orgList.isEmpty()) {
+			return;
+		}
+		for (String orgId : orgList) {
+			SchHandoutReCourse shrc = new SchHandoutReCourse();
+			shrc.setCollegeCourseId(collegeCourseId);
+			shrc.setDeleteFlag(false);
+			shrc.setHandoutId(handoutId);
+			shrc.setOrderNum(orderMap.get(handoutId));
+			shrc.setOrgId(orgId);
+			TraceUtils.setCreateTrace(shrc);
+			save(shrc);
+
+			this.courseWareService.insertOrgCourseware(handoutId, ClientUtils.getOrgId(), orgId, collegeCourseId);
+		}
+	}
+
+	/**
+	 * 指定给班级
+	 * 
+	 * @param classIds
+	 * @param handoutId
+	 * @param classMap
+	 */
+	private void insertAppointClass(String classIds[], String handoutId, Map<String, String> classMap,
+			String collegeCourseId, Map<String, Integer> orderMap) {
+
+		// 章节id
+		Map<String, SubjectChapter> origChapterMap = new HashMap<String, SubjectChapter>();
+		SchHandout handout = read(SchHandout.class, handoutId);
+
+		String hql = "select classId from SchHandout where deleteFlag is false and originHandoutId = :handoutId and classId in (:classIds)";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put("classIds", classIds);
+		args.put(HANDOUT_ID, handoutId);
+		List<String> strings = findByComplexHql(hql, args, String.class);
+		List<String> classList = new ArrayList<String>();
+		for (String classId : classIds) {
+			classList.add(classId);
+		}
+		classList.removeAll(strings);
+		if (classList.isEmpty()) {
+			return;
+		}
+		// 一次性查询班级ID对应的classSubjectId
+		hql = " from SchClassSubject where classId in(:classIds) and origSubjectId = :subjectId and deleteFlag is false";
+		args = new HashMap<String, Object>();
+		args.put("classIds", classList.toArray());
+		args.put("subjectId", handout.getSubjectId());
+		List<SchClassSubject> lstClassSubject = findByComplexHql(hql, args, SchClassSubject.class);
+		Map<String, String> subjectMap = new HashMap<String, String>();
+		for (SchClassSubject schClassSubject : lstClassSubject) {
+			subjectMap.put(schClassSubject.getClassId(), schClassSubject.getClassSubjectId());
+		}
+
+		OrgText oldOrgText = orgTextService.getOrgText(handoutId, OrgText.TABLE_NAME_HANDOUT);
+		for (String classId : classList) {
+
+			SchHandout sh = new SchHandout();
+
+			sh.setDeleteFlag(false);
+			sh.setName(handout.getName());
+			sh.setPageCount(handout.getPageCount());
+			sh.setStatus(handout.getStatus());
+			sh.setTotalCount(handout.getTotalCount());
+			sh.setPlayCount(0);
+			sh.setClassId(classId);
+			sh.setOriginHandoutId(handoutId);
+			sh.setOrgId(classMap.get(classId));
+			sh.setFullPath(handout.getFullPath());
+			sh.setFullLength(handout.getFullLength());
+			sh.setSubjectId(subjectMap.get(classId));
+			sh.setSubjectName(handout.getSubjectName());
+			sh.setCollegeCourseId(collegeCourseId);
+			sh.setOrderNum(1000);
+			sh.setCoverPageUrl(handout.getCoverPageUrl());
+			sh.setRemark(handout.getRemark());
+			if (null != origChapterMap.get(classId)) {
+				sh.setChapterId(origChapterMap.get(classId).getChapterId());
+			} else {
+				sh.setChapterId(null);
+			}
+			TraceUtils.setCreateTrace(sh);
+
+			this.saveHandout(sh);
+
+			// 插入OrgText
+			orgTextService.doInsertOrgText(sh.getHandoutId(), OrgText.TABLE_NAME_HANDOUT,
+					oldOrgText == null ? sh.getRemark() : oldOrgText.getContent());
+
+			hql = " from SchHandoutPage where handoutId = ? and deleteFlag is false ";
+			List<SchHandoutPage> pages = find(hql, CollectionUtils.newList(handoutId), SchHandoutPage.class);
+			for (SchHandoutPage schHandoutPage : pages) {
+				SchHandoutPage page = new SchHandoutPage();
+				page.setDeleteFlag(false);
+				page.setHandoutId(sh.getHandoutId());
+				page.setImgPath(schHandoutPage.getImgPath());
+				page.setPageOrder(schHandoutPage.getPageOrder());
+				TraceUtils.setCreateTrace(page);
+				save(page);
+			}
+
+			// 标记班级有讲义
+			ClsClass cls = read(ClsClass.class, classId);
+			if (cls != null && cls.getHaveHandout() == ClsClass.NOT_HAVE_HANDOUT) {
+				cls.setHaveHandout(ClsClass.HAVE_HANDOUT);
+				save(cls);
+			}
+
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.qxueyou.scc.school.service.IHandoutService#doStartHandouts(java.lang.
+	 * String[])
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public Result doStartHandouts(String handoutIds) {
+		if (StringUtils.isEmpty(handoutIds)) {
+			return new Result(false, "参数错误");
+		}
+		String[] handoutIdArray = handoutIds.split(",");
+
+		// 发送讲义系统通知
+		sendSysMsg(handoutIds);
+
+		for (String handoutId : handoutIdArray) {
+
+			SchHandout handout = read(SchHandout.class, handoutId);
+			handout.setStatus(SchHandout.STATUS_ISSUED);
+			TraceUtils.setUpdateTrace(handout);
+			this.saveHandout(handout);
+
+			// 推送消息给学员
+			Map<String, String> extras = new HashMap<String, String>(1);
+			extras.put("senderId", "sys_msg");
+			extras.put("type", "SYS_MSG");
+
+			List<List<String>> lstUserIdList = this.queryPushUserIds(handout.getClassScheduleId());
+
+			if (lstUserIdList.isEmpty()) {
+				return new Result(true);
+			}
+
+			for (List<String> userIds : lstUserIdList) {
+
+				// jpushService.doJpushByUserIds(userIds, extras, "有新讲义", "发布了讲义:" +
+				// handout.getName(), "发布了讲义:" + handout.getName());
+
+			}
+
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 拆分成200人一组
+	 * @param classId
+	 * @return
+	 */
+	@SuppressWarnings("null")
+	private List<List<String>> queryPushUserIds(String classId) {
+
+		List<List<String>> result = new ArrayList<List<String>>(1);
+
+		// List<String> lstUserIds = userService.getUserLstByClassId(classId);
+		List<String> lstUserIds = null;
+
+		// 小于200 直接返回
+		if (lstUserIds.size() < 200) {
+			result.add(lstUserIds);
+			return result;
+		}
+
+		// 大于200,分批处理
+		int iSize = lstUserIds.size() / 200;
+		int iLeft = lstUserIds.size() % 200;
+		iSize = iLeft == 0 ? iSize : iSize + 1;
+
+		List<String> lstSplitUserIds;
+
+		for (int i = 0; i < iSize; i++) {
+
+			lstSplitUserIds = new ArrayList<String>(200);
+
+			// 200 个
+			if (i < (iSize - 1)) {
+				lstSplitUserIds.addAll(lstUserIds.subList(i * 200, (i + 1) * 200));
+			} else {
+				// 最后剩下的,可能小于200个
+				lstSplitUserIds.addAll(lstUserIds.subList(i * 200, lstUserIds.size()));
+			}
+
+			result.add(lstSplitUserIds);
+
+		}
+
+		return result;
+
+	}
+
+	/**
+	 * 发送讲义系统消息
+	 * @param handoutIds
+	 * @return
+	 */
+	private Result sendSysMsg(String handoutIds) {
+
+		// boolean allSuccess = true;
+		//
+		// ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+		//
+		// msg.put("msgType", "SYS_HANDOUT_SAVE");
+		// msg.put("classId", ClientUtils.getClassId());
+		// msg.put("handoutIds", handoutIds);
+		// try {
+		// onsProducer.sendMsg(msg); //
+		// 消费类:com.qxueyou.scc.school.service.impl.HandoutSysMsgDealService
+		//
+		// } catch (Exception e) {
+		// log.error("call DocdealMsgSendService fail.userId: " +
+		// ClientUtils.getClassId(), e);
+		// allSuccess = false;
+		// }
+
+		return new Result(false);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.school.service.IHandoutService#doStopHandouts(java.lang.
+	 * String[])
+	 */
+	@Override
+	public Result doStopHandouts(String[] handoutIds) {
+		if (handoutIds.length == 0) {
+			return new Result(false, "参数错误");
+		}
+		for (String handoutId : handoutIds) {
+			SchHandout interact = read(SchHandout.class, handoutId);
+			interact.setStatus(SchHandout.STATUS_DISCARD);
+			TraceUtils.setUpdateTrace(interact);
+			this.saveHandout(interact);
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 插入历史讲义
+	 * 
+	 * @param handout
+	 * @param oldHandoutId
+	 * @return
+	 */
+	@Override
+	public Result insertChooseHandout(SchHandout handout, String oldHandoutId) {
+
+		SchHandout oldSchHandout = read(SchHandout.class, oldHandoutId);
+		List<SchHandoutPage> handoutPages = oldSchHandout.getHandoutPages();
+
+		TraceUtils.setCreateTrace(handout);
+		handout.setPageCount(oldSchHandout.getPageCount());
+		handout.setName(oldSchHandout.getName());
+		handout.setStatus(SchHandout.STATUS_DRAFT);
+		handout.setClassId(ClientUtils.getClassId());
+		handout.setOrgId(oldSchHandout.getOrgId());
+		handout.setOrderNum(oldSchHandout.getOrderNum());
+		handout.setCoverPageUrl(oldSchHandout.getCoverPageUrl());
+		handout.setFullPath(oldSchHandout.getFullPath());
+		handout.setFullLength(oldSchHandout.getFullLength());
+		handout.setPlayCount(0);
+		handout.setCollegeCourseId(ClientUtils.getCourseId());
+
+		this.saveHandout(handout);
+
+		List<SchHandoutPage> newHandoutPages = new ArrayList<SchHandoutPage>();
+		for (SchHandoutPage page : handoutPages) {
+			SchHandoutPage newPage = new SchHandoutPage();
+			TraceUtils.setCreateTrace(newPage);
+			newPage.setHandoutId(handout.getHandoutId());
+			newPage.setImgPath(page.getImgPath());
+			newPage.setPageOrder(page.getPageOrder());
+			newHandoutPages.add(newPage);
+		}
+
+		saveOrUpdateAll(newHandoutPages);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 拷贝讲义
+	 * @param oldHandoutId
+	 * @param subjectId
+	 * @param collegeCourseId
+	 * @param chapterId
+	 * @param subjectName
+	 * @return
+	 * @throws IllegalAccessException
+	 * @throws InstantiationException
+	 * @throws InvocationTargetException
+	 * @throws NoSuchMethodException
+	 */
+	@Override
+	public Result doCopyHandout(String oldHandoutId, String subjectId, String collegeCourseId, String chapterId,
+			String subjectName)
+			throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
+
+		SchHandout oldSchHandout = read(SchHandout.class, oldHandoutId);
+		List<SchHandoutPage> handoutPages = oldSchHandout.getHandoutPages();
+		oldSchHandout.setHandoutPages(null);
+
+		SchHandout newHandout = (SchHandout) BeanUtils.cloneBean(oldSchHandout);
+		newHandout.setHandoutId(null);
+		TraceUtils.setCreateTrace(newHandout);
+		newHandout.setChapterId(chapterId);
+		newHandout.setSubjectId(subjectId);
+		newHandout.setSubjectName(subjectName);
+		newHandout.setOrderNum(1000);
+		newHandout.setCollegeCourseId(collegeCourseId);
+		newHandout.setStatus(SchHandout.STATUS_DRAFT);
+		newHandout.setPlayCount(0);
+		this.saveHandout(newHandout);
+
+		List<SchHandoutPage> newHandoutPages = new ArrayList<SchHandoutPage>();
+		if (!handoutPages.isEmpty()) {
+			for (SchHandoutPage page : handoutPages) {
+				SchHandoutPage newPage = (SchHandoutPage) BeanUtils.cloneBean(page);
+				TraceUtils.setCreateTrace(newPage);
+				newPage.setHandoutId(newHandout.getHandoutId());
+				newPage.setHandoutPageId(null);
+				newHandoutPages.add(newPage);
+			}
+
+			saveOrUpdateAll(newHandoutPages);
+		}
+		// 非班级拷贝需要关联表新增记录
+		if (StringUtils.isEmpty(ClientUtils.getClassId())) {
+			this.insertReCourse(collegeCourseId, newHandout.getHandoutId());
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 插入讲义和科目关联
+	 * 
+	 * @param collegeCourseId
+	 * @param handoutId
+	 */
+	private void insertReCourse(String collegeCourseId, String handoutId) {
+		// 序号
+		String hql = "select MAX(c.orderNum) from SchHandoutReCourse c where c.deleteFlag is false and c.collegeCourseId = ? and orgId = ? ";
+		Integer iMax = this.findUnique(hql, CollectionUtils.newList(collegeCourseId, ClientUtils.getOrgId()),
+				Integer.class);
+
+		if (iMax == null || iMax == 0) {
+			iMax = 1;
+		} else {
+			iMax = iMax + 1;
+		}
+
+		SchHandoutReCourse course = new SchHandoutReCourse();
+		course.setCollegeCourseId(collegeCourseId);
+		course.setDeleteFlag(false);
+		course.setHandoutId(handoutId);
+		course.setOrderNum(iMax);
+		course.setOrgId(ClientUtils.getOrgId());
+		TraceUtils.setCreateTrace(course);
+		save(course);
+	}
+
+	/**
+	 * 查询讲义列表
+	 * 
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	@Override
+	public List<SchHandout> schHandoutList(int type, String hql, Pager page, List<Object> args) {
+		return handoutDAO.schHandoutList(type, hql, page, args);
+	}
+
+	/**
+	 * 批量操作讲义收藏记录
+	 * 
+	 * @param lstFavor
+	 * @return
+	 */
+	@Override
+	public Result doOperHandoutFavorDataBatch(List<SchHandoutPageFavor> lstFavor) {
+		// 批量增加或者更新
+		this.saveOrUpdateAll(lstFavor);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 后台获取列表数据
+	 * 
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	@Override
+	public List<SchHandout> queryDataList(String sql, List<Object> args) {
+		return handoutDAO.queryDataList(sql, args);
+	}
+
+	/**
+	 * 查询选择班级下历史讲义
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	@Override
+	public List<SchHandout> queryChooseHandoutList(String sql, List<Object> args) {
+		return null; // handoutDAO.queryChooseList(sql, args);
+	}
+
+	private Result doInitClassHandout(SchHandout handout, List<SchHandoutPage> lstPages) {
+
+		String hql = " from SchHandout s where s.originHandoutId = ? and s.originHandoutId <> s.handoutId and deleteFlag is false  ";
+		List<SchHandout> handouts = this.find(hql, CollectionUtils.newList(handout.getHandoutId()), SchHandout.class);
+
+		if (null == handouts || handouts.isEmpty()) {
+			return new Result(true, "无关联讲义");
+		}
+
+		List<SchHandoutPage> allPages = new ArrayList<SchHandoutPage>();
+
+		// 循环处理
+		for (SchHandout ho : handouts) {
+
+			TraceUtils.setUpdateTrace(ho);
+			ho.setStatus(handout.getStatus());
+			ho.setPageCount(handout.getPageCount());
+
+			allPages.addAll(this.initCurrPages(lstPages, ho.getHandoutId()));
+
+			this.saveHandout(ho);
+		}
+
+		// 明细
+		this.saveOrUpdateAll(allPages);
+
+		return new Result(true);
+
+	}
+
+	/**
+	 * 赋值所有讲义明细
+	 * 
+	 * @param lstPages
+	 * @param handoutId
+	 * @return
+	 */
+	private List<SchHandoutPage> initCurrPages(List<SchHandoutPage> lstPages, String handoutId) {
+
+		List<SchHandoutPage> currPages = new ArrayList<SchHandoutPage>(lstPages.size());
+
+		SchHandoutPage page = null;
+
+		for (SchHandoutPage currPage : lstPages) {
+
+			page = new SchHandoutPage();
+			page.setDeleteFlag(false);
+			page.setHandoutId(handoutId);
+			page.setImgPath(currPage.getImgPath());
+			page.setPageOrder(currPage.getPageOrder());
+			TraceUtils.setCreateTrace(page);
+
+			currPages.add(page);
+		}
+
+		return currPages;
+
+	}
+
+	/**
+	 * 旋转讲义图片
+	 * 
+	 * @param angle
+	 * @param handoutPageId
+	 * @return
+	 */
+	@Override
+	public Result doRotatePic(String angle, String handoutPageId) {
+
+		SchHandoutPage page = this.read(SchHandoutPage.class, handoutPageId);
+
+		if (null == page) {
+			return new Result(false, "page为空");
+		}
+
+		String imgPath = page.getImgPath();
+
+		int iIndex = imgPath.indexOf('@');
+		if (iIndex != -1) {
+			imgPath = imgPath.substring(0, iIndex);
+		}
+
+		if (StringUtils.isBlank(imgPath)) {
+			return new Result(false, "path解析出错");
+		}
+
+		imgPath = imgPath.concat("@").concat(angle).concat("r");
+		page.setImgPath(imgPath);
+		save(page);
+
+		return new Result(true);
+	}
+
+	/**
+	 * 查询讲义,模糊课程名或者讲义名
+	 * 
+	 * @param keyWord
+	 *            查询关键字
+	 * @return
+	 */
+	@Override
+	public List<SchHandout> queryHandoutByKeyWord(String keyWord) {
+		String keyWord0 = keyWord;
+		String sql = "select h.* from sch_handout h,sch_class_schedule l  where "
+				+ "l.class_schedule_id = h.class_schedule_id and   l.delete_flag = 0 and h.delete_flag = 0 "
+				+ "and h.class_id = ?  " + "and ( h.lesson like ? or h.name like ? ) ";
+
+		keyWord0 = "%".concat(keyWord0).concat("%");
+
+		return handoutDAO.queryDataList(sql, CollectionUtils.newList(ClientUtils.getClassId(), keyWord0, keyWord0));
+	}
+
+	/**
+	 * 更新讲义观看量
+	 */
+	public Result updatePlayCount(String handoutId) {
+		SchHandout sh = read(SchHandout.class, handoutId);
+
+		if (null == sh) {
+			return new Result(true);
+		}
+		if (sh.getPlayCount() == null) {
+			bulkUpdateInLoop("update SchHandout set playCount = 1 where handoutId = ?", new String[] { handoutId });
+		} else {
+			bulkUpdateInLoop("update SchHandout set playCount = (playCount + 1) where handoutId = ?",
+					new String[] { handoutId });
+		}
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result insertplayRecordNew(SchHandoutRecord record, String pageNums) {
+
+		SchHandout sh = read(SchHandout.class, record.getHandoutId());
+
+		if (null == sh) {
+			return new Result(true);
+		}
+
+		record.setOrgId(ClientUtils.getOrgId());
+		record.setClassId(ClientUtils.getClassId());
+		record.setUserId(ClientUtils.getUserId());
+		String[] nums = pageNums.split(",");
+		record.setPlayCount(nums.length);
+		record.setPageCount(sh.getPageCount());
+
+		record.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(record);
+		save(record);
+
+		List<Integer> numList = new ArrayList<Integer>();
+		for (String num : nums) {
+			numList.add(Integer.parseInt(num));
+		}
+		String hql = " from SchHandoutPage where pageOrder in (:nums) and handoutId = :handoutId";
+		Map<String, Object> args = new HashMap<String, Object>();
+		args.put("nums", numList.toArray());
+		args.put(HANDOUT_ID, sh.getHandoutId());
+		List<SchHandoutPage> lstPages = findByComplexHql(hql, args, SchHandoutPage.class);
+		Map<String, SchHandoutPage> map = new HashMap<String, SchHandoutPage>();
+		for (SchHandoutPage schHandoutPage : lstPages) {
+			map.put(schHandoutPage.getPageOrder() + schHandoutPage.getHandoutId(), schHandoutPage);
+		}
+
+		for (String string : nums) {
+			SchHandoutRecordDetail shrd = new SchHandoutRecordDetail();
+
+			shrd.setDeleteFlag(false);
+			shrd.setHandoutRecordId(record.getHandoutRecordId());
+			shrd.setPageNum(Integer.parseInt(string));
+			if (null != record.getType()) {
+				shrd.setCollection(record.getType());
+			}
+
+			SchHandoutPage shp = map.get(string + sh.getHandoutId());
+
+			shrd.setPageId(shp.getHandoutPageId());
+
+			TraceUtils.setCreateTrace(shrd);
+
+			save(shrd);
+		}
+
+		// 统计表增加数据
+		hql = " from SchHandoutStatistic where userId=? and classId=? and handoutId=?";
+		SchHandoutStatistic shs = findUnique(hql,
+				CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getClassId(), sh.getHandoutId()),
+				SchHandoutStatistic.class);
+		if (shs == null) {
+			shs = new SchHandoutStatistic();
+			shs.setClassId(ClientUtils.getClassId());
+			shs.setCompDegree(new BigDecimal(record.getPlayCount()).divide(new BigDecimal(record.getPageCount()), 2,
+					BigDecimal.ROUND_HALF_UP));
+			shs.setDeleteFlag(false);
+			shs.setHandoutId(record.getHandoutId());
+			shs.setHandoutName(sh.getName());
+			shs.setUserId(ClientUtils.getUserId());
+			shs.setUserName(ClientUtils.getUserName());
+			TraceUtils.setCreateTrace(shs);
+			save(shs);
+		} else {
+			hql = "select DISTINCT d.PAGE_NUM from sch_handout_record_detail d where d.HANDOUT_RECORD_ID in "
+					+ "( select r.HANDOUT_RECORD_ID from sch_handout_record r where USER_ID=? and CLASS_ID=? and HANDOUT_ID=?)";
+			List<String> pageLst = handoutDAO.schHandoutPageNum(hql,
+					CollectionUtils.newList(ClientUtils.getUserId(), ClientUtils.getClassId(), record.getHandoutId()));
+			Set<String> set = new HashSet<String>();
+
+			// 本次观看
+			for (String string2 : nums) {
+				set.add(string2);
+			}
+			// 数据库观看记录
+			set.addAll(pageLst);
+
+			shs.setCompDegree(new BigDecimal(set.size()).divide(new BigDecimal(record.getPageCount()), 2,
+					BigDecimal.ROUND_HALF_UP));
+			TraceUtils.setUpdateTrace(shs);
+			save(shs);
+
+		}
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result insertplayRecord(SchHandoutRecord record, String pageNums) {
+		return this.insertplayRecordNew(record, pageNums);
+	}
+
+	/**
+	 * 讲义上传重复数据处理
+	 * 
+	 * @param handoutId
+	 * @return
+	 */
+	@Override
+	public Result doInitHandoutRepeatData(String handoutId) {
+
+		String hql = "select  max(p.handoutPageId) from SchHandoutPage p where p.deleteFlag is false and p.handoutId = ? group by p.handoutId, p.pageOrder having count(1) > 1 ";
+		List<String> pageIds = this.find(hql, CollectionUtils.newList(handoutId), String.class);
+
+		if (null == pageIds || pageIds.isEmpty()) {
+			return new Result(true);
+		}
+
+		List<SchHandoutPage> pages = new ArrayList<SchHandoutPage>(pageIds.size());
+		SchHandoutPage page;
+		for (String pageId : pageIds) {
+			page = this.read(SchHandoutPage.class, pageId);
+			page.setDeleteFlag(true);
+			pages.add(page);
+		}
+
+		this.saveOrUpdateAll(pages);
+
+		return new Result(true);
+
+	}
+
+	/**
+	 * 排序
+	 * 
+	 * @param ids
+	 *            排序id
+	 * @param index
+	 *            序号
+	 * @return
+	 */
+	public Result doOrder(List<String> ids, List<Integer> index) {
+		// 循环修改order
+		CommonDAO commonDAO = this.getCommonDAO();
+		for (int i = 0; i < ids.size(); i++) {
+			String handoutId = ids.get(i);
+			if (UserInfoWrapper.ROLE_TEACHER.equals(ClientUtils.getCurrentRole())
+					|| UserInfoWrapper.ROLE_CHARGER.equals(ClientUtils.getCurrentRole())) {
+				commonDAO.bulkUpdate("update SchHandout set orderNum = " + index.get(i) + " where handoutId = ?",
+						new Object[] { handoutId });
+			} else {
+				commonDAO.bulkUpdate(
+						"update SchHandoutReCourse set orderNum = " + index.get(i) + " where handoutId = ?",
+						new Object[] { handoutId });
+			}
+			commonDAO.bulkUpdate("update SchCourseware set orderNum = " + index.get(i) + " where id = ?",
+					new Object[] { handoutId });
+		}
+		return new Result(true);
+	}
+
+	/**
+	 * 保存讲义接口
+	 * 
+	 * @param handout
+	 * @return
+	 */
+	public Result saveHandout(SchHandout handout) {
+		Result result = new Result(false);
+		result = this.save(handout);
+		String parentChapterId = null;
+		if (StringUtils.isNotEmpty(handout.getChapterId())) {
+			SubjectChapter chapter = this.read(SubjectChapter.class, handout.getChapterId());
+			parentChapterId = chapter == null ? null : chapter.getParentChapterId();
+		}
+		boolean isClass = StringUtils.isNotEmpty(ClientUtils.getClassId())
+				|| StringUtils.isNotEmpty(handout.getClassId());
+		SchCourseware courseware = null;
+		if (isClass) {
+			courseware = this.findUnique("from SchCourseware where id = ? and classId = ? and deleteFlag is false",
+					CollectionUtils.newList(handout.getHandoutId(), handout.getClassId()), SchCourseware.class);
+		} else {
+			courseware = this.findUnique(
+					"from SchCourseware where id = ? and orgId = ? and classId is null and deleteFlag is false",
+					CollectionUtils.newList(handout.getHandoutId(), handout.getOrgId()), SchCourseware.class);
+
+			this.bulkUpdate("update SchCourseware set name = ? where id = ?",
+					new Object[] { handout.getName(), handout.getHandoutId() });
+		}
+		if (courseware == null) {
+			courseware = new SchCourseware();
+			courseware.setChapterId(handout.getChapterId());
+			courseware.setId(handout.getHandoutId());
+			courseware.setCollegeCourseId(handout.getCollegeCourseId());
+			courseware.setcType(-1);
+			courseware.setType(SchCourseware.COURSEWARE_TYPE_HANDOUT);
+			courseware.setName(handout.getName());
+			courseware.setRemark(String.valueOf(handout.getPageCount()));
+			courseware.setDeleteFlag(handout.getDeleteFlag());
+			courseware.setOrderNum(1000);
+			courseware.setSubjectId(handout.getSubjectId());
+			courseware.setStatus(handout.getStatus());
+			courseware.setOrgId(handout.getOrgId());
+			courseware.setClassId(handout.getClassId());
+			courseware.setParentChapterId(parentChapterId);
+
+			TraceUtils.setCreateTrace(courseware);
+		} else {
+			courseware.setChapterId(handout.getChapterId());
+			// courseware.setCollegeCourseId(handout.getCollegeCourseId());
+			courseware.setcType(-1);
+			courseware.setName(handout.getName());
+			courseware.setRemark(String.valueOf(handout.getPageCount()));
+			courseware.setDeleteFlag(handout.getDeleteFlag());
+			courseware.setOrderNum(handout.getOrderNum() == null ? 1000 : handout.getOrderNum());
+			courseware.setSubjectId(handout.getSubjectId());
+			courseware.setStatus(handout.getStatus());
+			courseware.setParentChapterId(parentChapterId);
+
+			TraceUtils.setUpdateTrace(courseware);
+		}
+
+		this.save(courseware);
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java b/src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java
new file mode 100644
index 0000000..9a28da7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java
@@ -0,0 +1,434 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exercise.model.ExerciseGroup;
+import com.qxueyou.scc.exercise.model.ExerciseGroupExtend;
+import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU;
+import com.qxueyou.scc.exercise.model.ExerciseRecord;
+import com.qxueyou.scc.exercise.service.IExerciseService;
+import com.qxueyou.scc.school.dao.InteractDAO;
+import com.qxueyou.scc.school.model.InteractResultData;
+import com.qxueyou.scc.school.model.InterateAnswer;
+import com.qxueyou.scc.school.model.SchInteract;
+import com.qxueyou.scc.school.service.IInteractService;
+
+@Service
+public class InteactService extends CommonAppService implements IInteractService {
+	
+	private InteractDAO interactDAO;
+	
+	/** 扩展练习service */
+	@Autowired
+	private IExerciseService exerciseService;
+	
+	public InteractDAO getInteractDAO() {
+		return interactDAO;
+	}
+	
+	/**
+     * 依赖注入
+     *
+     * @param interactDAO
+     */
+	@Autowired(required = false)
+	public void setInteractDAO(@Qualifier("interactDAO")
+	InteractDAO interactDAO) {
+		this.interactDAO = interactDAO;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.qxueyou.scc.school.service.IInteractService#insertInteract(com.qxueyou.scc.school.model.SchInteract)
+	 */
+	@Override
+	public Result insertInteract(String interactName, String exerciseTime) {
+		
+		// 设置基本字段
+		ExerciseGroup group = new ExerciseGroup();
+		TraceUtils.setCreateTrace(group);
+		group.setName(interactName);
+		group.setDeleteFlag(false);
+		group.setType(ExerciseGroup.TYPE_INTERACT);
+		group.setClassId(ClientUtils.getClassId());
+		group.setOrgId(ClientUtils.getOrgId());
+		
+		this.exerciseService.saveExerciseGroup(group);
+		
+		// 添加组扩展表信息
+		ExerciseGroupExtend extend = new ExerciseGroupExtend();
+		extend.setGroupId(group.getGroupId());
+		extend.setExerciseTime(exerciseTime);
+		extend.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(extend);
+		save(extend);
+		
+		SchInteract interact = new SchInteract();
+		interact.setClassId(ClientUtils.getClassId());
+		interact.setExerciseGroupId(group.getGroupId());
+		interact.setStatus(SchInteract.STATUS_LOCK);
+		interact.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(interact);
+		
+		save(interact);
+		
+		return new Result(true,interact.getInteractId());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.qxueyou.scc.school.service.IInteractService#deleteInteracts(java.lang.String[])
+	 */
+	@Override
+	public Result deleteInteracts(String[] interactIds) {
+		for(String interactId:interactIds){
+			SchInteract interact = read(SchInteract.class,interactId);
+			interact.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(interact);
+			save(interact);
+		}
+		return new Result(true);
+	}
+
+	@Override
+	public Result doStartInteracts(String[] interactIds) {// 激活
+		
+		Result result = new Result(true);
+		
+		for(String interactId:interactIds){
+			SchInteract interact = read(SchInteract.class,interactId);
+			if(SchInteract.STATUS_LOCK == interact.getStatus()){
+				interact.setStatus(SchInteract.STATUS_INTERACTING);
+				interact.setStartTime(new Date());
+				TraceUtils.setUpdateTrace(interact);
+				save(interact);				
+			}else{
+				result = new Result(true,"只有锁定的互动才能激活");
+			}
+		}
+		
+		return result;// changeStatus(interactIds,SchInteract.STATUS_INTERACTING)
+	}
+
+	@Override
+	public Result doStopInteracts(String[] interactIds) {
+		
+		Result result = new Result(true);
+		
+		for(String interactId:interactIds){
+			SchInteract interact = read(SchInteract.class,interactId);
+			if(SchInteract.STATUS_LOCK == interact.getStatus() || SchInteract.STATUS_INTERACTING == interact.getStatus()){
+				interact.setStatus(SchInteract.STATUS_END);
+				interact.setStopTime(new Date());
+				TraceUtils.setUpdateTrace(interact);
+				save(interact);				
+			}else{
+				result = new Result(true,"只有锁定和正在互动的互动才能停用");
+			}
+		}
+		
+		return result;// changeStatus(interactIds,SchInteract.STATUS_END)
+	}
+	
+	/**
+	 * 修改互动状态
+	 * @param interactIds
+	 * @param status
+	 * @return
+	 
+	private Result changeStatus(String[] interactIds,short status,short selectStatus){
+		for(String interactId:interactIds){
+			SchInteract interact = read(SchInteract.class,interactId);
+			interact.setStatus(status);
+			TraceUtils.setUpdateTrace(interact);
+			save(interact);
+		}
+		return new Result(true);
+	}*/
+	
+	/**
+	 * 新增练习记录
+	 * @param groupId
+	 * @return 
+	 */
+	public String insertExerciseRecord(String groupId,String currTitleNumber) {
+		
+		ExerciseRecord record = new ExerciseRecord();
+		record.setExerciseGroupId(groupId);
+		if(StringUtils.isBlank(currTitleNumber)){
+			currTitleNumber="0";
+		}
+		record.setTitleMaxNumber(currTitleNumber);
+		record.setUserId(ClientUtils.getUserId());
+		record.setDeleteFlag(false);
+		record.setClassId(ClientUtils.getClassId());
+		record.setCollegeCourseId(ClientUtils.getCourseId());
+		record.setOrgId(ClientUtils.getOrgId());
+		record.setStatus(ExerciseRecord.STATUS_SUBMIT);
+		
+		TraceUtils.setCreateTrace(record);
+		
+		this.save(record);
+		
+		return record.getRecordId();
+	}
+	
+	/**
+	 * 新增练习记录
+	 * @param groupId
+	 * @return 
+	 */
+	public String updateExerciseRecord(ExerciseRecord record) {
+		
+		TraceUtils.setUpdateTrace(record);
+		
+		this.save(record);
+		
+		return record.getRecordId();
+	}
+	
+	/**
+	 * 新增练习记录答案
+	 * @return
+	 */
+	public Result insertExerciseItemAnswerU(String exerciseId, 
+			String exerciseRecordId, String answers, byte corrects) {
+		String userId = ClientUtils.getUserId();
+		
+		// 组装答案记录
+		ExerciseItemAnswerU	answerU = new ExerciseItemAnswerU();
+			
+		answerU.setExerciseItemId(exerciseId);
+		answerU.setExerciseRecordId(exerciseRecordId);
+		answerU.setAnswer(answers);
+		answerU.setCorrect(corrects);
+		answerU.setUserId(userId);
+		answerU.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(answerU);
+			
+		// 保存
+		this.save(answerU);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 更新练习记录答案
+	 * @return
+	 */
+	public Result updateExerciseItemAnswerU(ExerciseItemAnswerU answerU, String answers, byte corrects) {
+		answerU.setAnswer(answers);
+		answerU.setCorrect(corrects);
+		TraceUtils.setUpdateTrace(answerU);
+			
+		// 保存更新
+		this.save(answerU);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 操作互动练习答案记录
+	 * @return
+	 */
+	@Override
+	public Result doOperInteractExerciseAnswer(String interactGroupId, 
+				String exerciseId, String answers,byte corrects,String currTitleNumber) {
+		// 1.互动组 判断 是否新纪录  
+		String hql = "from ExerciseRecord where deleteFlag is false "
+				+ "and exerciseGroupId=? and userId=? ";
+		
+		List<ExerciseRecord> lstRecord = this.find(hql, 
+				CollectionUtils.newList(interactGroupId, ClientUtils.getUserId()), ExerciseRecord.class);
+		
+		// 练习记录id
+		String exerciseRecordId= "";
+		if(lstRecord.isEmpty()){
+			// 1. 没有   互动组记录 插入一条新数据
+			exerciseRecordId = this.insertExerciseRecord(interactGroupId,currTitleNumber);
+		}else{
+			// 更新题号
+			ExerciseRecord record = lstRecord.get(0);
+			record.setTitleMaxNumber(currTitleNumber);
+			updateExerciseRecord(record);
+			
+			exerciseRecordId = record.getRecordId();
+		}
+		
+		/*// 判断是否重复提交  已经存在 先删除 再插入
+		hql = "from ExerciseItemAnswerU where deleteFlag is false "
+				+ "and exerciseItemId=? and userId=? and exerciseRecordId=?";
+		
+		List<ExerciseItemAnswerU> lstAnswerU =  this.find(hql, 
+				CollectionUtils.newList(exerciseId, ClientUtils.getUserId(),exerciseRecordId), ExerciseItemAnswerU.class);
+		
+		// 2.已经存在 更新
+		if(!lstAnswerU.isEmpty()){
+			
+			// 答案obj
+			ExerciseItemAnswerU answerU = lstAnswerU.get(0);
+			
+			return updateExerciseItemAnswerU(answerU, answers, corrects);
+		}*/
+		
+		// 3.不存在 插入
+		Result result = this.insertExerciseItemAnswerU(exerciseId, exerciseRecordId, answers, corrects);
+		
+		return result;
+	}
+	
+	/**
+	 * 查询互动练习结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<Map<String, Object>> queryResultByInteractExer(String hql,
+			List<Object> args) {
+		
+		List<Object[]> lst = this.findBySql(hql, args);
+		
+		List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
+    	
+    	Map<String, Object> resultMap = new HashMap<String, Object>(3);
+    	for (Object[] obj : lst) {
+    		 resultMap = new HashMap<String, Object>();
+    		 resultMap.put("name", obj[0]);
+    		 resultMap.put("count", obj[1]);
+    		 resultMap.put("peopleCount", obj[2]);
+    		 resultLst.add(resultMap);
+        }
+        
+		return resultLst;
+	}
+	
+	/**
+	 * 查询互动练习结果
+	 * @param hql
+	 * @param args
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> queryResultByInteract(String hql,
+			List<Object> args) {
+		
+		return interactDAO.queryResultByInteractExer(hql, args);
+	}
+	
+	/**
+	 * 操作互动练习答案记录
+	 * @return
+	 */
+	@Override
+	public Result doOperInteractExerciseAnswerNew(
+			InteractResultData resultData) {
+		
+		String exerciseGroupId = resultData.getExerciseGroupId();
+		String currTitleNumber = resultData.getCurrTitleNum();
+		
+		// 1.互动组 判断 是否新纪录  
+		String hql = "from ExerciseRecord where deleteFlag is false "
+				+ "and exerciseGroupId=? and userId=? ";
+		
+		List<ExerciseRecord> lstRecord = this.find(hql, 
+				CollectionUtils.newList(exerciseGroupId, ClientUtils.getUserId()), ExerciseRecord.class);
+		
+		// 练习记录id
+		String exerciseRecordId= "";
+		if(lstRecord.isEmpty()){
+			// 1. 没有   互动组记录 插入一条新数据
+			exerciseRecordId = this.insertExerciseRecord(exerciseGroupId,currTitleNumber);
+		}else{
+			// 更新题号
+			ExerciseRecord record = lstRecord.get(0);
+			record.setTitleMaxNumber(currTitleNumber);
+			record.setStatus(ExerciseRecord.STATUS_SUBMIT);
+			
+			this.updateExerciseRecord(record);
+			
+			exerciseRecordId = record.getRecordId();
+		}
+		
+		
+		// 2.保存答案
+		this.saveInteractExerciseAnswerBatch(resultData.getItems(), exerciseRecordId);
+		
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 批量保存互动答案
+	 * @param resultData
+	 * @param exerciseRecordId
+	 * @return
+	 */
+	private Result saveInteractExerciseAnswerBatch(List<InterateAnswer> lstAnswers,
+			String exerciseRecordId){
+		String userId = ClientUtils.getUserId();
+		List<ExerciseItemAnswerU> lstAnswerU = new ArrayList<ExerciseItemAnswerU>(lstAnswers.size());
+		ExerciseItemAnswerU	answerU = null;
+		for(InterateAnswer answer:lstAnswers){
+			answerU = new ExerciseItemAnswerU();
+			
+			answerU.setExerciseItemId(answer.getExerciseId());
+			answerU.setExerciseRecordId(exerciseRecordId);
+			answerU.setAnswer(answer.getAnswer());
+			answerU.setCorrect(Byte.valueOf(answer.getCorrect()));
+			answerU.setUserId(userId);
+			answerU.setDeleteFlag(false);
+			TraceUtils.setCreateTrace(answerU);
+			
+			lstAnswerU.add(answerU);
+		}
+		
+		// 保存结果
+		this.saveOrUpdateAll(lstAnswerU);
+		
+		return new Result(true);
+	}
+
+	@Override
+	public Result doSubmitInteractResult(String interactGroupId) {
+	
+
+		// 1.互动组 判断 是否新纪录  
+		String hql = "from ExerciseRecord where deleteFlag is false "
+				+ "and exerciseGroupId=? and userId=? ";
+		
+		List<ExerciseRecord> lstRecord = this.find(hql, 
+				CollectionUtils.newList(interactGroupId, ClientUtils.getUserId()), ExerciseRecord.class);
+		
+		// 练习记录id
+		if(lstRecord.isEmpty()){
+			// 1. 没有   互动组记录 插入一条新数据
+			this.insertExerciseRecord(interactGroupId,null);
+		}else{
+			// 更新题号
+			ExerciseRecord record = lstRecord.get(0);
+			
+			record.setStatus(ExerciseRecord.STATUS_SUBMIT);
+			
+			this.updateExerciseRecord(record);
+		}
+		
+		return new Result(true);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java b/src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java
new file mode 100644
index 0000000..0e78001
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java
@@ -0,0 +1,895 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+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.Qualifier;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.dao.CommonDAO;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.DateTimeUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.MediaVideoReCourse;
+import com.qxueyou.scc.media.service.IMediaVideoService;
+import com.qxueyou.scc.org.model.OrgText;
+import com.qxueyou.scc.org.service.IOrgTextService;
+import com.qxueyou.scc.school.dao.LessonDAO;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchReLessonVideo;
+import com.qxueyou.scc.school.service.ICourseWareService;
+import com.qxueyou.scc.school.service.ILessonService;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+
+/**
+ * 课程服务
+ * 
+ * @author 德虎
+ *
+ */
+@Service
+public class LessonService extends CommonAppService implements ILessonService {
+
+	@Autowired
+	CommonDAO dao;
+	
+	
+	
+	@Autowired
+	IMediaVideoService mediaVideoService;
+
+	
+	
+	@Autowired
+	IOrgTextService orgTextService;
+
+	
+	private LessonDAO lessonDAO;
+	
+	@Autowired
+	private ICourseWareService courseWareService;
+
+	private static Logger log = LogManager.getLogger("LessonService");
+	
+	private static final String OPERATE_TYPE_ISSUE = "Issue";
+	
+	private static final String OPERATE_TYPE_STOP = "Stop";
+	
+	/**
+	 * 依赖注入
+	 *
+	 * @param lessonDAO
+	 */
+	@Autowired(required = false)
+	public void setLessonDAO(@Qualifier("lessonDAO") LessonDAO lessonDAO) {
+		this.lessonDAO = lessonDAO;
+	}
+	
+	public LessonDAO getLessonDAO() {
+		return lessonDAO;
+	}
+
+	/**
+	 * 定时发布、停用
+	 */
+	@Override
+	public Result  doVideoIssueStop() {
+
+		doVideoIssue(); // 发布未发布的视频
+		//doVideoStop(); // 停用已过期的视频
+
+		return new Result(true);
+	}
+	
+	/**
+	 * 定时发布
+	 */
+	@SuppressWarnings("unused")
+	public Result  doVideoIssue() {
+		
+		Date now = new Date();
+		
+		// 查询未发布的视频 ---- 只有草稿状态的视频才能发布
+		String hql = "from MediaVideo where deleteFlag is false and status = ? and startTime <= ? and endTime > ? ";
+		List<MediaVideo> mediaLst =  this.find(hql, CollectionUtils.newList(MediaVideo.STATUS_DRAFT,now,now), MediaVideo.class);
+		
+//		for (MediaVideo mediaVideo : mediaLst) {
+//			// 发送消息  发布视频
+//			sendMsgVideoIssueStop(OPERATE_TYPE_ISSUE, mediaVideo.getVideoId());
+//		}
+//		
+		return new Result(true);
+	}
+	
+	@SuppressWarnings("unused")
+	public Result  doVideoStop() {
+
+		Date now = new Date();
+		
+		// 查询已过期的视频 ---- 只有已发布的视频才能停用
+		String hql = "from MediaVideo where deleteFlag is false and status = ? and endTime <= ?";
+		List<MediaVideo> mediaLst =  this.find(hql, CollectionUtils.newList(MediaVideo.STATUS_PUBLISHED,now), MediaVideo.class);
+		
+//		for (MediaVideo mediaVideo : mediaLst) {
+//			// 发送消息  停用视频
+//			sendMsgVideoIssueStop(OPERATE_TYPE_STOP, mediaVideo.getVideoId());
+//		}
+		return new Result(true);
+	}
+	
+	
+	
+	/**
+	 * 单个处理视频发布与上传
+	 */
+	@SuppressWarnings("unused")
+	@Override
+	public Result  doSingleVideoIssueStop(String videoId,String operateType) {
+
+		MediaVideo video = read(MediaVideo.class, videoId);
+		if(OPERATE_TYPE_ISSUE.equals(operateType)){ // 发布
+			log.info("发布");
+			bulkUpdateInLoop("update MediaVideo set status = " + MediaVideo.STATUS_PUBLISHED + " where videoId = ? " ,new Object[] { videoId });
+			bulkUpdateInLoop("update SchCourseware set status = " + MediaVideo.STATUS_PUBLISHED + " where id = ? " ,new Object[] { videoId });
+			
+//			ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//			msg.put("msgType", "VIDEO_PUBLISH"); 
+//			msg.put("videoIds", video.getVideoId()); 
+//			msg.put("classId", video.getClassId());
+//			try {
+//				onsProducer.sendMsg(msg);
+//			} catch (Exception e) {
+//				log.error("Lesson.sendMsg.videoId: " + video.getVideoId(), e);
+//			}
+			
+		}else if(OPERATE_TYPE_STOP.equals(operateType)){ // 停用
+			log.info("停用");
+			bulkUpdateInLoop("update MediaVideo set status = " + MediaVideo.STATUS_TAKEOFF + " where videoId = ? " ,new Object[] { videoId });
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 添加视频
+	 */
+	@Override
+	public Result insertVideo(MediaVideo video, String lessonId, boolean isCopy) {
+
+		this.insertVideoSingle(video, lessonId, isCopy);
+
+		// 将数据插入转码队列
+		mediaVideoService.insertVideoConverTask(video);
+		
+		// 调用本地转码服务
+		//mediaVideoService.doFfmpegMediaTrascode(video.getVideoId(), video.getName());
+
+		return new Result(true, video.getVideoId());
+	}
+	
+	/**
+	 * 添加视频,不调用转码
+	 */
+	@Override
+	public Result insertVideoSingle(MediaVideo video, String lessonId, boolean isCopy) {
+		video.setVideoId(null);
+		TraceUtils.setCreateTrace(video);
+		video.setClassId(ClientUtils.getClassId());
+		video.setDeleteFlag(false);
+		video.setSubmitor(ClientUtils.getUserName());
+		video.setSubmitorId(ClientUtils.getUserId());
+		video.setPlayTimes(0);
+		if(isCopy){
+			video.setStatus(video.getStatus() == MediaVideo.STATUS_PUBLISHED ?MediaVideo.STATUS_DRAFT: video.getStatus());
+		}else{
+			//jgw 暂时直接修改为
+//			video.setStatus(MediaVideo.STATUS_LINEUP);
+			video.setStatus(MediaVideo.STATUS_PUBLISHED);
+		}
+		
+		// 序号
+		String hql = "select MAX(c.videoOrder) from MediaVideo c where c.deleteFlag is false and c.classId = ? ";
+		Integer iMax = this.findUnique(hql, CollectionUtils.newList(ClientUtils.getClassId()), Integer.class);
+
+		if (iMax == null || iMax == 0) {
+			iMax = 1;
+		} else {
+			iMax = iMax + 1;
+		}
+		video.setVideoOrder(iMax);
+		
+		this.mediaVideoService.saveVideo(video);
+		
+		// 保存OrgText —— 视频详情
+		orgTextService.doSaveOrgText(video.getVideoId(), OrgText.TABLE_NAME_VIDEO, video.getRemark());
+		
+		if(StringUtils.isNotBlank(lessonId)){
+			SchReLessonVideo re = new SchReLessonVideo();
+			TraceUtils.setCreateTrace(re);
+			re.setDeleteFlag(false);
+			re.setClassScheduleId(lessonId);
+			re.setVideoId(video.getVideoId());
+			this.save(re);
+		}
+		
+		//标记班级有视频
+		ClsClass cls = read(ClsClass.class, ClientUtils.getClassId());
+		if(cls!=null&&cls.getHaveVideo()==ClsClass.NOT_HAVE_VIDEO){
+			cls.setHaveVideo(ClsClass.HAVE_VIDEO);
+			save(cls);
+		}
+
+		return new Result(true, video.getVideoId());
+	}
+
+	/**
+	 * 批量发布视频
+	 */
+	@Override
+	public Result doStartVideos(String videoIds) {
+
+		if(StringUtils.isEmpty(videoIds)){
+			return new Result(false, "参数错误");
+		}
+		String[] ids = videoIds.split(",");
+		boolean resultFlag = false;
+		for (String videoId : ids) {
+			Result result = doStartVideo(videoId);
+			if(result.isSuccess()){
+				resultFlag = true;
+			}
+		}
+		
+//		// 发送消息
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//		msg.put("msgType", "VIDEO_PUBLISH"); 
+//		msg.put("videoIds", videoIds); 
+//		msg.put("classId", ClientUtils.getClassId());
+//		try {
+//			onsProducer.sendMsg(msg);
+//		} catch (Exception e) {
+//			log.error("Lesson.sendMsg.videoId: " + videoIds, e);
+//		}
+		
+		return new Result(resultFlag);
+	}
+	
+	/**
+	 * 发布视频
+	 */
+	public Result doStartVideo(String videoId) {
+		
+		MediaVideo video = read(MediaVideo.class, videoId);
+		
+		if( video.getStatus() == MediaVideo.STATUS_DRAFT || video.getStatus() == MediaVideo.STATUS_TAKEOFF || video.getStatus() == MediaVideo.STATUS_PUBLISHED){ // 草稿、已下架
+			
+			TraceUtils.setUpdateTrace(video);
+			video.setStatus(MediaVideo.STATUS_PUBLISHED);
+			
+			return mediaVideoService.saveVideo(video);
+		
+		}else{
+			
+			return new Result(false);
+		}
+		
+	}
+	
+	/**
+	 * 批量停用视频
+	 */
+	@Override
+	public Result doStopVideos(String videoIds) {
+		if(StringUtils.isEmpty(videoIds)){
+			return new Result(false, "参数错误");
+		}
+		boolean resultFlag = false;
+
+		String[] ids = videoIds.split(",");
+		for (String videoId : ids) {
+			
+			Result result = doStopVideo(videoId);
+			if(result.isSuccess()){
+				resultFlag = true;
+			}
+		}
+
+		return new Result(resultFlag);
+	}
+	
+	/**
+	 * 停用视频
+	 */
+	public Result doStopVideo(String videoId) {
+		
+		MediaVideo video = read(MediaVideo.class, videoId);
+		
+		if(video.getStatus() == MediaVideo.STATUS_PUBLISHED){ // 已发布
+			
+			TraceUtils.setUpdateTrace(video);
+			video.setStatus(MediaVideo.STATUS_TAKEOFF);
+
+			mediaVideoService.saveVideo(video);
+			
+			return new Result(true);
+		}else{
+			
+			return new Result(false,"视频已发布状态才能停用视频");
+		}
+	}
+	
+	/**
+	 * 添加视频
+	 */
+	@Override
+	public Result insertOrgVideo(MediaVideo video, String collegeCourseId, boolean isCopy) {
+		String hql = " from MediaVideoReCourse where  collegeCourseId = ? and deleteFlag is false";
+		int count = findCount(hql, CollectionUtils.newList(collegeCourseId));
+		TraceUtils.setCreateTrace(video);
+		video.setDeleteFlag(false);
+		video.setSubmitor(ClientUtils.getUserName());
+		video.setSubmitorId(ClientUtils.getUserId());
+		
+		
+		video.setPlayTimes(0);
+		if(isCopy){
+			video.setStatus(video.getStatus() == MediaVideo.STATUS_PUBLISHED ?MediaVideo.STATUS_LINEUP: video.getStatus());
+		}else{
+			video.setStatus(MediaVideo.STATUS_LINEUP);
+		}
+		
+		
+		mediaVideoService.saveVideo(video);
+		video.setOriginVideoId(video.getVideoId());
+		mediaVideoService.saveVideo(video);
+		
+		// 保存OrgText —— 视频详情
+		orgTextService.doSaveOrgText(video.getVideoId(), OrgText.TABLE_NAME_VIDEO, video.getRemark());
+
+		// 序号
+		hql = "select MAX(c.videoOrder) from MediaVideoReCourse c where c.deleteFlag is false and c.collegeCourseId = ?  ";
+		Integer iMax = this.findUnique(hql, CollectionUtils.newList(collegeCourseId), Integer.class);
+
+		if (iMax == null || iMax == 0) {
+			iMax = 1;
+		} else {
+			iMax = iMax + 1;
+		}
+
+		MediaVideoReCourse course = new MediaVideoReCourse();
+		course.setCollegeCourseId(collegeCourseId);
+		course.setDeleteFlag(false);
+		course.setVideoId(video.getVideoId());
+		course.setOrgId(ClientUtils.getOrgId());
+		course.setVideoOrder(iMax);
+		TraceUtils.setCreateTrace(course);
+		save(course);
+
+		//mediaVideoService.doFfmpegMediaTrascode(video.getVideoId(), video.getName());
+		// 将数据插入转码队列
+		mediaVideoService.insertVideoConverTask(video);
+		
+		// TODO 不自动指定给自己
+		// insertAppointSelfOrg(video.getVideoId(), ClientUtils.getOrgId(),collegeCourseId);
+		Result result = new Result(true,video.getVideoId());
+		result.addData("count", count+1);
+		return result;
+	}
+
+	public Result insertAppointOrgVideo(String videoIds[], String orgIds[], String classIds[]) {
+		if(videoIds.length == 0){
+			return new Result(false,"参数错误");
+		}
+		//预先按videoId和OrgId查询mediavideoreCourse表,需要把当前机构ID也放进lstOrgIds一起查
+		List<String> lstOrgIds0 = Arrays.asList(orgIds);
+		List<String> lstOrgIds = new ArrayList<String>();
+		lstOrgIds.addAll(lstOrgIds0);
+		lstOrgIds.add(ClientUtils.getOrgId());
+		Map<String,MediaVideoReCourse> videoOrgCourseMap = new HashMap<String, MediaVideoReCourse>();
+		Map<String,Object> args = new HashMap<String, Object>();
+		String hql = " from MediaVideoReCourse where  videoId in (:videoIds) and deleteFlag is false and orgId in (:orgIds)";
+		args.put("videoIds", videoIds);
+		args.put("orgIds", lstOrgIds.toArray());
+		List<MediaVideoReCourse> lstMediaCourse = findByComplexHql(hql, args, MediaVideoReCourse.class);
+		for (MediaVideoReCourse mediaVideoReCourse : lstMediaCourse) {
+			videoOrgCourseMap.put(mediaVideoReCourse.getVideoId()+mediaVideoReCourse.getOrgId(), mediaVideoReCourse);
+		}
+		if(orgIds.length!=0){ // 添加管理员视频
+			insertOrgVideo(videoIds,orgIds,videoOrgCourseMap);
+		}
+		if(classIds.length!=0){ // 添加班级视频
+			insertClassVideo(videoIds,classIds,ClientUtils.getOrgId(),videoOrgCourseMap);
+		}
+		
+		return new Result(true);
+	}
+	
+	private void insertOrgVideo(String videoIds[], String orgIds[],Map<String,MediaVideoReCourse> videoOrgCourseMap){
+		Map<String,Object> args = new HashMap<String, Object>();
+		Map<String,MediaVideoReCourse> videoCourseMap = new HashMap<String, MediaVideoReCourse>();
+		String hql = " from MediaVideoReCourse where  videoId in (:videoIds) and deleteFlag is false";
+		args.put("videoIds", videoIds);
+		List<MediaVideoReCourse> lstCourse = findByComplexHql(hql, args, MediaVideoReCourse.class);
+		for (MediaVideoReCourse mediaVideoReCourse : lstCourse) {
+			videoCourseMap.put(mediaVideoReCourse.getVideoId(), mediaVideoReCourse);
+		}
+		
+		for (String orgId : orgIds) {
+			for (String videoId : videoIds) {
+				
+				//String hql = " from MediaVideoReCourse where  videoId = ? and deleteFlag is false and orgId = ?";
+				
+				MediaVideoReCourse mvrc = videoOrgCourseMap.get(videoId+orgId);
+				if (mvrc == null) {
+					//String hql = " from MediaVideoReCourse where  videoId = ? and deleteFlag is false";
+					MediaVideoReCourse mvr = videoCourseMap.get(videoId);
+					mvrc = new MediaVideoReCourse();
+					mvrc.setCollegeCourseId(mvr.getCollegeCourseId());
+					mvrc.setDeleteFlag(false);
+					mvrc.setVideoId(videoId);
+					mvrc.setOrgId(orgId);
+					mvrc.setVideoOrder(mvr.getVideoOrder());
+					TraceUtils.setCreateTrace(mvrc);
+					save(mvrc);
+					
+					this.courseWareService.insertOrgCourseware(videoId, ClientUtils.getOrgId(), orgId, mvr.getCollegeCourseId());
+				}
+			}
+		}
+	}
+	private void insertClassVideo(String videoIds[],String classIds[],String currOrgId,Map<String,MediaVideoReCourse> videoOrgCourseMap){
+		Map<String,Object> args = new HashMap<String, Object>();
+		List<String> lstOriginVideoIds = new ArrayList<String>();
+		List<String> lstSubjectIds = new ArrayList<String>();
+		Map<String,MediaVideo> videoMap = new HashMap<String, MediaVideo>();
+		Map<String,MediaVideo> originVideoMap = new HashMap<String, MediaVideo>();
+		Map<String,SchClassSubject> origSubjectMap = new HashMap<String, SchClassSubject>();
+		//章节id
+		List<String> lstCharpteIds = new ArrayList<String>();
+		Map<String,SubjectChapter> origChapterMap = new HashMap<String, SubjectChapter>();
+		List<String> keys = new ArrayList<String>();
+		String hql = " from MediaVideo where videoId in (:videoIds) and deleteFlag is false";
+		args.put("videoIds", videoIds);
+		List<MediaVideo> lstVideo = findByComplexHql(hql, args, MediaVideo.class);
+		for (MediaVideo mediaVideo : lstVideo) {
+			videoMap.put(mediaVideo.getVideoId(), mediaVideo);
+			lstOriginVideoIds.add(mediaVideo.getOriginVideoId());
+			lstSubjectIds.add(mediaVideo.getSubjectId());
+			if(StringUtils.isNotEmpty(mediaVideo.getChapterId())){
+				lstCharpteIds.add(mediaVideo.getChapterId());
+			}
+			keys.add(mediaVideo.getVideoId());
+		}
+		//查询所有originVideoId对应的mediaVideo
+		hql = " from MediaVideo where originVideoId in (:originVideoIds) and deleteFlag is false and classId in (:classIds)";
+		args = new HashMap<String, Object>();
+		args.put("originVideoIds", lstOriginVideoIds.toArray());
+		args.put("classIds",classIds);
+		List<MediaVideo> lstOriginVideo = findByComplexHql(hql, args, MediaVideo.class);
+		for (MediaVideo mediaVideo : lstOriginVideo) {
+			originVideoMap.put(mediaVideo.getOriginVideoId() + mediaVideo.getClassId(), mediaVideo);
+		}
+		
+		hql = " from SchClassSubject where classId in (:classIds) and origSubjectId in (:origSubjectIds)";
+		args = new HashMap<String, Object>();
+		args.put("classIds", classIds);
+		args.put("origSubjectIds", lstSubjectIds.toArray());
+		List<SchClassSubject> subjects = findByComplexHql(hql, args, SchClassSubject.class);
+		for (SchClassSubject schClassSubject : subjects) {
+			origSubjectMap.put(schClassSubject.getClassId()+schClassSubject.getOrigSubjectId(), schClassSubject);
+		}
+		
+		Map<String, Object> orgTextMap = orgTextService.getOrgTextMap(keys, OrgText.TABLE_NAME_VIDEO);
+		
+		for (String clsId : classIds) {
+			for (String videoId : videoIds) {
+				MediaVideo video = videoMap.get(videoId);
+				MediaVideo mv = originVideoMap.get(video.getOriginVideoId()+clsId); // 判断当前班级有没有这个视频
+				if (mv == null) {
+					SchClassSubject clsSubject = origSubjectMap.get(clsId+video.getSubjectId());
+					mv = new MediaVideo();
+					MediaVideoReCourse videoCourse = videoOrgCourseMap.get(videoId+currOrgId);
+					try {
+						BeanUtils.copyProperties(mv, video);
+						mv.setVideoId(null);
+						mv.setClassId(clsId);
+						mv.setVideoOrder(videoCourse.getVideoOrder());
+						if(clsSubject == null){
+							mv.setSubjectId(null);
+							mv.setSubjectName(null);
+							mv.setCollegeCourseId(this.read(ClsClass.class, clsId).getCollegeCourseId());
+						}else{
+							mv.setSubjectId(clsSubject.getClassSubjectId());
+							mv.setSubjectName(clsSubject.getName());
+							mv.setCollegeCourseId(clsSubject.getCourseId());
+						}
+						if(null != origChapterMap.get(video.getOriginVideoId()+clsId)){
+							mv.setChapterId(origChapterMap.get(video.getOriginVideoId()+clsId).getChapterId());
+						}else{
+							mv.setChapterId(null);
+						}
+					} catch (Exception e) {
+						log.error("视频下发到班级BeanUtils.copyProperties()方法copy失败", e);
+					}
+					TraceUtils.setCreateTrace(mv);
+					this.mediaVideoService.saveVideo(mv);
+
+					OrgText oldOrgText = (OrgText) orgTextMap.get(video.getVideoId()); // 插入OrgText
+					orgTextService.doInsertOrgText(mv.getVideoId(), OrgText.TABLE_NAME_VIDEO, oldOrgText != null ? oldOrgText.getContent() : video.getRemark());
+				}
+			}
+			//标记班级有视频
+			ClsClass cls = read(ClsClass.class, clsId);
+			if(cls!=null&&cls.getHaveVideo()==ClsClass.NOT_HAVE_VIDEO){
+				cls.setHaveVideo(ClsClass.HAVE_VIDEO);
+				save(cls);
+			}
+		}
+	}
+
+	@Override
+	public Result deleteVideos(String videoIds) {
+		if(StringUtils.isEmpty(videoIds)){
+			return new Result(false, "参数错误");
+		}
+		
+		String[] ids = videoIds.split(",");
+		List<String> lst = new ArrayList<String>();
+		for (String videoId : ids) {
+			Result result = deleteVideo(videoId);
+			if (result.isSuccess()) {
+				lst.add(videoId);
+			}
+		}
+
+		// 转码记录
+		bulkUpdateInLoop("update MediaVideoTrans set deleteFlag = true where videoId = ?", lst.toArray());
+		this.bulkUpdateInLoop("update SchCourseware set deleteFlag=1 where id=?", lst.toArray());
+
+		return new Result(true);
+	}
+	
+	public Result deleteVideo(String videoId) {
+		String hql = " from MediaVideoReCourse where videoId = ? and deleteFlag is false and orgId=?";
+		MediaVideoReCourse mvr = findUnique(hql, CollectionUtils.newList(videoId, ClientUtils.getOrgId()), MediaVideoReCourse.class);
+		if (mvr == null) {
+			MediaVideo video = read(MediaVideo.class, videoId);
+			TraceUtils.setUpdateTrace(video);
+			video.setDeleteFlag(true);
+
+			mediaVideoService.saveVideo(video);
+			return new Result(true);
+		}
+		
+		hql = " from SchReLessonVideo where classScheduleId in" + "(select classScheduleId from SchClassSchedule where classId =? and deleteFlag is false)" + " and deleteFlag is false and videoId=?";
+		List<SchReLessonVideo> lstVideo = find(hql, CollectionUtils.newList(ClientUtils.getClassId(), videoId), SchReLessonVideo.class);
+		for (SchReLessonVideo schReLessonVideo : lstVideo) {
+			schReLessonVideo.setDeleteFlag(true);
+			TraceUtils.setUpdateTrace(schReLessonVideo);
+			save(schReLessonVideo);
+		}
+
+		return new Result(false);
+	}
+	
+	public Result updateMediaVideo(MediaVideo video){
+		MediaVideo v = read(MediaVideo.class, video.getVideoId());
+		
+		if(MediaVideo.STATUS_TAKEOFF == v.getStatus()){
+			if(null != video.getStartTime() && video.getStartTime().before(new Date()) 
+					&& null != video.getEndTime() && !video.getEndTime().before(new Date())){ // video.getStartTime()在new Date()之前返回true,否则返回false
+				
+				v.setStatus(MediaVideo.STATUS_PUBLISHED);
+			}
+			
+			if( null != video.getStartTime() && !video.getStartTime().before(new Date())){
+				
+				v.setStatus(MediaVideo.STATUS_DRAFT);
+			}
+		}
+		
+		if(MediaVideo.STATUS_PUBLISHED == v.getStatus()&&null != video.getEndTime() &&  video.getEndTime().before(new Date()) 
+				&& null != video.getStartTime() && video.getStartTime().before(new Date())){
+			 // video.getEndTime()在new Date()之前
+			v.setStatus(MediaVideo.STATUS_TAKEOFF);
+			
+		}
+		
+		v.setCoverPageUrl(video.getCoverPageUrl());
+		//v.setSubjectId(video.getSubjectId());
+		//v.setSubjectName(video.getSubjectName());
+		v.setStartTime(video.getStartTime());
+		v.setEndTime(video.getEndTime());
+		v.setValidity(video.getValidity());
+		v.setName(video.getName());
+		v.setRemark(video.getRemark());
+		v.setTeacherName(video.getTeacherName());
+		this.mediaVideoService.saveVideo(v);
+		
+		// 保存OrgText —— 视频详情
+		orgTextService.doSaveOrgText(v.getVideoId(), OrgText.TABLE_NAME_VIDEO, video.getRemark());
+		
+		String hql = " from MediaVideo where videoId!=? and deleteFlag is false and originVideoId = ?";
+		List<MediaVideo> lstVideo = find(hql, CollectionUtils.newList(video.getVideoId(),video.getVideoId()), MediaVideo.class);
+		for (MediaVideo mediaVideo : lstVideo) {
+			hql = " from SchClassSubject where deleteFlag is false and classId = ? and origSubjectId = ?";
+			
+			SchClassSubject scs = findUnique(hql, CollectionUtils.newList(mediaVideo.getClassId(),video.getSubjectId()), SchClassSubject.class);
+			if(scs==null){
+				continue;
+			}
+			mediaVideo.setSubjectId(scs.getClassSubjectId());
+			mediaVideo.setSubjectName(scs.getName());
+			this.mediaVideoService.saveVideo(mediaVideo);
+		}
+		return new Result(true);
+	}
+
+	public Result deleteOrgVideo(String videoId, Integer delAll, String orgIds[], String classIds[]) {
+		if ((orgIds != null && orgIds.length != 0)  || (classIds != null && classIds.length != 0)) {
+			// 删除需要回撤的视频
+			return deleteAppoint(videoId, orgIds, classIds);
+		}
+
+		String hql = " from MediaVideoReCourse where videoId = ? and deleteFlag is false and orgId = ?";
+		List<MediaVideoReCourse> lstMvr = find(hql, CollectionUtils.newList(videoId,ClientUtils.getOrgId()), MediaVideoReCourse.class);
+		for (MediaVideoReCourse mediaVideoReCourse : lstMvr) {
+			TraceUtils.setUpdateTrace(mediaVideoReCourse);
+			mediaVideoReCourse.setDeleteFlag(true);
+			save(mediaVideoReCourse);
+			
+			this.courseWareService.deleteOrgCourseware(videoId, ClientUtils.getOrgId());
+		}
+/*
+		MediaVideo video = this.read(MediaVideo.class, videoId);
+		if(video != null){
+			TraceUtils.setUpdateTrace(video);
+			video.setDeleteFlag(true);
+			this.mediaVideoService.saveVideo(video);
+		}*/
+		// 用户选择同时删除下级视频
+		if (delAll == 1) {
+			deleteSub(videoId,ClientUtils.getOrgId());
+
+		}
+		return new Result(true);
+	}
+
+	@SuppressWarnings("unchecked")
+	private void deleteSub(String videoId,String currOrgId) {
+		// 机构层级视频是没有重新new ,查询出机构下级ID再删关联表
+		String sql = " select oa.organization_id from organization as oa,organization ob " +
+				" where " +
+				" ob.ORGANIZATION_ID = ? " +
+				" and  " +
+				" oa.org_code like  CONCAT(ob.org_code,'%' ) " +
+				" and oa.delete_flag is false and ob.delete_flag is false "+
+				" order by oa.level,oa.org_code asc " ;
+		
+		List<String> orgIds = this.findBySql(sql, CollectionUtils.newList(currOrgId));
+		String hql = " from MediaVideoReCourse where videoId = :videoId and deleteFlag is false and orgId in (:orgIds)";
+		Map<String,Object> map = new HashMap<String, Object>();
+		map.put("videoId", videoId);
+		map.put("orgIds", orgIds.toArray());
+		List<MediaVideoReCourse> lstMvr = findByComplexHql(hql, map, MediaVideoReCourse.class);
+		
+		for (MediaVideoReCourse mediaVideoReCourse : lstMvr) {
+			TraceUtils.setUpdateTrace(mediaVideoReCourse);
+			mediaVideoReCourse.setDeleteFlag(true);
+			save(mediaVideoReCourse);
+		}
+		
+		MediaVideo video = read(MediaVideo.class, videoId);
+		// 班主任层面视频指定过后都是new 出来的,通过originVideoId 可以查出所有指定过去的视频
+		hql = "select classId from ClsClass where orgId in (:orgIds) and deleteFlag is false";
+		map = new HashMap<String, Object>();
+		map.put("orgIds", orgIds.toArray());
+		List<String> clsIds = findByComplexHql(hql, map, String.class);
+		if(!clsIds.isEmpty()){
+			hql = " from MediaVideo where originVideoId = :originVideoId and deleteFlag is false and videoId !=originVideoId and classId in (:classIds)";
+			map = new HashMap<String, Object>();
+			map.put("originVideoId", video.getOriginVideoId());
+			map.put("classIds", clsIds.toArray());
+			List<MediaVideo> videos = findByComplexHql(hql, map, MediaVideo.class);
+			for (MediaVideo mediaVideo : videos) {
+				TraceUtils.setUpdateTrace(mediaVideo);
+				mediaVideo.setDeleteFlag(true);
+				
+				this.mediaVideoService.saveVideo(mediaVideo);
+			}
+		}
+		
+	}
+
+	/**
+	 * 删除需要回撤的视频
+	 * 
+	 * @param videoId
+	 * @param orgIds
+	 * @param classIds
+	 * @return
+	 */
+	private Result deleteAppoint(String videoId, String orgIds[], String classIds[]) {
+		Map<String, Object> args = new HashMap<String, Object>();
+		// 删除需要回撤的机构视频
+		if (orgIds.length != 0) {
+			
+			String hql = " from MediaVideoReCourse where videoId = :videoId and deleteFlag is false and orgId in (:orgIds) and orgId != :currOrgId";
+
+			args.put("videoId", videoId);
+			args.put("orgIds", orgIds);
+			args.put("currOrgId", ClientUtils.getOrgId());
+			List<MediaVideoReCourse> courses = findByComplexHql(hql, args, MediaVideoReCourse.class);
+			for (MediaVideoReCourse mediaVideoReCourse : courses) {
+				TraceUtils.setUpdateTrace(mediaVideoReCourse);
+				mediaVideoReCourse.setDeleteFlag(true);
+				save(mediaVideoReCourse);
+				
+				this.courseWareService.deleteOrgCourseware(mediaVideoReCourse.getVideoId(), mediaVideoReCourse.getOrgId());
+			}
+		}
+
+		// 删除需要回撤的班主任视频
+		if (classIds.length != 0) {
+			args = new HashMap<String, Object>();
+			args.put("videoId", videoId);
+			args.put("classIds", classIds);
+			String hql = " from MediaVideo where originVideoId = :videoId and deleteFlag is false and classId in (:classIds)";
+			List<MediaVideo> videos = findByComplexHql(hql, args, MediaVideo.class);
+			for (MediaVideo mediaVideo : videos) {
+				TraceUtils.setUpdateTrace(mediaVideo);
+				mediaVideo.setDeleteFlag(true);
+				
+				this.mediaVideoService.saveVideo(mediaVideo);
+			}
+			
+		}
+
+		return new Result(true);
+	}
+
+	/**
+	 * 课程表列表
+	 * 
+	 * @return
+	 */
+	public List<SchClassSchedule> queryLessonList(Date monthFirst, Date monthLast) {
+
+		return queryLessonList(ClientUtils.getClassId(), monthFirst, monthLast);
+
+	}
+
+	@Override
+	public List<SchClassSchedule> queryAppLessonList(final String hql, final Pager page, final List<Object> args) {
+		return lessonDAO.queryAppLessonList(hql, page, args);
+	}
+
+	@Override
+	public List<SchClassSchedule> queryLessonList(String classId, Date monthFirst, Date monthLast) {
+
+		String sql = " select s.class_schedule_id as classScheduleId ,s.name, s.content, "
+				+ " s.teacher,s.address,s.start_time as startTime, s.end_time as endTime,s.status " 
+				+ " from sch_class_schedule s  where s.delete_flag = 0 and s.class_id = ? ";
+
+		List<Object> arrs = new ArrayList<Object>();
+		arrs.add(classId);
+		if (monthFirst != null && monthLast != null) {
+			sql = sql.concat("and s.start_time >= ? and s.start_time <= ?");
+			arrs.add(monthFirst);
+			arrs.add(monthLast);
+		}
+		sql = sql.concat(" order by s.create_time desc ");
+
+		return lessonDAO.queryLessonList(sql, arrs);
+	}
+
+	@Override
+	public List<String> queryClassesByTeacher(String orgTeacherId) {
+		return lessonDAO.queryClassesByTeacher(orgTeacherId);
+	}
+	
+	/**
+   	 * 根据直播查询讲师
+   	 * 
+   	 * @param orgTeacherId
+   	 * @return
+   	 */
+	public List<String> queryClassesByLive(String orgTeacherId) {
+		return lessonDAO.queryClassesByLive(orgTeacherId);
+	}
+
+	/**
+	 * 分享课程页面的全部课程表
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	@Override
+	public Result queryScheduleList(String classId, ModelAndView mv, ClsClass cls) {
+		String hql = " from SchClassSchedule where deleteFlag is false and classId = ? order by startTime";
+		List<SchClassSchedule> classScheduleLst = find(hql, CollectionUtils.newList(classId), SchClassSchedule.class);
+		
+		// 组装课表信息内容
+		Map<String, Object> nowLesson = new HashMap<String, Object>(5);
+		nowLesson.put("beginWeek", "");
+		nowLesson.put("lessonCount", classScheduleLst.size());
+		nowLesson.put("startTime", cls.getStartTime());
+		nowLesson.put("endTime", cls.getEndTime());
+		
+		if (!classScheduleLst.isEmpty()) {
+			// 班级开始时间在课程开始时间之后
+			if (cls.getStartTime().compareTo(classScheduleLst.get(0).getStartTime()) > 0) {
+				nowLesson.put("startTime", classScheduleLst.get(0).getStartTime());
+			}
+			// 班级结束时间在课程结束时间之前
+			if (cls.getEndTime().compareTo(classScheduleLst.get(classScheduleLst.size() - 1).getEndTime()) < 0) {
+				nowLesson.put("endTime", classScheduleLst.get(classScheduleLst.size() - 1).getEndTime());
+			}
+		}
+
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>();
+		Map<String, Object> map = null;
+		int index = 0;
+		int faceToface = 0;
+		int newwork = 0;
+
+		for (SchClassSchedule schedule : classScheduleLst) {
+			if(SchClassSchedule.SCH_NETWORK.equals(schedule.getMode())){
+				newwork++;
+			}else{
+				faceToface ++;
+			}
+			map = new HashMap<String, Object>(6);
+			map.put("name", schedule.getName());
+			map.put("startTime", schedule.getStartTime());
+			map.put("endTime", schedule.getEndTime());
+			map.put("address", schedule.getAddress());
+			map.put("teacher", schedule.getTeacher());
+			map.put("mode", schedule.getMode());
+
+			if (new Date().compareTo(schedule.getEndTime()) > 0) { // 当前时间在结束时间之后 - 已经上过的课
+
+				map.put("classStyle", "go-out");
+			} else { // 正在上或还没上的课
+				if (index == 0) { // 正在上的课
+					map.put("classStyle", "now");
+					index++;
+
+					// 组装课表信息内容
+					Calendar cal = Calendar.getInstance();
+					cal.setTime(schedule.getStartTime());
+					int begin_week = cal.get(Calendar.DAY_OF_WEEK);
+					String str_begin_week = DateTimeUtils.getWeek(begin_week);
+					nowLesson.put("beginWeek", str_begin_week);
+					nowLesson.put("beginTime", schedule.getStartTime());
+
+				} else { // 还没上的课
+					map.put("classStyle", "future");
+				}
+			}
+			lstMap.add(map);
+		}
+		mv.addObject("nowLesson", nowLesson);
+		mv.addObject("lessons", lstMap);
+		mv.addObject("mode", newwork>0&&faceToface>0?"线上、线下":newwork>0&&faceToface==0?"线上":"线下");
+		return new Result(true);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java b/src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java
new file mode 100644
index 0000000..5ce5340
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java
@@ -0,0 +1,324 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Service;
+
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.SchHandoutPage;
+import com.qxueyou.scc.school.model.SchNote;
+import com.qxueyou.scc.school.model.viewvo.SchNoteViewVO;
+import com.qxueyou.scc.school.service.INoteService;
+
+/**
+ * 笔记服务
+ * @author ody.yuan
+ *
+ */
+@Service
+public class NoteService extends CommonAppService implements INoteService {
+	
+	private final Logger log = LogManager.getLogger(NoteService.class);
+
+	/**
+	 * 添加笔记
+	 * @param note
+	 * @return
+	 */
+	public Result insertOrUpdateNote(SchNote note) {
+		
+		if(StringUtils.isNotBlank(note.getNoteId())){
+			SchNote note0 = read(SchNote.class, note.getNoteId());
+			TraceUtils.setUpdateTrace(note0);
+			note0.setContent(note.getContent());
+			note0.setNoteObjectId(note.getNoteObjectId());
+			note0.setShareFlag(note.getShareFlag());
+			if(note.getShareFlag()){
+				note0.setShareScope(SchNote.NOTE_SCOPE_CLASS);
+			}else{
+				note0.setShareScope(0);
+			}
+			save(note0);
+		}else{
+			TraceUtils.setCreateTrace(note);
+			note.setNoteTime(new Date(System.currentTimeMillis()));
+			note.setUserId(ClientUtils.getUserId());
+			note.setNoteObjectType(SchNote.NOTE_OBJECT_TYPE_HANDOUT_PAGE);
+			if(note.getShareFlag()){
+				note.setShareScope(SchNote.NOTE_SCOPE_CLASS);
+			}else{
+				note.setShareScope(0);
+			}
+			this.save(note);
+		}
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 删除某页讲一下的一条或 多条 笔记
+	 * @param noteIds
+	 * @return
+	 */
+	public Result deleteNotes(String noteIds) {
+		
+		if(StringUtils.isBlank(noteIds)){
+			return new Result(false,"参数不正确:noteIds为空");
+		}
+		
+		Result result =  bulkUpdateInLoop("update SchNote set deleteFlag = true where noteId = ?",noteIds.split(","));
+		
+		return result;
+	}
+	
+	/**
+	 * 删除某页讲义下的所有笔记
+	 * @param handoutPageId  讲义pageID
+	 * @param strObjectType  笔记对象类型
+	 * @return
+	 */
+	public Result deleteAllNotes(String handoutPageId,int iObjectType) {
+		
+		if(StringUtils.isBlank(handoutPageId)){
+			return new Result(false,"参数不正确:handoutPageId为空");
+		}
+		
+		Result result =  bulkUpdateInLoop("update SchNote set deleteFlag = true where " +
+				" noteObjectType = " + iObjectType + "  and noteObjectId = ?",new String[]{handoutPageId});
+		
+		return result;
+	}
+
+	/**
+	 * 笔记列表
+	 * @param handoutPageId 讲义pageID
+	 * @return
+	 */
+	public List<SchNoteViewVO> queryNoteList(String handoutPageId,Pager pager) {
+		
+		String sql = "select n.note_id,n.content,n.share_flag ,n.share_scope,n.note_time,n.note_object_id, " +
+				" n.user_id,u.name as user_name ,u.IMG_PATH as user_img " +
+				" from  sch_note n ,sch_handout_page p,user u " +
+				" where n.note_object_id = p.HANDOUT_PAGE_ID " +
+				" and   u.USER_ID = n.user_id " +
+				" and   n.delete_flag is false  and   p.delete_flag is FALSE and   u.DELETE_FLAG is FALSE " +
+				" and ( n.share_flag is true  or n.user_id = ? ) " +
+				" and  n.note_object_id = ? " +
+				" order by note_time desc  " ;
+		
+		return this.queryNoteList(sql, CollectionUtils.newList(ClientUtils.getUserId() , handoutPageId), pager);
+	}
+	
+	/**
+	 * 讲义笔记列表
+	 * @param handoutPageId
+	 * @param type (我的讲义笔记:0,同学笔记 :1,全部笔记:2)
+	 * @return
+	 */
+	public List<SchNoteViewVO> queryHandoutNoteList(String handoutPageId,Integer type,Pager pager) {
+		List<Object> args = new ArrayList<Object>();
+		String sql = " from  sch_note n ,sch_handout_page p,user u " +
+				" where n.note_object_id = p.HANDOUT_PAGE_ID " +
+				" and   u.USER_ID = n.user_id " +
+				" and   n.delete_flag is false  and   p.delete_flag is FALSE and   u.DELETE_FLAG is FALSE ";
+		if(0==type){
+			sql = sql.concat(" and  n.user_id = ?  ");
+			args.add(ClientUtils.getUserId());
+		}
+		if(1==type){
+			sql = sql.concat(" and  n.share_flag is true and n.user_id !=?");
+			args.add(ClientUtils.getUserId());
+		}
+		sql = sql.concat(" and  n.note_object_id = ? order by note_time desc ");
+		args.add(handoutPageId);	
+		
+		return this.queryPageNoteList(sql, args, pager);
+	}
+	
+	/**
+	 * 查询笔记列表
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private List<SchNoteViewVO> queryPageNoteList(String sql , List<Object> args, Pager pager){
+		
+		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
+		
+		int allCount = this.findCountBySql(sql, args);
+		
+		if(allCount < 1){
+			return new ArrayList<SchNoteViewVO>();
+		}
+		
+		List<Object[]> lst = this.findByPageSql("select n.note_id,n.content,n.share_flag ,n.share_scope,n.note_time,n.note_object_id, " +
+				" n.user_id,u.name as user_name ,u.IMG_PATH as user_img " +sql, args, pager);
+		List<SchNoteViewVO> resultLst = new ArrayList<SchNoteViewVO>(lst.size());
+		SchNoteViewVO vo ;
+    	
+    	for (Object[] obj : lst) {
+    		vo = new SchNoteViewVO();
+    		
+    		vo.setAllCount(allCount);
+    		vo.setNoteId(String.valueOf(obj[0]));
+    		vo.setContent(String.valueOf(obj[1]));
+    		vo.setShareFlag(Boolean.parseBoolean(String.valueOf(obj[2])));
+    		vo.setShareScope(null != obj[3] ? Integer.parseInt(String.valueOf(obj[3])) : 0);
+    		
+    		try {
+				vo.setNoteTime(null != obj[4] ? format.parse(String.valueOf(obj[4])) : null);
+			} catch (ParseException e) {
+				log.error("获取笔记列表转换日期报错" , e);
+			}
+    		vo.setNoteObjectId(String.valueOf(obj[5]));
+    		vo.setUserId(String.valueOf(obj[6]));
+    		vo.setUserName(String.valueOf(obj[7]));
+    		vo.setUserImg(String.valueOf(obj[8]));
+    		
+    		resultLst.add(vo);
+        }
+		
+		return resultLst ;
+	}
+	
+	/**
+	 * 单个讲义全部笔记列表
+	 * @param type (我的讲义笔记:0,同学笔记 :1,全部笔记:2)
+	 * @return
+	 */
+	public List<Map<String,Object>> queryAllHandoutNoteList(Integer type,String handoutId,Pager pager) {
+		
+		Map<String,Object> args = new HashMap<String, Object>();
+		 
+		String hql = " from SchHandoutPage where handoutId = ? and deleteFlag is false";
+		List<SchHandoutPage> pages = find(hql, CollectionUtils.newList(handoutId), SchHandoutPage.class);
+		Map<String,Integer> pageOrderMap = new HashMap<String,Integer>();
+		List<String> pageIds = new ArrayList<String>();
+		for (SchHandoutPage schHandoutPage : pages) {
+			pageOrderMap.put(schHandoutPage.getHandoutPageId(), schHandoutPage.getPageOrder());
+			pageIds.add(schHandoutPage.getHandoutPageId());
+		}
+		
+		if(pageIds.isEmpty()){
+			return new ArrayList<Map<String,Object>>();
+		}
+		
+		//组装sql
+		String sql = generateSql(type, args, pageIds);
+		
+		int allCount = findCountByComplexSql("select count(1) "+sql, args);
+		
+		if(allCount < 1){
+			return new ArrayList<Map<String,Object>>();
+		}
+		List<Object[]> lst = findByComplexSql("select n.note_id,n.content,n.share_flag ,n.share_scope,n.note_time,n.note_object_id, " +
+				" n.user_id,u.name as user_name ,u.IMG_PATH as user_img " + sql, pager, args,Object[].class);
+		
+		List<Map<String,Object>> resultLst = new ArrayList<Map<String,Object>>(lst.size());
+		Map<String,Object> map;
+		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
+		for (Object[] obj : lst) {
+    		map = new HashMap<String, Object>();
+    		map.put("allCount", allCount);
+    		map.put("noteId", String.valueOf(obj[0]));
+    		map.put("content", String.valueOf(obj[1]));
+    		map.put("shareFlag", Boolean.parseBoolean(String.valueOf(obj[2])));
+    		map.put("shareScope", null != obj[3] ? Integer.parseInt(String.valueOf(obj[3])) : 0);
+    		try {
+    			map.put("noteTime", null != obj[4] ? format.parse(String.valueOf(obj[4])) : null);
+				
+			} catch (ParseException e) {
+				log.error("获取笔记列表转换日期报错" , e);
+			}
+    		map.put("noteObjectId", String.valueOf(obj[5]));
+    		map.put("userId", String.valueOf(obj[6]));
+    		map.put("userName", String.valueOf(obj[7]));
+    		map.put("userImg", String.valueOf(obj[8]));
+    		map.put("pageOrder", pageOrderMap.get(String.valueOf(obj[5])));
+    		resultLst.add(map);
+        }
+		
+		
+		return resultLst;
+	}
+	
+	/**
+	 * 组装sql
+	 * @param type
+	 * @param args
+	 * @param pageIds
+	 * @return
+	 */
+	private String generateSql(Integer type,Map<String,Object> args,List<String> pageIds){
+	
+	 String sql = " from  sch_note n ,sch_handout_page p,user u " +
+				" where n.note_object_id = p.HANDOUT_PAGE_ID " +
+				" and   u.USER_ID = n.user_id " +
+				" and   n.delete_flag is false  and   p.delete_flag is FALSE and   u.DELETE_FLAG is FALSE ";
+		if(0==type){
+			sql = sql.concat(" and  n.user_id = :userId  ");
+			args.put("userId", ClientUtils.getUserId());
+		}else if(1==type){
+			sql = sql.concat(" and  n.share_flag is true ");
+		}
+		sql = sql.concat(" and  n.note_object_id in (:handoutPageIds) order by p.page_order asc,n.note_time desc ");
+		args.put("handoutPageIds", pageIds.toArray());	
+		return sql;
+	}
+	
+	/**
+	 * 查询笔记列表
+	 * @param sql
+	 * @param args
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	private List<SchNoteViewVO> queryNoteList(String sql , List<Object> args, Pager pager){
+		
+		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
+		List<Object[]> lst = this.findByPageSql(sql, args, pager);
+		List<SchNoteViewVO> resultLst = new ArrayList<SchNoteViewVO>(lst.size());
+		SchNoteViewVO vo ;
+    	
+    	for (Object[] obj : lst) {
+    		vo = new SchNoteViewVO();
+    		
+    		vo.setNoteId(String.valueOf(obj[0]));
+    		vo.setContent(String.valueOf(obj[1]));
+    		vo.setShareFlag(Boolean.parseBoolean(String.valueOf(obj[2])));
+    		vo.setShareScope(null != obj[3] ? Integer.parseInt(String.valueOf(obj[3])) : 0);
+    		
+    		try {
+				vo.setNoteTime(null != obj[4] ? format.parse(String.valueOf(obj[4])) : null);
+			} catch (ParseException e) {
+				log.error("获取笔记列表转换日期报错" , e);
+			}
+    		vo.setNoteObjectId(String.valueOf(obj[5]));
+    		vo.setUserId(String.valueOf(obj[6]));
+    		vo.setUserName(String.valueOf(obj[7]));
+    		vo.setUserImg(String.valueOf(obj[8]));
+    		
+    		resultLst.add(vo);
+        }
+		
+		return resultLst ;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java b/src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java
new file mode 100644
index 0000000..3b0a5c4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java
@@ -0,0 +1,299 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+//import com.aliyun.openservices.ons.api.ConsumeContext;
+//import com.aliyun.openservices.ons.api.Message;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+//import com.qxueyou.scc.base.service.IONSMsgDealService;
+//import com.qxueyou.scc.base.service.impl.CommonONSConsumer;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+//import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.school.model.SchRank;
+import com.qxueyou.scc.school.model.SchRankHis;
+import com.qxueyou.scc.school.model.SchRankVer;
+
+@Service("RankMsgDealService")
+public class RankMsgDealService{
+//public class RankMsgDealService implements IONSMsgDealService {
+	
+	@Autowired
+	CommonDAO dao;
+	
+//	@Autowired
+//	ICacheService cache;
+	
+	@Autowired
+	IONSExceptionLogService onsExceptionLogService;
+	
+
+	
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ONSExceptionLogService");
+	
+	/**
+	 * 排名更新时间,默认60秒
+	 */
+	@SuppressWarnings("unused")
+	private int updateRankMinutes = 60;
+	
+	@PostConstruct
+	void init() {
+		
+//		CommonONSConsumer.registerHandler("SCH_RANK", "RankMsgDealService");
+		
+//		updateRankMinutes = Integer.parseInt(cfg.getConfigByEnv("ons-rank-update-minutes"));
+	}
+
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+//		
+//		try {
+//			
+//			String userId = msg.getUserProperties("userId");
+//			String rankType = msg.getUserProperties("rankType");
+//			String scopeType = msg.getUserProperties("scopeType");
+//			String scopeId = msg.getUserProperties("scopeId");
+//			
+//			// 判断哪些需要更新排名
+//			List<SchRank> rankLst = getRankLstNeedUpdate(userId,rankType,scopeType,scopeId);
+//			
+//			// 如果有,则更新排名
+//			updateRankLst(rankLst);
+//			
+//		}catch(Exception e){
+//			
+//			String businessId = cfg.getConfigByEnv("ons-common-topic") + "-" + UUIDUtils.generateUUID();
+//			String desp = "userId:" + msg.getUserProperties("userId")+ 
+//					";rankType:" + msg.getUserProperties("rankType") +
+//					";scopeType:" + msg.getUserProperties("scopeType") + 
+//					";scopeId:" + msg.getUserProperties("scopeId") ;
+//
+//			log.error( businessId + " :排名消息发送失败:" + e , e);
+//			onsExceptionLogService.logSaveExceptionLog(cfg.getConfigByEnv("ons-common-topic"), "SCH_RANK", businessId , desp );
+//		}
+//		
+//		
+//	}
+
+	/**
+	 * 更新排名
+	 * 
+	 * @param rankLst
+	 */
+	@SuppressWarnings("unused")
+	private void updateRankLst(List<SchRank> rankLst) {
+
+		for (SchRank rank : rankLst) {
+			updateRank(rank);
+		}
+
+	}
+
+	/**
+	 * 更新排名
+	 * 
+	 * @param rank
+	 */
+	private void updateRank(SchRank rank) {
+
+		// 查询所有待排名实时数据列表
+		List<SchRank> rankLst = querySchRankLstByRank(rank);
+
+		// 按value排序
+		Collections.sort(rankLst, new Comparator<SchRank>() {
+			@Override
+			public int compare(SchRank r1, SchRank r2) {
+				if(r1.getValue()==null){
+					return -1;
+				}
+				if(r2.getValue()==null){
+					return 1;
+				}
+				return r2.getValue().compareTo(r1.getValue());
+			}
+		});
+
+		// 新建版本记录
+		SchRankVer version = insertRankVersion(rank);
+
+		// 插入rank_his数据
+		saveRankHisData(version, rankLst);
+
+		// 插入缓存记录,标记本次更新排名时间
+		updateUpdateTime(rank);
+
+	}
+
+	/**
+	 * 插入缓存记录,标记本次更新排名时间
+	 * 
+	 * @param rank
+	 */
+	private void updateUpdateTime(SchRank rank) {
+//		cache.set(getCacheIdFromRank(rank), 60 * updateRankMinutes, 1);
+	}
+
+	/**
+	 * 获取cacheId
+	 * 
+	 * @param rank
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private String getCacheIdFromRank(SchRank rank) {
+		return rank.getScopeType()
+				.concat(rank.getScopeId() != null ? rank.getScopeId() : "")
+				.concat(rank.getRankType());
+	}
+
+	/**
+	 * 创建新的版本记录
+	 * 
+	 * @param rank
+	 * @return
+	 */
+	private SchRankVer insertRankVersion(SchRank rank) {
+
+		// 更新旧的最新版本
+		String hql = "from SchRankVer where rankType=? and scopeId=? and scopeType=? and latest is true order by version desc";
+		List<SchRankVer> oldLastestVerLst = dao.find(hql, CollectionUtils.newList(
+				rank.getRankType(), rank.getScopeId(), rank.getScopeType()),
+				SchRankVer.class);
+
+		SchRankVer lastestVer = oldLastestVerLst.isEmpty()?null:oldLastestVerLst.get(0);
+		
+		for(SchRankVer oldVer:oldLastestVerLst){
+			TraceUtils.setUpdateTrace(oldVer);
+			oldVer.setLatest(false);
+			dao.saveOrUpdate(oldVer);
+		}
+
+		// 创建新的版本
+		SchRankVer ver = new SchRankVer();
+
+		TraceUtils.setCreateTrace(ver);
+		ver.setDeleteFlag(false);
+
+		ver.setLatest(true);
+		ver.setRankType(rank.getRankType());
+		ver.setScopeId(rank.getScopeId());
+		ver.setScopeType(rank.getScopeType());
+		ver.setVersion(lastestVer == null ? 1
+				: lastestVer.getVersion() + 1);
+		ver.setVersionTime(new Date());
+
+		dao.saveOrUpdate(ver);
+
+		return ver;
+	}
+
+	/**
+	 * 根据任何一条排名数据查询所有待排名实时数据列表
+	 * 
+	 * @param rank
+	 * @return
+	 */
+	private List<SchRank> querySchRankLstByRank(SchRank rank) {
+		Pager page = new Pager();
+		page.setPageNum(1);
+		page.setPageSize(200);
+		String hql = "from SchRank where rankType=? and scopeId=? and scopeType=? order by value desc";
+		List<SchRank> lstSchRank = dao.findList(hql, page, CollectionUtils.newList(
+				rank.getRankType(), rank.getScopeId(), rank.getScopeType()),
+				SchRank.class);
+
+		return lstSchRank;
+	}
+
+	/**
+	 * 判断哪些需要更新排名
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private List<SchRank> getRankLstNeedUpdate(String userId,String rankType,String scopeType,String scopeId) {
+
+		StringBuffer sb = new StringBuffer("from SchRank where userId=? and rankType = ? and scopeType = ? ");
+		// 参数集合
+		List<Object> args = CollectionUtils.newList(userId,rankType,scopeType);
+		
+		if(!SchRank.SCOPE_TYPE_QXUEYOU.equals(scopeType) 
+				&& StringUtils.isNotBlank(scopeId)){// qxueyou排名 不需要
+			sb.append(" and scopeId = ?");
+			args.add(scopeId);
+		}
+		
+		List<SchRank> lstSchRank = dao.find(sb.toString(), args, SchRank.class);
+
+		List<SchRank> result = new ArrayList<SchRank>(5);
+		
+		String cacheId = null;
+
+//		for (SchRank rank : lstSchRank) {
+//			cacheId = getCacheIdFromRank(rank);
+//			if (cache.get(cacheId, Integer.class) == null) {
+//				result.add(rank);
+//			}
+//		}
+
+		return result;
+	}
+
+	/**
+	 * 插入rank_his数据
+	 * 
+	 * @param version
+	 * @param rankLst
+	 */
+	private void saveRankHisData(SchRankVer version, List<SchRank> rankLst) {
+
+		List<SchRankHis> hisLst = new ArrayList<SchRankHis>(rankLst.size());
+
+		int i = 1;
+		Date now = new Date();
+		SchRankHis his = null;
+
+		for (SchRank rank : rankLst) {
+
+			// Q学友只处理前一百名
+			if (i > 100
+					&& SchRank.SCOPE_TYPE_QXUEYOU.equals(rank.getScopeType())) {
+				break;
+			}
+
+			his = new SchRankHis();
+
+			TraceUtils.setCreateTrace(his);
+			his.setDeleteFlag(false);
+
+			his.setRank(i++);
+			his.setRankId(rank.getRankId());
+			his.setRankTime(now);
+			his.setUserId(rank.getUserId());
+			his.setValue(rank.getValue());
+			his.setVersionId(version.getVersionId());
+
+			hisLst.add(his);
+		}
+
+		dao.saveOrUpdateAll(hisLst);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/RankService.java b/src/main/java/com/qxueyou/scc/school/service/impl/RankService.java
new file mode 100644
index 0000000..620d2d9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/RankService.java
@@ -0,0 +1,700 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+//import com.qxueyou.scc.base.model.ONSMsg;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.service.ICacheService;
+//import com.qxueyou.scc.base.service.impl.CommonONSProducer;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+//import com.qxueyou.scc.msg.service.IMsgVenderService;
+import com.qxueyou.scc.school.dao.RankDAO;
+import com.qxueyou.scc.school.model.SchRank;
+import com.qxueyou.scc.school.model.SchRankHis;
+import com.qxueyou.scc.school.model.SchRankVer;
+import com.qxueyou.scc.school.service.IRankService;
+//import com.qxueyou.scc.transact.model.TransAccountType;
+
+/**
+ * 排名消息发送服务,对应的消息接收服务为 RankMsgReceiveService
+ * 
+ * @author 德虎
+ * 
+ */
+@Service
+public class RankService implements
+		IRankService {
+	
+	/**排行**/
+	private static final String RANK = "rank";
+
+	/**日志**/
+	private final Logger log = LogManager.getLogger("RankService");
+	
+	@Autowired
+	CommonDAO dao;
+	
+	@Autowired
+	RankDAO rankDao;
+	
+//	@Autowired
+//	CommonONSProducer onsProducer;
+//	
+//	@Autowired
+//	IMsgVenderService  easemobService;
+//	
+//	/** 积分账户和佣金账户 */
+//	@Autowired
+//	ITransAccountService  transAccountService;
+//	
+//	/**缓存**/
+//	@Autowired
+//	ICacheService cacheService;
+
+	@Override
+	public Result reqUpdateRankOld(String userId) {
+		
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//
+//		msg.put("msgType", "SCH_RANK");
+//		msg.put("userId", userId);
+//
+//		try {
+//
+//			onsProducer.sendMsg(msg);
+//
+//			return new Result(true);
+//
+//		} catch (Exception e) {
+//			log.error("call rankMsgSendService fail.userId: " + userId, e);
+//		}
+
+		return new Result(false);
+	}
+
+	@Override
+	public Result reqUpdateRank(String userId, String rankType, String scopeType, String scopeId) {
+
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//
+//		msg.put("msgType", "SCH_RANK");
+//		msg.put("userId", userId);
+//		msg.put("rankType", rankType);
+//		msg.put("scopeType", scopeType);
+//		msg.put("scopeId", scopeId);
+//
+//		try {
+//
+//			onsProducer.sendMsg(msg);
+//
+//			return new Result(true);
+//
+//		} catch (Exception e) {
+//			log.error("call rankMsgSendService fail.userId: " + userId, e);
+//		}
+
+		return new Result(false);
+	}
+	
+	@Override
+	public int getRankInScope(String userId, String rankType, String scopeType, String scopeId) {
+		
+		String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
+				"where his.versionId=ver.versionId " +
+				"and ver.latest is true " +
+				"and ver.rankType=? " +
+				"and ver.scopeType=? " +
+				"and ver.scopeId=? " +
+				"and his.userId=?";
+		
+		Integer rank = dao.findUnique(hql,
+				CollectionUtils.newList(rankType,scopeType,scopeId,userId), Integer.class);
+		
+		return rank==null?-1:rank;
+	}
+
+	
+	@Override
+	public int getRankInClass(String userId, String classId) {
+		
+		String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
+				"where his.versionId=ver.versionId " +
+				"and ver.latest is true " +
+				"and ver.rankType=? " +
+				"and ver.scopeType=? " +
+				"and ver.scopeId=? " +
+				"and his.userId=?";
+		
+		Integer rank = dao.findUnique(hql, CollectionUtils.newList(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_CLASS,classId,userId), Integer.class);
+		
+		return rank==null?-1:rank;
+	}
+	
+	@Override
+	public List<SchRankHis> getClassRankLst(String classId) {
+		
+		Pager page = new Pager();
+		page.setPageNum(1);
+		page.setPageSize(200);
+		
+		return getClassRankLst(classId,page);
+	}
+	
+	@Override
+	public List<SchRankHis> getClassRankLst(String classId,Pager page) {
+		
+		String versionId = getLastestVersionId(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_CLASS,classId);
+		
+		String hql = "from SchRankHis his where his.versionId=? and his.value is not null order by his.rank";
+		
+		List<SchRankHis> result = dao.findList(hql, page, CollectionUtils.newList(versionId), SchRankHis.class);
+		
+		return result;
+	}
+
+	/**
+	 * 获取最新版本ID
+	 * @param rankType
+	 * @param scopeType
+	 * @param scopeId
+	 * @return
+	 */
+	private String getLastestVersionId(String rankType,String scopeType,String scopeId) {
+		String hql = "select ver.versionId from SchRankVer ver where " +
+				"ver.latest is true " +
+				"and ver.rankType=? " +
+				"and ver.scopeType=? " +
+				"and ver.scopeId=? " ;
+		
+		return this.dao.findUnique(hql, CollectionUtils.newList(rankType,scopeType,scopeId), String.class);
+	}
+
+	@Override
+	public int getRankInQxueyou(String userId) {
+		
+		String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
+				"where his.versionId=ver.versionId " +
+				"and ver.latest is true " +
+				"and ver.rankType=? " +
+				"and ver.scopeType=? "+
+				"and his.userId=?";
+		
+		Integer rank = dao.findUnique(hql, CollectionUtils.newList(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_QXUEYOU,userId), Integer.class);
+		
+		return rank==null?-1:rank;
+	}
+
+	@Override
+	public List<SchRankHis> getQxueyouTopRankLst() {
+		
+		String versionId = getLastestVersionId(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_QXUEYOU,"null");
+		
+		String hql = "from SchRankHis his where his.versionId=? order by his.rank";
+		
+		List<SchRankHis> result = dao.find(hql, CollectionUtils.newList(versionId), SchRankHis.class);
+		
+		return result;
+	}
+	
+	/**
+	 * 获取用户个人传播大使积分和排名信息
+	 * 
+	 * @param userId 用户id
+	 * @return
+	 */
+	@Override
+	public SchRankHis doGetUserRank(String userId) {
+//		//防止重复回调
+//		String ing = cacheService.get("CREAT_ACCOUNT"+userId, String.class);
+//		if(StringUtils.isBlank(ing)){
+//			//放入缓存
+//			cacheService.set("CREAT_ACCOUNT"+userId, 60*60, "ING");
+//			//判断用户是否存在积分和佣金账户,不存在就添加
+//			boolean hasCommission = transAccountService.existsAccount(TransAccountType.ACCOUNT_TYPE_ATS_COMMISSION, userId);
+//			boolean hasScore = transAccountService.existsAccount(TransAccountType.ACCOUNT_TYPE_ATS_SCORE, userId);
+//			if(!hasCommission){
+//				transAccountService.addAccount(TransAccountType.ACCOUNT_TYPE_ATS_COMMISSION, userId);
+//			}
+//			if(!hasScore){
+//				transAccountService.addAccount(TransAccountType.ACCOUNT_TYPE_ATS_SCORE, userId);
+//			}
+//		}
+		
+		String versionId = this.getAtsLastVersion();
+		//获取个人排名
+		String hql = "from SchRankHis his where his.versionId=? and his.userId = ? and his.deleteFlag is false";
+		SchRankHis objSchRankHis = dao.findUnique(hql, CollectionUtils.newList(versionId, userId), SchRankHis.class);
+		
+		Integer iCount = this.atsUserCount(versionId);
+		if(objSchRankHis == null){
+			//新建排行
+			objSchRankHis = new SchRankHis();
+			TraceUtils.setCreateTrace(objSchRankHis);
+			objSchRankHis.setDeleteFlag(false);
+			objSchRankHis.setUserId(userId);
+			objSchRankHis.setName(ClientUtils.getUserName());
+			objSchRankHis.setRankTime(new Date());
+			objSchRankHis.setRank(iCount+1);
+			objSchRankHis.setValue(BigDecimal.ZERO);
+			objSchRankHis.setVersionId(versionId);
+			this.dao.save(objSchRankHis);
+			iCount++;
+		}
+		int percentages = 100-(iCount == 0?0:objSchRankHis.getRank()*100/iCount);
+		if(percentages <= 0){
+			percentages = 0;
+		}
+		if(percentages >= 100){
+			percentages = 99;
+		}
+		//获取排名百分比
+		objSchRankHis.setPercentages(new BigDecimal(percentages).setScale(2, BigDecimal.ROUND_HALF_UP));
+		return objSchRankHis;
+	}
+	
+	/**
+	 * 获取排行最新版本
+	 * 
+	 * @return
+	 */
+	private String getAtsLastVersion(){
+//		String versionId = cacheService.get("ATS_RANK_VERSION", String.class);
+		String versionId =null;
+		if(StringUtils.isBlank(versionId)){
+			//获取最新排名版本
+			versionId = getLastestVersionId(SchRank.RANK_TYPE_ATS_SCORE,SchRank.SCOPE_TYPE_QXUEYOU,"null");
+			//新增版本表
+			if(StringUtils.isEmpty(versionId)){
+				SchRankVer objSchRankVer = new SchRankVer();
+				objSchRankVer.setLatest(true);
+				objSchRankVer.setRankType(SchRank.RANK_TYPE_ATS_SCORE);
+				objSchRankVer.setScopeType(SchRank.SCOPE_TYPE_QXUEYOU);
+				objSchRankVer.setScopeId("null");
+				objSchRankVer.setVersionTime(new Date());
+				objSchRankVer.setDeleteFlag(false);
+				TraceUtils.setCreateTrace(objSchRankVer);
+				this.dao.save(objSchRankVer);
+				versionId = objSchRankVer.getVersionId();
+			}
+			//放入缓存
+//			cacheService.set("ATS_RANK_VERSION", 60*60*8, versionId);
+		}
+		
+		return versionId;
+	}
+	
+	/**
+	 * 获取全部人数
+	 * 
+	 * @param versionId
+	 * @return
+	 */
+	private Integer atsUserCount(String versionId){
+//		Integer count = cacheService.get("ATS_RANK_USER_COUNT", Integer.class);
+		Integer count =0;
+		if(count == null || count == 0){
+			//获取全站大使人数
+			String hql_count = "from SchRankHis his where his.versionId=? and his.deleteFlag is false";
+			
+			count = dao.findCount(hql_count, CollectionUtils.newList(versionId));
+			//放入缓存
+//			cacheService.set("ATS_RANK_USER_COUNT", 60*60*8, count);
+		}
+		return count;
+	}
+
+	@Override
+	public void updateRankValue(String userId, String rankType, BigDecimal delta,
+			BigDecimal total, String remark, boolean isSendMsg) {
+		
+		String hql = "update SchRank set value= ? where rankType=? and userId=?";
+		
+		dao.bulkUpdate(hql, new Object[]{total,rankType,userId});
+		
+		//请求更新排名
+		// 1.更新当前班级数据
+		reqUpdateRank(userId, SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_CLASS, ClientUtils.getClassId());
+		
+		// 2.更新Q学友数据
+		reqUpdateRank(userId, SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_QXUEYOU, "null");
+		
+		// 判断是否发送消息
+		if(!isSendMsg){
+			return;
+		}
+		
+		try {
+			
+			Map<String,String> extra = new HashMap<String,String>();
+			extra.put("title", "积分变动");
+			extra.put("delta", String.valueOf(delta));
+			// 积分不再发系统通知 by cyq 20160823
+			//easemobService.doSendTextMsgToUsers("notice-sys", new String[]{userId}, msg.getContent(), extra);
+			
+		} catch (Exception e) {
+			
+			log.error("增加积分推送消息出错:"+e,e);
+		}
+	}
+
+	/**
+	 * 创建积分消息
+	 * @param userId
+	 * @param delta
+	 * @param remark
+	 * @return
+	 *//*
+	private Message newScoreMsg(String userId, BigDecimal delta, String remark) {
+		
+		//新建消息并保存
+		Message msg = new Message();
+		TraceUtils.setCreateTrace(msg);
+		
+		msg.setMsgType("SCH_SCORES");
+		msg.setSenderId(ClientUtils.getUserId()!=null?ClientUtils.getUserId():"admin");
+		msg.setSender(ClientUtils.getUserName()!=null?ClientUtils.getUserName():"系统管理员");
+		msg.setReceiverId(userId);
+		msg.setSender(null);
+		msg.setContent("增加"+delta+"个积分:"+remark);
+		
+		return msg;
+	}*/
+	
+	
+	
+	
+	/**
+	 * 请求好友排名
+	 * @return -1代表还没有名次
+	 */
+	public int getRankInFriend(String userId) {
+		String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
+				"where his.versionId=ver.versionId " +
+				"and ver.latest is true " +
+				"and ver.rankType = ? " +
+				"and ver.scopeType = ? " +
+				"and ver.scopeId = ? " +
+				"and his.userId = ?";
+		
+		Integer rank = dao.findUnique(hql, CollectionUtils.newList(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_FRIEND,userId,userId), Integer.class);
+		
+		return rank==null?-1:rank;
+	}
+
+	/**
+	 * 请求好友排名列表
+	 * @return
+	 */
+	public List<SchRankHis> getFriendRankLst(String userId, Pager page) {
+		
+		String versionId = getLastestVersionId(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_FRIEND,userId);
+		
+		String hql = "from SchRankHis his where his.versionId=? order by his.rank";
+		
+		List<SchRankHis> result = dao.findList(hql, page, CollectionUtils.newList(versionId), SchRankHis.class);
+		
+		return result;
+	}
+
+	/**
+	 * 最近num天全站排名状态变化
+	 */
+	public List<Map<String,Object>> getPersonalQxueyouRankTrend(String userId,Pager page, int num) {
+		
+		List<SchRankHis> lstRankHis = new ArrayList<SchRankHis>();
+		List<String> versionId = this.getLastestNumVersionId(SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_QXUEYOU, null , num);
+		
+		if(!versionId.isEmpty()){
+			String hql = "from SchRankHis his where his.versionId in (:versionId) and his.userId = :userId order by his.rankTime asc  ";
+			
+			Map<String,Object> argsMap = new HashMap<String,Object>();
+			argsMap.put("versionId", versionId);
+			argsMap.put("userId", ClientUtils.getUserId());
+			
+			lstRankHis = this.dao.findByComplexHql(hql, page, argsMap, SchRankHis.class);
+		}
+		
+		return this.generatePersonalRankTrend(lstRankHis,num ,SchRank.SCOPE_TYPE_QXUEYOU,null,userId);
+	}
+
+	/**
+	 * 最近num天好友排名状态变化
+	 */
+	public List<Map<String,Object>> getPersonalFriendRankTrend(String userId,
+			Pager page, int num) {
+		
+		List<SchRankHis> lstRankHis = new ArrayList<SchRankHis>();
+		List<String> versionId = this.getLastestNumVersionId(SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_FRIEND, userId , num);
+		
+		if(!versionId.isEmpty()){
+			String hql = "from SchRankHis his where his.versionId in (:versionId) and his.userId = :userId order by his.rankTime asc  ";
+			
+			Map<String,Object> argsMap = new HashMap<String,Object>();
+			argsMap.put("versionId", versionId);
+			argsMap.put("userId", ClientUtils.getUserId());
+			
+			lstRankHis = this.dao.findByComplexHql(hql, page, argsMap, SchRankHis.class);
+		}
+		
+		
+		
+		return this.generatePersonalRankTrend(lstRankHis,num ,SchRank.SCOPE_TYPE_FRIEND,null,userId);
+	}
+	
+	
+	/**
+	 * 最近num天班级排名状态变化
+	 */
+	public List<Map<String,Object>> getPersonalClassRankTrend(String userId,String classId,Pager page,int num) {
+		
+		List<SchRankHis> lstRankHis = new ArrayList<SchRankHis>();
+		List<String> versionId = this.getLastestNumVersionId(SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_CLASS, classId , num);
+		
+		if(!versionId.isEmpty()){
+			String hql = "from SchRankHis his where his.versionId in (:versionId) and his.userId = :userId order by his.rankTime asc  ";
+			
+			Map<String,Object> argsMap = new HashMap<String,Object>();
+			argsMap.put("versionId", versionId);
+			argsMap.put("userId", userId);
+			
+			lstRankHis = this.dao.findByComplexHql(hql, page, argsMap, SchRankHis.class);
+		}
+		
+		return this.generatePersonalRankTrend(lstRankHis,num ,SchRank.SCOPE_TYPE_CLASS,classId,userId);
+	}
+	
+	/**
+	 * 组装变化趋势,有一个bug,新登录的用户第一次查看积分,会显示前面四天积分和当前最新积分一致
+	 * @param lstRankHis
+	 * @param num
+	 * @param classId
+	 * @return
+	 */
+	private List<Map<String,Object>> generatePersonalRankTrend(List<SchRankHis> lstRankHis,int num ,String scopeType,String scopeId,String userId ){
+		
+		// 取得每天的最后一个版本,查询排名表数据
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>(lstRankHis.size());
+		Map<Integer,Integer> mapIndex = new HashMap<Integer,Integer>();
+		SimpleDateFormat weekFm = new SimpleDateFormat("EEEE", Locale.CHINA);
+		//SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd");
+		Map<String,Object> map; 
+		
+		// 将本来有的排名抽取组装
+		if(!lstRankHis.isEmpty()){
+			
+			int index = 0;
+			for(SchRankHis rank : lstRankHis){
+				if( (System.currentTimeMillis() / (1000 * 60 * 60 * 24) - rank.getRankTime().getTime() / (1000 * 60 * 60 * 24 )) < num  ){
+					index = num -  (int)(System.currentTimeMillis()/(1000 * 60 * 60 * 24) - rank.getRankTime().getTime() / (1000 * 60 * 60 * 24)) ;
+					map = new HashMap<String,Object>();
+					map.put("index", index );
+					map.put(RANK, rank.getRank());
+					map.put("rankTime", rank.getRankTime().getTime());
+					map.put("rankWeek", weekFm.format(rank.getRankTime()));
+					//map.put("rankDate", dateFm.format(rank.getRankTime()));
+					result.add(map);
+					mapIndex.put(index,rank.getRank());
+				}
+			}
+			
+		}
+		
+		//判断,少了需要重新组装
+		long startTime = System.currentTimeMillis() - ((long)num) * 24 * 60 * 60 * 1000 ;
+		if( !result.isEmpty() && result.size() < num ){
+			Integer iRank = null;
+			long lTime = 0 ;
+			
+			//第一遍取最新排名
+			for(int i = result.size() -1  ; i >= 0 ; i--){
+				if(null != result.get(i) && StringUtils.isNotBlank(String.valueOf(result.get(i).get("rankTime"))) 
+						&& Long.parseLong(String.valueOf(result.get(i).get("rankTime"))) > lTime ){
+					lTime = Long.parseLong(String.valueOf(result.get(i).get("rankTime"))) ;
+					iRank = Integer.parseInt(String.valueOf(result.get(i).get(RANK))) ;
+				}
+			}
+			
+			//第二遍组装
+			for(int i = num ; i > 0 ; i--){
+				if(!mapIndex.containsKey(i)){
+					//如果没有,统一以后面的排名为准
+					iRank = i == num ? iRank : mapIndex.get(i+1);
+					map = new HashMap<String,Object>();
+					map.put("index", i);
+					map.put(RANK, iRank);
+					map.put("rankTime", startTime + ((long)i) * 24 * 60 * 60 * 1000 );
+					map.put("rankWeek", weekFm.format(startTime + ((long)i) * 24 * 60 * 60 * 1000));
+					//map.put("rankDate", dateFm.format(startTime + ((long)i) * 24 * 60 * 60 * 1000));
+					result.add(map);
+					mapIndex.put(i,iRank);
+				}
+			}
+			
+		}else{
+			
+			//没有的话,直接用当前积分
+			Integer iRank = null;
+			
+			if(SchRank.SCOPE_TYPE_CLASS.equals(scopeType)){
+				iRank = this.getRankInClass(userId, scopeId); 
+			}
+			if(SchRank.SCOPE_TYPE_QXUEYOU.equals(scopeType)){
+				iRank = this.getRankInQxueyou(userId); 
+			}
+			if(SchRank.SCOPE_TYPE_FRIEND.equals(scopeType)){
+				iRank = this.getRankInFriend(userId); 
+			}
+			
+			String strRank = iRank > 0 ? String.valueOf(iRank) : "--" ;
+			
+			for(int i = 1 ; i <= num ; i++ ){
+				map = new HashMap<String,Object>();
+				map.put("index", i);
+				map.put(RANK, strRank);
+				map.put("rankTime", startTime + ((long)i) * 24 * 60 * 60 * 1000 );
+				map.put("rankWeek", weekFm.format(startTime + ((long)i) * 24 * 60 * 60 * 1000 ));
+				result.add(map);
+			}
+			
+		}
+		
+		return result ;
+	}
+	
+	/**
+	 * 获取最近N天的每天一个版本,每天获取的一个版本规则为:当天最新的一个版本
+	 * @param rankType
+	 * @param scopeType
+	 * @param scopeId
+	 * @return
+	 */
+	private List<String> getLastestNumVersionId(String rankType,String scopeType,String scopeId,int num) {
+		
+		Pager page = new Pager();
+		page.setPageNum(1);
+		page.setPageSize(num);
+		
+		String plusSQL = "";  
+		if(StringUtils.isNotBlank(scopeId)){
+			plusSQL = " AND SCOPE_ID = :scopeId ";
+		}
+		
+		String sql = "SELECT " +
+					"VID,VER,VTIME " +
+					"FROM  " +
+					"( " +
+					"SELECT DISTINCT  VERSION_ID VID, VERSION_TIME VTIME,VERSION VER " +
+					"FROM SCH_RANK_VER WHERE RANK_TYPE = :randType AND SCOPE_TYPE = :scopeType " +
+					plusSQL + 
+					" ORDER BY VERSION DESC  " +
+					") V GROUP BY DATE(VTIME)  ORDER BY V.VER DESC ";
+		
+		
+		Map<String, Object> argsHWMap = new HashMap<String, Object>();
+		argsHWMap.put("randType", rankType);
+		argsHWMap.put("scopeType", scopeType);
+		
+		if(StringUtils.isNotBlank(scopeId)){
+			argsHWMap.put("scopeId", scopeId);
+		}
+		
+		List<Object[]> lstObj = this.dao.findByComplexSql(sql, page, argsHWMap, Object[].class);
+		
+		if(lstObj.isEmpty()){
+			return new ArrayList<String>();
+		}
+		
+		List<String> lstVer = new ArrayList<String>(num);
+		//判断是否每天都有一条记录
+		for(Object[] obj : lstObj ){
+			lstVer.add(String.valueOf(obj[0]));
+		}
+		
+		return lstVer;
+	}
+	
+	/**
+	 * 得到排名数据(班级、好友、全站)排名 及排名上升下降     
+	 * @return
+	 */
+	public Map<String,Object> getScoreRankPageData(){
+		
+		Map<String,Object> result = new HashMap<String,Object>();
+		
+		Pager page = new Pager();
+		page.setPageNum(1);
+		page.setPageSize(Integer.MAX_VALUE);
+		
+		
+		//1.班级排名及上升
+		List<Map<String,Object>> lstClass = this.getPersonalClassRankTrend(ClientUtils.getUserId(), ClientUtils.getClassId(), page, 2);
+		String firstClassRank = String.valueOf(lstClass.get(0).get(RANK));
+		String lastestClassRank = String.valueOf(lstClass.get(1).get(RANK));
+		
+		this.getChange(result, firstClassRank, lastestClassRank, "class");
+		
+		//2.qxueyou排名及上升
+		List<Map<String,Object>> lstQxueyou = this.getPersonalQxueyouRankTrend(ClientUtils.getUserId(), page, 2);
+		String firstQxueyouRank = String.valueOf(lstQxueyou.get(0).get(RANK));
+		String lastestQxueyouRank = String.valueOf(lstQxueyou.get(1).get(RANK));
+		
+		this.getChange(result, firstQxueyouRank, lastestQxueyouRank, "qxueyou");
+		//3.好友排名及上升
+		List<Map<String,Object>> lstFriend = this.getPersonalFriendRankTrend(ClientUtils.getUserId(), page, 2);
+		String firstFriendRank = String.valueOf(lstFriend.get(0).get(RANK));
+		String lastestFriendRank = String.valueOf(lstFriend.get(1).get(RANK));
+		
+		this.getChange(result, firstFriendRank, lastestFriendRank, "friend");
+		
+		return result;
+		
+	}
+	
+	/**
+	 * 判断改变
+	 * 
+	 * @param firstRank
+	 * @param lastestRank
+	 * @param type
+	 * @return
+	 */
+	private Map<String,Object> getChange(Map<String,Object> result, String firstRank, String lastestRank, String type){
+		if(!"--".equals(lastestRank)){
+			result.put(type+"Rank", lastestRank);
+			if(!"--".equals(firstRank)){
+				int first = Integer.parseInt(firstRank) ;
+				int last = Integer.parseInt(lastestRank);
+				
+				result.put(type+"ChangeNum", last > first ? last - first : first - last );
+				result.put(type+"ChangeUp", last > first ? true : false );
+			}else{
+				result.put(type+"ChangeNum", "" );
+				result.put(type+"ChangeUp", false );
+			}
+		}else{
+			result.put(type+"Rank", "--");
+			result.put(type+"ChangeNum", "" );
+			result.put(type+"ChangeUp", false );
+		}
+		
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java
new file mode 100644
index 0000000..de4edcd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java
@@ -0,0 +1,66 @@
+package com.qxueyou.scc.school.service.impl;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+//import com.qxueyou.scc.base.service.IONSMsgDealService;
+//import com.qxueyou.scc.base.service.impl.CommonONSConsumer;
+//import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.school.service.ISignService;
+
+/**
+ * 签到异步相关消息
+ * 
+ * @author ody.yuan
+ *
+ */
+@Service("SchSignMsgDealService")
+public class SchSignMsgDealService{
+//public class SchSignMsgDealService implements IONSMsgDealService {
+
+	@Autowired
+	ISignService signService;
+
+	@Autowired
+	IONSExceptionLogService onsExceptionLogService;
+
+
+
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ONSExceptionLogService");
+
+	@PostConstruct
+	void init() {
+
+//		CommonONSConsumer.registerHandler("SCH_SIGN_QUEUE", "SchSignMsgDealService");
+
+	}
+
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+//		
+//		// 严格异常处理
+//		try {
+//			
+//			String args = msg.getUserProperties("args");
+//
+//			signService.doHandleSignQueueMsg(args);
+//
+//
+//		} catch (Exception e) {
+//
+//			String businessId = cfg.getConfigByEnv("ons-common-topic") + "-" + UUIDUtils.generateUUID();
+//			String desp = "userId:" + msg.getUserProperties("userId") + ";userName:" + msg.getUserProperties("userName") + ";mobilePhone:" + msg.getUserProperties("mobilePhone") + ";appId:" + msg.getUserProperties("appId") + ";openId:" + msg.getUserProperties("openId");
+//
+//			log.error(businessId + " :签到学员处理失败:" + e, e);
+//			onsExceptionLogService.logSaveExceptionLog(cfg.getConfigByEnv("ons-common-topic"), "SCH_SIGN_QUEUE", businessId, desp);
+//		}
+//
+//	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java
new file mode 100644
index 0000000..4b74de8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java
@@ -0,0 +1,172 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.SchSchoolDay;
+import com.qxueyou.scc.school.model.SchSchoolDayItem;
+import com.qxueyou.scc.school.service.ISchoolDayService;
+
+@Service
+public class SchoolDayService extends CommonAppService implements ISchoolDayService {	
+	
+	@Override
+	public Result insertSchoolDay(SchSchoolDay schSchoolDay) {
+
+		if(StringUtils.isNotBlank(schSchoolDay.getSchoolDayId())){
+			TraceUtils.setUpdateTrace(schSchoolDay);
+		}else{
+			TraceUtils.setCreateTrace(schSchoolDay);
+		}
+		
+		schSchoolDay.setOrgId(ClientUtils.getOrgId());
+		this.save(schSchoolDay);
+		
+		return new Result(true);
+	}
+
+	@Override
+	public Result deleteSchoolDay(String[] schoolDayIds) {
+
+		String hql = "update SchSchoolDay set deleteFlag = true where schoolDayId = ? ";
+		return bulkUpdateInLoop(hql, schoolDayIds);
+
+	}
+
+	@Override
+	public Result insertSchoolDayItem(SchSchoolDayItem schSchoolDayItem) {
+		
+		// 验证
+		Result resultFlag = judgeTime(schSchoolDayItem);
+		if(StringUtils.isNotBlank(resultFlag.getMsg())){
+			return resultFlag;
+		}
+		
+		if(StringUtils.isNotBlank(schSchoolDayItem.getDayItemId())){
+			SchSchoolDayItem dayItem = read(SchSchoolDayItem.class, schSchoolDayItem.getDayItemId());
+			dayItem.setDayOrder(schSchoolDayItem.getDayOrder());
+			dayItem.setEndTime(schSchoolDayItem.getEndTime());
+			dayItem.setName(schSchoolDayItem.getName());
+			dayItem.setSchoolDayId(schSchoolDayItem.getSchoolDayId());
+			dayItem.setStartTime(schSchoolDayItem.getStartTime());
+			TraceUtils.setUpdateTrace(dayItem);
+			save(dayItem);
+		}else{
+			TraceUtils.setCreateTrace(schSchoolDayItem);
+			this.save(schSchoolDayItem);
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 判断选择的时间不能包含已添加学年的开始时间至结束时间
+	 * time
+	 * @return
+	 */
+	public Result judgeTime( SchSchoolDayItem schSchoolDayItem) {
+		// 返回结果
+		Result resultFlag = new Result(true);
+		List<SchSchoolDayItem> dayItemLst = setPublic(schSchoolDayItem.getDayItemId(),schSchoolDayItem.getSchoolDayId());
+		
+		// 验证
+		for (int i = 0; i < dayItemLst.size(); i++) {
+			boolean flagStart = dayItemLst.get(i).getStartTime().before(schSchoolDayItem.getStartTime());
+			boolean flagend = dayItemLst.get(i).getEndTime().before(schSchoolDayItem.getEndTime());
+			
+			if(flagStart == false && flagend == true){ // 选择的时间包含开始时间和结束时间
+				resultFlag = new Result(true,"选择的作息时间不能包含已添加的作息时间");
+				break;
+			}
+		}
+		
+		return resultFlag;
+	}
+	
+	/**
+	 * 开始时间的回调函数
+	 * schSchoolYear :startTime
+	 * @return
+	 */
+	@Override
+	public Result startCallback( SchSchoolDayItem schoolDayItem) {
+
+		return callback(schoolDayItem.getStartTime(),schoolDayItem.getDayItemId(),schoolDayItem.getSchoolDayId());
+	}
+	
+	/**
+	 * 结束时间的回调函数
+	 * schSchoolYear :endTime
+	 * @return
+	 */
+	@Override
+	public Result endCallback(SchSchoolDayItem schoolDayItem) {
+
+		return callback(schoolDayItem.getEndTime(),schoolDayItem.getDayItemId(),schoolDayItem.getSchoolDayId());
+	}
+	
+	/**
+	 * 判断选择的时间不能在已添加学年的开始时间和结束时间之间
+	 * time
+	 * @return
+	 */
+	public Result callback( Date time,String dayItemId,String schoolDayId) {
+
+		// 返回结果
+		Result resultFlag = new Result(true);
+		List<SchSchoolDayItem> dayItemLst = setPublic(dayItemId,schoolDayId);
+		
+		if(dayItemLst.isEmpty()){
+			return resultFlag;
+		}
+		
+		for (int i = 0; i < dayItemLst.size(); i++) {
+			boolean flagStart = dayItemLst.get(i).getStartTime().before(time);
+			boolean flagEnd = dayItemLst.get(i).getEndTime().before(time);
+			
+			if(flagStart == true && flagEnd == false){ // 选择的时间在开始时间之后结束时间之前
+				resultFlag = new Result(true,"已经设置过当前的作息时间");
+				break;
+			}
+		}
+		
+		return resultFlag;
+	}
+	
+	public List<SchSchoolDayItem> setPublic(String dayItemId,String schoolDayId) {
+
+		// 获取当前作息时间的所有明细
+		String hql = "from SchSchoolDayItem where deleteFlag is false and schoolDayId = ? order by endTime desc";
+		List<SchSchoolDayItem> dayItemList = find(hql, CollectionUtils.newList(schoolDayId), SchSchoolDayItem.class);
+		
+		// 编辑页面过滤当前学年
+		List<SchSchoolDayItem> dayItemLst = new ArrayList<SchSchoolDayItem>();
+		if(StringUtils.isNotBlank(dayItemId)){
+			for (SchSchoolDayItem dayItem : dayItemList) {
+				if(!dayItem.getDayItemId().equals(dayItemId)){
+					dayItemLst.add(dayItem);
+				}
+			}
+			return dayItemLst;
+		}else{
+			return dayItemList;
+		}
+	}
+
+	@Override
+	public Result deleteSchoolDayItem(String[] dayItemIds) {
+		String hql = "update SchSchoolDayItem set deleteFlag = true where dayItemId = ? ";
+		return bulkUpdateInLoop(hql, dayItemIds);
+	}
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SchoolSubjectService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolSubjectService.java
new file mode 100644
index 0000000..4726132
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolSubjectService.java
@@ -0,0 +1,36 @@
+package com.qxueyou.scc.school.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.service.ISchoolSubjectService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+@Service
+public class SchoolSubjectService extends CommonAppService implements ISchoolSubjectService{
+	
+	public Result insertSubject(Subject ss){
+		TraceUtils.setCreateTrace(ss);
+		return save(ss);
+	}
+
+	@Override
+	public Result delete(String[] subjectIds) {
+		for (String subjectId : subjectIds) {
+			deleteSubject(subjectId);
+		}
+		return new Result(true);
+		
+	}
+	
+	public Result deleteSubject(String subjectId){
+		Subject ss = read(Subject.class, subjectId);
+		
+		ss.setDeleteFlag(true);
+		TraceUtils.setUpdateTrace(ss);
+		save(ss);
+		return new Result(true);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java
new file mode 100644
index 0000000..d15a6c5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java
@@ -0,0 +1,178 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+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.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.SchTerm;
+import com.qxueyou.scc.school.model.SchTermReDay;
+import com.qxueyou.scc.school.service.ISchoolTermService;
+
+@Service
+public class SchoolTermService extends CommonAppService implements ISchoolTermService {	
+	
+	@Override
+	public Result insertSchoolTerm(SchTerm schTerm,String schoolDayId) {
+
+		// 验证
+		Result resultFlag = judgeTime(schTerm);
+		if(StringUtils.isNotBlank(resultFlag.getMsg())){
+			return resultFlag;
+		}
+		
+		if(StringUtils.isNotBlank(schTerm.getTermId())){
+			SchTerm schTermNew = read(SchTerm.class, schTerm.getTermId());
+			schTermNew.setName(schTerm.getName());
+			schTermNew.setEndTime(schTerm.getEndTime());
+			schTermNew.setStartTime(schTerm.getStartTime());
+			schTermNew.setSchoolYearId(schTerm.getSchoolYearId());
+			schTermNew.setTermOrder(schTerm.getTermOrder());
+			TraceUtils.setUpdateTrace(schTermNew);
+			this.save(schTermNew);
+		}else{
+			TraceUtils.setCreateTrace(schTerm);
+			this.save(schTerm);
+		}
+		
+		String hql = " from SchTermReDay where termId=?";
+		
+		SchTermReDay re = findUnique(hql, CollectionUtils.newList(schTerm.getTermId()), SchTermReDay.class);
+		
+		if(re==null){
+			re = new SchTermReDay();
+			TraceUtils.setCreateTrace(re);
+			re.setSchoolDayId(schoolDayId);
+			re.setDeleteFlag(false);
+			re.setTermId(schTerm.getTermId());
+			this.save(re);
+		}else{
+			re.setSchoolDayId(schoolDayId);
+			TraceUtils.setUpdateTrace(re);
+			save(re);
+		}
+		
+		return new Result(true);
+		
+	}
+
+	/**
+	 * 判断选择的时间不能包含已添加学年的开始时间至结束时间
+	 * time
+	 * @return
+	 */
+	public Result judgeTime( SchTerm schTerm) {
+		// 返回结果
+		Result resultFlag = new Result(true);
+		List<SchTerm> schTermLst = setPublic(schTerm.getTermId(),schTerm.getSchoolYearId());
+		
+		// 验证
+		for (int i = 0; i < schTermLst.size(); i++) {
+			boolean flagStart = schTermLst.get(i).getStartTime().before(schTerm.getStartTime());
+			boolean flagend = schTermLst.get(i).getEndTime().before(schTerm.getEndTime());
+			
+			if(flagStart == false && flagend == true){ // 选择的时间包含开始时间和结束时间
+				resultFlag = new Result(true,"选择的学期时间不能包含已添加的学期时间");
+				break;
+			}
+		}
+		
+		return resultFlag;
+	}
+
+	/**
+	 * 开始时间的回调函数
+	 * schSchoolYear :startTime
+	 * @return
+	 */
+	@Override
+	public Result startCallback(String termId,String startTime,String shoolYearId) {
+
+		return callback(termId, startTime, shoolYearId);
+	}
+	
+	/**
+	 * 结束时间的回调函数
+	 * schSchoolYear :endTime
+	 * @return
+	 */
+	@Override
+	public Result endCallback(String termId,String endTime,String shoolYearId) {
+
+		return callback(termId, endTime, shoolYearId);
+	}
+	
+	/**
+	 * 判断选择的时间不能在已添加学年的开始时间和结束时间之间
+	 * time
+	 * @return
+	 */
+	public Result callback(String schTermId, String startEndTime,String schShoolYearId) {
+
+		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//小写的mm表示的是分钟  
+		Date time = null;
+		try {
+			time = sdf.parse(startEndTime);
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		
+		// 返回结果
+		Result resultFlag = new Result(true);
+		List<SchTerm> schTermLst = setPublic(schTermId,schShoolYearId);
+		
+		if(schTermLst.isEmpty()){
+			return resultFlag;
+		}
+		
+		for (int i = 0; i < schTermLst.size(); i++) {
+			boolean flagStart = schTermLst.get(i).getStartTime().before(time);
+			boolean flagEnd = schTermLst.get(i).getEndTime().before(time);
+			
+			if(flagStart == true && flagEnd == false){ // 选择的时间在开始时间之后结束时间之前
+				resultFlag = new Result(true,"当前学年已设置该时间的学期");
+				break;
+			}
+		}
+		
+		return resultFlag;
+	}
+	
+	public List<SchTerm> setPublic(String schTermId,String schShoolYearId) {
+
+		// 获取当前学年的所有学期
+		String hql = "from SchTerm where deleteFlag is false and schoolYearId = ? order by endTime desc";
+		List<SchTerm> schTermList = find(hql, CollectionUtils.newList(schShoolYearId), SchTerm.class);
+		
+		// 编辑页面过滤当前学年
+		List<SchTerm> schTermLst = new ArrayList<SchTerm>();
+		if(StringUtils.isNotBlank(schTermId)){
+			for (SchTerm schTerm : schTermList) {
+				if(!schTerm.getTermId().equals(schTermId)){
+					schTermLst.add(schTerm);
+				}
+			}
+			return schTermLst;
+		}else{
+			return schTermList;
+		}
+	}
+	
+	@Override
+	public Result deleteSchoolTerm(String[] termIds) {
+
+		String hql = "update SchTerm set deleteFlag = true where termId = ? ";
+		return bulkUpdateInLoop(hql, termIds);
+		
+	}
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java
new file mode 100644
index 0000000..0adc84b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java
@@ -0,0 +1,155 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.SchSchoolYear;
+import com.qxueyou.scc.school.service.ISchoolYearService;
+
+@Service
+public class SchoolYearService extends CommonAppService implements ISchoolYearService {	
+	
+	@Override
+	public Result insertSchoolYear(SchSchoolYear schSchoolYear) {
+		
+		// 验证
+		Result resultFlag = judgeTime(schSchoolYear);
+		if(StringUtils.isNotBlank(resultFlag.getMsg())){
+			return resultFlag;
+		}
+		
+		SchSchoolYear schoolYear = null;
+		if(StringUtils.isNotBlank(schSchoolYear.getSchoolYearId())){// 修改
+			
+			schoolYear = read(SchSchoolYear.class, schSchoolYear.getSchoolYearId());
+			TraceUtils.setUpdateTrace(schoolYear);
+			schoolYear.setOrgId(ClientUtils.getOrgId());
+			schoolYear.setStartTime(schSchoolYear.getStartTime());
+			schoolYear.setEndTime(schSchoolYear.getEndTime());
+			schoolYear.setName(schSchoolYear.getName());
+			this.save(schoolYear);
+			
+		}else{ // 新增
+			schoolYear = new SchSchoolYear();
+			TraceUtils.setCreateTrace(schoolYear);
+			schoolYear.setOrgId(ClientUtils.getOrgId());
+			schoolYear.setStartTime(schSchoolYear.getStartTime());
+			schoolYear.setEndTime(schSchoolYear.getEndTime());
+			schoolYear.setName(schSchoolYear.getName());
+			this.save(schoolYear);
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 判断选择的时间不能包含已添加学年的开始时间至结束时间
+	 * time
+	 * @return
+	 */
+	public Result judgeTime( SchSchoolYear schSchoolYear) {
+		// 返回结果
+		Result resultFlag = new Result(true);
+		List<SchSchoolYear> schoolYearLst = setPublic(schSchoolYear.getSchoolYearId());
+		
+		// 验证
+		for (int i = 0; i < schoolYearLst.size(); i++) {
+			boolean flagStart = schoolYearLst.get(i).getStartTime().before(schSchoolYear.getStartTime());
+			boolean flagend = schoolYearLst.get(i).getEndTime().before(schSchoolYear.getEndTime());
+			
+			if(flagStart == false && flagend == true){ // 选择的时间包含开始时间和结束时间
+				resultFlag = new Result(true,"选择的学年时间不能包含已添加的学年时间");
+				break;
+			}
+		}
+		
+		return resultFlag;
+	}
+
+	/**
+	 * 开始时间的回调函数
+	 * schSchoolYear :startTime
+	 * @return
+	 */
+	@Override
+	public Result startCallback( SchSchoolYear schSchoolYear) {
+
+		return callback(schSchoolYear.getStartTime(),schSchoolYear.getSchoolYearId());
+	}
+	
+	/**
+	 * 结束时间的回调函数
+	 * schSchoolYear :endTime
+	 * @return
+	 */
+	@Override
+	public Result endCallback( SchSchoolYear schSchoolYear) {
+
+		return callback(schSchoolYear.getEndTime(),schSchoolYear.getSchoolYearId());
+	}
+	
+	/**
+	 * 判断选择的时间不能在已添加学年的开始时间和结束时间之间
+	 * time
+	 * @return
+	 */
+	public Result callback( Date time,String schSchoolYearId) {
+
+		// 返回结果
+		Result resultFlag = new Result(true);
+		List<SchSchoolYear> schoolYearLst = setPublic(schSchoolYearId);
+		
+		if(schoolYearLst.isEmpty()){
+			return resultFlag;
+		}
+		
+		for (int i = 0; i < schoolYearLst.size(); i++) {
+			boolean flagStart = schoolYearLst.get(i).getStartTime().before(time);
+			boolean flagend = schoolYearLst.get(i).getEndTime().before(time);
+			
+			if(flagStart == true && flagend == false){ // 选择的时间在开始时间之后结束时间之前
+				resultFlag = new Result(true,"当前机构已设置该时间的学年");
+				break;
+			}
+		}
+		
+		return resultFlag;
+	}
+	
+	public List<SchSchoolYear> setPublic( String schSchoolYearId) {
+
+		// 获取当前机构所有学年
+		String hql = "from SchSchoolYear where deleteFlag is false and orgId = ? order by endTime desc";
+		List<SchSchoolYear> schoolYearList = find(hql, CollectionUtils.newList(ClientUtils.getOrgId()), SchSchoolYear.class);
+		
+		// 编辑页面过滤当前学年
+		List<SchSchoolYear> schoolYearLst = new ArrayList<SchSchoolYear>();
+		if(StringUtils.isNotBlank(schSchoolYearId)){
+			for (SchSchoolYear schoolYear : schoolYearList) {
+				if(!schoolYear.getSchoolYearId().equals(schSchoolYearId)){
+					schoolYearLst.add(schoolYear);
+				}
+			}
+			return schoolYearLst;
+		}else{
+			return schoolYearList;
+		}
+	}
+	
+	@Override
+	public Result deleteSchoolYear(String[] yearIds) {
+
+		String hql = "update SchSchoolYear set deleteFlag = true where schoolYearId = ? ";
+		return bulkUpdateInLoop(hql, yearIds);
+
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SignService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SignService.java
new file mode 100644
index 0000000..32d8787
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SignService.java
@@ -0,0 +1,1389 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
+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.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+//import com.qxueyou.scc.user.model.UserReWeixin;
+import com.qxueyou.scc.base.model.CacheConstants;
+//import com.qxueyou.scc.base.model.ONSMsg;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+//import com.qxueyou.scc.base.service.impl.CommonONSProducer;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.CommonUtils;
+import com.qxueyou.scc.base.util.RSAUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.msg.model.MsgUser;
+//import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.school.dao.SignDAO;
+import com.qxueyou.scc.school.model.ExportSchSignItem;
+import com.qxueyou.scc.school.model.SchClassSchedule;
+import com.qxueyou.scc.school.model.SchClassSubject;
+import com.qxueyou.scc.school.model.SchScheduleAddress;
+import com.qxueyou.scc.school.model.SchSign;
+import com.qxueyou.scc.school.model.SchSignCode;
+import com.qxueyou.scc.school.model.SchSignItem;
+import com.qxueyou.scc.school.model.SchSignOrder;
+import com.qxueyou.scc.school.model.SchSignStatistics;
+import com.qxueyou.scc.school.model.SignStatisResult;
+//import com.qxueyou.scc.school.service.IScoreChangeService;
+import com.qxueyou.scc.school.service.ISignService;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRegistration;
+import com.qxueyou.scc.user.service.IUserService;
+//import com.qxueyou.scc.weixin.service.IWeixinCommonService;
+
+@Service
+public class SignService extends CommonAppService implements ISignService {
+	
+	private static final String late = "迟到";
+
+	private static final String normal = "正常";
+
+	private static Logger log = LogManager.getLogger("SignService");
+	
+	private SignDAO signDAO;
+
+//	// 签到上大屏
+//	@Autowired
+//	IMsgVenderService  easemobService;
+//	
+//	@Autowired
+//	CommonONSProducer onsProducer;
+//	
+//	@Autowired
+//	ICacheService cacheService;
+	
+//	/** 微信业务操作  **/
+//	@Autowired
+//	IWeixinCommonService weixinCommonService;
+	
+	@Autowired
+	IUserService userService;
+	
+//	@Autowired
+//	IScoreChangeService  scoreChangeService;
+	
+	ObjectMapper mapper = new ObjectMapper(); 
+	
+	public SignDAO getSignDAO() {
+		return signDAO;
+	}
+
+	/**
+     * 依赖注入
+     *
+     * @param interactDAO
+     */
+	@Autowired(required = false)
+	public void setSignDAO(@Qualifier("signDAO") SignDAO signDAO) {
+		this.signDAO = signDAO;
+	}
+	
+	
+	@Override
+	public Result insertSign(SchSign sign) {
+		String signId = sign.getSignId();
+		if(StringUtils.isNoneBlank(signId)){
+			List<SchSign> lstSchSign = this.find("select s from SchSign s where s.classScheduleId = ? and s.deleteFlag is false and signId <> ?",
+					CollectionUtils.newList(sign.getClassScheduleId(), signId), SchSign.class);
+			if(lstSchSign != null && !lstSchSign.isEmpty()){
+				return new Result(false, "你选择的课程已经存在签到,请不要重复添加");
+			}
+			SchSign objSchSign = this.read(SchSign.class, signId);
+			objSchSign.setUpdateId(ClientUtils.getUserId());
+			objSchSign.setUpdateTime(new Date(System.currentTimeMillis()));
+			objSchSign.setUpdator(ClientUtils.getUserName());
+			objSchSign.setStartTime(sign.getStartTime());
+			objSchSign.setEndTime(sign.getEndTime());
+			objSchSign.setRegisterAllow(sign.getRegisterAllow());
+			objSchSign.setOutRangeAllow(sign.getOutRangeAllow());
+			objSchSign.setValidatePhone(sign.getValidatePhone());
+			objSchSign.setOutRange(sign.getOutRange());
+			int icount = this.findCount("from SchSignStatistics s where s.signId = ? and s.deleteFlag is false", CollectionUtils.newList(objSchSign.getSignId()));
+			if(icount == 0){
+				objSchSign.setSignType(sign.getSignType());
+				objSchSign.setClassScheduleId(sign.getClassScheduleId());
+				objSchSign.setName(sign.getName());
+			}
+			save(objSchSign);
+//			cacheService.set(CacheConstants.SCH_SIGN_ID_PREFIX.concat(signId), CacheConstants.SCH_SIGN_ID_TIME, objSchSign);
+		}else{
+			List<SchSign> lstSchSign = this.find("select s from SchSign s where s.classScheduleId = ? and s.deleteFlag is false",
+					CollectionUtils.newList(sign.getClassScheduleId()), SchSign.class);
+			if(lstSchSign != null && !lstSchSign.isEmpty()){
+				return new Result(false, "你选择的课程已经存在签到,请不要重复添加");
+			}
+			// 获取客户端信息
+			// 设置基本字段
+			String signCode = generateSignCode(ClientUtils.getClassId());
+			sign.setCreateId(ClientUtils.getUserId());
+			sign.setCreateTime(new Date(System.currentTimeMillis()));
+			sign.setCreator(ClientUtils.getUserName());
+			sign.setDeleteFlag(false);
+			sign.setUpdateId(ClientUtils.getUserId());
+			sign.setUpdateTime(new Date(System.currentTimeMillis()));
+			sign.setUpdator(ClientUtils.getUserName());
+			sign.setClassId(ClientUtils.getClassId());
+			sign.setCourse(ClientUtils.getCourseName());
+			sign.setCode(signCode);
+			sign.setHisShow(SchSign.SIGN_HIS_SHOW);
+			sign.setActAllow(SchSign.SIGN_ACT_ALLOW);
+
+			String uuidPwd = UUIDUtils.generateShortUuid();
+			MsgUser msgUser = new MsgUser();
+			msgUser.setUserId(UUIDUtils.generateUUID().replace("-", ""));
+			msgUser.setPassword(RSAUtils.encrypt(uuidPwd));
+//			Result result = easemobService.addUser(msgUser);
+//			if (result.isResult()) {
+//				sign.setNoticeUserId(msgUser.getUserId());
+//				sign.setNoticePassword(RSAUtils.encrypt(uuidPwd));
+//			}
+			//添加签到码
+			SchSignCode signCodeVO = new SchSignCode();
+			signCodeVO.setCode(signCode);
+			signCodeVO.setClassId(ClientUtils.getClassId());
+			
+			save(signCodeVO);
+			save(sign);
+		}
+		
+		return new Result(true, sign.getSignId());
+	}
+
+	@Override
+	public Result deleteSigns(String[] signIds) {
+		String hql = "update SchSign set deleteFlag = true where signId=?";
+		return bulkUpdateInLoop(hql, signIds);
+	}
+	
+	/**
+	 * 生成签到码
+	 * @param classId 班级ID
+	 * @return
+	 */
+	private String generateSignCode(String classId){
+		
+		String hql = "SELECT s.code FROM SchSignCode s where s.classId=?";
+		List<Object> args = new ArrayList<Object>();
+		args.add(classId);
+		List<String> codes = find(hql, args, String.class);
+
+		String random = null;
+		do{
+			random = String.valueOf((int)(Math.random()*9000) + 1000);
+		}while(codes.contains(random));
+		
+		return random;
+	}
+
+	@Override
+	public Result insertSignItem(SchSign sign, String signAddress, Date signTime,String userId,String userName) {
+		
+		SchSignItem signItem = new SchSignItem();
+
+		// 获取当前用户
+		signItem.setSignId(sign.getSignId());
+		signItem.setDeleteFlag(false);
+		signItem.setSignAddress(signAddress);
+		signItem.setSignTime(signTime);
+		signItem.setUserId(userId);
+		signItem.setUserName(userName);
+		// 公用配置
+		TraceUtils.setCreateTrace(signItem);
+		
+		this.save(signItem);
+		
+		return new Result(true);
+	}
+	
+	@Override
+	/**
+	 * 签到
+	 */
+	public int insertSignOrder(SchSign signVO, Date signTime) {
+		String hql = "from SchSignOrder where deleteFlag is false and signId=? ";
+		
+		// 该堂课已经签到多少位
+		int signCount =  this.findCount(hql, 
+				CollectionUtils.newList(signVO.getSignId()));
+		// 签到+1
+		signCount++;
+		
+		SchSignOrder signOrder = new SchSignOrder();
+		signOrder.setSignId(signVO.getSignId());
+		signOrder.setDeleteFlag(false);
+		signOrder.setUserId(ClientUtils.getUserId());
+		signOrder.setUserName(ClientUtils.getUserName());
+		signOrder.setSignOrder(signCount);
+		signOrder.setSignTime(signTime);
+		
+		// 公用配置
+		TraceUtils.setCreateTrace(signOrder);
+		
+		// 保存到db
+		this.save(signOrder);
+		
+		return signCount;
+	}
+	
+	/**
+	 *  得到签到明细
+	 * @param signId
+	 * @return
+	 */
+	public List<SchSignItem> getSignItems(String signId){
+		
+		List<SchSignItem> listResult = new ArrayList<SchSignItem>();
+		if(ClientUtils.getClassId() != null && StringUtils.isNotBlank(signId)){
+			String classId = ClientUtils.getClassId();
+			//SQL
+			String strSQL = " SELECT TU.NAME AS userName,TS.START_TIME AS signTime,TS.END_TIME AS endTime FROM " +
+	    			"(SELECT U.USER_ID,U.NAME FROM USER_REGISTRATION R,USER U WHERE U.USER_ID = R.USER_ID  AND U.DELETE_FLAG = 0 AND R.DELETE_FLAG  = 0 AND R.CLASS_ID = ? ) TU " +
+	    			"LEFT JOIN " +
+	    			"( SELECT S.USER_ID AS USER_ID ,MIN(S.SIGN_TIME) AS START_TIME,MAX(S.SIGN_TIME) AS END_TIME FROM SCH_SIGN_ITEM S " +
+	    			"WHERE S.SIGN_ID = ? GROUP BY S.USER_ID HAVING COUNT(1) > 1 " +
+	    			"UNION ALL " +
+	    			"SELECT T.USER_ID AS USER_ID , " +
+	    			"CASE WHEN ABS(TIMEDIFF(T.TIME,S.START_TIME)) <= ABS(TIMEDIFF(T.TIME,S.END_TIME)) THEN T.TIME ELSE NULL END START_TIMEM, " +
+	    			"CASE WHEN ABS(TIMEDIFF(T.TIME,S.START_TIME)) >  ABS(TIMEDIFF(T.TIME,S.END_TIME)) THEN T.TIME ELSE NULL END END_TIME " +
+	    			"FROM SCH_SIGN S , " +
+	    			"( SELECT S.USER_ID,S.SIGN_ID,MAX(S.SIGN_TIME) AS TIME FROM SCH_SIGN_ITEM S " +
+	    			"WHERE S.SIGN_ID = ? GROUP BY S.USER_ID,S.SIGN_ID HAVING COUNT(1) = 1 ) T WHERE S.SIGN_ID = T.SIGN_ID " +
+	    			")TS " +
+	    			"ON TS.USER_ID = TU.USER_ID " +
+	    			"ORDER BY TS.START_TIME IS NULL , TS.START_TIME ASC ";
+				listResult = signDAO.querySignItemList(strSQL, CollectionUtils.newList(classId,signId,signId));
+		}else{
+			log.error("查询签到明细失败,参数不正确:cls=".concat(ClientUtils.getClassId()).concat(";signId=").concat(signId));
+		}
+		
+		return listResult;
+	}
+	
+	/**
+	 * 有一个时分秒的问题:只需要检测到分钟:9:00是标准时间  9:00:59 仍然是正常
+	 * @param realTime
+	 * @param standardTime
+	 * @return
+	 */
+	private String getStartStatus(Date realTime,Date standardTime){
+		String status = "";
+		if(null != realTime && null != standardTime){
+			Date real = DateUtils.truncate(realTime, Calendar.MINUTE);
+			Date standard = DateUtils.truncate(standardTime, Calendar.MINUTE);
+			status = real.compareTo(standard) == 1 ? late :normal;
+		}
+		return status;
+	}
+	
+	/**
+	 * 有一个时分秒的问题:只需要检测到分钟:
+	 * @param realTime
+	 * @param standardTime
+	 * @return
+	 */
+	private String getEndStatus(Date realTime,Date standardTime){
+		String status = "";
+		if(null != realTime && null != standardTime){
+			Date real = DateUtils.truncate(realTime, Calendar.MINUTE);
+			Date standard = DateUtils.truncate(standardTime, Calendar.MINUTE);
+			status = real.compareTo(standard) == -1 ? "早退" :normal;
+		}
+		return status;
+	}
+	
+    /**
+     * 插入签到统计信息
+     */
+	public SignStatisResult insertSignStatistics(SchSign sign, String signAddress,
+			Date signTime,Short terminalType,String userId,String userName,String mobilePhone, String location) {
+		User user = this.read(User.class, userId);
+		//判断签到类型,1:仅上课签到;2:上下课都需签到
+		SignStatisResult result = new SignStatisResult();
+		short signType = sign.getSignType();
+		if(SchSign.SIGN_TYPE_FIRST == signType){
+			result = insertSignFirst(sign,signAddress,signTime,terminalType,userId,user.getName(),mobilePhone, location);
+		}else if(SchSign.SIGN_TYPE_ALL == signType){
+			result = insertSignAll(sign,signAddress,signTime,terminalType,userId,user.getName(),mobilePhone, location);
+		}else if(SchSign.SIGN_TYPE_ACTIVITY == signType){
+			result = insertActivitySign(sign,signAddress,signTime,terminalType,userId,user.getName(),mobilePhone);
+		}
+		if(result.getSignType() == null){
+			result.setSignType(Integer.valueOf(signType));
+		}
+		return result;
+	}
+	
+	/**
+	 * 查询签到当天的课次
+	 * 
+	 * @param signId
+	 * @return
+	 */
+	public SchClassSchedule getSchClassSchedule(String signId){
+		String hql = "select e from SchClassSchedule e, SchSign s, SchClassSubject su where s.signId = ? and su.classSubjectId = e.classSubjectId and su.deleteFlag is false "
+				+ " and s.classScheduleId = e.classSubjectId and date(e.startTime) = date(now()) and e.deleteFlag is false";
+		return this.findUnique(hql, CollectionUtils.newList(signId), SchClassSchedule.class);
+	}
+	
+	/**
+	 * 插入签到
+	 * 
+	 * @param signVO
+	 * @param signAddress
+	 * @param userId
+	 * @param userName
+	 * @param mobilePhone
+	 * @return
+	 */
+	public SignStatisResult insertSignStatistics(SchSign signVO, String signAddress, String userId, String userName, String mobilePhone, short type){
+		// 签到时间
+		Date signTime= new Date(System.currentTimeMillis());
+		String strAddress = this.getAddress(signAddress);
+		
+		//3. 插入签到统计
+		SignStatisResult result = this.insertSignStatistics(signVO, strAddress, signTime,type ,userId,userName,mobilePhone, signAddress);
+		if(!result.getResult()){
+			return new SignStatisResult(false,result.getErrMsg());
+		}
+		// 2.插入签到历史记录
+		this.insertSignItem(signVO, signAddress, signTime,ClientUtils.getUserId(),ClientUtils.getUserName());
+		
+		List<SchSignStatistics> schSignStatisticss = this.queryPageLstSignStatistics(result.getSignStatistics(), null, result.getSignType(), signVO.getSignId());
+		
+		for(SchSignStatistics obj : schSignStatisticss){
+			obj.setSignType(result.getSignType());
+		}
+		
+		//查询班主任名字
+		ClsClass objOrgClass = this.read(ClsClass.class, signVO.getClassId());
+		
+		result.setSignAddr(strAddress);
+		result.setSignStatisticss(schSignStatisticss);
+		//2015-08-10增加返回是否班级成员
+		result.setRegFlag(this.queryRegistrationFlag(ClientUtils.getUserId(), signVO.getClassId()));
+		result.setClassCharger(objOrgClass.getClassCharger());
+		
+		return result;
+	}
+	
+	/**
+	 * 根据经纬度获取地址
+	 * @param location
+	 * @return
+	 */
+	@SuppressWarnings("rawtypes")
+	private String getAddress(String location){
+		try {
+			
+			if(StringUtils.isEmpty(location)){
+				return "";
+			}
+			
+			Map map = mapper.readValue(new URL("http://api.map.baidu.com/geocoder/v2/?coordtype=wgs84ll&output=json&ak=gy9dG5lb73GIQIQ5w9ebcorY&location="+location), HashMap.class);
+			
+			Map result = (Map) map.get("result");
+			
+			String formatted_address = result.get("formatted_address").toString();
+			
+			String sematic_address = result.get("sematic_description").toString();
+			
+			if(StringUtils.isNotBlank(sematic_address)){
+				formatted_address = formatted_address.concat("(").concat(sematic_address).concat(")");
+			}
+			
+			return formatted_address;
+			
+		} catch (Exception e) {
+			log.error(e,e);
+		} 
+		
+		return "";
+	}
+	
+	/**
+	 * 活动签到,插入签到统计信息(上课,只有第一次插入记录)
+	 * @param sign
+	 * @param signAddress
+	 * @param signTime
+	 * @param terminalType
+	 * @return
+	 */
+	private SignStatisResult insertActivitySign(SchSign sign, String signAddress, Date signTime,Short terminalType,String userId,String userName,String mobilePhone){
+		
+		int signOrder = 0;
+		SignStatisResult result = new SignStatisResult();
+		//1.查询是否已签到,查询当天签到情况
+		//获取当天用户是否签到
+		//1.查询是否已签到,查询当天签到情况
+		String hql = "from SchSignStatistics where deleteFlag is false and signId = ? and userId = ?";
+		SchSignStatistics objSchSignStatistics = findUnique(hql,CollectionUtils.newList(sign.getSignId(), userId),SchSignStatistics.class);
+		//第一次保存,以后不更新,已最早时间为准(每次更新最新签到地址)
+		if(null != objSchSignStatistics){
+			signOrder = objSchSignStatistics.getFirstSignOrder();
+			objSchSignStatistics.setTerminalType(terminalType);
+			objSchSignStatistics.setStatisticsFlag(SchSignStatistics.STATISTICS_FLAG_YES);
+			objSchSignStatistics.setSignAddress(signAddress);
+			save(objSchSignStatistics);
+			result.setSignStatistics(objSchSignStatistics);
+		}else{
+			// 已经签到个数
+			String hql1 = "from SchSignStatistics where deleteFlag is false and signId = ?";
+			int signCount =  findCount(hql1,CollectionUtils.newList(sign.getSignId()));
+			signOrder = signCount + 1;
+			SchSignStatistics obj = new SchSignStatistics();
+			TraceUtils.setCreateTrace(obj);
+			obj.setSignId(sign.getSignId());
+			obj.setSignAddress(signAddress);
+			obj.setSignDate(new Date());
+			obj.setTerminalType(terminalType);
+			obj.setFirstSignOrder(signOrder);
+			obj.setFirstSignTime(signTime);
+			if(normal.equals(getStartStatus(signTime,sign.getStartTime()))){
+				obj.setFirstSignStatus(SchSignStatistics.SIGN_STATUS_NORMAL);
+			}else{
+				obj.setFirstSignStatus(SchSignStatistics.SIGN_STATUS_LATE);
+				
+			}
+			obj.setUserId(userId);
+			obj.setStatisticsFlag(SchSignStatistics.STATISTICS_FLAG_YES);
+			obj.setUserName(userName);
+			obj.setMobilePhone(mobilePhone);
+			obj.setInstallFlag(queryInstallFlag(userId));
+			obj.setRegisteFlag(queryRegistrationFlag(userId,sign.getClassId()));
+			//第一次保存
+			save(obj);
+			result.setSignStatistics(obj);
+		}
+		result.setSignIndex(signOrder);
+		result.setSignType(SignStatisResult.SIGN_TYPE_ACTIVITY);
+		result.setResult(true);
+		return result;
+		
+	}
+	
+	/**
+	 * 是否超过签到限制距离
+	 * 
+	 * @param signVO
+	 * @param signAddress
+	 * @return
+	 */
+	private Result isOutofRange(SchSign signVO, String signAddress, SchClassSchedule objSchClassSchedule, boolean activeFlag, SchSignStatistics objSchSignStatistics){
+		int outRangeAllow = signVO.getOutRangeAllow();
+		objSchSignStatistics.setStatisticsFlag(SchSignStatistics.STATISTICS_FLAG_YES);
+		if(outRangeAllow == SchSign.SIGN_ACT_ALLOW || signVO.getOutRange() == 0 || SchClassSchedule.SCH_NETWORK.equals(objSchClassSchedule.getMode())){
+			return new Result(true);
+		}
+		if(StringUtils.isBlank(signAddress)){
+			return new Result(false, "签到失败,未获取到签到地址,请确认是否开启定位");
+		}
+		SchScheduleAddress objSchScheduleAddress = this.read(SchScheduleAddress.class, objSchClassSchedule.getAddressId());
+		if(objSchScheduleAddress == null){
+			return new Result(false, "签到失败,课程签到地址设置错误,请联系班主任修正签到地址");
+		}
+		if(StringUtils.isBlank(objSchScheduleAddress.getLatitudeY()) || StringUtils.isBlank(objSchScheduleAddress.getLongitudeX())){
+			return new Result(false, "签到失败,课程签到地址设置错误,请联系班主任修正签到地址");
+		}
+		String[] signAddresss = signAddress.split(",");
+		
+		double range = CommonUtils.GetDistance(Double.valueOf(signAddresss[1]), Double.valueOf(signAddresss[0]),
+				Double.valueOf(objSchScheduleAddress.getLongitudeX()), Double.valueOf(objSchScheduleAddress.getLatitudeY()));
+		
+		boolean b = range*1000<signVO.getOutRange();
+		if(b || !activeFlag){
+			objSchSignStatistics.setStatisticsFlag(SchSignStatistics.STATISTICS_FLAG_YES);
+		}else{
+			objSchSignStatistics.setStatisticsFlag(SchSignStatistics.STATISTICS_FLAG_NO);
+		}
+		objSchSignStatistics.setOutOfRange(range*1000);
+		return new Result(true, b?"":"签到成功,由于您的签到地址超出上课地址的签到范围,因此你的签到无法记录本班当日已出勤人数,请与班主任联系");
+	}
+	
+	/**
+	 * 获取当天签到地址
+	 * 
+	 * @param signId
+	 * @return
+	 */
+	public SchScheduleAddress getSchScheduleAddress(String signId){
+		//获取签到码当天签到的课程
+		SchClassSchedule objSchClassSchedule = this.getSchClassSchedule(signId);
+		if(objSchClassSchedule == null){
+			return new SchScheduleAddress();
+		}
+		SchScheduleAddress objSchScheduleAddress = this.read(SchScheduleAddress.class, objSchClassSchedule.getAddressId());
+		
+		return objSchScheduleAddress;
+	}
+	
+	/**
+	 * 上课签到,插入签到统计信息(上课,只有第一次插入记录)
+	 * @param sign
+	 * @param signAddress
+	 * @param signTime
+	 * @param terminalType
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private SignStatisResult insertSignFirst(SchSign sign, String signAddress, Date signTime,
+			Short terminalType,String userId,String userName,String mobilePhone, String location){
+		
+		int signOrder = 0;
+		SignStatisResult result = new SignStatisResult();
+		result.setSignType(SignStatisResult.SIGN_TYPE_FIRST);
+		
+		//1.查询是否已签到,查询当天签到情况
+		//获取当天用户是否签到
+		SchSignStatistics objSchSignStatistics = this.getSchSignStatistics(sign.getSignId(), userId);
+		//获取签到码当天签到的课程
+		SchClassSchedule objSchClassSchedule = this.getSchClassSchedule(sign.getSignId());
+		boolean activeFlag = queryActiveflag(userId,sign.getClassId());
+		if(sign.getRegisterAllow() == 1 && !activeFlag){
+			result.setErrMsg("签到失败,您还未加入该班级");
+			result.setResult(false);
+			return result;
+		}
+		if(objSchClassSchedule == null){
+			result.setErrMsg("签到失败,今天该课程未开课");
+			result.setResult(false);
+			return result;
+		}
+//		List<SchSignStatistics> lstSchSignStatistics = cacheService.get("SIGN_HISTORY_".concat(sign.getSignId()), List.class);
+		List<SchSignStatistics> lstSchSignStatistics=null;
+		int signCount = 0;
+		if(lstSchSignStatistics == null){
+			String hql1 = "from SchSignStatistics where deleteFlag is false and signId = ? and date(signDate) = date(now())";
+			// 已经签到个数
+			signCount =  findCount(hql1,CollectionUtils.newList(sign.getSignId()));
+		}else{
+			signCount = lstSchSignStatistics.size();
+		}
+		//第一次保存,以后不更新,已最早时间为准(每次更新最新签到地址)
+		if(null == objSchSignStatistics){
+			
+			//查询课程信息
+			SchClassSubject objSchClassSubject = this.getCommonDAO().read(SchClassSubject.class, sign.getClassScheduleId());
+			signOrder = signCount + 1;
+			objSchSignStatistics = new SchSignStatistics();
+			TraceUtils.setCreateTrace(objSchSignStatistics);
+			objSchSignStatistics.setSignId(sign.getSignId());
+			objSchSignStatistics.setSignAddress(signAddress);
+			objSchSignStatistics.setSignDate(new Date());
+			if(objSchClassSubject != null){
+				objSchSignStatistics.setClassSubjectId(objSchClassSubject.getClassSubjectId());
+				objSchSignStatistics.setClassSubjectName(objSchClassSubject.getName());
+			}
+			objSchSignStatistics.setTerminalType(terminalType);
+			objSchSignStatistics.setFirstSignOrder(signOrder);
+			objSchSignStatistics.setFirstSignTime(signTime);
+			if(normal.equals(getStartStatus(signTime,objSchClassSchedule.getStartTime()))){
+				objSchSignStatistics.setFirstSignStatus(SchSignStatistics.SIGN_STATUS_NORMAL);
+			}else{
+				objSchSignStatistics.setFirstSignStatus(SchSignStatistics.SIGN_STATUS_LATE);
+				
+			}
+			objSchSignStatistics.setUserId(userId);
+			objSchSignStatistics.setUserName(userName);
+			objSchSignStatistics.setMobilePhone(mobilePhone);
+			objSchSignStatistics.setInstallFlag(queryInstallFlag(userId));
+			objSchSignStatistics.setRegisteFlag(activeFlag);
+			//第一次保存
+		}
+		Result isOutofRange = this.isOutofRange(sign, location, objSchClassSchedule, activeFlag, objSchSignStatistics);
+		if(!isOutofRange.isSuccess()){
+			result.setErrMsg(isOutofRange.getMsg());
+			result.setResult(false);
+			return result;
+		}
+		if(objSchSignStatistics.getFirstSignOrder() == null){
+			signOrder = signCount;
+		}else{
+			signOrder = objSchSignStatistics.getFirstSignOrder();
+		}
+		if(objSchSignStatistics.getFirstSignTime() == null){
+			objSchSignStatistics.setFirstSignTime(signTime);
+			if(normal.equals(getStartStatus(signTime,objSchClassSchedule.getStartTime()))){
+				objSchSignStatistics.setFirstSignStatus(SchSignStatistics.SIGN_STATUS_NORMAL);
+			}else{
+				objSchSignStatistics.setFirstSignStatus(SchSignStatistics.SIGN_STATUS_LATE);
+				
+			}
+			objSchSignStatistics.setFirstSignOrder(signOrder);
+		}
+		objSchSignStatistics.setTerminalType(terminalType);
+		objSchSignStatistics.setSignAddress(signAddress);
+		
+		objSchSignStatistics.setPosition(location);
+		
+		save(objSchSignStatistics);
+		
+		result.setErrMsg(isOutofRange.getMsg());
+		result.setSignStatistics(objSchSignStatistics);
+		result.setSignIndex(signOrder);
+		result.setRange(objSchSignStatistics.getOutOfRange());
+		result.setResult(true);
+		return result;
+		
+	}
+	
+	/**
+	 * 获取当天是否已经签到
+	 * 
+	 * @param signId
+	 * @return
+	 */
+	public SchSignStatistics getSchSignStatistics(String signId, String userId){
+		//1.查询是否已签到,查询当天签到情况
+		String hql = "from SchSignStatistics where deleteFlag is false and signId = ? and userId = ? and date(signDate) = date(now())";
+		return findUnique(hql,CollectionUtils.newList(signId, userId),SchSignStatistics.class);
+	}
+	
+	/**
+	 *  上下课都需签到时,插入签到统计信息
+	 *  上课签到:调用insertSignFirst()
+	 *  下课签到:每次更新,按下课签到时间倒序排列
+	 * @param sign
+	 * @param signAddress
+	 * @param signTime
+	 * @param terminalType
+	 * @return
+	 */
+	private SignStatisResult insertSignAll(SchSign sign, String signAddress, 
+			Date signTime,Short terminalType,String userId,String userName,String mobilePhone, String location){
+		
+		SignStatisResult result = new SignStatisResult();
+		//1.判断当前签到是上课,else:下课签到
+		//精确到分钟比较
+		//获取签到码当天签到的课程
+		SchClassSchedule objSchClassSchedule = this.getSchClassSchedule(sign.getSignId());
+		if(objSchClassSchedule == null){
+			result.setErrMsg("今天该课程未开课,不需要签到");
+			result.setResult(false);
+			return result;
+		}
+		boolean activeFlag = queryActiveflag(userId,sign.getClassId());
+		if(sign.getRegisterAllow() == 1 && !activeFlag){
+			result.setErrMsg("签到失败,您还未加入该班级");
+			result.setResult(false);
+			return result;
+		}
+		Date startDate = DateUtils.truncate(objSchClassSchedule.getStartTime(), Calendar.MINUTE);
+		Date endDate = DateUtils.truncate(objSchClassSchedule.getEndTime(), Calendar.MINUTE);
+		Date signDate = DateUtils.truncate(signTime, Calendar.MINUTE);
+		if((endDate.getTime() + startDate.getTime())/2  >=  signDate.getTime()){
+			result.setSignType(SignStatisResult.SIGN_TYPE_FIRST);
+			//插入上课签到信息
+			result = insertSignFirst(sign,signAddress,signTime,terminalType,userId,userName,mobilePhone, location);
+		}else{
+			result.setSignType(SignStatisResult.SIGN_TYPE_LAST);
+			SchSignStatistics obj = this.getSchSignStatistics(sign.getSignId(), userId);
+			if(null != obj){
+				obj.setLastSignTime(signTime);
+				if(normal.equals(getEndStatus(signTime,objSchClassSchedule.getEndTime()))){
+					obj.setLastSignStatus(SchSignStatistics.SIGN_STATUS_NORMAL);
+				}else{
+					obj.setLastSignStatus(SchSignStatistics.SIGN_STATUS_EARLY);
+				}
+				//每次更新
+				obj.setUserName(userName);
+				obj.setInstallFlag(queryInstallFlag(userId));
+				obj.setRegisteFlag(activeFlag);
+				obj.setTerminalType(terminalType);
+				obj.setSignAddress(signAddress);
+				obj.setPosition(location);
+				
+				Result isOutofRange = this.isOutofRange(sign, location, objSchClassSchedule, activeFlag, obj);
+				if(!isOutofRange.isSuccess()){
+					result.setErrMsg(isOutofRange.getMsg());
+					result.setResult(false);
+					return result;
+				}
+				save(obj);
+				result.setSignStatistics(obj);
+				result.setRange(obj.getOutOfRange());
+				result.setErrMsg(isOutofRange.getMsg());
+			}else{
+				//查询课程信息
+				SchClassSubject objSchClassSubject = this.getCommonDAO().read(SchClassSubject.class, sign.getClassScheduleId());
+				//否则第一次下课签到
+				SchSignStatistics objNew = new SchSignStatistics();
+				TraceUtils.setCreateTrace(objNew);
+				objNew.setSignId(sign.getSignId());
+				objNew.setSignAddress(signAddress);
+				objNew.setTerminalType(terminalType);
+				objNew.setLastSignTime(signTime);
+				if(objSchClassSubject != null){
+					objNew.setClassSubjectId(objSchClassSubject.getClassSubjectId());
+					objNew.setClassSubjectName(objSchClassSubject.getName());
+				}
+				objNew.setSignDate(new Date());
+				if(normal.equals(getEndStatus(signTime,objSchClassSchedule.getEndTime()))){
+					objNew.setLastSignStatus(SchSignStatistics.SIGN_STATUS_NORMAL);
+				}else{
+					objNew.setLastSignStatus(SchSignStatistics.SIGN_STATUS_EARLY);
+				}
+				objNew.setInstallFlag(queryInstallFlag(userName));
+				objNew.setRegisteFlag(activeFlag);
+				objNew.setSignAddress(signAddress);
+				objNew.setPosition(location);
+				objNew.setUserId(userId);
+				objNew.setUserName(userName);
+				objNew.setMobilePhone(mobilePhone);
+				Result isOutofRange = this.isOutofRange(sign, location, objSchClassSchedule, activeFlag, objNew);
+				if(!isOutofRange.isSuccess()){
+					result.setErrMsg(isOutofRange.getMsg());
+					result.setResult(false);
+					return result;
+				}
+				//第一次保存
+				save(objNew);
+				result.setSignStatistics(objNew);
+				result.setRange(objNew.getOutOfRange());
+				result.setErrMsg(isOutofRange.getMsg());
+			}
+		}
+		result.setResult(true);
+		return result;
+	}
+	
+	/**
+	 * 查询是否安装(通过账号登录记录)
+	 */
+	public boolean queryInstallFlag(String userId){
+		String hql = "from UserOperate where deleteFlag is false and userId= ? ";
+		int iCount = findCount(hql,CollectionUtils.newList(userId));
+		return iCount > 0 ? true : false; 
+	}
+	
+	/**
+	 * 查询是否班级成员(通过账号登录记录)
+	 */
+	public boolean queryRegistrationFlag(String userId,String classId){
+		String hql = "from UserRegistration where deleteFlag is false and userId= ? and classId = ? ";
+		int iCount = findCount(hql,CollectionUtils.newList(userId,classId));
+		return iCount > 0 ? true : false; 
+	}
+	
+	/**
+	 * 查询是否班级激活
+	 */
+	public boolean queryActiveflag(String userId,String classId){
+		String hql = "from UserRegistration where deleteFlag is false and userId= ? and classId = ? and status = ?";
+		int iCount = findCount(hql,CollectionUtils.newList(userId,classId, UserRegistration.STATUS_ACTIVE));
+		return iCount > 0 ? true : false; 
+	}
+	
+	/**
+	 *  得到满足要求的签到明细(优化版本)
+	 * @param signId
+	 * @return
+	 */
+	public List<SchSignStatistics> getSimpleSignItems(String signId, String signDate){
+		return getHandleStatistics(signId, signDate);
+	}
+	
+	/**
+	 * 查询
+	 * 
+	 * @param signId
+	 * @param signDate
+	 * @return
+	 */
+	public List<SchSignStatistics> getNotSignUser(String signId, String signDate){
+		
+		SchSign objSchSign = this.read(SchSign.class, signId);
+		String strDate = StringUtils.isBlank(signDate)? com.qxueyou.scc.base.util.DateUtils.getToday():signDate;
+		
+		String hql = "select s,u.attribute1 from SchSignStatistics s , User u "
+				+ " where s.deleteFlag is false and u.deleteFlag is false and s.userId = u.userId and s.signId = ? and s.statisticsFlag = ? and s.registeFlag is true"
+				+ (objSchSign.getSignType() == SchSign.SIGN_TYPE_ACTIVITY?"":" and date(s.signDate) = date('"+strDate+"')")+" order by s.firstSignOrder asc nulls last";
+		
+		List<SchSignStatistics> lstStatistics = this.signDAO.querySchSignStatisticses(hql, CollectionUtils.newList(signId, 2));
+		
+		//查询,SQL会清晰
+		String hql0 = " select r.USER_ID as userId,r.user_name as userName,r.mobile_phone as mobilePhone ,case when o.user_id is not null then 1 else 0 end installFlag,u.attribute1 as companyName  from user_registration r  "
+				    + " left join  "
+				    + " user_operate o  "
+				    + " on r.USER_ID = o.USER_ID  "
+				    + " left join user u"
+				    + " on u.USER_ID = r.USER_ID"
+				    + " WHERE  "
+				    + " r.USER_ID not in (select user_id from sch_sign_statistics s where s.sign_id = ? and delete_flag = 0"+
+				    (objSchSign.getSignType() == SchSign.SIGN_TYPE_ACTIVITY?"":" and date(s.sign_Date) = date('"+strDate+"')")+")  "
+				    + " and r.DELETE_FLAG = 0 and r.STATUS = ? and IFNULL(O.DELETE_FLAG,0) = 0 and r.CLASS_ID = ? and date(r.activation_Time) <= date(?)" ;
+		List<SchSignStatistics> lstStatistics0 = signDAO.querySignItemListNew(hql0, CollectionUtils.newList(signId,UserRegistration.STATUS_ACTIVE,ClientUtils.getClassId(), strDate));
+		if(null == lstStatistics || lstStatistics.isEmpty()){
+			return lstStatistics0;
+		}
+		lstStatistics.addAll(lstStatistics0);
+		return lstStatistics;
+	}
+	
+	/**
+	 * 导出(优化版本)
+	 * @param signId
+	 * @param objSchSign
+	 * @return
+	 */
+	public List<ExportSchSignItem> exportSimpleItems(String signId, String signDate){
+		
+		//查询列表的数据
+		List<SchSignStatistics> lstStatistics = getHandleStatistics(signId, signDate);
+		
+		List<ExportSchSignItem> lstExports = new ArrayList<ExportSchSignItem>();
+		ExportSchSignItem item = null;
+		for(SchSignStatistics statistics : lstStatistics){
+			item = new ExportSchSignItem();
+			
+			item.setInstallFlag("123");
+			
+			item.setEndStatus(null == statistics.getLastSignStatus() ? "" : getStatusValue(statistics.getLastSignStatus()));
+			item.setEndTime(statistics.getLastSignTime());
+			item.setInstallFlag(statistics.getInstallValue());
+			item.setMobilePhone(statistics.getMobilePhone());
+			item.setRegisteFlag(statistics.getRegisteValue());
+			item.setSignAddress(statistics.getSignAddress());
+			item.setSignOrder(statistics.getFirstSignOrder());
+			item.setSignStatus(null == statistics.getFirstSignStatus() ? "" : getStatusValue(statistics.getFirstSignStatus()));
+			item.setSignTime(statistics.getFirstSignTime());
+			item.setUserName(statistics.getUserName());
+			
+			lstExports.add(item);
+		}
+		
+		return lstExports;
+	}
+	
+	private String getStatusValue(short status){
+		String value = "";
+		
+		switch(status){
+			case SchSignStatistics.SIGN_STATUS_NORMAL :
+				value = normal;
+				break;
+			case SchSignStatistics.SIGN_STATUS_LATE :
+				value = late;
+				break;
+			case SchSignStatistics.SIGN_STATUS_EARLY :
+				value = "早退";
+				break;
+			case SchSignStatistics.SIGN_STATUS_NO :
+				value = "未签到";
+				break;
+			default:
+				value = "签到异常";
+				break;
+		}
+		
+		return value;
+	}
+	
+	private List<SchSignStatistics> getHandleStatistics(String signId, String signDate){
+		
+		SchSign objSchSign = this.read(SchSign.class, signId);
+		String strDate = StringUtils.isBlank(signDate)?com.qxueyou.scc.base.util.DateUtils.getToday():signDate;
+		
+		String hql = "select s,u.attribute1 from SchSignStatistics s , User u "
+				+ " where s.deleteFlag is false and u.deleteFlag is false and s.userId = u.userId and s.signId = ?"
+				+ (objSchSign.getSignType() == SchSign.SIGN_TYPE_ACTIVITY?"":" and s.statisticsFlag = 1 and date(s.signDate) = date('"+strDate+"')")+" order by s.firstSignOrder asc nulls last";
+		
+		return this.signDAO.querySchSignStatisticses(hql, CollectionUtils.newList(signId));
+	}
+
+	@Override
+	public List<SchSignStatistics> querySignItemListStat(String hql,
+			List<Object> args) {
+		return signDAO.querySignItemListStat(hql, args);
+	}
+	
+	@Override
+	public List<SchSignStatistics> querySignItemListCom(String hql,
+			List<Object> args) {
+		return signDAO.querySignItemListCom(hql, args);
+	}
+	
+	/**
+	 * 签到历史
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> querySignHistory(final String hql, final Pager page, final List<Object> args){
+		
+		return signDAO.querySignHistoryList(hql, page, args);
+	}
+	
+	/**
+	 * 微信签到高级设置
+	 * @param sign
+	 * @return
+	 */
+	public Result updateSign(SchSign sign) {
+		
+		SchSign objSign = this.read(SchSign.class, sign.getSignId());
+		if(StringUtils.isNotBlank(sign.getName())){
+			objSign.setName(sign.getName());
+		}
+		if(null != sign.getStartTime() && null != sign.getEndTime() ){
+			objSign.setStartTime(sign.getStartTime());
+			objSign.setEndTime(sign.getEndTime());
+		}
+		if(null!=sign.getHisShow()){
+			objSign.setHisShow(sign.getHisShow());
+		}
+		if(null!=sign.getActAllow()){
+			objSign.setActAllow(sign.getActAllow());
+		}
+		if(null!=sign.getPayAllow()){
+			objSign.setPayAllow(sign.getPayAllow());
+		}
+		if(null!=sign.getNameShow()){
+			objSign.setNameShow(sign.getNameShow());
+		}
+		if(null!=sign.getPhoneShow()){
+			objSign.setPhoneShow(sign.getPhoneShow());
+		}
+		if(null!=sign.getOrgShow()){
+			objSign.setOrgShow(sign.getOrgShow());
+		}
+		// 获取客户端信息
+		objSign.setUpdateId(ClientUtils.getUserId());
+		objSign.setUpdateTime(new Date(System.currentTimeMillis()));
+		objSign.setUpdator(ClientUtils.getUserName());
+		
+		save(objSign);
+		//更新缓存
+//		cacheService.set(CacheConstants.SCH_SIGN_ID_PREFIX.concat(objSign.getSignId()), CacheConstants.SCH_SIGN_ID_TIME, objSign);
+		
+		return new Result(true);
+	}
+	
+	
+	/**
+	 * 签到 发送消息,环信替代
+	 * @param signType
+	 * @param signIndex
+	 * @param signId
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	public Result updateSignMessage(Integer signType,Integer signIndex, String signId, User user){
+		
+		SchSign schSign  = this.getSignFromCacheOrDB(signId);
+		
+		Map<String,String> extra = new HashMap<String,String>();
+		extra.put("title", "签到");
+		extra.put("userId", user.getUserId());
+		extra.put("userName", user.getName());
+		extra.put("userImg", user.getImgPath());
+		extra.put("mobilePhone", user.getMobilePhone());
+		extra.put("signIndex", String.valueOf(signIndex));
+		extra.put("signId", signId);
+		
+//		easemobService.doSendTextMsgToUsers("notice-sys", new String[]{schSign.getNoticeUserId()}, "用户签到", extra);
+		
+		return new Result(true) ;
+	}
+
+	/**
+	 * 初始化签到信息
+	 * @param signId
+	 * @param userId
+	 * @param initType
+	 * @return
+	 */
+	public Result doInitSignDatas(String signId, String userId,int initType){
+		
+		if( 1 == initType ){
+			
+			String hql = "from SchSignOrder s where s.signId = ? and s.userId = ? ";
+			List<SchSignOrder> orders = this.find(hql, CollectionUtils.newList(signId,userId), SchSignOrder.class);
+			
+			if(orders.size()>1){
+				SchSignOrder first = orders.get(0);
+				SchSignOrder second = orders.get(1);
+				
+				first.setDeleteFlag(false);
+				second.setDeleteFlag(true);
+				
+				this.save(first);
+				this.save(second);
+				
+				
+			}
+			
+		}else if( 2 == initType ){
+			
+			String hql = "from SchSignStatistics s where s.signId = ? and s.userId = ? ";
+			List<SchSignStatistics> statisticses = this.find(hql, CollectionUtils.newList(signId,userId), SchSignStatistics.class);
+			
+			if(statisticses.size()>1){
+				SchSignStatistics first = statisticses.get(0);
+				SchSignStatistics second = statisticses.get(1);
+				
+				first.setDeleteFlag(false);
+				second.setDeleteFlag(true);
+				
+				this.save(first);
+				this.save(second);
+				
+				
+			}
+		}
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 根据课程信息获取签到信息
+	 * 
+	 * @param strClassSubjectId
+	 * @return
+	 */
+	public List<SchSign> querySign(String strClassSubjectId){
+		String hql = "from SchSign s where s.classScheduleId = ? and s.deleteFlag is false";
+		return this.find(hql, CollectionUtils.newList(strClassSubjectId), SchSign.class);
+	}
+	
+	/**
+	 * 根据课程信息获取签到人员记录
+	 * 
+	 * @param strClassSubjectId
+	 * @return
+	 */
+	public List<SchSignStatistics> queryUserSign(String strClassSubjectId){
+		String hql = "select u from SchSignStatistics u where u.signId in( select s.signId from SchSign s"
+				+ " where s.classScheduleId = ? and s.deleteFlag is false) and u.deleteFlag is false and statisticsFlag = ? and date(u.signDate) = date(now())";
+		return this.find(hql, CollectionUtils.newList(strClassSubjectId, SchSignStatistics.STATISTICS_FLAG_YES), SchSignStatistics.class);
+	}
+	
+	
+	
+	/**
+	 * 查询签到历史
+	 * @param hql
+	 * @param args
+	 * @param page
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	public List<SchSignStatistics> queryPageLstSignStatistics(SchSignStatistics objSignStatistics, Pager page,Integer signType,String signId){
+		String cache = "SIGN_HISTORY_".concat(signId).concat("_").concat(String.valueOf(signType));
+//		List<SchSignStatistics> lstSchSignStatistics = cacheService.get(cache, List.class);
+		List<SchSignStatistics> lstSchSignStatistics = null;
+		if(lstSchSignStatistics != null && !lstSchSignStatistics.isEmpty()){
+			if(!lstSchSignStatistics.contains(objSignStatistics)){
+				lstSchSignStatistics.add(objSignStatistics);
+			}else if(signType == SignStatisResult.SIGN_TYPE_LAST){
+				lstSchSignStatistics.set(lstSchSignStatistics.indexOf(objSignStatistics), objSignStatistics);
+			}
+//			cacheService.set(cache, CacheConstants.BUSINESS_DATA_TIME, lstSchSignStatistics);
+			return lstSchSignStatistics;
+		}
+		StringBuffer sb = new StringBuffer(512);
+		// 4.查询签到名次
+		sb.append("select s, u.imgPath from SchSignStatistics s, User u where ");
+		sb.append(" s.userId=u.userId and s.deleteFlag is false and s.signId = ? ");
+		
+		//根据类型判断排序规则
+		if(signType == null || SchSign.SIGN_TYPE_ALL == signType){
+			sb.append(" and date(s.signDate) = date(NOW()) and s.lastSignTime is not null order by s.lastSignTime desc  ");
+		}else if(SchSign.SIGN_TYPE_FIRST == signType){
+			sb.append(" and date(s.signDate) = date(NOW()) and s.firstSignTime is not null order by s.firstSignOrder asc  ");
+		}else{
+			sb.append(" order by s.firstSignTime asc  ");
+		}
+
+		Pager currPage = page ;
+		
+		if( null == currPage ){
+			currPage = new Pager();
+			currPage.setPageNum(1);
+			currPage.setPageSize(200);
+		}
+		
+		// 查询并且缓存
+		List<SchSignStatistics> lstData = this.querySignItemListStat(sb.toString(), CollectionUtils.newList(signId));
+//		cacheService.set(cache, CacheConstants.BUSINESS_DATA_TIME, lstData);
+		
+		return lstData ;
+		
+	}
+	
+	/**
+	 * 签到,根据signId得到schSign
+	 * @param signId
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	public SchSign getSignFromCacheOrDB(String signId){
+		
+//		SchSign sign = cacheService.get(CacheConstants.SCH_SIGN_ID_PREFIX.concat(signId), SchSign.class);
+		SchSign sign = null;
+		
+		if( null != sign ){
+			return sign ;
+		}
+		
+		sign = this.read(SchSign.class, signId);
+//		if(null != sign){
+//			cacheService.set(CacheConstants.SCH_SIGN_ID_PREFIX.concat(signId), CacheConstants.SCH_SIGN_ID_TIME, sign);
+//		}
+		
+		return sign ;
+		
+	}
+	
+	/**
+	 * 签到对应活动,根据signId得到相对应的活动
+	 * @param signId
+	 * @return
+	 */
+//	public Activitys getActivityFromCacheOrDB(String signId){
+//		
+//		Activitys acts = cacheService.get(CacheConstants.SCH_SIGN_ACTIVITY_PREFIX.concat(signId), Activitys.class);
+//		
+//		if( null != acts ){
+//			return acts ;
+//		}
+//		
+//		String hql = " from Activitys where signId = ? and deleteFlag is false  ";
+//		acts = findUnique(hql, CollectionUtils.newList(signId), Activitys.class);
+//		
+//		if(null != acts){
+//			cacheService.set(CacheConstants.SCH_SIGN_ACTIVITY_PREFIX.concat(signId), CacheConstants.SCH_SIGN_ACTIVITY_TIME, acts);
+//		}
+//		
+//		return acts ;
+//		
+//	}
+	
+	/**
+	 * 根据sign得到相对应的机构图像
+	 * @param signId
+	 * @return
+	 */
+	public String getOrgLogoFromCacheOrDB(SchSign sign){
+		
+//		String orgLogo = cacheService.get(CacheConstants.SCH_SIGN_ORG_PREFIX.concat(sign.getSignId()), String.class);
+		
+//		if( null != orgLogo ){
+//			return orgLogo ;
+//		}
+		
+//		OrgClass cls = read(OrgClass.class, sign.getClassId());
+//		Organization org = read(Organization.class, cls.getOrgCollegeCourse().getOrganizationId());
+		
+//		if(null != org && StringUtils.isNotBlank(org.getLogoPath())){
+//			cacheService.set(CacheConstants.SCH_SIGN_ORG_PREFIX.concat(sign.getSignId()), CacheConstants.SCH_SIGN_ORG_TIME, org.getLogoPath());
+//		}
+		
+//		return null == org.getLogoPath() ?  "" : org.getLogoPath() ;
+		return null;
+		
+	}
+	
+	public Result sendSignQueueMsg(String args){
+		
+		// 延时一分钟发送 
+//		ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+		
+//		msg.put("msgType", "SCH_SIGN_QUEUE");
+//		msg.put("args", args);
+//		
+//		try {
+//
+//			onsProducer.sendMsg(msg);
+//			return new Result(true);
+//
+//		} catch (Exception e) {
+//			log.error("call sendSignQueueMsg fail.regId: " , e);
+//		}
+
+		return new Result(false);
+		
+	}
+	
+	/**
+	 * 签到异步处理部分代码
+	 * 
+	 * @param strArgs json对象
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	public Result doHandleSignQueueMsg(String strArgs){
+		if(StringUtils.isEmpty(strArgs)){
+			return null;
+		}
+		JSONObject args = JSON.parseObject(strArgs);
+		String source = args.getString("source");
+		String userId = args.getString("userId");
+		String userName = args.getString("userName");
+		String signId = args.getString("signId");
+		String mobilePhone = args.getString("mobilePhone");
+		String userImg = args.getString("userImg");
+		Integer signType = args.getInteger("signType");
+		Integer signIndex = args.getInteger("signIndex");
+		String inputCode = args.getString("inputCode");
+		String openId = args.getString("openId");
+		
+//		if(StringUtils.isNotBlank(inputCode) && StringUtils.isNotBlank(openId)){
+//			
+//			// 查询并更新绑定关系
+//			UserReWeixin weixin = weixinCommonService.queryUserReWxByOpenId(openId);
+//			if(weixin == null){
+//				weixinCommonService.saveUserReWeixin(openId, userId, source);
+//			}else{
+//				weixinCommonService.updateUserReWeixin(openId, userId, source);
+//			}
+//		}
+		
+		//签到积分
+//		scoreChangeService.doSign(userId, signId);
+				
+		//签到大屏,发送消息
+		User user = new User();
+		user.setName(userName);
+		user.setUserId(userId);
+		user.setMobilePhone(mobilePhone);
+		user.setImgPath(userImg);
+		this.updateSignMessage(signType,signIndex,signId, user);
+				
+		
+		return null ;
+	}
+	
+	/**
+	 * 通过openId得到user
+	 * @param openId
+	 * @return
+	 */
+	public User getUserFromOpenId(String openId){
+		User user = null;
+//		// 通过openId找user
+//		if(StringUtils.isNotBlank(openId)){
+//			
+//			// 查询绑定关系
+//			UserReWeixin weixin = weixinCommonService.queryUserReWxByOpenId(openId);
+//			if (null != weixin) {
+//				user = read(User.class, weixin.getUserId());
+//			}
+//		}
+		return user;
+	}
+	
+	@SuppressWarnings("unused")
+	@Override
+	public List<SchSignStatistics> querySignItemListCom( String hql,List<Object> args,Pager page,Integer signType,String signId ) {
+		
+		Pager currPage = page ;
+		
+		if( null == currPage ){
+			currPage = new Pager();
+			currPage.setPageNum(1);
+			currPage.setPageSize(200);
+		}
+		
+		String cacheKey = CacheConstants.SCH_SIGN_STATISTICS_FIRST_ACTPAGE_PREFIX.concat(signId).concat("_")
+				.concat(String.valueOf(currPage.getPageNum())).concat("_")
+				.concat(String.valueOf(currPage.getPageSize()));
+		
+//		if(SignStatisResult.SIGN_TYPE_FIRST == signType){
+//			// 如果满一页取缓存
+//			Object obj = cacheService.get(cacheKey, Object.class);
+//			if(null != obj ){
+//				return (List<SchSignStatistics>)obj;
+//			}
+//		}
+		
+		// 查询并且缓存
+		List<SchSignStatistics> lstData = signDAO.querySignItemListCom(hql, currPage, args);
+		
+		// 满一页数据缓存
+//		if(lstData.size() == currPage.getPageSize() ){
+//			cacheService.set(cacheKey, CacheConstants.SCH_SIGN_STATISTICS_FIRST_ACTPAGE_TIME, lstData);
+//		}
+//		
+		return lstData ;
+		
+	}
+	
+	/**
+	 * 未签到统计页面
+	 * 
+	 * @param signId
+	 * @param signDate
+	 * @return
+	 */
+	public Result updateFlag(String signStatisticsIds){
+		if(StringUtils.isBlank(signStatisticsIds)){
+			return new Result(false, "参数错误");
+		}
+		
+		this.bulkUpdateInLoop("update SchSignStatistics s set s.statisticsFlag = 1 where s.signStatisticsId = ?", signStatisticsIds.split(","));
+		List<SchSignStatistics> lstSchSignStatistics = this.findByComplexHql("from SchSignStatistics s where s.signStatisticsId in(:signStatisticsIds)",
+				CollectionUtils.newObjectMap("signStatisticsIds", signStatisticsIds.split(",")), SchSignStatistics.class);
+		int firstCount = 0;
+		int lastCount = 0;
+		for(SchSignStatistics objSchSignStatistics : lstSchSignStatistics){
+			if(objSchSignStatistics.getFirstSignTime() != null){
+				firstCount ++;
+			}
+			if(objSchSignStatistics.getLastSignTime() != null){
+				lastCount ++;
+			}
+		}
+		
+		this.bulkUpdate(
+				"update LessionSignStatistics s set s.firstSignUserCount = s.firstSignUserCount + ?,s.lastSignUserCount = s.lastSignUserCount + ?"
+				+ " where s.classSubjectId = ? and s.statisticsTime = ?",
+				new Object[]{firstCount, lastCount, lstSchSignStatistics.get(0).getClassSubjectId(), lstSchSignStatistics.get(0).getSignDate()});
+		return new Result(true);
+	}
+	
+	/**
+	 * 班级听课证签到
+	 * 
+	 * @param signVO
+	 * @param userId
+	 * @param type
+	 * @return
+	 */
+	public SignStatisResult doSignByClassCard(SchSign signVO, String userId){
+		User user = this.read(User.class, userId);
+		//设置默认不控制距离和只能本班签到
+		signVO.setRegisterAllow(SchSign.SIGN_ACT_DISALLOW);
+		signVO.setOutRangeAllow(SchSign.SIGN_ACT_ALLOW);
+		
+		//3. 插入签到统计
+		SignStatisResult result = this.insertSignStatistics(signVO, null, new Date(),
+				SchSignStatistics.TERMINAL_TYPE_WECHAT, userId, user.getName(), user.getMobilePhone(), null);
+		if(!result.getResult()){
+			return new SignStatisResult(false,result.getErrMsg());
+		}
+		
+		return result;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java b/src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java
new file mode 100644
index 0000000..d24670f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java
@@ -0,0 +1,44 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.util.Date;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.SchSpreadFootprint;
+import com.qxueyou.scc.school.service.ISpreadFootprintService;
+
+/**
+ * 课程、视频、讲义记录传播轨迹service
+ * 
+ * @author lihanqi
+ *
+ */
+@Service
+public class SpreadFootprintService extends CommonAppService implements ISpreadFootprintService {
+
+	/**dao**/
+	@Autowired
+	CommonDAO dao;
+	
+	/**
+	 * 新增
+	 * 
+	 * @param schSpreadFootprint
+	 * @return
+	 */
+	public Result insert(SchSpreadFootprint schSpreadFootprint){
+		if(schSpreadFootprint == null ){
+			return new Result(false);
+		}
+		schSpreadFootprint.setDeleteFlag(false);
+		schSpreadFootprint.setOperationTime(new Date());
+		TraceUtils.setCreateTrace(schSpreadFootprint);
+		this.dao.save(schSpreadFootprint);
+		return null;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java b/src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java
new file mode 100644
index 0000000..215a291
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.SchStudentScore;
+import com.qxueyou.scc.school.service.IStudentScoreService;
+
+/**
+ * 学员学分服务层
+ * 
+ * @author junliang
+ * @createTime 2017-12-10
+ */
+@Service
+public class StudentsScoreService extends CommonAppService implements IStudentScoreService {
+
+	@Override
+	public Result addStudentScore(String classId, String videoId, Integer score) {
+		if (StringUtils.isBlank(videoId) || StringUtils.isBlank(classId) || score == null) {
+			return new Result(false, "failed");
+		}
+		// 判断班级是否已经加入过学分;
+		String hql = "from SchStudentScore where classId = ? and studentId =? and videoId = ?";
+		SchStudentScore findUnique = findUnique(hql, CollectionUtils.newList(classId, ClientUtils.getUserId(), videoId),
+				SchStudentScore.class);
+		if (findUnique != null) {
+			return new Result(false, "此课程已添加过学分");
+		}
+		// 保存学分;
+		SchStudentScore schStudentScore = new SchStudentScore();
+		TraceUtils.setCreateTrace(schStudentScore);
+		schStudentScore.setClassId(classId);
+		schStudentScore.setVideoId(videoId);
+		BigDecimal scoreValue = new BigDecimal(score);
+		schStudentScore.setScoreValue(scoreValue);
+		schStudentScore.setStudentId(ClientUtils.getUserId());
+		schStudentScore.setDeleteFlag(false);
+		save(schStudentScore);
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 获取学员学分
+	 */
+	@Override
+	public Result getStudentScore() {
+		
+		String hql="select c.classId as classId,c.name as name,s.createTime as createTime,c.studyTime as studyTime,c.score as score,"
+				+ "c.approveStatus as approveStatus  from ClsClass c,SchStudentScore s "
+				+ " where c.classId=s.classId and c.mode=1 and c.deleteFlag is false and s.studentId=:userId ";
+	    List<Map<String, Object>> result = findListWithMapByHql(hql, CollectionUtils.newObjectMap("userId",ClientUtils.getUserId()));
+		
+		return new Result(true, "success", result);
+
+	}
+
+	@Override
+	public Result checkStudyStatus(String classId) {
+		String hql = "from SchStudentScore where classId = ? and studentId =? ";
+		SchStudentScore result = findUnique(hql, CollectionUtils.newList(classId,ClientUtils.getUserId()), SchStudentScore.class);
+		if(result!=null) {
+			return new Result(true);
+		}
+		return new Result(false);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java b/src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java
new file mode 100644
index 0000000..552517b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java
@@ -0,0 +1,439 @@
+package com.qxueyou.scc.school.service.impl;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.util.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.AliOssConfig;
+import com.qxueyou.scc.school.model.SchStudyReport;
+import com.qxueyou.scc.school.service.IStudyReportService;
+import com.qxueyou.scc.school.util.StudyReportUtils;
+//import com.qxueyou.scc.sys.service.IOssService;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRegistration;
+
+/**
+ * 学习报告查询及生成接口,如果存在,则直接查询,否则根据各类数据生成
+ * @author xiadehu
+ *
+ */
+@Service("StudyReportService")
+@EnableConfigurationProperties(AliOssConfig.class)
+public class StudyReportService extends CommonAppService implements
+		IStudyReportService {
+//	@Autowired
+//	ICacheService cache;
+//	
+//	@Autowired
+//	IOssService oss;
+	
+	@Autowired
+	AliOssConfig aliOssConfig;
+	
+	private static final Logger log = LogManager.getLogger("StudyReportService");
+
+	@Override
+	public Result doGetOrCreateStudyReport() {
+
+		String hql = "from SchStudyReport where userId=? and deleteFlag is false";
+
+		SchStudyReport report = findUnique(hql,
+				CollectionUtils.newList(ClientUtils.getUserId()),
+				SchStudyReport.class);
+
+		if (report == null) {
+			report = createReport();
+		}
+
+		return new Result(true, null, toMapByReport(report));
+	}
+
+	/**
+	 * 创建新的学习报告
+	 * 汇聚各类数据
+	 * 
+	 * @return
+	 */
+	private SchStudyReport createReport() {
+
+		SchStudyReport report = new SchStudyReport();
+		TraceUtils.setCreateTrace(report);
+
+		User user = read(User.class, ClientUtils.getUserId());
+
+		report.setUserId(user.getUserId());
+		report.setName(user.getName());
+		report.setStudentOrder(getStudyOrder(user.getCreateTime()));
+		report.setStudyPeriod(getStudyPeriod(user.getCreateTime()));
+		report.setCourseCount(getCourseCount(user.getUserId()));
+		setFirstCourseAndClass(report);
+		report.setStudyHandoutCount(getStudyHandoutCount(user.getUserId()));
+		report.setStudyVideoCount(getStudyVideoCount(user.getUserId()));
+		report.setViewLiveCount(getViewLiveCount(user.getUserId()));
+		setExerciseData(report);
+		setAtsData(report);
+		setOrgs(report);
+		setRecCourses(report);
+		setStudyTime(report);
+		
+		save(report);
+
+		return report;
+	}
+	
+
+	private int getStudyPeriod(Date createTime) {
+		Calendar cal = Calendar.getInstance();    
+        cal.setTime(createTime);
+        long time1 = cal.getTimeInMillis();   
+        long between_days=(System.currentTimeMillis()-time1)/(1000*3600*24);  
+        return Integer.parseInt(String.valueOf(between_days));
+	}
+
+	/**
+	 * 统计出用户集中学习的时间段,选取排名靠前的三个时间段(每个时间段1小时)进行显示
+	 * @param report
+	 */
+	private void setStudyTime(SchStudyReport report) {
+		
+		List<Map<String, Object>> result = queryStudyTime();
+		
+		//从0点到23点,统计每个时间段学习的次数
+		int[] hours = new int[24];
+		
+		int h=0;
+		int num = 0;
+		int count = 0;
+		for(Map<String,Object> item:result){
+			h = (Integer)item.get("h");
+			num = ((Long)item.get("num")).intValue();
+			hours[h]=hours[h]+num;
+			count = count + num;
+		}
+		
+		//计算出前三
+		int[][] most3 = new int[][]{{0,0},{0,0},{0,0}};
+		
+		for(int i=0;i<24;i++){
+			for(int j=0;j<3;j++){
+				if(hours[i]>most3[j][0]){
+					most3[j][0]=hours[i];
+					most3[j][1]=i;
+					break;
+				}
+			}
+		}
+		
+		
+		List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
+		
+		//返回前三(非零)的数据
+		for(int j=0;j<3;j++){
+			if(most3[j][0]>0){
+				data.add(CollectionUtils.newObjectMap(
+						"name",getTimeAlias(most3[j][1]),
+						"timeFrom",most3[j][1],
+						"timeTo",most3[j][1]+1,
+						"percent",String.format("%.1f%%",(double)most3[j][0]/count*100)));
+			}
+		}
+		
+		report.setStudyTime(JSON.toJSONString(data));
+		report.setStudyTimeImg(createImg(data));
+	}
+
+	private String createImg(List<Map<String, Object>> data) {
+		ByteArrayOutputStream os=null;
+		InputStream is=null;
+		try {
+			BufferedImage img = StudyReportUtils.drawPng(180, 180, data);
+			os = new ByteArrayOutputStream();  
+			ImageIO.write(img, "png", os);
+			is = new ByteArrayInputStream(os.toByteArray());
+			String destPath = "/web/res/img/studyreport/"+ClientUtils.getUserId()+"/"+UUIDUtils.generateUUID()+".png";
+//			oss.uplpadImage(is, "PNG", destPath);
+			return destPath;
+		} catch (IOException e) {
+			log.error(e,e);
+		}  finally{
+			IOUtils.closeQuietly(is);
+			IOUtils.closeQuietly(os);			
+		}
+		return null;
+	}
+
+	/**
+	 * 查询练习、讲义、视频学习的时间统计数据
+	 * @return
+	 */
+	private List<Map<String, Object>> queryStudyTime() {
+		String hql1 = " select hour(createTime) as h,count(1) as num from ExerciseItemAnalisiU where userId=:userId group by hour(createTime) ";
+		String hql2 = " select hour(createTime) as h,count(1) as num from MediaVideoLiveRecord where userId=:userId group by hour(createTime) ";
+		String hql3 = " select hour(createTime) as h,count(1) as num from MediaVideoRecord where userId=:userId group by hour(createTime) ";
+		
+		List<Map<String,Object>> r1 = findListWithMapByHql(hql1, CollectionUtils.newObjectMap("userId",ClientUtils.getUserId()));
+		List<Map<String,Object>> r2 = findListWithMapByHql(hql2, CollectionUtils.newObjectMap("userId",ClientUtils.getUserId()));
+		List<Map<String,Object>> r3 = findListWithMapByHql(hql3, CollectionUtils.newObjectMap("userId",ClientUtils.getUserId()));
+		r1.addAll(r2);
+		r1.addAll(r3);
+		return r1;
+	}
+	
+	private String getTimeAlias(int hour){
+		if(hour<3){
+			return "深夜";
+		}
+		if(hour<6){
+			return "凌晨";
+		}
+		if(hour<12){
+			return "早上";
+		}
+		if(hour<14){
+			return "中午";
+		}
+		if(hour<18){
+			return "下午";
+		}
+		if(hour<24){
+			return "晚上";
+		}
+		return null;
+	}
+
+	private void setRecCourses(SchStudyReport report) {
+		
+		String hql = " select cls.orgId from UserRegistration reg,ClsClass cls where reg.userId=? and reg.status=? and reg.deleteFlag is false " +
+				" and reg.classId=cls.classId order by reg.activationTime desc";
+		
+		String orgId = findUnique(hql, CollectionUtils.newList(
+				ClientUtils.getUserId(),UserRegistration.STATUS_ACTIVE),
+				String.class);
+		
+		hql = " select code from Organization where organizationId=?";
+		
+		String code = findUnique(hql, CollectionUtils.newList(
+				orgId),
+				String.class);
+		
+		hql = "select org.logoPath as imgPath,cls.name as name, org.name as orgName,concat('/transact/class/view/',cls.classId) as clickUrl from ClsClass cls,Organization org "+ 
+				"where cls.deleteFlag is false and cls.recommend is true and cls.orgId=:orgId and org.organizationId=cls.orgId " +
+				"order by cls.studentCount desc,cls.clickNum desc";	
+		
+		List<Map<String,Object>> data = findListWithMapByHql(hql, 
+				CollectionUtils.newObjectMap(
+						"orgId",orgId),new Pager(3,1));
+		
+		report.setRecCourses(JSON.toJSONString(data));
+		report.setMoreRecUrl("/weixin/qxueyou/redirect?orgCode="+code+"&routerUrl=/course/market");
+	}
+
+	private void setOrgs(SchStudyReport report) {
+		String hql = " select distinct org.name as name,org.logoPath as logoUrl from UserRegistration reg,ClsClass cls,Organization org " +
+				"where reg.classId=cls.classId and cls.orgId=org.organizationId " +
+				"and reg.userId=:userId and reg.deleteFlag is false and reg.status=:status";
+		
+		List<Map<String,Object>> data = findListWithMapByHql(hql, 
+				CollectionUtils.newObjectMap(
+						"userId",ClientUtils.getUserId(),
+						"status",UserRegistration.STATUS_ACTIVE),new Pager(10,1));
+		
+		report.setOrgs(JSON.toJSONString(data));
+	}
+
+	/**
+	 * 设置传播大使数据
+	 * @param report
+	 */
+	@SuppressWarnings("unchecked")
+	private void setAtsData(SchStudyReport report) {
+		String hql = "select className from AtsShare where userId=? and deleteFlag is false order by shareTime";
+
+		String className = findUnique(hql, CollectionUtils.newList(
+				ClientUtils.getUserId()),
+				String.class);
+		report.setFirstShareCourse(className);
+		
+		hql = "select sum(viewCount) as c from AtsShare where userId=? and deleteFlag is false";
+
+		BigDecimal count= findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId()), BigDecimal.class);
+		report.setViewCountOfShare(count==null?0:count.intValue());
+		
+		hql = "select allBalance from TransAccount where userId=? and deleteFlag is false and accountTypeId=4";
+
+		BigDecimal allBalance= findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId()), BigDecimal.class);
+		report.setAwardAmountOfShare(allBalance);
+		
+		hql = "select count(1) from TransAccount where deleteFlag is false and accountTypeId=3";
+
+		int accountTotal= ((Number) findUnique(hql, Collections.EMPTY_LIST, Number.class)).intValue();
+		
+		hql = "select his.rank from SchRankHis his,SchRankVer ver where his.versionId=ver.versionId and ver.rankType='ATS_SCORE' and his.userId=?";
+		Number rankN = findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId()), Number.class);
+		int rank= rankN==null?0:rankN.intValue();
+		report.setAtsOrder(BigDecimal.valueOf((double)(accountTotal-rank)/accountTotal));
+	}
+
+	private void setExerciseData(SchStudyReport report) {
+		
+		String hql = "select count(distinct exerciseItemId) as c,coalesce(avg(accuracy),0) as accuracy from ExerciseItemAnalisiU where userId=:userId and deleteFlag is false";
+
+		List<Map<String,Object>> data = findListWithMapByHql(hql, CollectionUtils.newObjectMap("userId",ClientUtils.getUserId()));
+		
+		if(data.isEmpty()){
+			report.setDoExerciseCount(0);
+			report.setExerciseAccuracy(BigDecimal.ZERO);
+			report.setAccuracyOrder(BigDecimal.valueOf(800000+(int)Math.random()*400000));
+			return;
+		}
+		
+		report.setDoExerciseCount(((Long)(data.get(0).get("c"))).intValue());
+		report.setExerciseAccuracy(BigDecimal.valueOf((Double)data.get(0).get("accuracy")));
+		
+		hql = "select count(1) from SchStudyReport where exerciseAccuracy>? and deleteFlag is false";
+
+		int order= findUnique(hql, CollectionUtils.newList(report.getExerciseAccuracy()), Number.class).intValue();
+		report.setAccuracyOrder(BigDecimal.valueOf(order));
+	}
+
+	private int getViewLiveCount(String userId) {
+
+		String hql = "select count(liveId) from MediaVideoLiveRecord where userId=? and deleteFlag is false";
+
+		return findUnique(hql, CollectionUtils.newList(userId), Number.class).intValue();
+	}
+
+	private int getStudyVideoCount(String userId) {
+		String hql = "select count(videoId) from MediaVideoRecord where userId=? and deleteFlag is false";
+
+		return findUnique(hql, CollectionUtils.newList(userId), Number.class).intValue();
+	}
+
+	private int getStudyHandoutCount(String userId) {
+		String hql = "select count(handoutId) from SchHandoutRecord where userId=? and deleteFlag is false";
+
+		return findUnique(hql, CollectionUtils.newList(userId), Number.class).intValue();
+	}
+
+	private int getCourseCount(String userId) {
+
+		String hql = "select count(classId) from UserRegistration where userId=? and deleteFlag is false and status=?";
+
+		return findUnique(
+				hql,
+				CollectionUtils.newList(userId, UserRegistration.STATUS_ACTIVE),
+				Number.class).intValue();
+
+	}
+
+	private void setFirstCourseAndClass(SchStudyReport report) {
+
+		String hql = "select classId from UserRegistration where userId=? and deleteFlag is false and status=? order by activationTime";
+
+		String classId = findUnique(hql, CollectionUtils.newList(
+				ClientUtils.getUserId(), UserRegistration.STATUS_ACTIVE),
+				String.class);
+
+		hql = "select coalesce(cls.name,'') as className,coalesce(cls.collegeCourseName,'') as courseName from ClsClass cls " +
+				"where cls.classId=:classId and cls.deleteFlag is false";
+
+		List<Map<String,Object>> cou = findListWithMapByHql(hql, CollectionUtils.newObjectMap("classId",classId));
+		
+		if(cou==null||cou.isEmpty()){
+			return;
+		}
+
+		report.setFirstClass((String)cou.get(0).get("className"));
+		report.setFirstCourse((String)cou.get(0).get("courseName"));
+
+	}
+
+	private int getStudyOrder(Date createTime) {
+
+		String hql = "select count(1) from User where createTime<? and deleteFlag is false";
+
+		return findUnique(hql, CollectionUtils.newList(createTime),
+				Number.class).intValue();
+
+	}
+
+	/**
+	 * 将report转换为返回机构数据结果
+	 * 
+	 * @param report
+	 * @return
+	 */
+	private Map<String, Object> toMapByReport(SchStudyReport report) {
+		String resDomain = aliOssConfig.getDomain();
+		
+		Map<String,Object> result = new HashMap<String,Object>();
+		result.put("resDomain", resDomain);
+		result.put("name", report.getName());
+		result.put("studentOrder", report.getStudentOrder());
+		result.put("studyPeriod", report.getStudyPeriod());
+		result.put("courseCount", report.getCourseCount());
+		result.put("firstCourse", report.getFirstCourse());
+		result.put("firstClass", report.getFirstClass());
+		result.put("studyHandoutCount", report.getStudyHandoutCount());
+		result.put("studyVideoCount", report.getStudyVideoCount());
+		result.put("viewLiveCount", report.getViewLiveCount());
+		result.put("doExerciseCount", report.getDoExerciseCount());
+		result.put("exerciseAccuracy", report.getExerciseAccuracy());
+		result.put("accuracyOrder", report.getAccuracyOrder());
+		result.put("firstShareCourse", report.getFirstShareCourse());
+		result.put("viewCountOfShare", report.getViewCountOfShare());
+		result.put("awardAmountOfShare", report.getAwardAmountOfShare());
+		result.put("atsOrder", report.getAtsOrder());
+		result.put("studyTime", JSON.parse(report.getStudyTime()));
+		result.put("setStudyTimeImg",report.getStudyTimeImg());
+		result.put("orgs", JSON.parse(report.getOrgs()));
+		result.put("recCourses", JSON.parse(report.getRecCourses()));
+		result.put("moreRecUrl", report.getMoreRecUrl());
+		result.put("atsWithAwardCount", getatsWithAwardCount());
+		
+		return result;
+	}
+
+	private Integer getatsWithAwardCount() {
+		
+//		Long atsWithAwardCount = cache.get("school/studyReport/atsWithAwardCount", Long.class);
+//		if(atsWithAwardCount!=null){
+//			return atsWithAwardCount.intValue();
+//		}
+		
+		String hql = "select count(1) from TransAccount where userId=? and allBalance>0 and deleteFlag is false and accountTypeId=4";
+
+		Number c= findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId()), BigDecimal.class);
+//		cache.set("school/studyReport/atsWithAwardCount",3600*3, c);
+		
+		return c.intValue();
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java b/src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java
new file mode 100644
index 0000000..1a568a9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java
@@ -0,0 +1,70 @@
+package com.qxueyou.scc.school.service.impl;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+//import com.aliyun.openservices.ons.api.ConsumeContext;
+//import com.aliyun.openservices.ons.api.Message;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.service.IONSExceptionLogService;
+//import com.qxueyou.scc.config.AliOssConfig;
+//import com.qxueyou.scc.base.service.IONSMsgDealService;
+//import com.qxueyou.scc.base.service.impl.CommonONSConsumer;
+//import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.school.service.ILessonService;
+
+@Service("VideoIssueStopDealService")
+public class VideoIssueStopDealService{
+//public class VideoIssueStopDealService implements IONSMsgDealService {
+
+	@Autowired
+	CommonDAO dao;
+
+//	@Autowired
+//	ICacheService cacheService;
+	
+	@SuppressWarnings("unused")
+	@Autowired
+	private ILessonService lessonService;
+
+	@Autowired
+	IONSExceptionLogService onsExceptionLogService;
+	
+
+	
+	@SuppressWarnings("unused")
+	private static Logger log = LogManager.getLogger("ONSExceptionLogService");
+	
+	@PostConstruct
+	void init() {
+
+//		CommonONSConsumer.registerHandler("VIDEO_ISSUE_STOP","VideoIssueStopDealService");
+
+	}
+
+//	@Override
+//	public void doHandle(Message msg, ConsumeContext context) {
+//		try {
+//			
+//			String videoId = msg.getUserProperties("videoId");
+//			String operateType = msg.getUserProperties("operateType");
+//			
+//			lessonService.doSingleVideoIssueStop(videoId,operateType);
+//			
+//		} catch (Exception e) {
+//
+//			String businessId = cfg.getConfigByEnv("ons-common-topic") + "-" + UUIDUtils.generateUUID();
+//			String desp = "jobId:" + msg.getUserProperties("jobId") ;
+//
+//			log.error( businessId + " :定时器调用视频有效期发布or停用失败:" + e, e);
+//			onsExceptionLogService.logSaveExceptionLog(cfg.getConfigByEnv("ons-common-topic"), "VIDEO_ISSUE_STOP", businessId , desp );
+//
+//		}
+//	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java b/src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java
new file mode 100644
index 0000000..b06c7c3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java
@@ -0,0 +1,45 @@
+package com.qxueyou.scc.school.service.impl;
+
+import org.springframework.stereotype.Component;
+
+//import com.aliyun.openservices.ons.api.SendResult;
+//import com.qxueyou.scc.base.model.ONSMsg;
+//import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.service.impl.ONSBaseMsgProducer;
+
+/**
+ * 微商消息ONS发送者
+ * @author zhiyong
+ *
+ */
+@Component
+public class WBONSProducer{
+//public class WBONSProducer extends ONSBaseMsgProducer {
+
+
+//	public Result sendMsg(ONSMsg msg) {
+//		
+//		try {
+//			
+//			SendResult sendResult = producer.send(msg.toONSMsg());
+//			
+//			return new Result(true,sendResult.getMessageId());
+//			
+//		} catch (Exception e) {
+//			log.error("call WBONSProducer.sendMsg failed:"+msg.toString(),e);
+//		}
+//		
+//		return new Result(false);
+//	}
+//
+//	@Override
+//	protected String getProducerId() {
+//		return cfg.getConfigByEnv("ons-wb-producer-id");
+//	}
+//
+//	@Override
+//	public String getTopic() {
+//		return cfg.getConfigByEnv("ons-wb-topic");
+//	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java b/src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java
new file mode 100644
index 0000000..9b5bfc1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java
@@ -0,0 +1,11 @@
+package com.qxueyou.scc.school.util;
+
+
+/**
+ * 学员评估utils
+ * @author zhiyong
+ *
+ */
+public class StudentEvaUtils {
+
+}
diff --git a/src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java b/src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java
new file mode 100644
index 0000000..5fcb042
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java
@@ -0,0 +1,146 @@
+package com.qxueyou.scc.school.util;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Transparency;
+import java.awt.geom.Ellipse2D;
+import java.awt.image.BufferedImage;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 学习报告学习时间分布图生成类utils
+ * @author xiadehu
+ *
+ */
+public class StudyReportUtils {
+
+	/**
+	 * 
+	 * @param width 图片宽度
+	 * @param height 图片高度
+	 * @param startHour1 开始小时1
+	 * @param text1 显示文本1
+	 * @param startHour2 开始小时2
+	 * @param text2 显示文本2
+	 * @return BufferedImage 对象
+	 */
+	public static BufferedImage drawPng(int width,int height,List<Map<String,Object>> times){
+		
+		//初始化画布
+		BufferedImage image = new BufferedImage(width, height,     BufferedImage.TYPE_INT_RGB);
+		Graphics2D g2d = image.createGraphics();
+		image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
+		g2d.dispose();
+		g2d = image.createGraphics();
+		 
+		//背景
+		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g2d.setColor(new Color(248,197,116));
+		double centerX = width/2;
+		double centerY = height/2;
+		double radius = width/2;
+		Ellipse2D circle = new Ellipse2D.Double();
+		circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY+ radius);
+		g2d.draw(circle);
+		g2d.fill(circle);
+		
+		//绘制时间文字
+		for(Map<String,Object> time:times){
+			drawStudyTimeArc(width, height, (Integer)time.get("timeFrom"),(Integer)time.get("timeTo"), g2d,new Color(255,255,255));
+		}
+		
+		for(Map<String,Object> time:times){
+			drawStudyTimeText(width, height, (Integer)time.get("timeFrom"), (String)time.get("name")+(String)time.get("percent"), g2d,new Color(255,0,0));
+		}
+		
+		g2d.setColor(new Color(255,255,255));
+		circle = new Ellipse2D.Double();
+		circle.setFrameFromCenter(centerX, centerY, centerX + 6, centerY+ 6);
+		g2d.draw(circle);
+		g2d.setColor(new Color(248,197,116));
+		circle = new Ellipse2D.Double();
+		circle.setFrameFromCenter(centerX, centerY, centerX + 5, centerY+ 5);
+		g2d.fill(circle);
+		
+		//释放
+		g2d.dispose();
+		 
+		return image;
+	}
+
+	private static void drawStudyTimeArc(int width, int height, int startHour,int endHour,
+			 Graphics2D g2d,Color backGroundColor) {
+		
+		g2d.setColor(backGroundColor);
+		g2d.drawArc(0, 0, width, height, -15*(startHour-5), 15*((24+endHour-startHour)%24));
+		g2d.fillArc(0, 0, width, height, -15*(startHour-5), 15*((24+endHour-startHour)%24));
+		
+	}
+	
+	private static void drawStudyTimeText(int width, int height, int startHour1,
+			String text1, Graphics2D g2d,Color textColor) {
+		
+		double sin = Math.sin(adjustStartIndex(startHour1)*15*Math.PI/180);
+		double cos = Math.cos(adjustStartIndex(startHour1)*15*Math.PI/180);
+		
+		g2d.setColor(textColor);
+		float x1 = (float)(adjustRadius(startHour1,width)/2.0d*sin);
+		float x = x1+width/2;
+		float y1=(float)(adjustRadius(startHour1,width)/2.0d*cos);
+		float y = height/2-y1;
+		g2d.setFont(new Font("宋体", Font.PLAIN, 12));
+		g2d.drawString(text1, x, y);
+	}
+	
+	private static float adjustStartIndex(int startHour){
+		if(startHour<=3){
+			return startHour;
+		}
+		if(startHour==5){
+			return startHour+0.6f;
+		}
+		if(startHour==6||startHour==7){
+			return startHour+0.9f;
+		}
+		if(startHour>=8&&startHour<=14){
+			return startHour+1f;
+		}
+		if(startHour==15){
+			return startHour+0.5f;
+		}
+		if(startHour==18){
+			return startHour+0.3f;
+		}
+		if(startHour>=19&&startHour<=23){
+			return startHour+0.2f;
+		}
+		return startHour+0.5f;
+	}
+	
+	private static float adjustRadius(int startHour,int width){
+		
+		switch(startHour){
+		 case 2:return width-70;
+		 case 3:return width-70;
+		 case 4:return width-100;
+		 case 5:return width-100;
+		 case 6:return width-100;
+		 case 7:return width-100;
+		 case 8:return width-80;
+		 case 9:return width-70;
+		 case 11:return width-30;
+		 case 12:return width-70;
+		 case 13:return width-30;
+		 case 14:return width-10;
+		 case 15:return width-10;
+		 default :return width-50;
+		}
+	}
+	
+	public static void main(String[] args){
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java b/src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java
new file mode 100644
index 0000000..7f530ec
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java
@@ -0,0 +1,25 @@
+package com.qxueyou.scc.shorturl.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 短地址utils
+ * @author lihanqi
+ *
+ */
+public class ShortUrlUtils {
+	
+	/**
+	* 验证网址Url
+	* 
+	* @param 待验证的字符串
+	* @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false </b>
+	*/
+	public static boolean IsUrl(String str) {
+		String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
+		Pattern pattern = Pattern.compile(regex);
+		Matcher matcher = pattern.matcher(str);
+		return matcher.matches();
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/sms/model/Sms.java b/src/main/java/com/qxueyou/scc/sms/model/Sms.java
new file mode 100644
index 0000000..51fd550
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sms/model/Sms.java
@@ -0,0 +1,288 @@
+package com.qxueyou.scc.sms.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 短信表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sms")
+public class Sms implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	//平台云之讯
+	public static String PLATFORM_UC = "UC";
+	
+	//平台阿里
+	public static String PLATFORM_ALI = "ALI";
+	
+	//诚立业
+	public static String PLATFORM_CLY = "CLY";
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SMS_ID", unique=true, nullable=false, length=32)
+	private String smsId;
+
+	/** 创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/** 创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	/**  模块:目前发送验证码:找回密码 or  注册  */
+	@Column(name="MODULE", length=32)
+	private String module;
+
+	public static final String  BIND_QXY_MODULE = "BIND_QXY"; // 绑定Q学友账号
+	public static final String  REGISTER_MODULE = "REGISTER"; // 注册
+	public static final String  FORGET_PWD_MODULE = "FORGET_PWD"; // 找回密码
+	public static final String  FORGET_PWD_MODULE_BACK = "FORGET_PWD_BACK"; // 后台找回密码
+	public static final String  FORGET_PWD_MODULE_LIVE = "FORGET_PWD_LIVE"; // 慧眼端找回密码
+	public static final String  FLOW_EXCHANGE_MODULE = "FLOW_EXCHANGE"; // 提取流量
+	public static final String  CHOOSE_CLASS = "CHOOSE_CLASS"; // 选课报名
+	public static final String  LIVE_INTERACT_LOGIN_MODULE = "LIVE_INTERACT_LOGIN"; // 直播互动登录
+	public static final String  LIVE_INTERACT_BIND_MODULE = "LIVE_INTERACT_BIND"; // 直播互动绑定
+	public static final String  UPDATE_MOBILEPHONE_MODULE = "UPDATE_MOBILEPHONE"; //修改手机号
+	public static final String  PHONE_VERIFY_LOGIN_MODULE = "PHONE_VERIFY_LOGIN"; //登入验证码
+	public static final String  BIND_BANKCARD_MODULE = "BIND_BANKCARD"; //绑定银行卡
+	public static final String  TRANS_EXTRACT_MODULE = "TRANS_EXTRACT_MODULE"; //传播大使提取佣金
+	public static final String  VERIFY_SINGNUP_INFO_MODULE = "VERIFY_SINGNUP_INFO_MODULE"; // 微信端报名绑定微信需验证码
+	public static final String  PHONE_VERIFY_CODE_MODULE = "PHONE_VERIFY_CODE_MODULE"; //通用验证码
+
+	/**  手机号 */
+	@Column(name="MOBILE_PHONE", length=32)
+	private String mobilePhone;
+
+	/**  发送状态 */
+	@Column(name="STATE", length=32)
+	private String state;
+
+	/**  超时时间 */
+	@Column(name="EXPIRED_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date expiredTime;
+
+	/**  内容 */
+	@Column(name="CONTENT", length=200)
+	private String content;
+
+	/**  验证码 */
+	@Column(name="VERIFY_CODE", length=32)
+	private String verifyCode;
+
+	/**  输入的验证码 */
+	@Column(name="INPUT_CODE", length=32)
+	private String inputCode;
+
+	/**  短信模板ID */
+	@Column(name="TEMPLATE_ID", length=32)
+	private String templateId;
+	
+	/**  返回结果  */
+	@Column(name="RESPONSE", length=255)
+	private String response;
+	
+	/** 发送平台(UC云之讯,ALI阿里) */
+	@Column(name="PLATFORM", length=5)
+	private String platform;
+	
+	/** 验证码已使用次数,最多允许输错三次 */
+	@Column(name="VERIFY_TIMES")
+	private Integer verifyTimes;
+	
+	public String getResponse() {
+		return response;
+	}
+
+	public void setResponse(String response) {
+		this.response = response;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+	
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getSmsId() {
+		return smsId;
+	}
+
+	public void setSmsId(String smsId) {
+		this.smsId = smsId;
+	}
+
+	public String getModule() {
+		return module;
+	}
+
+	public void setModule(String module) {
+		this.module = module;
+	}
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getState() {
+		return state;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	public Date getExpiredTime() {
+		return expiredTime;
+	}
+
+	public void setExpiredTime(Date expiredTime) {
+		this.expiredTime = expiredTime;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getVerifyCode() {
+		return verifyCode;
+	}
+
+	public void setVerifyCode(String verifyCode) {
+		this.verifyCode = verifyCode;
+	}
+
+	public String getInputCode() {
+		return inputCode;
+	}
+
+	public void setInputCode(String inputCode) {
+		this.inputCode = inputCode;
+	}
+
+	public String getTemplateId() {
+		return templateId;
+	}
+
+	public void setTemplateId(String templateId) {
+		this.templateId = templateId;
+	}
+
+	public Integer getVerifyTimes() {
+		return verifyTimes;
+	}
+
+	public void setVerifyTimes(Integer verifyTimes) {
+		this.verifyTimes = verifyTimes;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java b/src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java
new file mode 100644
index 0000000..026a04b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java
@@ -0,0 +1,108 @@
+package com.qxueyou.scc.sms.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * 短信表配置 实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sms_config")
+public class SmsConfig implements Serializable{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CONFIG_ID", unique=true, nullable=false, length=32)
+	private String configId;
+	
+	/**  模块:目前 激活  */
+	@Column(name="MODULE", length=255)
+	private String module;
+	
+	/**  最上层org_id  */
+	@Column(name="TOP_ORG_ID", length=255)
+	private String topOrgId;
+	
+	/**  开关  */
+	@Column(name="SWITCH_FLAG", length=255)
+	private Boolean switchFlag;
+	
+	public static final String  REG_ACTIVITY_MODULE = "REG_ACTIVITY"; // 激活
+
+	/**
+	 * @return the configId
+	 */
+	public String getConfigId() {
+		return configId;
+	}
+
+	/**
+	 * @param configId the configId to set
+	 */
+	public void setConfigId(String configId) {
+		this.configId = configId;
+	}
+
+	/**
+	 * @return the module
+	 */
+	public String getModule() {
+		return module;
+	}
+
+	/**
+	 * @param module the module to set
+	 */
+	public void setModule(String module) {
+		this.module = module;
+	}
+
+	/**
+	 * @return the topOrgId
+	 */
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	/**
+	 * @param topOrgId the topOrgId to set
+	 */
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	/**
+	 * @return the switchFlag
+	 */
+	public Boolean getSwitchFlag() {
+		return switchFlag;
+	}
+
+	/**
+	 * @param switchFlag the switchFlag to set
+	 */
+	public void setSwitchFlag(Boolean switchFlag) {
+		this.switchFlag = switchFlag;
+	}
+
+
+	
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sms/model/SmsContants.java b/src/main/java/com/qxueyou/scc/sms/model/SmsContants.java
new file mode 100644
index 0000000..42b809f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sms/model/SmsContants.java
@@ -0,0 +1,224 @@
+package com.qxueyou.scc.sms.model;
+
+/**
+ * 短信发送公用实体类
+ * @author zhiyong
+ *
+ */
+public class SmsContants {
+	
+	/******************************************  短信模板id —— new   start  ***************************************/
+	
+	
+	/******************************************  分隔线     普通模板     ***************************************/
+	
+	/** 报名支付成功  短信通知模板id */
+	public static final String SMS_WEIXIN_PAY_TEMPLATE_ID = "31978"; // 14341
+	
+	/** 机构发布通知  短信通知模板id */
+	public static final String SMS_ORG_NOTICE_TEMPLATE_ID = "31981";// 17507
+	
+	/** 班级发布通知  短信通知模板id */
+	public static final String SMS_CLASS_NOTICE_TEMPLATE_ID = "31980"; // 17506
+	
+	/** 提交报名请求  短信通知模板id */
+	public static final String SMS_REG_CLASS_TEMPLATE_ID = "31979"; // 14806
+	
+	/** 活动抽奖  短信通知模板id */
+	public static final String SMS_LOTTERY_TEMPLATE_ID = "31982"; // 13610
+	
+	/** 后台注册成功,没有密码 用户 短信模板id */
+	public static final String SMS_ADMIN_REGISTERED_TEMPLATE_ID = "31983"; // 21519
+	
+	/** 后台注册成功,有密码 用户 短信模板id */
+	public static final String SMS_ADMIN_REGISTERED_PWD_TEMPLATE_ID = "33233"; 
+	
+	/** 升级账号 - 第三方流量提取成功 短信模板id */
+	public static final String THIRD_FLOW_EXCHANGE_TEMPLATE_ID = "31984"; // 23460
+	
+	/** 游客创建账号  - 游客流量提取成功 短信模板id */ 
+	public static final String VISITOR_FLOW_EXCHANGE_TEMPLATE_ID = "31985"; // 23459
+	
+	/** 流量提取失败 短信模板id */
+	public static final String SMS_FLOW_EX_FAILED_TEMPLATE_ID = "31965"; // 28923
+	
+	/** 后台激活学员(不添加机构信息添加密码) 短信模板id */
+	public static final String SMS_REG_ACTIVE_ORG_TEMPLATE_ID = "31986"; // 29808
+	
+	/** 机构激活学员(添加机构信息和密码) 短信模板id */
+	public static final String SMS_REG_ACTIVE_PASSWORD_TEMPLATE_ID = "31987"; // 29807
+	
+	/** 后台激活学员(不添加机构信息) 短信模板id */
+	public static final String SMS_REG_ACTIVE_NO_PASSWORD_ORG_TEMPLATE_ID = "32640";
+	
+	/** 机构激活学员(添加机构信息) 短信模板id */
+	public static final String SMS_REG_ACTIVE_NO_PASSWORD_TEMPLATE_ID = "32641";
+	
+	/** 报名请求-学员收 (团购选课)   用户 短信模板id */
+	public static final String PURCHASE_COURSE_USER_TEMPLATE_ID = "31964"; // 19053
+	
+	/** 报名请求-班主任收(团购选课) 用户 短信模板id */
+	public static final String PURCHASE_COURSE_ORG_TEMPLATE_ID = "31963"; // 19174
+	
+	/** 付款成功-班(学员报名付款后短信通知班主任/管理员) 短信模板id */
+	public static final String SMS_CHOOSE_CLASS_PAYED_CHARGER_TEMPLATE_ID = "31988"; // 30553
+	
+	/** 报名成功-班(学员报名短信付款前通知班主任/管理员) 短信模板id */
+	public static final String SMS_CHOOSE_CLASS_CHARGER_TEMPLATE_ID = "31989"; // 30502
+	
+	/** 提交兑换请求(积分兑换)  短信通知模板id */
+	public static final String SMS_FLOW_TEMPLATE_ID = "31962"; // 14687
+	
+	/** 成功修改密码 短信模板id */
+	public static final String SMS_CHANGE_PWD_TEMPLATE_ID = "32519"; // 24061
+	
+	/** 充值流量 短信模板id */
+	public static final String SMS_FLOW_RECHANGE_TEMPLATE_ID = "32521"; // 23472
+	
+	/** Q慧眼添加助教 短信模板id */
+	public static final String SMS_LIVE_ADD_ASSISTANT_TEMPLATE_ID = "34129"; 
+	
+	/******************************************  分隔线     验证码模板     ***************************************/
+	
+	/** app端绑定银行卡 短信模板id */
+	public static final String SMS_BIND_BANKCARD_TEMPLATE_ID = "31976"; // 30772
+	
+	/** 申请提取奖金(传播大使提取佣金) 短信模板id */
+	public static final String SMS_TRANS_EXTRACT_TEMPLATE_ID = "31975"; // 30773
+	
+	/** 金额提取成功通知 */
+	public static final String SMS_TRANS_EXTRACT_SUCCESS_TEMPLATE_ID = "100872";
+	
+	/** 观看直播登录  短信通知模板id */
+	public static final String SMS_LOGIN_VALIDATION_TEMPLATE_ID = "31974"; // 27852
+	
+	/** 更改手机号 短信模板id */
+	public static final String SMS_UPDATE_PHONE_TEMPLATE_ID = "31973"; //27429
+	
+	/** 提取流量 短信模板id */
+	public static final String SMS_FLOW_EXCHANGE_VALIDATION_TEMPLATE_ID = "31971"; // 23169
+	
+	/** 关联微信绑定(Q学友账号和微信关联)  短信通知模板id */
+	public static final String SMS_BIND_VALIDATION_TEMPLATE_ID = "31970"; // 18701
+	
+	/** 注册验证码  短信通知模板id */
+	public static final String SMS_REGISTERED_VALIDATION_TEMPLATE_ID = "31968"; // 4109
+	
+	/** 找回密码  短信通知模板id */
+	public static final String SMS_FORGETPWD_VALIDATION_TEMPLATE_ID = "31967"; // 18746
+	
+	/** 选课报名  短信验证模板id */
+	public static final String SMS_CHOOSE_CLASS_TEMPLATE_ID = "31966"; // 23031
+	
+	/** 微信端报名需绑定微信 短信模板id */
+	public static final String SMS_VERIFY_SINGNUP_INFO_TEMPLATE_ID = "33903"; 
+	
+	/** 手机号验证登录 短信模板id */
+	public static final String SMS_PHONE_VERIFY_LOGIN_TEMPLATE_ID = "38556"; 
+	
+	/** 验证码通用短信 */
+	public static final String SMS_VERIFY_CODE_TEMPLATE_ID = "42198"; 
+	
+	
+	
+	/******************************************  短信模板id —— new  end  ***************************************/
+	
+	
+	
+	
+	/******************************************  短信模板id —— old  start   ***************************************/
+	
+	/******************************************  分隔线   普通模板     ***************************************/
+	
+	/** 报名支付  短信通知模板id */
+	public static final String SMS_WEIXIN_PAY_TEMPLATE_ID_OLD = "14341";
+	
+	/** 学校通知  短信通知模板id */
+	public static final String SMS_ORG_NOTICE_TEMPLATE_ID_OLD = "17507";
+	
+	/** 班级通知  短信通知模板id */
+	public static final String SMS_CLASS_NOTICE_TEMPLATE_ID_OLD = "17506";
+	
+	/** 选课报名  短信通知模板id */
+	public static final String SMS_REG_CLASS_TEMPLATE_ID_OLD = "14806";
+	
+	/** 抽奖  短信通知模板id */
+	public static final String SMS_LOTTERY_TEMPLATE_ID_OLD = "13610";
+	
+	/** 后台注册成功 用户 短信模板id */
+	public static final String SMS_ADMIN_REGISTERED_TEMPLATE_ID_OLD = "21519";
+	
+	/** 升级账号 - 第三方流量提取成功 短信模板id */
+	public static final String THIRD_FLOW_EXCHANGE_TEMPLATE_ID_OLD = "23460";
+	
+	/** 游客创建账号  - 游客流量提取成功 短信模板id */ 
+	public static final String VISITOR_FLOW_EXCHANGE_TEMPLATE_ID_OLD = "23459";
+	
+	/** 流量提取失败 短信模板id */
+	public static final String SMS_FLOW_EX_FAILED_TEMPLATE_ID_OLD = "28923";
+	
+	/** 注册激活用户发送短信不添加机构信息添加密码 短信模板id */
+	public static final String SMS_REG_ACTIVE_ORG_TEMPLATE_ID_OLD = "29808";
+	
+	/** 注册激活用户发送短信添加机构信息和密码 短信模板id */
+	public static final String SMS_REG_ACTIVE_PASSWORD_TEMPLATE_ID_OLD = "29807";
+	
+	/** 团购选课 用户 短信模板id */
+	public static final String PURCHASE_COURSE_USER_TEMPLATE_ID_OLD = "19053";
+	
+	/** 团购选课 用户 短信模板id */
+	public static final String PURCHASE_COURSE_ORG_TEMPLATE_ID_OLD = "19174";
+	
+	/** 学员报名付款后短信通知班主任/管理员 短信模板id */
+	public static final String SMS_CHOOSE_CLASS_PAYED_CHARGER_TEMPLATE_ID_OLD = "30553";
+	
+	/** 学员报名短信付款前通知班主任/管理员 短信模板id */
+	public static final String SMS_CHOOSE_CLASS_CHARGER_TEMPLATE_ID_OLD = "30502";
+	
+	/** 积分兑换  短信通知模板id */
+	public static final String SMS_FLOW_TEMPLATE_ID_OLD = "14687";
+	
+	/** 成功修改密码 短信模板id */
+	public static final String SMS_CHANGE_PWD_TEMPLATE_ID_OLD = "24061";
+
+	/** 充值流量 短信模板id */
+	public static final String SMS_FLOW_RECHANGE_TEMPLATE_ID_OLD = "23472";
+	
+	
+	/******************************************  分隔线     验证码模板     ***************************************/
+	
+	/** app端绑定银行卡 短信模板id */
+	public static final String SMS_BIND_BANKCARD_TEMPLATE_ID_OLD = "30772";
+	
+	/** 传播大使提取佣金 短信模板id */
+	public static final String SMS_TRANS_EXTRACT_TEMPLATE_ID_OLD = "30773";
+	
+	/** 直播登录获取验证码  短信通知模板id */
+	public static final String SMS_LOGIN_VALIDATION_TEMPLATE_ID_OLD = "27852";
+	
+	/** 修改手机号码 短信模板id */
+	public static final String SMS_UPDATE_PHONE_TEMPLATE_ID_OLD = "27429";
+	
+	/** 提取流量验证码 短信模板id */
+	public static final String SMS_FLOW_EXCHANGE_VALIDATION_TEMPLATE_ID_OLD = "23169";
+	
+	/** 微信绑定Q学友验证码  短信通知模板id */
+	public static final String SMS_BIND_VALIDATION_TEMPLATE_ID_OLD = "18701";
+	
+	/** 注册验证码  短信通知模板id */
+	public static final String SMS_REGISTERED_VALIDATION_TEMPLATE_ID_OLD = "4109";
+	
+	/** 找回密码验证码  短信通知模板id */
+	public static final String SMS_FORGETPWD_VALIDATION_TEMPLATE_ID_OLD = "18746";
+	
+	/** 选课报名  短信验证模板id */
+	public static final String SMS_CHOOSE_CLASS_TEMPLATE_ID_OLD = "23031";
+	
+	
+	/******************************************  分隔线     不用的模板     ***************************************/
+	
+	/** 活动通知 短信模板id */
+	public static final String SMS_ACTIVE_NOTICE_TEMPLATE_ID = "23699";
+	
+	/******************************************  短信模板id —— old  end   ***************************************/
+}
diff --git a/src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java b/src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java
new file mode 100644
index 0000000..8810732
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java
@@ -0,0 +1,100 @@
+package com.qxueyou.scc.sms.utils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.qxueyou.scc.sms.model.Sms;
+import com.qxueyou.scc.sms.model.SmsContants;
+
+public class SmsUtils {
+	
+	/**
+	 * 检测所有13、14、15、17、18开头11位手机号
+	 * @param strMobile
+	 * @return
+	 */
+	public static boolean formatMobilePhone(String mobilePhone){
+		if(StringUtils.isBlank(mobilePhone)){
+			return false;
+		}
+		Pattern p = Pattern.compile("^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$"); 
+		Matcher m = p.matcher(mobilePhone);
+		return m.matches();
+	}
+	
+	/**
+	 * 获取验证码
+	 * @return
+	 */
+	public static String getVerifyCode(){
+		String result = "";
+		
+		for(int i=0;i<4;i++){
+			result = result.concat(String.valueOf((int)(Math.random()*10)));
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * 根据module获取模板id
+	 * 
+	 * @param module
+	 * @return
+	 */
+	public static String getSmsTemplateId(String module){
+		
+		String templateId = null;
+		if(Sms.REGISTER_MODULE.equals(module)){ 
+			// 注册验证码
+			templateId = SmsContants.SMS_REGISTERED_VALIDATION_TEMPLATE_ID;
+			
+		}else if(Sms.FORGET_PWD_MODULE.equals(module)){ 
+			// 找回密码验证码
+			templateId = SmsContants.SMS_FORGETPWD_VALIDATION_TEMPLATE_ID;
+			
+		}else if(Sms.FORGET_PWD_MODULE_BACK.equals(module)){
+			// 后台找回密码验证码
+			templateId = SmsContants.SMS_FORGETPWD_VALIDATION_TEMPLATE_ID;
+			
+		}else if(Sms.FORGET_PWD_MODULE_LIVE.equals(module)){
+			// Q慧眼找回密码验证码
+			templateId = SmsContants.SMS_FORGETPWD_VALIDATION_TEMPLATE_ID;
+			
+		}else if(Sms.BIND_QXY_MODULE.equals(module)){ 
+			// 绑定微信验证码
+			templateId = SmsContants.SMS_BIND_VALIDATION_TEMPLATE_ID;
+			
+		}else if(Sms.FLOW_EXCHANGE_MODULE.equals(module)){ 
+			// 提取流量验证码
+			templateId = SmsContants.SMS_FLOW_EXCHANGE_VALIDATION_TEMPLATE_ID;
+			
+		}else if(Sms.CHOOSE_CLASS.equals(module)){
+			templateId = SmsContants.SMS_CHOOSE_CLASS_TEMPLATE_ID;
+			
+		}else if(Sms.LIVE_INTERACT_LOGIN_MODULE.equals(module)){ 
+			// 直播登录获取验证码
+			templateId = SmsContants.SMS_LOGIN_VALIDATION_TEMPLATE_ID;
+		}else if(Sms.LIVE_INTERACT_BIND_MODULE.equals(module)){ 
+			// 直播绑定获取验证码
+			templateId = SmsContants.SMS_BIND_VALIDATION_TEMPLATE_ID;
+		}else if(Sms.UPDATE_MOBILEPHONE_MODULE.equals(module)){ //修改手机号验证码
+			templateId = SmsContants.SMS_UPDATE_PHONE_TEMPLATE_ID;
+		}else if(Sms.BIND_BANKCARD_MODULE.equals(module)){ //app端绑定银行卡
+			templateId = SmsContants.SMS_BIND_BANKCARD_TEMPLATE_ID;
+		}else if(Sms.TRANS_EXTRACT_MODULE.equals(module)){ //传播大使提取佣金
+			templateId = SmsContants.SMS_TRANS_EXTRACT_TEMPLATE_ID;
+		}else if(Sms.VERIFY_SINGNUP_INFO_MODULE.equals(module)){ // 微信端报名需绑定微信
+			templateId = SmsContants.SMS_VERIFY_SINGNUP_INFO_TEMPLATE_ID;
+		}else if(Sms.PHONE_VERIFY_LOGIN_MODULE.equals(module)){ //验证登入
+			templateId = SmsContants.SMS_PHONE_VERIFY_LOGIN_TEMPLATE_ID;
+		}else if(Sms.PHONE_VERIFY_CODE_MODULE.equals(module)){ //验证登入
+			templateId = SmsContants.SMS_VERIFY_CODE_TEMPLATE_ID;
+		}else{ // 微信端报名需绑定微信
+			templateId = module;
+		}
+		return templateId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java b/src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java
new file mode 100644
index 0000000..15fb657
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java
@@ -0,0 +1,441 @@
+package com.qxueyou.scc.statistic.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * 直播视频流量统计明细
+ * @author ody.yuan
+ *
+ */
+@Entity(name="SchFlowStatisticDetail")
+@Table(name="SCH_FLOW_STATISTIC_DETAIL")
+@NamedQuery(name="SchFlowStatisticDetail.findAll", query="SELECT s FROM SchFlowStatisticDetail s")
+public class SchFlowStatisticDetail implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	/** 业务类型,1 直播;2,直播回放; 3.点播;4.已下载视频;5.下载视频) */
+	public static final short BUSINESS_TYPE_LIVE = 1;
+	
+	public static final short BUSINESS_TYPE_REVIEW = 2;
+	
+	public static final short BUSINESS_TYPE_VIDEO = 3;
+	
+	public static final short BUSINESS_TYPE_VIDEO_DOWNLOADED = 4;
+	
+	public static final short BUSINESS_TYPE_VIDEO_DOWNLOAD = 5;
+	
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="DETAIL_ID", unique=true, nullable=false, length=32)
+	private String detailId;
+
+	/**  创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改人  */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	
+	@Column(name="VIDEO_ID",  length=32)
+	private String videoId;
+	
+	@Column(name="LIVE_VIDEO_ID",  length=32)
+	private String liveVideoId;
+	
+	@Column(name="START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+	
+	@Column(name="BUSINESS_TYPE")
+	private short businessType;
+	
+	@Column(name="VIDEO_START_TIME")
+	private Integer videoStartTime ;
+	
+	@Column(name="VIDEO_END_TIME")
+	private Integer videoEndTime ;
+	
+	@Column(name="DEFINITION")
+	private String definition;
+	
+	@Column(name="TOP_ORG_ID",  length=32)
+	private String topOrgId;
+	
+	@Column(name="ORG_CODE",  length=64)
+	private String orgCode;
+	
+	@Column(name="ORG_ID",  length=32)
+	private String orgId;
+	
+	@Column(name="CLASS_ID",  length=32)
+	private String classId;
+	
+	@Column(name="USER_ID",  length=32)
+	private String userId;
+	
+	@Column(name="PLATFORM")
+	private String platform;
+
+	/**
+	 * @return the flowId
+	 */
+	public String getDetailId() {
+		return detailId;
+	}
+
+	/**
+	 * @param flowId the flowId to set
+	 */
+	public void setDetailId(String detailId) {
+		this.detailId = detailId;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	/**
+	 * @return the videoId
+	 */
+	public String getVideoId() {
+		return videoId;
+	}
+
+	/**
+	 * @param videoId the videoId to set
+	 */
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	/**
+	 * @return the liveVideoId
+	 */
+	public String getLiveVideoId() {
+		return liveVideoId;
+	}
+
+	/**
+	 * @param liveVideoId the liveVideoId to set
+	 */
+	public void setLiveVideoId(String liveVideoId) {
+		this.liveVideoId = liveVideoId;
+	}
+
+	/**
+	 * @return the startTime
+	 */
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	/**
+	 * @param startTime the startTime to set
+	 */
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	/**
+	 * @return the endTime
+	 */
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	/**
+	 * @param endTime the endTime to set
+	 */
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	/**
+	 * @return the businessType
+	 */
+	public short getBusinessType() {
+		return businessType;
+	}
+
+	/**
+	 * @param businessType the businessType to set
+	 */
+	public void setBusinessType(short businessType) {
+		this.businessType = businessType;
+	}
+
+	/**
+	 * @return the videoStartTime
+	 */
+	public Integer getVideoStartTime() {
+		return videoStartTime;
+	}
+
+	/**
+	 * @param videoStartTime the videoStartTime to set
+	 */
+	public void setVideoStartTime(Integer videoStartTime) {
+		this.videoStartTime = videoStartTime;
+	}
+
+	/**
+	 * @return the videoEndTime
+	 */
+	public Integer getVideoEndTime() {
+		return videoEndTime;
+	}
+
+	/**
+	 * @param videoEndTime the videoEndTime to set
+	 */
+	public void setVideoEndTime(Integer videoEndTime) {
+		this.videoEndTime = videoEndTime;
+	}
+
+	/**
+	 * @return the definition
+	 */
+	public String getDefinition() {
+		return definition;
+	}
+
+	/**
+	 * @param definition the definition to set
+	 */
+	public void setDefinition(String definition) {
+		this.definition = definition;
+	}
+
+	/**
+	 * @return the topOrgId
+	 */
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	/**
+	 * @param topOrgId the topOrgId to set
+	 */
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the classId
+	 */
+	public String getClassId() {
+		return classId;
+	}
+
+	/**
+	 * @param classId the classId to set
+	 */
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	/**
+	 * @return the userId
+	 */
+	public String getUserId() {
+		return userId;
+	}
+
+	/**
+	 * @param userId the userId to set
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	/**
+	 * @return the platform
+	 */
+	public String getPlatform() {
+		return platform;
+	}
+
+	/**
+	 * @param platform the platform to set
+	 */
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	/**
+	 * @return the orgCode
+	 */
+	public String getOrgCode() {
+		return orgCode;
+	}
+
+	/**
+	 * @param orgCode the orgCode to set
+	 */
+	public void setOrgCode(String orgCode) {
+		this.orgCode = orgCode;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java b/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
new file mode 100644
index 0000000..e808ef6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
@@ -0,0 +1,132 @@
+package com.qxueyou.scc.stucontroller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.util.ClientUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+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.exercise.service.IExerciseInfoService;
+import com.qxueyou.scc.operation.topic.service.ITopicService;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+import com.qxueyou.scc.user.service.IUserService;
+
+import io.swagger.annotations.ApiOperation;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 首页前端控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@RestController
+@RequestMapping(value = "/stu/homepage")
+public class HomePageController {
+
+	@Autowired
+	IClassService classService;
+
+	@Autowired
+	IUserService userService;
+
+	@Autowired
+	IClassLectureService classLectureService;
+
+	@Autowired
+	ISubjectService subjectService;
+
+	@Autowired
+	ITopicService topicService;
+
+	@Autowired
+	IExerciseInfoService exerciseInfoService;
+
+	/**
+	 * 首页获取我的上次学习
+	 */
+	@ApiOperation(value = "首页获取我的上次学习")
+	@GetMapping(value = "getLastStudied")
+	public Result getLastSubject(String subjectId, HttpServletRequest request) {
+		Object userId = request.getSession().getAttribute("userId");
+		System.out.println(userId);
+		return subjectService.lastStudied(String.valueOf(userId));
+	}
+
+	/**
+	 * 首页获取班级列表
+	 * 
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * 
+	 */
+	@GetMapping(value = "getClassLst")
+	public Result getClassLst(Integer limit, Integer pageNum) {
+
+		if (userService.isAdmin()) {// 如果为管理员则获取所有班级列表
+			return classService.getAllClassLst();
+		}
+		if (userService.isTeacher()) {
+			List<ClsClass> classes = classService.getClassLstByTeacherId();
+			return new Result(true, "success", CollectionUtils.newObjectMap("classLst",
+
+					QBeanUtils
+							.listBean2ListMap(classes,
+									CollectionUtils.newStringMap("name", "className", "teacherId", "teacherName",
+											"classNumber", "classNumber", "classId", "classId")),
+					"classCount", classes.size()));
+		}
+		
+		List<ClsClass> classes = classService.listMyClass();
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("classLst",
+
+				QBeanUtils
+						.listBean2ListMap(classes,
+								CollectionUtils.newStringMap("name", "className", "teacherId", "teacherName",
+										"classNumber", "classNumber", "classId", "classId")),
+				"classCount", classes.size()));
+	}
+
+	/**
+	 * 首页获取课程列表
+	 */
+	@GetMapping(value = "lstSubjectDetail")
+	public Result subjectDetailLst(HttpServletRequest request){
+		Object userId = request.getSession().getAttribute("userId");
+		return subjectService.lstSubjectDetail(String.valueOf(userId));
+	}
+
+	/**
+	 * 获取首页数据排行
+	 * 
+	 * 
+	 * @param subjectId
+	 */
+	@GetMapping(value = "getDataDesc")
+	public Result getDataDesc(String classId, String subjectId) {
+		return subjectService.getDataDesc(classId, subjectId);
+	}
+
+	/**
+	 * 获取当前学员的课程列表
+	 */
+	@GetMapping(value = "getMySubjectLst")
+	public Result getMySubjectLst() {
+		List<Map<String, Object>> mySubjectList = subjectService.getMySubjectList();
+		return new Result(true, "success", mySubjectList);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java
new file mode 100644
index 0000000..57e7d9a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java
@@ -0,0 +1,126 @@
+package com.qxueyou.scc.stucontroller;
+
+import java.util.Date;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+/**
+ * 学习端 考试前端控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@RestController
+@RequestMapping(value = "/stu/exam")
+public class StuExamController {
+	/**
+	 * 获取考试列表
+	 * 
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @param classId
+	 *            班级id
+	 * 
+	 * @return percent(状态说明:0,草稿。1,待完成。2,已完成。3,逾期未交)
+	 */
+	@GetMapping(value = "getExamLst")
+	public Result getExamLst(Integer limit, Integer pageNum, String classId) {
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("examLst",
+				CollectionUtils.newList(
+						CollectionUtils.newObjectMap("examId", "11111", "examName", "虚拟现实技术入门体检与制作1", "percent", 0,
+								"startTime", new Date(), "endTime", new Date(), "score", 30),
+						CollectionUtils.newObjectMap("examId", "2222", "examName", "虚拟现实技术入门体检与制作2", "percent", 1,
+								"startTime", new Date(), "endTime", new Date(), "score", 30),
+						CollectionUtils.newObjectMap("examId", "3333", "examName", "虚拟现实技术入门体检与制作3", "percent", 2,
+								"startTime", new Date(), "endTime", new Date(), "score", 30),
+						CollectionUtils.newObjectMap("examId", "4444", "examName", "虚拟现实技术入门体检与制作4", "percent", 3,
+								"startTime", new Date(), "endTime", new Date(), "score", 30)),
+				"examCount", 4));
+	}
+
+	/**
+	 * 获取考试详情
+	 * 
+	 * @param examId
+	 *            考试id
+	 * 
+	 * 
+	 * 
+	 */
+	@GetMapping(value = "getExamDetail")
+	public Result getExamDetail(String examId) {
+		Map<String, Object> typeOne = CollectionUtils.newObjectMap("type", 1, "count", 3);
+		Map<String, Object> typeTwo = CollectionUtils.newObjectMap("type", 2, "count", 3);
+		Map<String, Object> typeThree = CollectionUtils.newObjectMap("type", 3, "count", 3);
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("examName", "虚拟现实技术入门基础考试", "subjectName", "物流",
+				"duration", 30, "maxLateMin", "", "showType", 1, "showScore", 1, "startTime", new Date(), "endTime",
+				new Date(), "totalScore", 100, "paperType", 1, "shouScoreDays", "", "difficultLevel", 5, "passingScore",
+				60, "questionTypes", CollectionUtils.newList(typeOne, typeTwo, typeThree), "percent", 0, "goal", 88));
+	}
+
+	/**
+	 * 开始考试获取考试题目
+	 */
+	@GetMapping(value = "getExamItems")
+	public Result getItems(String examId) {
+		Map<String, Object> optionA = CollectionUtils.newObjectMap("optionId", 1111, "content", "体检VR眼睛的参数功能,形成报告A",
+				"optionOrder", "A", "imgPath", "/web/path", "check", false);
+		Map<String, Object> optionB = CollectionUtils.newObjectMap("optionId", 2222, "content", "体检VR眼睛的参数功能,形成报告B",
+				"optionOrder", "B", "imgPath", "/web/path", "check", false);
+		Map<String, Object> optionC = CollectionUtils.newObjectMap("optionId", 3333, "content", "体检VR眼睛的参数功能,形成报告C",
+				"optionOrder", "C", "imgPath", "/web/path", "check", false);
+		Map<String, Object> optionD = CollectionUtils.newObjectMap("optionId", 4444, "content", "体检VR眼睛的参数功能,形成报告D",
+				"optionOrder", "D", "imgPath", "/web/path", "check", false);
+		// 判断题
+		Map<String, Object> checkoptionA = CollectionUtils.newObjectMap("optionId", 5555, "content", "李白是李白他爸爸生的",
+				"optionOrder", false, "imgPath", "/web/path", "check", false);
+		Map<String, Object> checkoptionB = CollectionUtils.newObjectMap("optionId", 6666, "content", "李白是李白他妈妈生的",
+				"optionOrder", true, "imgPath", "/web/path", "check", false);
+
+		// 显示题目 列表;
+		Map<String, Object> two = CollectionUtils.newObjectMap("socre", 5, "exerciseId", "11111", "title", "这是多选题",
+				"type", 2, "options", CollectionUtils.newList(optionA, optionB, optionC, optionD), "answer", "A,B",
+				"analisis", "这是答案解析", "isRight", true);
+		Map<String, Object> one = CollectionUtils.newObjectMap("socre", 6, "exerciseId", "22222", "title", "这是单选题",
+				"type", 1, "options", CollectionUtils.newList(optionA, optionB, optionC, optionD), "answer", "A",
+				"analisis", "这是答案解析", "isRight", true);
+
+		Map<String, Object> three = CollectionUtils.newObjectMap("socre", 8, "exerciseId", "33333", "title", "这是判断题",
+				"type", 3, "options", CollectionUtils.newList(checkoptionA, checkoptionB), "answer", "A", "analisis",
+				"这是答案解析", "isRight", true);
+		// fileType1 图片; 2 文档 3 视频 4 音频,5 压缩包
+
+		return new Result(true, "success",
+
+				CollectionUtils.newList(
+						CollectionUtils.newObjectMap("examPaperSectionId", "1111", "sectionName", "第一部分", "sectionDesc",
+								"根据题目信息选择正确答案", "itemLst", CollectionUtils.newList(one, two)),
+						CollectionUtils.newObjectMap("examPaperSectionId", "2222", "sectionName", "第二部分", "sectionDesc",
+								"根据题目信息选择正确答案", "itemLst", CollectionUtils.newList(three))));
+
+	}
+
+	/**
+	 * 提交试卷
+	 * 
+	 * @param answerItem
+	 *            [{"exerciseId":"11111","optionId":"4444,2222,3333"},{"exerciseId":"22222","optionId":"2222"},{"exerciseId":"33333","optionId":""}]
+	 * @param status
+	 *            提交状态(1,保存草稿。2,提交作业。)
+	 */
+	@PostMapping(value = "saveExam")
+	public Result saveExam(String examId, String answerItem, Integer durationTime, Integer status) {
+		return new Result(true, "success");
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java
new file mode 100644
index 0000000..5a641bd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java
@@ -0,0 +1,151 @@
+package com.qxueyou.scc.stucontroller;
+
+import java.util.Date;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+/**
+ * 学习端 作业前端控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@RestController
+@RequestMapping(value = "/stu/exercise")
+public class StuExerciseController {
+	/**
+	 * 学习端获取作业列表
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @return type (状态说明: 0,试题。 1,上传。2,写作) percent(状态说明:0,草稿。1,待完成。2,已完成。3,逾期未交)
+	 *         reform(0,重做,1,不重做)
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * 
+	 */
+	@GetMapping(value = "getExerciseInfoLst")
+	public Result getExerciseLst(String classId, Integer limit, Integer pageNum) {
+		Map<String, Object> exerciseOne = CollectionUtils.newObjectMap("exerciseInfoId", "1111", "name",
+				"虚拟现实技术入门体检与制作", "type", 0, "percent", 0, "score", 30, "startTime", new Date(), "endTime", new Date(),
+				"reform", 1);
+		Map<String, Object> exerciseTwo = CollectionUtils.newObjectMap("exerciseInfoId", "2222", "exerciseName",
+				"虚拟货币的前世今生1", "type", 1, "percent", 1, "reform", 0, "score", 30, "startTime", new Date(), "endTime",
+				new Date());
+		Map<String, Object> exerciseThree = CollectionUtils.newObjectMap("exerciseInfoId", "3333", "exerciseName",
+				"虚拟货币的前世今生2", "type", 2, "percent", 2, "reform", 1, "score", 30, "startTime", new Date(), "endTime",
+				new Date());
+		Map<String, Object> exerciseFour = CollectionUtils.newObjectMap("exerciseInfoId", "4444", "exerciseName",
+				"虚拟货币的前世今生3", "type", 2, "percent", 3, "reform", 1, "score", 30, "startTime", new Date(), "endTime",
+				new Date());
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("exerciseInfoLst",
+						CollectionUtils.newList(exerciseOne, exerciseTwo, exerciseThree, exerciseFour),
+						"exerciseInfoCount", 4));
+	}
+
+	/**
+	 * 学习端 提交作业
+	 * 
+	 * @param exerciseInfoId
+	 *            作业id
+	 * @param urlPath
+	 *            上传文件路径(多个以逗号隔开)
+	 * @param desc
+	 *            作业描述
+	 * @param status
+	 *            提交状态(1,保存草稿。2,提交作业。)
+	 * @param answerItem
+	 *            [{"exerciseId":"11111","optionId":"4444,2222,3333"},{"exerciseId":"22222","optionId":"2222"},{"exerciseId":"33333","optionId":""}]
+	 */
+	@PostMapping(value = "saveExerciseInfo")
+	public Result saveExerciseInfo(String exerciseInfoId, String urlPath, String desc, Integer status, String answerItem) {
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 学习端 查看作业
+	 * 
+	 * @param exerciseInfoId
+	 *            作业id
+	 * @return percent (状态说明:0,草稿.1,待完成。2,已完成。) type (状态说明: 0,试卷。 1,上传。2,写作) 做作业
+	 * 
+	 * @param exerciseInfoId
+	 *            作业id
+	 * @param 分数说明
+	 *            totalScore 总分, passing 合格分,goal 得分 (没有数值即为null)commentContent 为评语
+	 */
+	@GetMapping(value = "getHomeworkDetail")
+	public Result getHomewordDetail(String exerciseInfoId) {
+		Map<String, Object> typeOne = CollectionUtils.newObjectMap("type", 1, "count", 3);
+		Map<String, Object> typeTwo = CollectionUtils.newObjectMap("type", 2, "count", 3);
+		Map<String, Object> typeThree = CollectionUtils.newObjectMap("type", 3, "count", 3);
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("subjectName", "物流", "requireDesc", "请自行完成作答,勿翻看书本。", "startTime",
+						new Date(), "endTime", new Date(), "totalScore", 100, "passingScore", 60, "questionTypes",
+						CollectionUtils.newList(typeOne, typeTwo, typeThree), "exerciseName", "虚拟现实技术入门体验与制作",
+						"percent", 0, "type", 0, "itemCount", 3, "teacherName", "李老师", "goal", 97, "commentContent",
+						"老师说,你真有才"));
+	}
+
+	/**
+	 * 作业获取题目列表
+	 * 
+	 * @param exerciseInfoId
+	 *            作业id
+	 * @param type
+	 *            type (状态说明: 0,试卷。 1,上传。2,写作) 做作业
+	 */
+	@GetMapping(value = "getItemLst")
+	public Result getItemLst(String exerciseInfoId, Integer type) {
+		// 判断type 如果为写作和上传类型的话 itemList 就为null; 如果为试卷类型 title 和 score filetype 为 null
+		// optionList选择题
+		Map<String, Object> optionA = CollectionUtils.newObjectMap("optionId", "1111", "content", "体检VR眼睛的参数功能,形成报告A",
+				"optionOrder", "A", "imgPath", "/web/path", "check", false);
+		Map<String, Object> optionB = CollectionUtils.newObjectMap("optionId", "2222", "content", "体检VR眼睛的参数功能,形成报告B",
+				"optionOrder", "B", "imgPath", "/web/path", "check", false);
+		Map<String, Object> optionC = CollectionUtils.newObjectMap("optionId", "3333", "content", "体检VR眼睛的参数功能,形成报告C",
+				"optionOrder", "C", "imgPath", "/web/path", "check", false);
+		Map<String, Object> optionD = CollectionUtils.newObjectMap("optionId", "4444", "content", "体检VR眼睛的参数功能,形成报告D",
+				"optionOrder", "D", "imgPath", "/web/path", "check", true);
+		// 判断题
+		Map<String, Object> checkoptionA = CollectionUtils.newObjectMap("optionId", "5555", "content", "李白是李白他爸爸生的",
+				"optionOrder", false, "imgPath", "/web/path", "check", false);
+		Map<String, Object> checkoptionB = CollectionUtils.newObjectMap("optionId", "6666", "content", "李白是李白他妈妈生的",
+				"optionOrder", true, "imgPath", "/web/path", "check", false);
+
+		// 显示题目 列表;
+		Map<String, Object> two = CollectionUtils.newObjectMap("socre", 5, "exerciseId", "11111", "title", "这是多选题",
+				"type", 2, "options", CollectionUtils.newList(optionA, optionB, optionC, optionD), "answer", "A,B",
+				"analisis", "这是答案解析", "isRight", true);
+		Map<String, Object> one = CollectionUtils.newObjectMap("socre", 6, "exerciseId", "22222", "title", "这是单选题",
+				"type", 1, "options", CollectionUtils.newList(optionA, optionB, optionC, optionD), "answer", "A",
+				"analisis", "这是答案解析", "isRight", false);
+
+		Map<String, Object> three = CollectionUtils.newObjectMap("socre", 8, "exerciseId", "33333", "title", "这是判断题",
+				"type", 3, "options", CollectionUtils.newList(checkoptionA, checkoptionB), "answer", true, "analisis",
+				"这是答案解析", "isRight", true);
+		// fileType1 图片; 2 文档 3 视频 4 音频,5 压缩包
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("itemDetail",
+						CollectionUtils.newObjectMap("title", "拍摄一个关于VR的科普视频", "desc", "学生之前写的内容", "fileLst",
+								CollectionUtils.newList(
+										CollectionUtils.newObjectMap("fileName", "文件1", "fileId", "1111", "coverUrl",
+												"static/img/img.jpg"),
+										CollectionUtils.newObjectMap("fileName", "文件2", "fileId", "2222", "coverUrl",
+												"static/img/img.jpg")),
+								"filetype", 3),
+						"itemList", CollectionUtils.newList(one, two, three)));
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
new file mode 100644
index 0000000..58aa137
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
@@ -0,0 +1,136 @@
+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 org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.teach.live.dao.MediaLiveDAO;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.qxueyou.scc.teach.live.service.IMediaLiveService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags="直播接口-学员端")
+@RestController
+@RequestMapping(value = "/stu/live")
+public class StuLiveController {
+	
+	@Autowired
+	IClassService classService;
+	
+	@Autowired
+	IMediaLiveService liveService;
+	
+	@Autowired
+	MediaLiveDAO dao;
+	
+	private final static short[] PUBLIC_LIVE_STATUS = new short[] {
+			MediaVideoLive.STATUS_LIVE_LIVE,MediaVideoLive.STATUS_LIVE_PAUSE,
+			MediaVideoLive.STATUS_LIVE_STOP,MediaVideoLive.STATUS_LIVE_REVIEW
+	};
+	
+	/**
+	 * 获取直播列表
+	 * @param classId 班级id
+	 * @return
+	 */
+	@ApiOperation(value = "获取直播列表", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "status", value = "直播状态(2正在直播,5直播中的暂停状态,9停止直播,3回放)", required = true, paramType="query", dataType = "String"),
+    })
+	@GetMapping(value = "list")
+	public Result list(String classId, Short status) {
+		short[] _status = null;
+		if(status == null || status == 0) {
+			_status = PUBLIC_LIVE_STATUS;
+		}else {
+			_status = new short[]{status};
+		}
+		
+		List<String> liveIds = getLiveIdLst(StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId);
+
+		List<MediaVideoLive> lives = liveService.readByStatus(liveIds,_status);
+		
+		List<Map<String,Object>> lst =QBeanUtils.listBean2ListMap(lives, CollectionUtils.newStringMap(
+				"creator","creator",
+				"startTime","startTime",
+				"endTime","endTime",
+				"updateTime","lastUpdateTime",
+				"videoLiveId","videoLiveId",
+				"name","name",
+				"status","status",
+				"hlsPullUrl","hlsPullUrl",
+				"previewImgUrl","imgPath"
+				));
+		
+		//添加聊天室id
+		if(lst!=null && lst.size()>0){
+			for(Map<String,Object> map:lst) {
+				map.put("chatroomId", dao.getChatRoomId((String)map.get("videoLiveId")));
+			}	
+		}
+		
+		return new Result(true, "success", CollectionUtils.newObjectMap("liveCount", lst==null?0:lst.size(), "liveLst",lst));
+	}
+
+	/**
+	 * 获取直播id
+	 * @param classId
+	 * @return
+	 */
+	private List<String> getLiveIdLst(String classId) {
+		List<String> liveIds = new ArrayList<String>(5);
+
+		//获取班级列表及班级所在直播列表
+		if(StringUtils.isNotEmpty(classId)) {
+			liveIds = dao.getClassLives(classId);
+		}else { //查询学员所在的全部班级
+			List<ClsClass> clsLst = classService.listMyClass();
+			Set<String> ids = new HashSet<String>();
+			for(ClsClass cls:clsLst) {
+				ids.addAll(dao.getClassLives(cls.getClassId()));
+			}
+			liveIds.addAll(ids);
+		}
+		return liveIds;
+	}
+	
+	/**
+	 * 查看直播明细
+	 * @param liveId 直播id
+	 * @return
+	 */
+	@GetMapping(value = "view")
+	public Result view(String liveId) {
+			
+		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()
+				));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java
new file mode 100644
index 0000000..2922ce7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java
@@ -0,0 +1,140 @@
+package com.qxueyou.scc.stucontroller;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.notice.dao.NoticeDAO;
+import com.qxueyou.scc.admin.notice.service.INoticeService;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.notice.model.Notice;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Api(tags = "公告接口-学员端")
+@RestController
+@RequestMapping(value = "/stu/notice")
+public class StuNoticeController {
+
+    @Autowired
+    IClassService classService;
+
+    @Autowired
+    INoticeService noticeService;
+
+    @Autowired
+    NoticeDAO dao;
+
+    /**
+     * @param pageNum
+     * @param pageSize
+     * @param classId
+     * @return
+     */
+    @ApiOperation(value = "公告列表", notes = "获取班级列表及班级所在公告列表")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String")
+    })
+    @GetMapping(value = "list")
+    public Result list(Integer pageNum, Integer pageSize, String classId) {
+
+        //获取班级列表及班级所在通知列表
+        List<String> noticeIds = dao.getClassNotices(StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId);
+        List<Notice> notices = noticeService.readByStatus(noticeIds, Notice.STATUS_ISSUED);
+
+        List<Map<String, Object>> lst = QBeanUtils.listBean2ListMap(notices, CollectionUtils.newStringMap(
+                "noticeId", "noticeId",
+                "title", "name",
+                "creator", "creator",
+                "noticeTypeName", "type",
+                "issuedTime", "releaseTime"
+        ));
+
+        if(lst!=null && lst.size()>0){
+        	for (Map<String, Object> map : lst) {
+                map.put("isView", dao.isView((String) map.get("noticeId"), ClientUtils.getUserId()));
+            }
+        }
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("noticeCount", lst==null?0:lst.size(), "noticeLst", lst
+        ));
+    }
+
+    /**
+     * 获取未读消息总数
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取未读消息总数")
+    @GetMapping(value = "getCountToView")
+    public Result getCountToView() {
+
+        //获取班级列表及班级所在通知列表
+        List<ClsClass> clsLst = classService.listMyClass();
+        Set<String> noticeIdLst = new HashSet<String>(10);
+
+        for (ClsClass cls : clsLst) {
+            noticeIdLst.addAll(dao.getClassNotices(cls.getClassId()));
+        }
+
+        int total = 0;
+        for (Notice notice : noticeService.readByStatus(noticeIdLst, Notice.STATUS_ISSUED)) {
+            System.out.println(ClientUtils.getUserId());
+            total += dao.isView(notice.getNoticeId(), ClientUtils.getUserId()) ? 0 : 1;
+        }
+
+        return new Result(true, "success", total);
+    }
+
+    /**
+     * 获取通知详情
+     *
+     * @param noticeId
+     * @return
+     */
+    @ApiOperation(value = "获取公告详情")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType="query", dataType = "String")
+    })
+    @GetMapping(value = "detail")
+    public Result detail(String noticeId) {
+        Notice notice = noticeService.read(noticeId);
+        dao.addReadCount(noticeId, ClientUtils.getUserId());//记录学员已读通知的人数;
+        return new Result(true, "success",
+                CollectionUtils.newObjectMap(
+                        "noticeName", notice.getTitle(),
+                        "type", notice.getNoticeTypeName(),
+                        "createTime", notice.getCreateTime(),
+                        "remark", notice.getContent(),
+                        "fullPath", notice.getImgPath(),
+                        "creator", notice.getCreator()
+                ));
+    }
+
+    @ApiOperation(value = "更新公告查看次数", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType = "query", dataType = "String")
+	})
+    @GetMapping(value = "view")
+    public Result view(String noticeId) {
+        dao.view(noticeId, ClientUtils.getUserId());
+        return Result.SUCCESS;
+    }
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuResController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuResController.java
new file mode 100644
index 0000000..8b92ed9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuResController.java
@@ -0,0 +1,82 @@
+package com.qxueyou.scc.stucontroller;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+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.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResLib;
+import com.qxueyou.scc.teach.res.service.IResService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 学习端 资源控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@Api(tags= "课件接口-学员端")
+@RestController
+@RequestMapping(value = "/stu/res")
+public class StuResController {
+	
+	@Autowired
+	IResService resService;
+	
+	/**
+	 * 获取资源列表
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 */
+	@ApiOperation(value = "获取资源列表", notes = "")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "getResLst")
+	public Result getResLst(String classId, Integer limit, Integer pageNum) {
+
+		List<Res> resLst = resService.listResByLib(ResLib.OWNNER_TYPE_CLASS, classId, "", limit, pageNum, "");
+		System.out.println(resLst);
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("resCount",
+						resService.listResCountByLib(ResLib.OWNNER_TYPE_CLASS, classId, "", ""), "resLst",
+						QBeanUtils.listBean2ListMap(resLst, CollectionUtils.newStringMap("resId", "resId", "name",
+								"resName", "type", "type", "updateTime", "endTime", "updateTime", "updateTime"))
+
+				));
+	}
+
+	/**
+	 * 资源管理查看
+	 * 
+	 * @param resId
+	 *            资源id ( 0,视频。1,音频。2,文档。3,练习)
+	 */
+	@GetMapping(value = "getResDetail")
+	public Result getResDetail(String resId) {
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("resName", "练习.jpg", "size", 590.68,
+				"updateTime", new Date(), "endTime", new Date(), "urlPath", "/web/path", "type", 3));
+	}
+	
+	/**
+	 * 
+	 */
+
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
new file mode 100644
index 0000000..379c8a1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
@@ -0,0 +1,467 @@
+package com.qxueyou.scc.stucontroller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.user.model.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.web.bind.annotation.*;
+
+import com.alibaba.druid.util.StringUtils;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.progress.dao.ProgressDAO;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.CommonUtils;
+import com.qxueyou.scc.base.util.QBeanUtils;
+import com.qxueyou.scc.evaluate.service.IEvaluateService;
+import com.qxueyou.scc.operation.topic.service.ITopicService;
+import com.qxueyou.scc.teach.res.service.IResAudioService;
+import com.qxueyou.scc.teach.subject.model.view.LectureAudioV;
+import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
+import com.qxueyou.scc.teach.subject.model.view.MySubjectV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 学习端 课程前端控制器
+ * 
+ * @author chenjunliang
+ *
+ */
+@Api(tags= "课程管理-学员端")
+@RestController
+@CrossOrigin(origins="*",maxAge=3600)
+@RequestMapping(value = "stu/subject")
+public class StuSubjectController {
+
+	@Autowired
+	ISubjectService subjectService;
+
+	@Autowired
+	ILectureService lectureService;
+
+	@Autowired
+	IClassLectureService clsLectureService;
+
+	@Autowired
+	IResAudioService audioService;
+
+	@Autowired
+	ProgressDAO progressDao;
+	
+	@Autowired
+	ITopicService topicService;
+	
+	@Autowired
+	IEvaluateService evaluateService;
+	
+	//--------------------------------------------------------------app端接口---------------------------------------------------------------------------------------------------
+	/**
+	 * 学习端获取 所有课件
+	 * 
+	 * @param classId
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@ApiOperation(value = "获取班级所有课件-学习端", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/getCoursewareLstByClassId")
+	public Result appCoursewareLst(String classId, @RequestParam(defaultValue="desc")String sort, Pager pager) {
+		System.out.println(classId);
+		return clsLectureService.listSubjectLecture(CommonUtils.getClassId(classId), sort, pager);
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "学习端获取课程学年列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/termList")
+	public Result termList(String classId) {
+		classId = CommonUtils.getClassId(classId);
+		if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id不能为空");
+    	}
+		//课程
+		List<Map<String, Object>> lstSubject = subjectService.clsSubjectlist(classId, null, null);
+		//组装的学期和课程
+		List<Map<String, Object>> lstTerm = subjectService.termSubjectList(classId, lstSubject);
+		
+		return new Result(true, "success",CollectionUtils.newObjectMap("termList", lstTerm, "allSubject", lstSubject));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "我的课程按学期分类")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/myTermSubjectList")
+	public Result myTermSubjectList(String classId) {
+		classId = CommonUtils.getClassId(classId);
+		System.out.println("vvvvvvvvv"+classId);
+		if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id不能为空");
+    	}
+		return new Result(true, "success",subjectService.myTermSubjectList(classId));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "我的课程按时间排序")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/mySubjectList")
+	public Result mySubjectList(String classId, Pager pager ) {
+//		System.out.println("0.0.0.0"+classId);
+		classId = CommonUtils.getClassId(classId);
+		long count = subjectService.myClsSubjectCount(classId);
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("count", count, "listData", subjectService.mySubjectList(classId, pager)));
+	}
+	
+	/**
+	 * 我的课程详情
+	 * 
+	 * @param subjectId
+	 * @param classId
+	 * @return
+	 */
+	@ApiOperation(value = "我的课程详情")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/mySubjectInfo")
+	public Result mySubjectInfo(String subjectId, String classId) {
+		classId = CommonUtils.getClassId(classId);
+		if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id不能为空");
+    	}
+		if(StringUtils.isEmpty(subjectId)) {
+    		return new Result(false, "课程id不能为空");
+    	}
+		return new Result(true, "success", subjectService.mySubjectInfo(subjectId, classId));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "我的班级信息")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/myClassInfo")
+	public Result myClassInfo(String classId) {
+		classId = ClientUtils.getClassId();
+		if(StringUtils.isEmpty(classId)) {
+    		return new Result(false, "班级id不能为空");
+    	}
+		return new Result(true, "success",subjectService.myClassInfo(classId));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "学习端获取课程列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "schoolYear", value = "学年", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "term", value = "学期", required = true, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "/app/subjectList")
+	public Result subjectList(String classId, Integer schoolYear, Integer term) {
+		return new Result(true, "success",subjectService.clsSubjectlist(CommonUtils.getClassId(classId), schoolYear, term));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "学习端获取课程下课件,按创建时间排序")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "/app/listLectureBySubject")
+	public Result listLectureBySubject(String subjectId, String classId, @RequestParam(defaultValue="desc")String sort, Pager pager) {
+		return new Result(true, "success",clsLectureService.listLectureBySubjectOrderCreateTime(subjectId, CommonUtils.getClassId(classId), sort, pager));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取其他课件统计
+	 * 
+	 */
+	@ApiOperation(value = "学习端获取其他课件统计")
+	@GetMapping(value = "/app/otherLectureCount")
+	public Result otherLectureCount() {
+		return new Result(true, "success", CollectionUtils.newObjectMap("topicCount",
+				topicService.getClassTopicCount(ClientUtils.getClassId()), "evaluate", this.evaluateService.queryStuEvaluateCount()));
+	}
+	
+	/**
+	 * 
+	 * 学习端获取课程列表
+	 * 
+	 */
+	@ApiOperation(value = "学习端获取课程下课件,按目录分类", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String")
+    })
+	@GetMapping(value = "/app/coursewareList")
+	public Result coursewareList(String classId,String subjectId, String type) {
+		classId = CommonUtils.getClassId(classId);
+		
+		if(StringUtils.isEmpty(subjectId)) {
+			return new Result(false, "课程id不能为空");
+		}
+		
+		return this.clsLectureService.coursewareChapterList(classId, subjectId, type);
+	
+	}
+	
+	 /**
+     * 我的公开课列表
+     * 
+    */
+    @ApiOperation(value = "我的公开课列表", notes = "")
+   	@GetMapping(value = "/app/myOpenSubjectList")
+   	public Result myOpenSubjectList(Pager pager, @RequestParam(defaultValue = "")String keyword) {
+	   	return new Result(true, "success", this.subjectService.myOpenSubjectList(pager.getOffset(), pager.getPageSize(), keyword));
+   	}
+    
+    /**
+     * 公开课列表
+     * 
+    */
+    @ApiOperation(value = "公开课列表", notes = "")
+   	@GetMapping(value = "/app/openSubjectList")
+   	public Result openSubjectList(Pager pager, @RequestParam(defaultValue = "")String keyword) {
+	   	return new Result(true, "success", this.subjectService.openSubjectList(pager.getOffset(), pager.getPageSize(), keyword));
+   	}
+    
+    /**
+     * 公开课详情
+     * 
+     */
+    @ApiOperation(value = "公开课详情", notes = "")
+   	@GetMapping(value = "/app/openSubjectInfo")
+   	public Result openSubjectInfo(@RequestParam(defaultValue = "")String subjectId) {
+	   	return new Result(true, "success", this.subjectService.openSubjectInfo(subjectId));
+   	}
+	
+	//--------------------------------------------------------后台端接口---------------------------------------------------------------------------------------------------
+
+	/**
+	 * 加载课件tree
+	 */
+	@ApiOperation(value = "加载课件tree", notes = "")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "categoryTree")
+	public Result categoryTree(String subjectId, String parentId) {
+//		classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId;
+		List<SubjectProgressTreeV> chapterLst = clsLectureService.getChapterTreeVList(subjectId, parentId);
+
+		for (SubjectProgressTreeV v : chapterLst) {
+			v.setNodeName(v.getNodeName() + "(" + String.format("%.2f", v.getPercent()*100) + "%)"); //保留两位小数
+		}
+		
+		return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst, CollectionUtils
+				.newStringMap("nodeName", "name", "id.nodeId", "id", "parentId", "parentId", "percent", "percent")));
+	}
+	
+	/**
+	 * 学习端获取 所有课件
+	 * 
+	 * @param classId
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@ApiOperation(value = "学习端获取 所有课件", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "getCoursewareLstByClassId")
+	public Result getCoursewareLst(String subjectId) {
+		List<ClsSubjectLecture> lectureLst = clsLectureService.listLecture(subjectId);
+
+		// id为小节id //返回的数据按照tree的小节排序
+		return new Result(true, "success",
+
+				QBeanUtils.listBean2ListMap(lectureLst, CollectionUtils.newStringMap("name", "name", "lectureId", "id",
+						"lectureType", "type", "chapterId", "chapterId")));
+	}
+
+	/**
+	 * 获取课件列表
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param type
+	 *            课件类型
+	 * @param keyword
+	 *            搜索关键字
+	 * @param limit
+	 *            每页显示几条
+	 * @param pageNum
+	 *            页码
+	 * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
+	 */
+	@ApiOperation(value = "根据章节获取课件列表", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "chapterId", value = "章节id", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "coursewareListByChapterId")
+	public Result coursewareList(String chapterId, String type, String keyword, Integer limit, @RequestParam(defaultValue="1")Integer pageNum) {
+
+		List<MyLectureV> lectures = clsLectureService.listLectureV(ClientUtils.getUserId(), chapterId, keyword, limit,
+				pageNum, type);
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("coursewareLst",
+						QBeanUtils.listBean2ListMap(lectures,
+								CollectionUtils.newStringMap("lectureName", "name", "id.lectureId", "id", "lectureType",
+										"type", "lectureUpdateTime", "endUpdateTime", "percent", "percent"))));
+
+	}
+
+	/**
+	 * 课件学习进度提交 stu/subject/study
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param from
+	 *            开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数
+	 * @param to
+	 *            结束学习位置,同to
+	 */
+	@ApiOperation(value = "提交学习进度")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "from", value = "开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数", required = true, paramType="query", dataType = "Double"),
+		@ApiImplicitParam(name = "to", value = "结束学习位置,同to", required = true, paramType="query", dataType = "Double"),
+		@ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "lectureParentId", value = "父课件id", required = false, paramType="query", dataType = "String"),
+	})
+	@GetMapping(value = "study")
+	public Result study(String lectureId, @RequestParam(defaultValue = "1") Double from,
+			@RequestParam(defaultValue = "0") Double to, String subjectId, String classId, String lectureParentId) {
+		String userId = ClientUtils.getUserId();
+		classId = CommonUtils.getClassId(classId);
+		progressDao.putStudyById(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员每个课程的学习位置;
+		progressDao.putStudyByUserId(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员上次学习的位置;
+		return clsLectureService.doStudy(lectureId, from, to);
+	}
+
+	/**
+	 * 音频时长提交 stu/subject/submitAudioDuration
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param seconds
+	 *            时长
+	 */
+	@ApiOperation(value = "音频时长提交")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "seconds", value = "时长", required = true, paramType="query", dataType = "Double")
+	})
+	@CacheEvict(value = "LectureAudioV", key = "#lectureId")
+	@GetMapping(value = "submitAudioDuration")
+	public Result submitAudioDuration(String lectureId, double seconds) {
+
+		LectureAudioV audio = lectureService.readAudioLecture(lectureId);
+
+		return audioService.updateDuration(audio.getAudioId(), (int) seconds);
+
+	}
+
+	/**
+	 * 课程列表
+	 * 
+	 * @param clssId
+	 *            班级id
+	 * @param startTime
+	 *            开班时间
+	 */
+	@ApiOperation(value = "课程列表")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
+		@ApiImplicitParam(name = "startTime", value = "开班时间", required = false, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "getSubjectLst")
+	public Result getList(String classId, String startTime, Integer limit, @RequestParam(defaultValue="1")Integer pageNum, HttpServletRequest request) {
+//		System.out.println("用户id"+request.getSession().getAttribute("userId"));
+		Object userId = request.getSession().getAttribute("userId");
+		classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId;
+		List<MySubjectV> result = subjectService.listMySubjectV(classId,String.valueOf(userId));
+		return new Result(true, "success",
+				QBeanUtils.listBean2ListMap(result,
+						CollectionUtils.newStringMap("id.subjectId", "subjectId", "id.classId", "classId",
+								"subjectName", "subjectName,coursewareName", "percent", "percent", "progressValue",
+								"studyTime", "coverPageUrl", "coverPageUrl")));
+
+	}
+
+	/**
+	 * 进入课程
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 */
+	@ApiOperation(value = "课程详情")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String")
+	})
+	@GetMapping(value = "getSubjectDetail")
+	public Result getSubjectDetail(String subjectId) {
+		MySubjectV subject = subjectService.getMy1stSubjectVById(subjectId);
+
+		List<Map<String, Object>> progressLst = subjectService.listChapterStudyProgress(subjectId);
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("subject", QBeanUtils.bean2Map(subject,
+						CollectionUtils.newStringMap("subjectName", "subjectName", "id.subjectId", "subjectId",
+								"progressValue", "studyTime", "percent", "percent", "coverPageUrl", "coverPageUrl")),
+						"chapterLst",progressLst));
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/action/ImgController.java b/src/main/java/com/qxueyou/scc/sys/action/ImgController.java
new file mode 100644
index 0000000..b70e00e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/action/ImgController.java
@@ -0,0 +1,208 @@
+package com.qxueyou.scc.sys.action;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.classroom.model.ClassRoom;
+import com.qxueyou.scc.admin.classroom.service.IClassRoomService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.util.*;
+import com.qxueyou.scc.exam.model.ExamBatchInfo;
+import com.qxueyou.scc.exam.model.ExamInfo;
+import com.qxueyou.scc.exam.model.ExamResultV;
+import com.qxueyou.scc.exam.service.IExamBatchService;
+import com.qxueyou.scc.exam.service.IExamService;
+import com.qxueyou.scc.sys.utils.DrawingUtil;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.student.service.IStudentService;
+import com.qxueyou.scc.user.service.IUserService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author luodong
+ * @version 1.0
+ * @date 2020/5/25 15:01
+ */
+@Controller
+@RequestMapping(value = "/certImage")
+public class ImgController {
+
+	@Autowired
+	IStudentService studentService;
+
+
+	@Autowired
+	private CommonDAO commonDAO;
+
+	@Autowired
+	IUserService userService;
+
+	@Autowired
+	IClassService classService;
+
+	@Autowired
+	IExamService examService;
+
+	@Autowired
+	IExamBatchService examBatchService;
+
+	@Autowired
+	private IClassRoomService classRoomService;
+
+
+	/**
+	 * 根据请求的id查询数据生成图片
+	 * @param
+	 * @return
+	 */
+	@RequestMapping(value = "/createImg",method = RequestMethod.GET)
+	@ResponseBody
+	public ResponseEntity<byte[]> draw(String studentNo,String examBatchId, HttpServletRequest req, HttpServletResponse resp) throws Exception {
+		//获取准考证信息
+		Map<String,String> stu = getStudent(studentNo,examBatchId);
+
+		ResponseEntity<byte[]> entity = null;
+		ByteArrayOutputStream bo=null;  //字节流
+		String fileName=UUID.randomUUID().toString() +".jpg";
+		HttpStatus statusCode = HttpStatus.CREATED;
+		String header = req.getHeader("User-Agent").toUpperCase();
+		try {
+			if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
+				fileName = URLEncoder.encode(fileName, "gbk");
+				fileName = fileName.replace("+", "%20");    // IE下载文件名空格变+号问题
+				statusCode = HttpStatus.OK;
+			} else {
+				fileName = new String(fileName.getBytes("gbk"), "ISO8859-1");
+			}
+			 bo=new ByteArrayOutputStream();
+			String simg="static/images/ca.jpg";
+			if (stu.get("classRoomName").contains("八卦岭")) {
+				simg="static/images/cb.jpg";
+			}
+			//生成图片流
+			DrawingUtil.drawImage("static/images/cc.jpg",
+					simg,
+					stu.get("name"),
+					stu.get("studentNo"),
+					stu.get("examName"),
+//					"深圳市保安员资格考试",
+//					"SZBAZGKS" +
+							stu.get("studentNo").substring(stu.get("studentNo").length()>=6?stu.get("studentNo").length()-6:0),
+					stu.get("number"),
+					stu.get("classRoomName"),
+					stu.get("examRoomName"),
+					stu.get("address"),
+					stu.get("address2"),
+					stu.get("startTime"),
+					stu.get("endTime"),
+					stu.get("sex"),bo);
+		 	//设置头信息
+			HttpHeaders headers = new HttpHeaders();
+			headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);//static/images/ca1.jpg
+			//UUID作为文件名
+			headers.setContentDispositionFormData("attachment",fileName);
+			//获取字节数据
+			byte[] bytes = bo.toByteArray();
+			//交给spring
+			entity = new ResponseEntity<byte[]>(bytes, headers, statusCode);
+//		} catch (IOException e) {
+//
+//		} catch (Exception e) {
+//			e.printStackTrace();
+		} finally {
+			try {
+				assert bo != null;
+				bo.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return entity;
+	}
+	private Map<String,String> getStudent(String studentNo,String examBatchId){
+		//获取用户信息
+		StuStudent stu=null;
+		if (studentNo!=null&&!"".equals(studentNo)&&!"null".equals(studentNo)){
+		 	stu = studentService.getStudentByNo(studentNo);
+		}else {
+		 	stu= studentService.getStudentByUserId(ClientUtils.getUserId());
+		}
+		//获取批次信息
+		ExamBatchInfo examBatchInfo = examBatchService.queryExamBatchDetail(examBatchId);
+		ExamInfo examInfo = examBatchInfo.getExamInfo();
+		//获取考点名称
+		String classRoomId=examBatchInfo.getClassRoomID();
+		ClassRoom detail = classRoomService.detail(classRoomId);
+		String classRoomName = detail.getName();
+		//获取考点地址
+		String address = detail.getAddress();
+		//获取考场名称
+		String examRoomName=examBatchInfo.getExamRoomName();
+		//获取考试开始结束时间
+		String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(examBatchInfo.getStartTime());
+		String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(examBatchInfo.getEndTime());
+		//根据批次Id查询所在组Id与组的所有考生集合
+		String classId = examBatchService.queryExamBatchByClassId(examBatchId).getClassId();
+//		RedisTemplate redisTemplate = new RedisTemplate<>();
+//		//取出
+//		List<StuStudent> students = (List<StuStudent>) redisTemplate.boundHashOps("Hashlist").get("students");
+//		if(students==null){
+//			students= studentService.getStudentByclassId(classId);
+//		//存储
+//			redisTemplate.boundHashOps("Hashlist").put("students", students);
+//		}
+//		int number=1;
+		String number = ClientUtils.getUserInfo().getInfo("age");
+//		for (int i=1;i<=students.size();i++) {
+//			if (students.get(i-1).getStudentNo().equals(stu.getStudentNo()) ) {
+//				//座位号
+//				number=i;
+//			}
+//		}
+		//添加信息
+		Map<String,String> student=new HashMap<>();
+		student.put("name",stu.getName());
+		student.put("studentNo",stu.getStudentNo());
+		student.put("classRoomName",classRoomName);
+		student.put("examName",examInfo.getExamName());
+		if(address.contains("/")){
+			String[] split = address.split("/");
+			if(split.length>=2){
+				student.put("address",split[0]);
+				student.put("address2",split[1]);
+			}else {
+				student.put("address",address);
+				student.put("address2",address);
+			}
+		}else {
+			student.put("address",address);
+			student.put("address2",address);
+		}
+		student.put("examRoomName",examRoomName);
+		student.put("startTime",startTime);
+		student.put("endTime",endTime);
+		student.put("number",number+"");
+		student.put("sex",stu.getSex()?"男":"女");
+		//TODO 下载状态
+		studentService.updateImgStudent(stu.getStudentId());
+		ClientUtils.getUserInfo().setInfo("age",String.valueOf(Integer.parseInt(number)+1));
+		return student;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/action/LoginController.java b/src/main/java/com/qxueyou/scc/sys/action/LoginController.java
new file mode 100644
index 0000000..b9f103b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/action/LoginController.java
@@ -0,0 +1,699 @@
+package com.qxueyou.scc.sys.action;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import com.qxueyou.scc.base.util.*;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.dao.CommonDAO;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.ICommonService;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.org.service.IOrganizationService;
+import com.qxueyou.scc.sys.model.CacheParamters;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.IAuthorizeService;
+import com.qxueyou.scc.sys.service.IPrivilegeService;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.student.service.IStudentService;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRole;
+import com.qxueyou.scc.user.service.IUserOperateService;
+import com.qxueyou.scc.user.service.IUserRoleService;
+import com.qxueyou.scc.user.service.IUserService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 注册controller 提供注册,登录,注销服务
+ *
+ * @author 德虎
+ * @history 2014-11-25 新建 夏德虎
+ */
+@Api(tags="登入相关接口")
+@Controller
+@CrossOrigin(origins="*",maxAge=3600)
+@EnableConfigurationProperties(SccConfig.class)
+@RequestMapping(value = "/sys/login")
+public class LoginController {
+
+    @Autowired
+    private CommonDAO commonDAO;
+
+    @Autowired
+    IPrivilegeService privilegeService;
+
+    @Autowired
+    IAuthorizeService service;
+
+    @Autowired
+    IUserRoleService userRoleService;
+
+    @Autowired
+    ITeacherService teacherService;
+
+    @Autowired
+    @Qualifier("commonAppService")
+    ICommonService commonService;
+
+    @Autowired
+    IUserOperateService userOperateService;
+
+    @Autowired
+    IUserService userService;
+
+    @Autowired
+    ICacheService cacheService;
+
+    @Autowired
+    IStudentService studentService;
+
+    @Autowired
+    private IOrganizationService organizationService;
+
+    public static String UUNUMBER="QXYUUNUMBER";
+
+	@ApiOperation(value = "登入接口", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "account", value = "账号", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "password", value = "密码", required = true, paramType="query", dataType = "String"),
+	})
+	@RequestMapping(value = "beforeLogin", method = RequestMethod.POST)
+	@ResponseBody
+	public Result beforeLogin(@RequestParam("account") String account, @RequestParam("password") String password,
+								HttpServletRequest request, HttpServletResponse response) {
+		if(StringUtils.isEmpty(account)||StringUtils.isEmpty(password)) {
+			return new Result(false, "用户账号密码不能为空");
+		}
+		// 查询用户信息
+		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);
+		User user = commonDAO.findUnique(hql,params, User.class);
+		if (user == null ) {
+			return new Result(false, "用户账户、密码错误");
+		}
+		if (user.getSource() == null || "".equals(user.getSource())) {
+			return new Result(false, "没有权限");
+		}
+		if("exam".equals(user.getSource())){
+//			//获取Session存入uuNumber
+//			uuNumber = UUIDUtils.generateSpecialUuid(8)+account;
+//			HttpSession session = request.getSession();
+//			//设置session自动过期时间 60分钟
+//			session.setMaxInactiveInterval(60*60);
+//			session.setAttribute("uuNumber", uuNumber);
+			//uuNumber使用固定
+			uuNumber=UUNUMBER;
+		}else if("reExam".equals(user.getSource())){
+			//获取Session存入uuNumber
+			uuReNumber = UUIDUtils.generateSpecialUuid(8)+account;
+			HttpSession session = request.getSession();
+			//设置session自动过期时间 60分钟
+			session.setMaxInactiveInterval(60*60);
+			session.setAttribute("uuReNumber", uuReNumber);
+		}else {
+			return new Result(false, "没有权限");
+		}
+		// 插入日志
+		insertLoginLog(request, user, account, "SYS-LOGIN");
+		// 返回
+		return new Result(true, "验证成功",CollectionUtils.newObjectMap("uuNumber",uuNumber,"uuReNumber",uuReNumber));
+	}
+
+	@ApiOperation(value = "登入接口", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "uuNumber", value = "uuNumber", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "uuReNumber", value = "uuReNumber", required = true, paramType="query", dataType = "String"),
+	})
+	@RequestMapping(value = "examLogin", method = RequestMethod.GET)
+	@ResponseBody
+	public Result examLogin(String uuNumber,String uuReNumber,
+							  HttpServletRequest request, HttpServletResponse response) {
+		if(StringUtils.isEmpty(uuNumber)&&StringUtils.isEmpty(uuReNumber)){
+			return new Result(false, "验证失败");
+		}
+		if (StringUtils.isNotEmpty(uuNumber)) {
+			//有uunumber
+			String uu=ClientUtils.getUserInfo().getInfo("email");
+			if(StringUtils.isEmpty(uu)||!uuNumber.equals(uu)){
+				return new Result(false, "uuNumber验证失败");
+			}
+		} else {
+			//有uurenumber
+			HttpSession session = request.getSession();
+			String uu=(String) session.getAttribute("uuReNumber");
+			if(StringUtils.isEmpty(uu)||!uuReNumber.equals(uu)){
+				return new Result(false, "uuReNumber验证失败");
+			}
+			//验证后删除
+			request.getSession().removeAttribute("uuReNumber");
+//			String uu=ClientUtils.getUserInfo().getInfo("email");
+//			if(StringUtils.isEmpty(uu)||!uuReNumber.equals(uu)){
+//				return new Result(false, "uuReNumber验证失败");
+//			}
+		}
+		// 返回
+		return new Result(true, "验证成功");
+	}
+
+	@ApiOperation(value = "登入接口", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "uuNumber", value = "uuNumber", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "uuReNumber", value = "uuReNumber", required = true, paramType="query", dataType = "String"),
+	})
+	@RequestMapping(value = "examssLogin", method = RequestMethod.GET)
+	@ResponseBody
+	public Result examssLogin(String uuNumber,String uuReNumber,
+							  HttpServletRequest request, HttpServletResponse response) {
+		//两个都为空,表示没有参数
+		if(StringUtils.isEmpty(uuNumber)&&StringUtils.isEmpty(uuReNumber)){
+			return new Result(false, "验证失败");
+		}
+
+		if (StringUtils.isNotEmpty(uuNumber)) {
+			//有uunumber
+//			HttpSession session = request.getSession();
+//			String uu=(String) session.getAttribute("uuNumber");
+			String uu=UUNUMBER;
+			if(StringUtils.isEmpty(uu)||!uuNumber.equals(uu)){
+				return new Result(false, "uuNumber验证失败");
+			}
+		} else {
+			//有uurenumber
+			HttpSession session = request.getSession();
+			String uu=(String) session.getAttribute("uuReNumber");
+			if(StringUtils.isEmpty(uu)||!uuReNumber.equals(uu)){
+				return new Result(false, "uuReNumber验证失败");
+			}
+		}
+		// 返回
+		return new Result(true, "验证成功");
+	}
+
+	//退出登录 清除session
+	@RequestMapping(value = "khdloginout", method = RequestMethod.POST)
+	@ResponseBody
+	public void khdloginout(HttpServletRequest request, HttpServletResponse response) {
+		System.out.println("清除session");
+		HttpSession session = request.getSession();
+		System.out.println(session.getAttribute("userId"));
+		System.out.println(session.getAttribute("classId"));
+		session.invalidate();
+	}
+
+	/**
+	 * 学员端登录
+	 *
+	 * @param account  账户
+	 * @param password 密码
+	 * @return
+	 */
+	@ApiOperation(value = "登入接口", notes = "")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "account", value = "账号", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "password", value = "密码", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "organizationId", value = "机构id", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "platForm", value = "登入平台(app,web,qLive,pc,weixin)", required = true, paramType="query", dataType = "String"),
+			@ApiImplicitParam(name = "logType", value = "登入type(study学员,teacher教师,否则为后台)", required = true, paramType="query", dataType = "String"),
+	})
+	@RequestMapping(value = "studentLogin", method = RequestMethod.POST)
+	@ResponseBody
+	public Result studentLogin(@RequestParam("userId") String userId,HttpServletRequest request, HttpServletResponse response, String logType,String organizationId, String platForm){
+
+		String hql = null;
+		List<Object> params = null;
+		hql = "from User where deleteFlag is false and userId = ?";
+		params =  CollectionUtils.newList(userId);
+		// 查询用户信息
+		User user = commonDAO.findUnique(hql,params, User.class);
+		CacheParamters param = new CacheParamters();
+		param.setUserId(user.getUserId());
+		param.setCustomRoleValue(user.getEmail());
+		param.setCustomOrgId(user.getImei());
+		param.setCacheIpFlag(true);
+		param.setPlatForm(StringUtils.isEmpty(platForm) ? Constants.LOGIN_PLATFORM_WEB : platForm);
+		param.setIp(RequestClientUtils.getRemoteIP(request));
+//		 缓存到请求线程
+		UserInfoWrapper wrapper = cacheUserInfo(param, null);
+		request.getSession().setAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper);
+		System.out.println("sess"+request.getSession().getAttribute("userId"));
+		System.out.println("aaa"+ClientUtils.getUserId());
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("userId", user.getUserId(), "userName", user.getName(), "imgPath",
+						user.getImgPath(), "orgName", ClientUtils.getOrgName(),"orgId", ClientUtils.getOrgId(), "orgLogo",
+						ClientUtils.getOrgLogoPath(), "className", ClientUtils.getClassName(), "classId",
+						ClientUtils.getClassId(), "orgShortName", ClientUtils.getOrgShortName()));
+//		return this.loginValidate(user, 1, request, response, "study", platForm, organizationId);
+	}
+
+	/**
+     * 后台登录
+     *
+     * @param account  账户
+     * @param password 密码
+     * @return
+     */
+    @ApiOperation(value = "登入接口", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "account", value = "账号", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "password", value = "密码", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "organizationId", value = "机构id", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "platForm", value = "登入平台(app,web,qLive,pc,weixin)", required = true, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "logType", value = "登入type(study学员,teacher教师,否则为后台)", required = true, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "platformLogin", method = RequestMethod.POST)
+    @ResponseBody
+    public Result platformLogin(@RequestParam("account") String account, @RequestParam("password") String password,String uuNumber,String uuReNumber,
+                                HttpServletRequest request, HttpServletResponse response, String logType,String organizationId, String platForm) {
+//		response.setHeader("Access-Control-Allow-Origin", "*");
+    	if(StringUtils.isEmpty(account)) {
+    		return new Result(false, "用户账号不能为空");
+    	}
+//		System.out.println(account+password);
+//		System.out.println("-------------------------"+organizationId+"--------------"+platForm+"-----------"+logType);
+    	String hql = null;
+        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);
+        }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);
+        }
+
+    	if(StringUtils.isNotEmpty(organizationId)){
+        	hql = hql.concat(" and organizationId=? ");
+        	params.add(organizationId);
+        }
+
+        // 查询用户信息
+        User user = commonDAO.findUnique(hql,params, User.class);
+
+    	if(uuNumber!=null&&!"".equals(uuNumber)&&!"null".equals(uuNumber)){
+    		//登录成功存入user里,删除session里的uuNumber,下个人无法使用
+			user.setEmail(uuNumber);
+//			request.getSession().removeAttribute("uuNumber");
+		}
+//    	if(uuReNumber!=null&&!"".equals(uuReNumber)&&!"null".equals(uuReNumber)){
+//    		//登录成功存入user里,删除session里的uuReNumber,下个人无法使用
+//			user.setImei(uuReNumber);
+//			request.getSession().removeAttribute("uuReNumber");
+//		}
+
+        // 插入日志
+        insertLoginLog(request, user, account, "SYS-LOGIN");
+
+        //考试登录会控制flag变量 其他登录不会 默认true
+        if (user == null) {
+            return new Result(false, "用户账户、密码错误或缺少凭证");
+        }
+
+        // 返回用户基本信息
+        return this.loginValidate(user, 1, request, response, logType, platForm, organizationId);
+    }
+
+    /**
+     * 登入验证
+     * @param user
+     * @param type
+     * @param request
+     * @param response
+     * @param logType
+     * @param platForm
+     * @param organizationId
+     * @return
+     */
+	private Result loginValidate(User user, int type, HttpServletRequest request, HttpServletResponse response,
+			String logType, String platForm, String organizationId) {
+		HttpSession session = request.getSession();
+		// 缓存用户信息
+		CacheParamters param = new CacheParamters();
+		param.setUserId(user.getUserId());
+		param.setCustomRoleValue(user.getEmail());
+		param.setCustomOrgId(user.getImei());
+		param.setCacheIpFlag(true);
+		param.setPlatForm(StringUtils.isEmpty(platForm) ? Constants.LOGIN_PLATFORM_WEB : platForm);
+		param.setIp(RequestClientUtils.getRemoteIP(request));
+//		 缓存到请求线程
+		UserInfoWrapper wrapper = cacheUserInfo(param, null);
+		request.getSession().setAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper);
+		if ("study".equals(logType)) {
+			/*if (StringUtils.isEmpty(ClientUtils.getClassId()) && user.getRoles() == null) {
+				return new Result(false, "该用户未加入任何班级或未激活,请联系班主任");
+			}*/
+
+			if (StringUtils.isEmpty(user.getOrganizationId())) {
+				return new Result(false, "该用户不属于任何机构,无法登入");
+			}
+			if (StringUtils.isNoneBlank(organizationId) && !user.getOrganizationId().equals(organizationId)) {
+				return new Result(false, "选择的机构错误,请确认");
+			}
+
+			//判断是否为学生,如果是学生,判断是否已冻结或移除,冻结或移除的学生不让登录
+	        StuStudent stu = this.studentService.getStudentByUserId(user.getUserId());
+	        if(stu!=null && (stu.getDeleteFlag() || stu.getStatus().equalsIgnoreCase(StuStudent.STATUS_DEACTIVE))){
+	        	return new Result(false, "用户账户已经被冻结或移除");
+	        }
+
+			/*if(StringUtils.isEmpty(wrapper.getInfo(UserInfoWrapper.INF_CLASS_ID))) {
+				return new Result(false, "该用户未加入任何班级,无法登入");
+			}*/
+			// 保存到session中
+			return new Result(true, "success",
+					CollectionUtils.newObjectMap("userId", user.getUserId(), "userName", user.getName(), "imgPath",
+							user.getImgPath(), "orgName", ClientUtils.getOrgName(),"orgId", ClientUtils.getOrgId(), "orgLogo",
+								ClientUtils.getOrgLogoPath(), "className", ClientUtils.getClassName(), "classId",
+							ClientUtils.getClassId(), "orgShortName", ClientUtils.getOrgShortName()));
+		}else if("teacher".equals(logType)) {
+			String teacherId = teacherService.getTeacherIdByUserId(user.getUserId());
+			if (StringUtils.isEmpty(teacherId)) {
+				return new Result(false, "该账户不是老师角色,无法登入");
+			}
+			if (StringUtils.isEmpty(user.getOrganizationId())) {
+				return new Result(false, "该用户不属于任何机构,无法登入");
+			}
+			if (StringUtils.isNoneBlank(organizationId) && !user.getOrganizationId().equals(organizationId)) {
+				return new Result(false, "选择的机构错误,请确认");
+			}
+
+			//获取用户对应的sessionId是否与保存在redis中的一致,如果不一致则跳转到登录页面
+//			stringRedisTemplate.opsForHash().put(UserInfoWrapper.REDIS_USER_ONLINE_MAP_KEY, user.getUserId(), request.getSession().getId());
+			return new Result(true, "success",
+					CollectionUtils.newObjectMap("userId", user.getUserId(), "userName", user.getName(), "imgPath",
+							user.getImgPath(), "orgName", ClientUtils.getOrgName(),"orgId", ClientUtils.getOrgId(), "orgLogo", ClientUtils.getOrgLogoPath(), "orgShortName", ClientUtils.getOrgShortName()));
+		}else {
+			Result result = privilegeService.getMenus(user);
+			Integer roleType = result.getDataT("roleType");
+			// 保存管理员特殊角色信息
+			if (UserRole.ROLE_TYPE_ADMIN.equals(roleType)) {
+//				boolean a=true;
+//				wrapper.setAdmin(true);
+				session.setAttribute("admin",true);
+//				System.out.println(session.getAttribute("admin"));
+			}
+//			request.getSession().setAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper);
+//			System.out.println("ccc"+wrapper.getInfo(UserInfoWrapper.INF_USER_ID));
+////			request.getSession().setAttribute("userId", user.getUserId());
+//			System.out.println("sess"+request.getSession().getAttribute("userId"));
+//			System.out.println("aaa"+ClientUtils.getUserId());
+			return result;
+		}
+
+	}
+
+    /**
+     * 后台:退出登录,后台系统
+     *
+     * @param account 账户
+     * @return
+     */
+	@ApiOperation(value = "退出后台系统操作", notes = "")
+    @RequestMapping(value = "release", method = RequestMethod.GET)
+    public String release(HttpServletRequest httpRequest, HttpServletResponse response) {
+        doRelease(httpRequest, response);
+        return "redirect:/web/admin/index.html#login";
+    }
+
+    /**
+     * 后台:退出登录,后台系统
+     *
+     * @return
+     */
+	@ApiOperation(value = "退出app系统操作", notes = "")
+    @RequestMapping(value = "loginOut", method = RequestMethod.GET)
+    public @ResponseBody Result loginOut(HttpServletRequest httpRequest, HttpServletResponse response) {
+        doRelease(httpRequest, response);
+        return new Result(true);
+    }
+
+    /**
+     * 缓存用户信息(班主任 、 学员 角色 缓存后台clientUtils信息)
+     *
+     * @param userId
+     * @param cookieValue
+     * @param request
+     * @param charderClassId
+     * @param sutdentClassId
+     * @param adminOrgId
+     * @param teacherClassId
+     * @param customOrgId
+     */
+    private UserInfoWrapper cacheUserInfo(CacheParamters param, UserRole role) {
+        UserInfoWrapper wrapper = userService.initUserInfoWrapper(param, true);
+        service.addClientInfo(wrapper);
+        return wrapper;
+    }
+
+    /**
+     * 插入登录日志
+     *
+     * @param request
+     * @param lstUser
+     * @param account
+     * @param module
+     */
+    private void insertLoginLog(HttpServletRequest request, User user, String account, String module) {
+
+        String userAgent = request.getHeader("user-agent");
+        String userId = user == null? null : user.getUserId();
+        String userName = user == null ? null : user.getName();
+        String ip = RequestClientUtils.getRemoteIP(request);
+        SysLog lg = new SysLog();
+
+        TraceUtils.setCreateActiveTrace(lg);
+        lg.setDeleteFlag(false);
+        lg.setContent(userAgent);
+        lg.setDesp(account);
+        lg.setIp(ip);
+        lg.setModule(module);
+        lg.setType(SysLog.LOG_TYPE_SYS);
+        lg.setUserId(userId);
+        lg.setUserName(userName);
+
+        commonService.save(lg);
+
+    }
+
+    /**
+     * 退出后台系统操作
+     *
+     * @param account 账户
+     * @return
+     */
+    private void doRelease(HttpServletRequest httpRequest, HttpServletResponse response) {
+        HttpSession se = httpRequest.getSession();
+        se.removeAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY);
+        se.invalidate();
+    }
+
+    /**
+     * 用户修改密码
+     */
+    @ApiOperation(value = "修改密码", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "usedPass", value = "老密码", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "pass", value = "新密码", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "updatePassword", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updatePassword(String userId, String usedPass, String pass) {
+        return userService.updatePassword(StringUtils.isEmpty(userId)?ClientUtils.getUserId():userId, usedPass, pass);
+    }
+
+    /**
+     * 获取当前用户
+     */
+    @ApiOperation(value = "获取当前用户", notes = "")
+    @RequestMapping(value = "getCurrUser", method = RequestMethod.POST)
+    @ResponseBody
+    public Result getCurrUser() {
+    	User u = this.commonDAO.read(User.class, ClientUtils.getUserId());
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("name",u.getName(),"account",
+        		u.getAccount(), "mobilePhone", u.getMobilePhone(), "imgPath", u.getImgPath(), "sex", u.getSex()));
+    }
+
+    /**
+     * 获取当前用户
+     */
+    @ApiOperation(value = "获取当前教师信息", notes = "")
+    @RequestMapping(value = "getCurrTeacher", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getCurrTeacher() {
+        return this.teacherService.getTeacherInfo();
+    }
+
+    /**
+     * 用户修改密码
+     */
+    @ApiOperation(value = "修改头像", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "headPath", value = "头像地址", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "updateUserHead", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updateUserHead(String headPath) {
+        return userService.updateUserHead(ClientUtils.getUserId(), headPath);
+    }
+
+    /**
+     * 修改用户其他数据
+     */
+    @ApiOperation(value = "修改用户其他数据", notes = "")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "mobilePhone", value = "老密码", required = false, paramType="query", dataType = "String"),
+    })
+    @RequestMapping(value = "updateUserInfo", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updateUserInfo(String mobilePhone) {
+        return userService.updateUserInfo(ClientUtils.getUserId(), mobilePhone);
+    }
+
+    /**
+     * 获取系统当前时间
+     */
+    @RequestMapping(value = "currentTime", method = RequestMethod.GET)
+    @ResponseBody
+    public long getCurrentTime() {
+        return System.currentTimeMillis();
+    }
+
+    @ApiOperation(value = "获取机构列表", notes = "")
+    @RequestMapping(value = "getOrgLst", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOrgLst() {
+        List<Map<String, Object>> orgLst = organizationService.getOrgLst();
+        return new Result(true, "success", orgLst);
+    }
+
+    @ApiOperation(value = "获取机构的信息", notes = "包含基本信息和banner图和app信息")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "appCode", value = "appcode(android:androidTeacherApp,androidTeacherH5,androidStudentApp, androidStudentH5"
+        		+ "IOS:IosTeacherApp,IosStudentApp)", required = false, paramType="query", dataType = "String"),
+        @ApiImplicitParam(name = "orgId", value = "机构id", required = false, paramType="query", dataType = "String")
+    })
+    @RequestMapping(value = "getOrgInfo", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOrgInfo(String appCode, String orgId) {
+    	return this.organizationService.getOrgInfo(appCode, orgId);
+    }
+
+    /**
+	 * APP2.0:  获取android APP版本
+	 *
+	 * @return|
+	 */
+    @ApiOperation(value = "获取android APP版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "appName", value = "app名称(android:teacherApp,teacherH5,studentApp, studentH5)", required = false, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value="getAndroidAppVersion",method=RequestMethod.GET)
+    public @ResponseBody Result getAppVersion(String appName) {
+
+		// 版本号
+		String versionName = "";
+		String versionTips = "";
+		String versionCode = "";
+		String downloadUrl = "";
+
+		if("teacherApp".equals(appName)) {
+			versionName = commonDAO.queryConfigValue("android_teacher_app_name");
+			versionTips = commonDAO.queryConfigValue("android_teacher_app_tips");
+			versionCode = commonDAO.queryConfigValue("android_teacher_app_code");
+			downloadUrl = commonDAO.queryConfigValue("android_teacher_app_download_url");
+		}else if("teacherH5".equals(appName)){
+			versionName = commonDAO.queryConfigValue("android_teacher_h5_name");
+			versionTips = commonDAO.queryConfigValue("android_teacher_h5_tips");
+			versionCode = commonDAO.queryConfigValue("android_teacher_h5_code");
+			downloadUrl = commonDAO.queryConfigValue("android_teacher_h5_download_url");
+		}else if("studentApp".equals(appName)){
+			versionName = commonDAO.queryConfigValue("android_student_app_name");
+			versionTips = commonDAO.queryConfigValue("android_student_app_tips");
+			versionCode = commonDAO.queryConfigValue("android_student_app_code");
+			downloadUrl = commonDAO.queryConfigValue("android_student_app_download_url");
+		}else if("studentH5".equals(appName)){
+			versionName = commonDAO.queryConfigValue("android_student_h5_name");
+			versionTips = commonDAO.queryConfigValue("android_student_h5_tips");
+			versionCode = commonDAO.queryConfigValue("android_student_h5_code");
+			downloadUrl = commonDAO.queryConfigValue("android_student_h5_download_url");
+		}else {
+			versionName = commonDAO.queryConfigValue(Constants.CONFIG_ANDROID_APP_VERSION);
+			versionTips = commonDAO.queryConfigValue(Constants.CONFIG_APP_VERSION_TIPS);
+			versionCode = commonDAO.queryConfigValue(Constants.CONFIG_ANDROID_APP_VERSION_CODE);
+			downloadUrl = commonDAO.queryConfigValue(Constants.CONFIG_ANDROID_APP_DOWNLOAD_URL);
+		}
+
+		return new Result(true, "", CollectionUtils.newObjectMap("versionName", versionName, "versionCode", versionCode, "versionTips", versionTips, "downloadUrl", downloadUrl));
+    }
+
+
+	/**
+	 * APP2.0:  获取ios APP版本
+	 *
+	 * @return
+	 */
+    @ApiOperation(value = "获取ios APP版本")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "appName", value = "app名称(ios:teacherApp,studentApp)", required = false, paramType="query", dataType = "String"),
+    })
+	@RequestMapping(value="getIosAppVersion",method=RequestMethod.GET)
+    public @ResponseBody Result getIOSAppVersion(String appName) {
+		// 版本号
+		String versionCode = "";
+		String versionNo = "";
+		String versionTips = "";
+		String downloadUrl = "";
+
+		if("teacherApp".equals(appName)) {
+			versionCode = commonDAO.queryConfigValue("ios_teacher_app_code");
+			versionNo = commonDAO.queryConfigValue("ios_teacher_app_no");
+			versionTips = commonDAO.queryConfigValue("ios_teacher_app_tips");
+			downloadUrl = commonDAO.queryConfigValue("ios_teacher_app_download_url");
+		}else{
+			versionCode = commonDAO.queryConfigValue("ios_student_app_code");
+			versionNo = commonDAO.queryConfigValue("ios_student_app_no");
+			versionTips = commonDAO.queryConfigValue("ios_student_app_tips");
+			downloadUrl = commonDAO.queryConfigValue("ios_student_app_download_url");
+		}
+
+	    return new Result(true, "", CollectionUtils.newObjectMap("versionCode", versionCode, "versionNo", versionNo, "versionTips", versionTips, "downloadUrl", downloadUrl));
+    }
+
+	/**
+	 * APP2.0:  获取ios 版本
+	 *
+	 * @return
+	 */
+    @ApiOperation(value = "获取ios菜单")
+	@RequestMapping(value="getIosMenu",method=RequestMethod.GET)
+    public @ResponseBody Result getIOSAppVersion() {
+    	//"课件","考试","作业","直播"
+	    return new Result(true, "", new String[]{"课件","直播","考试","作业"});
+    }
+
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java b/src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java
new file mode 100644
index 0000000..36a6fa3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java
@@ -0,0 +1,192 @@
+package com.qxueyou.scc.sys.model;
+/**
+ * LoginController里cacheUserInfo方法的参数
+ * @author iqtogether
+ *
+ */
+public class CacheParamters {
+	/** userId*/
+	private String userId;
+
+	/** cookie值*/
+	private String cookieValue;
+
+	/** 班主任Id*/
+	private String chargerClassId;
+
+	/** 学员Id*/
+	private String sutdentClassId;
+
+	/** 管理员Id*/
+	private String adminOrgId;
+
+	/** 讲师班级Id*/
+	private String teacherClassId;
+
+	/** 助理讲师班级Id*/
+	private String assTeacherClassId;
+
+	/** 自定义机构管理员Id*/
+	private String customOrgId;
+
+	/** 自定义角色Id*/
+	private String curtomRoleId;
+
+	/** 自定义角色值*/
+	private String customRoleValue;
+
+	/** 是否缓存*/
+	private Boolean cacheIpFlag;
+
+	/** ip*/
+	private String ip;
+
+	/** 登录平台:platForm*/
+	private String platForm;
+
+	/**
+	 * @return the userId
+	 */
+	public String getUserId() {
+		return userId;
+	}
+	/**
+	 * @param userId the userId to set
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	/**
+	 * @return the cookieValue
+	 */
+	public String getCookieValue() {
+		return cookieValue;
+	}
+	/**
+	 * @param cookieValue the cookieValue to set
+	 */
+	public void setCookieValue(String cookieValue) {
+		this.cookieValue = cookieValue;
+	}
+	/**
+	 * @return the charderClassId
+	 */
+	public String getChargerClassId() {
+		return chargerClassId;
+	}
+	/**
+	 * @param charderClassId the charderClassId to set
+	 */
+	public void setChargerClassId(String chargerClassId) {
+		this.chargerClassId = chargerClassId;
+	}
+	/**
+	 * @return the sutdentClassId
+	 */
+	public String getSutdentClassId() {
+		return sutdentClassId;
+	}
+	/**
+	 * @param sutdentClassId the sutdentClassId to set
+	 */
+	public void setSutdentClassId(String sutdentClassId) {
+		this.sutdentClassId = sutdentClassId;
+	}
+	/**
+	 * @return the adminOrgId
+	 */
+	public String getAdminOrgId() {
+		return adminOrgId;
+	}
+	/**
+	 * @param adminOrgId the adminOrgId to set
+	 */
+	public void setAdminOrgId(String adminOrgId) {
+		this.adminOrgId = adminOrgId;
+	}
+	/**
+	 * @return the teacherClassId
+	 */
+	public String getTeacherClassId() {
+		return teacherClassId;
+	}
+	/**
+	 * @param teacherClassId the teacherClassId to set
+	 */
+	public void setTeacherClassId(String teacherClassId) {
+		this.teacherClassId = teacherClassId;
+	}
+	/**
+	 * @return the customOrgId
+	 */
+	public String getCustomOrgId() {
+		return customOrgId;
+	}
+	/**
+	 * @param customOrgId the customOrgId to set
+	 */
+	public void setCustomOrgId(String customOrgId) {
+		this.customOrgId = customOrgId;
+	}
+	/**
+	 * @return the curtomRoleId
+	 */
+	public String getCurtomRoleId() {
+		return curtomRoleId;
+	}
+	/**
+	 * @param curtomRoleId the curtomRoleId to set
+	 */
+	public void setCurtomRoleId(String curtomRoleId) {
+		this.curtomRoleId = curtomRoleId;
+	}
+	/**
+	 * @return the customRoleValue
+	 */
+	public String getCustomRoleValue() {
+		return customRoleValue;
+	}
+	/**
+	 * @param customRoleValue the customRoleValue to set
+	 */
+	public void setCustomRoleValue(String customRoleValue) {
+		this.customRoleValue = customRoleValue;
+	}
+	/**
+	 * @return the cacheIpFlag
+	 */
+	public Boolean getCacheIpFlag() {
+		return cacheIpFlag;
+	}
+	/**
+	 * @param cacheIpFlag the cacheIpFlag to set
+	 */
+	public void setCacheIpFlag(Boolean cacheIpFlag) {
+		this.cacheIpFlag = cacheIpFlag;
+	}
+	/**
+	 * @return the ip
+	 */
+	public String getIp() {
+		return ip;
+	}
+	/**
+	 * @param ip the ip to set
+	 */
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+	public String getAssTeacherClassId() {
+		return assTeacherClassId;
+	}
+	public void setAssTeacherClassId(String assTeacherClassId) {
+		this.assTeacherClassId = assTeacherClassId;
+	}
+	public String getPlatForm() {
+		return platForm;
+	}
+	public void setPlatForm(String platForm) {
+		this.platForm = platForm;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/model/MsgTypeConstants.java b/src/main/java/com/qxueyou/scc/sys/model/MsgTypeConstants.java
new file mode 100644
index 0000000..7d5e8b4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/MsgTypeConstants.java
@@ -0,0 +1,20 @@
+package com.qxueyou.scc.sys.model;
+
+
+/**
+ * @author kevin
+ *
+ */
+public class MsgTypeConstants {
+	
+	public static final String LIVE_DOWN_LOAD_VIDEO = "DOWN_LOAD_RECORD";
+	
+	
+	public static final String LIVE_EDIT_GENERATE_VIDEO = "EDIT_GENERATE_VIDEO";
+	
+	
+	public static final String LIVE_REPLAY_DATA_INIT = "REPLAY_DATA_INIT";
+	
+	
+	public static final String LIVE_REPLAY_SCREENSHOT = "REPLAY_SCREENSHOT";
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java b/src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java
new file mode 100644
index 0000000..cc66c5e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java
@@ -0,0 +1,668 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+
+
+/**
+ * 用户激活返回结果
+ * @author zhiyong
+ *
+ */
+public class ResponseResult implements Serializable {
+
+	private static final long serialVersionUID = -8122352446681757516L;
+	
+	/** 结果  */
+	private boolean result;
+	
+	/** 结果信息  */
+	private String resultMsg;
+	
+	/** 待激活用户ID  */
+	private String inactiveUserId;
+	
+	/** 是否已激活 */
+	private boolean ActiveFlag;
+	
+	/** 当前用户ID  */
+	private String userId;
+	
+	/** 密码 */
+	private String emPw;
+	
+	/** 当前注册ID  */
+	private String regId;
+	
+	/** 当前用户名  */
+	private String userName;
+	
+	/** 当前账户  */
+	private String account;
+	
+	/** 手机号码 */
+	private String mobilePhone;
+	
+	/** 昵称  */
+	private String alias;
+	
+	/** 性别  */
+	private boolean sex;
+	
+	/** 用户类型 */
+	private short userType;
+	
+	/** 头像地址 */
+	private String imgPath;
+	
+	/** 班级id  */
+	private String classId;
+	
+	/** 班级名称  */
+	private String className;
+	
+	/** 科目id  */
+	private String courseId;
+	
+	/** 科目名称  */
+	private String courseName;
+	
+	/** 机构id  */
+	private String orgId;
+	
+	/** 机构TOPid  */
+	private String topOrgId;
+	
+	/** 机构简称 */
+	private String orgShortName;
+	
+	/** 机构名 */
+	private String orgName;
+	
+	/** 机构联系方式 */
+	private String orgTel;
+	
+	/** 机构图片*/
+	private String orgLogoPath;
+	
+	/** 机构类型 */
+	private short orgType ;
+	
+	/** 机构编码*/
+	private String orgCode;
+	
+	/** 判断密码是否修改   true:需要修改   false:不需要修改 */
+	private boolean changePWDFlag ;
+	
+	/** 是否是游客 */
+	private boolean visitorFlag ;
+	
+	/** 是否第一次登录 */
+	private boolean firstFlag ;
+	
+	/** 唯一编码 */
+	private String uniqueCode ;
+	
+	/**签名 */
+	private String signature ;
+
+	/**真实姓名 */
+	private String realName ;
+	
+	/**环信群组ID */
+	private String easmobGroupId ;
+	
+	/**第一次登入传播大使 */
+	private boolean  everloginAts;
+	
+	/**weixin:是否提示下载Q学友APP */
+	private boolean  appDownFlag;
+	
+	private Integer errorCode;
+	
+	/** 用户openId*/
+	private String openId;
+	
+	/** 是否在本机构有班级 true:该用户在此机构有班级 false:反之 */
+	private boolean hasOrgClass;
+	
+	public boolean isEverloginAts() {
+		return everloginAts;
+	}
+
+	public void setEverloginAts(boolean everloginAts) {
+		this.everloginAts = everloginAts;
+	}
+
+	public boolean getHasOrgClass() {
+		return hasOrgClass;
+	}
+
+	public void setHasOrgClass(boolean hasOrgClass) {
+		this.hasOrgClass = hasOrgClass;
+	}
+
+	/**
+	 * @return the password
+	 */
+	public String getEmPw() {
+		return emPw;
+	}
+
+	/**
+	 * @param password the password to set
+	 */
+	public void setEmPw(String emPw) {
+		this.emPw = emPw;
+	}
+
+	/**
+	 * @return the account
+	 */
+	public String getAccount() {
+		return account;
+	}
+
+	/**
+	 * @param account the account to set
+	 */
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	/**
+	 * @return the changePWDFlag
+	 */
+	public boolean isChangePWDFlag() {
+		return changePWDFlag;
+	}
+
+	/**
+	 * @param changePWDFlag the changePWDFlag to set
+	 */
+	public void setChangePWDFlag(boolean changePWDFlag) {
+		this.changePWDFlag = changePWDFlag;
+	}
+
+	
+	/**
+	 * 
+	 * @param result
+	 */
+	public ResponseResult(boolean result) {
+		this.result = result;
+	}
+	
+	/**
+	 * 
+	 * @param result
+	 * @param resultMsg
+	 */
+	public ResponseResult(boolean result, String resultMsg) {
+		this.result = result;
+		this.resultMsg = resultMsg;
+	}
+	
+	/**
+	 * 
+	 * @param result
+	 * @param resultMsg
+	 */
+	public ResponseResult(boolean result, String resultMsg,Integer errorCode) {
+		this.result = result;
+		this.resultMsg = resultMsg;
+		this.errorCode = errorCode;
+	}
+	
+	
+	/**
+	 * 
+	 */
+	public ResponseResult() {
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * @return the result
+	 */
+	public boolean isResult() {
+		return result;
+	}
+
+	/**
+	 * @param result the result to set
+	 */
+	public void setResult(boolean result) {
+		this.result = result;
+	}
+
+	/**
+	 * @return the resultMsg
+	 */
+	public String getResultMsg() {
+		return resultMsg;
+	}
+
+	/**
+	 * @param resultMsg the resultMsg to set
+	 */
+	public void setResultMsg(String resultMsg) {
+		this.resultMsg = resultMsg;
+	}
+
+	/**
+	 * @return the inactiveUserId
+	 */
+	public String getInactiveUserId() {
+		return inactiveUserId;
+	}
+
+	/**
+	 * @param inactiveUserId the inactiveUserId to set
+	 */
+	public void setInactiveUserId(String inactiveUserId) {
+		this.inactiveUserId = inactiveUserId;
+	}
+
+	/**
+	 * @return the activeFlag
+	 */
+	public boolean isActiveFlag() {
+		return ActiveFlag;
+	}
+
+	/**
+	 * @param activeFlag the activeFlag to set
+	 */
+	public void setActiveFlag(boolean activeFlag) {
+		ActiveFlag = activeFlag;
+	}
+
+	/**
+	 * @return the userId
+	 */
+	public String getUserId() {
+		return userId;
+	}
+
+	/**
+	 * @param userId the userId to set
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	/**
+	 * @return the regId
+	 */
+	public String getRegId() {
+		return regId;
+	}
+
+	/**
+	 * @param regId the regId to set
+	 */
+	public void setRegId(String regId) {
+		this.regId = regId;
+	}
+
+	/**
+	 * @return the userName
+	 */
+	public String getUserName() {
+		return userName;
+	}
+
+	/**
+	 * @param userName the userName to set
+	 */
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/**
+	 * @return the mobilePhone
+	 */
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	/**
+	 * @param mobilePhone the mobilePhone to set
+	 */
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	/**
+	 * @return the alias
+	 */
+	public String getAlias() {
+		return alias;
+	}
+
+	/**
+	 * @param alias the alias to set
+	 */
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+
+	/**
+	 * @return the sex
+	 */
+	public boolean isSex() {
+		return sex;
+	}
+
+	/**
+	 * @param sex the sex to set
+	 */
+	public void setSex(boolean sex) {
+		this.sex = sex;
+	}
+
+	/**
+	 * @return the userType
+	 */
+	public short getUserType() {
+		return userType;
+	}
+
+	/**
+	 * @param userType the userType to set
+	 */
+	public void setUserType(short userType) {
+		this.userType = userType;
+	}
+
+	/**
+	 * @return the imgPath
+	 */
+	public String getImgPath() {
+		return imgPath;
+	}
+
+	/**
+	 * @param imgPath the imgPath to set
+	 */
+	public void setImgPath(String imgPath) {
+		this.imgPath = imgPath;
+	}
+
+	/**
+	 * @return the classId
+	 */
+	public String getClassId() {
+		return classId;
+	}
+
+	/**
+	 * @param classId the classId to set
+	 */
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	/**
+	 * @return the className
+	 */
+	public String getClassName() {
+		return className;
+	}
+
+	/**
+	 * @param className the className to set
+	 */
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	/**
+	 * @return the courseId
+	 */
+	public String getCourseId() {
+		return courseId;
+	}
+
+	/**
+	 * @param courseId the courseId to set
+	 */
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	/**
+	 * @return the courseName
+	 */
+	public String getCourseName() {
+		return courseName;
+	}
+
+	/**
+	 * @param courseName the courseName to set
+	 */
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+	/**
+	 * @return the orgId
+	 */
+	public String getOrgId() {
+		return orgId;
+	}
+
+	/**
+	 * @param orgId the orgId to set
+	 */
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	/**
+	 * @return the topOrgId
+	 */
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	/**
+	 * @param topOrgId the topOrgId to set
+	 */
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+	/**
+	 * @return the orgShortName
+	 */
+	public String getOrgShortName() {
+		return orgShortName;
+	}
+
+	/**
+	 * @param orgShortName the orgShortName to set
+	 */
+	public void setOrgShortName(String orgShortName) {
+		this.orgShortName = orgShortName;
+	}
+
+	/**
+	 * @return the orgName
+	 */
+	public String getOrgName() {
+		return orgName;
+	}
+
+	/**
+	 * @param orgName the orgName to set
+	 */
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	/**
+	 * @return the orgTel
+	 */
+	public String getOrgTel() {
+		return orgTel;
+	}
+
+	/**
+	 * @param orgTel the orgTel to set
+	 */
+	public void setOrgTel(String orgTel) {
+		this.orgTel = orgTel;
+	}
+
+	/**
+	 * @return the orgLogoPath
+	 */
+	public String getOrgLogoPath() {
+		return orgLogoPath;
+	}
+
+	/**
+	 * @param orgLogoPath the orgLogoPath to set
+	 */
+	public void setOrgLogoPath(String orgLogoPath) {
+		this.orgLogoPath = orgLogoPath;
+	}
+
+	/**
+	 * @return the orgType
+	 */
+	public short getOrgType() {
+		return orgType;
+	}
+
+	/**
+	 * @param orgType the orgType to set
+	 */
+	public void setOrgType(short orgType) {
+		this.orgType = orgType;
+	}
+
+	/**
+	 * @return the visitorFlag
+	 */
+	public boolean isVisitorFlag() {
+		return visitorFlag;
+	}
+
+	/**
+	 * @param visitorFlag the visitorFlag to set
+	 */
+	public void setVisitorFlag(boolean visitorFlag) {
+		this.visitorFlag = visitorFlag;
+	}
+
+	/**
+	 * @return the firstFlag
+	 */
+	public boolean isFirstFlag() {
+		return firstFlag;
+	}
+
+	/**
+	 * @param firstFlag the firstFlag to set
+	 */
+	public void setFirstFlag(boolean firstFlag) {
+		this.firstFlag = firstFlag;
+	}
+
+	/**
+	 * @return the uniqueCode
+	 */
+	public String getUniqueCode() {
+		return uniqueCode;
+	}
+
+	/**
+	 * @param uniqueCode the uniqueCode to set
+	 */
+	public void setUniqueCode(String uniqueCode) {
+		this.uniqueCode = uniqueCode;
+	}
+
+	/**
+	 * @return the signature
+	 */
+	public String getSignature() {
+		return signature;
+	}
+
+	/**
+	 * @param signature the signature to set
+	 */
+	public void setSignature(String signature) {
+		this.signature = signature;
+	}
+
+	/**
+	 * @return the realName
+	 */
+	public String getRealName() {
+		return realName;
+	}
+
+	/**
+	 * @param realName the realName to set
+	 */
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
+	/**
+	 * @return the easmobGroupId
+	 */
+	public String getEasmobGroupId() {
+		return easmobGroupId;
+	}
+
+	/**
+	 * @param easmobGroupId the easmobGroupId to set
+	 */
+	public void setEasmobGroupId(String easmobGroupId) {
+		this.easmobGroupId = easmobGroupId;
+	}
+
+	/**
+	 * @return the errorCode
+	 */
+	public Integer getErrorCode() {
+		return errorCode;
+	}
+
+	/**
+	 * @param errorCode the errorCode to set
+	 */
+	public void setErrorCode(Integer errorCode) {
+		this.errorCode = errorCode;
+	}
+
+	public String getOrgCode() {
+		return orgCode;
+	}
+
+	public void setOrgCode(String orgCode) {
+		this.orgCode = orgCode;
+	}
+
+	public String getOpenId() {
+		return openId;
+	}
+
+	public void setOpenId(String openId) {
+		this.openId = openId;
+	}
+
+	public boolean getAppDownFlag() {
+		return appDownFlag;
+	}
+
+	public void setAppDownFlag(boolean appDownFlag) {
+		this.appDownFlag = appDownFlag;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysAttachment.java b/src/main/java/com/qxueyou/scc/sys/model/SysAttachment.java
new file mode 100644
index 0000000..329aa2a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysAttachment.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+//import com.qxueyou.scc.notice.model.Notice;
+//import com.fasterxml.jackson.annotation.JsonIgnore;
+//
+//import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * The persistent class for the SYS_ATTACHMENTS database table.
+ * 
+ */
+@Entity
+@Table(name = "SYS_ATTACHMENT")
+@NamedQuery(name = "SysAttachment.findAll", query = "SELECT s FROM SysAttachment s")
+public class SysAttachment implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "ATTACHMENT_ID", unique = true, nullable = false, length = 32)
+	private String attachmentId;
+
+	@Column(name = "ATTACHMENT_NAME")
+	private String attachmentName;
+
+	@Column(name = "ATTACHMENT_PATH")
+	private String attachmentPath;
+
+	@Column(name = "ATTACHMENT_TYPE")
+	private int attachmentType;
+
+	@Column(name = "CREATE_ID")
+	private String createId;
+
+	@Column(name = "CREATE_TIME")
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name = "CREATOR")
+	private String creator;
+
+	@Column(name = "DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name = "FILE_SIZE")
+	private long fileSize;
+
+	@Column(name = "FILE_SUFFIX")
+	private String fileSuffix;
+
+	@Column(name = "REALATED_OBJECT_ID")
+	private String realatedObjectId;
+
+	@Column(name = "UPDATE_ID")
+	private String updateId;
+
+	@Temporal(TemporalType.DATE)
+	@Column(name = "UPDATE_TIME")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR")
+	private String updator;
+
+//	@ManyToOne(cascade = { CascadeType.ALL })
+//	@JoinColumn(name = "REALATED_OBJECT_ID", referencedColumnName = "NOTICE_ID", updatable = false, insertable = false)
+//	@JsonIgnore
+//	private Notice notice;
+
+	public SysAttachment() {
+	}
+
+	public String getAttachmentId() {
+		return this.attachmentId;
+	}
+
+	public void setAttachmentId(String attachmentId) {
+		this.attachmentId = attachmentId;
+	}
+
+	public String getAttachmentName() {
+		return this.attachmentName;
+	}
+
+	public void setAttachmentName(String attachmentName) {
+		this.attachmentName = attachmentName;
+	}
+
+	public String getAttachmentPath() {
+		return this.attachmentPath;
+	}
+
+	public void setAttachmentPath(String attachmentPath) {
+		this.attachmentPath = attachmentPath;
+	}
+
+	public int getAttachmentType() {
+		return this.attachmentType;
+	}
+
+	public void setAttachmentType(int attachmentType) {
+		this.attachmentType = attachmentType;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public long getFileSize() {
+		return this.fileSize;
+	}
+
+	public void setFileSize(long fileSize) {
+		this.fileSize = fileSize;
+	}
+
+	public String getFileSuffix() {
+		return this.fileSuffix;
+	}
+
+	public void setFileSuffix(String fileSuffix) {
+		this.fileSuffix = fileSuffix;
+	}
+
+	public String getRealatedObjectId() {
+		return this.realatedObjectId;
+	}
+
+	public void setRealatedObjectId(String realatedObjectId) {
+		this.realatedObjectId = realatedObjectId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysButton.java b/src/main/java/com/qxueyou/scc/sys/model/SysButton.java
new file mode 100644
index 0000000..197e51b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysButton.java
@@ -0,0 +1,237 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * 系统菜单按钮
+ * 
+ */
+@Entity
+@Table(name="sys_button")
+@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
+@NamedQuery(name="SysButton.findAll", query="SELECT s FROM SysButton s")
+public class SysButton implements Serializable{
+	
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="BUTTON_ID", unique=true, nullable=false, length=32)
+	private String buttonId;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@JsonIgnore
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@JsonIgnore
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="NAME", length=128)
+	private String name;
+	
+	@Column(name="FULL_PATH", length=255)
+	@JsonIgnore
+	private String fullPath;
+	
+	@Column(name="TYPE")
+	@JsonIgnore
+	private String type;
+	
+	@Column(name="ICON_URL", length=255)
+	@JsonIgnore
+	private String iconUrl;
+
+	@Column(name="URL", length=255)
+	@JsonIgnore
+	private String url;
+	
+	@Column(name="BUTTON_ORDER")
+	@JsonIgnore
+	private int buttonOrder;
+	
+	@Column(name="MENU_ID")
+	private String menuId;
+	
+	@Column(name="QXY_BUTTON_ID", length=32)
+	private String qxyButtonId;
+	
+	@Column(name="MODULE", length=128)
+	private String module;
+
+	public String getButtonId() {
+		return buttonId;
+	}
+
+	public void setButtonId(String buttonId) {
+		this.buttonId = buttonId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean isDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFullPath() {
+		return fullPath;
+	}
+
+	public void setFullPath(String fullPath) {
+		this.fullPath = fullPath;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getIconUrl() {
+		return iconUrl;
+	}
+
+	public void setIconUrl(String iconUrl) {
+		this.iconUrl = iconUrl;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public int getButtonOrder() {
+		return buttonOrder;
+	}
+
+	public void setButtonOrder(int buttonOrder) {
+		this.buttonOrder = buttonOrder;
+	}
+
+	public String getMenuId() {
+		return menuId;
+	}
+
+	public void setMenuId(String menuId) {
+		this.menuId = menuId;
+	}
+
+	public String getQxyButtonId() {
+		return qxyButtonId;
+	}
+
+	public void setQxyButtonId(String qxyButtonId) {
+		this.qxyButtonId = qxyButtonId;
+	}
+
+	public String getModule() {
+		return module;
+	}
+
+	public void setModule(String module) {
+		this.module = module;
+	}
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysCondition.java b/src/main/java/com/qxueyou/scc/sys/model/SysCondition.java
new file mode 100644
index 0000000..a8248e4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysCondition.java
@@ -0,0 +1,183 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the sys_condition database table.
+ * 
+ */
+@Entity
+@Table(name="sys_condition")
+@NamedQuery(name="SysCondition.findAll", query="SELECT s FROM SysCondition s")
+public class SysCondition implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+	
+	public static final String MODULE_COURSE_MARKET_SORT = "COURSE_MARKET_SORT";
+	
+	public static final String MODULE_COURSE_MARKET_CITY = "COURSE_MARKET_CITY";
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CONDITION_ID", unique=true, nullable=false, length=32)
+	private String conditionId;
+
+	/***
+	 * 模块
+	 */
+	@Column(name="MODULE", length=64)
+	private String module;
+	
+	/***
+	 * 序号
+	 */
+	@Column(name="ORDER" )
+	private Integer order;
+	
+	/***
+	 * 编码
+	 */
+	@Column(name="CODE" ,length=128 )
+	private String code;
+	
+	/***
+	 * 名称
+	 */
+	@Column(name="NAME", length=128 )
+	private String name;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getConditionId() {
+		return conditionId;
+	}
+
+	public void setConditionId(String conditionId) {
+		this.conditionId = conditionId;
+	}
+
+	public String getModule() {
+		return module;
+	}
+
+	public void setModule(String module) {
+		this.module = module;
+	}
+
+	public Integer getOrder() {
+		return order;
+	}
+
+	public void setOrder(Integer order) {
+		this.order = order;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysConfig.java b/src/main/java/com/qxueyou/scc/sys/model/SysConfig.java
new file mode 100644
index 0000000..4835b42
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysConfig.java
@@ -0,0 +1,56 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+
+/**
+ * The persistent class for the sys_config database table.
+ * 
+ */
+@Entity
+//@Table(name="sys_config")
+@Table(name="sys_config")
+@NamedQuery(name="SysConfig.findAll", query="SELECT s FROM SysConfig s")
+public class SysConfig implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CONFIG_ID", unique=true, nullable=false, length=32)
+	private String configId;
+
+	@Column(name="CONFIG_KEY", length=32)
+	private String configKey;
+
+	@Column(name="VALUE", length=255)
+	private String value;
+
+	public String getConfigId() {
+		return this.configId;
+	}
+
+	public void setConfigId(String configId) {
+		this.configId = configId;
+	}
+
+	public String getConfigKey() {
+		return this.configKey;
+	}
+
+	public void setConfigKey(String configKey) {
+		this.configKey = configKey;
+	}
+
+	public String getValue() {
+		return this.value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java b/src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java
new file mode 100644
index 0000000..2a5efbd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java
@@ -0,0 +1,105 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * 
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="sys_config_file")
+@NamedQuery(name="SysConfigFile.findAll", query="SELECT s FROM SysConfigFile s")
+public class SysConfigFile implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	public static final String MODULE_TYPE_DOC = "1" ;
+	public static final String MODULE_TYPE_IMG = "2" ;
+	public static final String MODULE_TYPE_VIDEO = "3" ;
+	public static final String MODULE_TYPE_AUDIO = "4" ;
+	public static final String MODULE_TYPE_HTML = "5" ;// html文件
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="CONFIG_ID", unique=true, nullable=false, length=32)
+	private String configId;
+
+	@Column(name="CONFIG_FILE_MODULE", length=64)
+	private String configFileModule;
+
+	@Column(name="CONFIG_FILE_DIRECTION", length=255)
+	private String configFileDirection;
+	
+	@Column(name="MODULE_TYPE", length=255)
+	private String moduletype;
+	
+	@Column(name="REMARK", length=64)
+	private String remark;
+	
+	@Column(name="TABLE_NAME", length=255)
+	private String tableName;
+
+	public SysConfigFile() {
+	}
+
+	public String getConfigId() {
+		return this.configId;
+	}
+
+	public String getConfigFileModule() {
+		return configFileModule;
+	}
+
+	public void setConfigFileModule(String configFileModule) {
+		this.configFileModule = configFileModule;
+	}
+
+	public String getConfigFileDirection() {
+		return configFileDirection;
+	}
+
+	public void setConfigFileDirection(String configFileDirection) {
+		this.configFileDirection = configFileDirection;
+	}
+
+	public void setConfigId(String configId) {
+		this.configId = configId;
+	}
+
+	public String getModuletype() {
+		return moduletype;
+	}
+
+	public void setModuletype(String moduletype) {
+		this.moduletype = moduletype;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getTableName() {
+		return tableName;
+	}
+
+	public void setTableName(String tableName) {
+		this.tableName = tableName;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysDictionary.java b/src/main/java/com/qxueyou/scc/sys/model/SysDictionary.java
new file mode 100644
index 0000000..50cf3fd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysDictionary.java
@@ -0,0 +1,80 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+
+
+/**
+ * The persistent class for the sys_dictionary database table.
+ * 
+ */
+@Entity
+@Table(name="sys_dictionary")
+@NamedQuery(name="SysDictionary.findAll", query="SELECT s FROM SysDictionary s")
+public class SysDictionary implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="DICTIONARY_ID", unique=true, nullable=false, length=32)
+	private String dictionaryId;
+
+	@Column(name="DIC_KEY", length=32)
+	private String dicKey;
+
+	@Column(name="STATUS")
+	private short status;
+
+	@Column(name="TYPE_ID", length=32)
+	private String typeId;
+
+	@Column(name="VALUE", length=255)
+	private String value;
+
+	public SysDictionary() {
+	}
+
+	public String getDictionaryId() {
+		return this.dictionaryId;
+	}
+
+	public void setDictionaryId(String dictionaryId) {
+		this.dictionaryId = dictionaryId;
+	}
+
+	public String getDicKey() {
+		return this.dicKey;
+	}
+
+	public void setDicKey(String dicKey) {
+		this.dicKey = dicKey;
+	}
+
+	public short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getTypeId() {
+		return this.typeId;
+	}
+
+	public void setTypeId(String typeId) {
+		this.typeId = typeId;
+	}
+
+	public String getValue() {
+		return this.value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysFileUploadTrace.java b/src/main/java/com/qxueyou/scc/sys/model/SysFileUploadTrace.java
new file mode 100644
index 0000000..b075257
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysFileUploadTrace.java
@@ -0,0 +1,290 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="sys_file_upload_trace")
+public class SysFileUploadTrace implements Serializable,ITrace{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public static final int FILE_USE = 1 ;
+	public static final int FILE_NOT_USE = 2 ;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="UPLOAD_FILE_ID", unique=true, nullable=false, length=32)
+	private String uploadFileId;
+	
+	@Column(name="MODULE", length=255)
+	private String module;
+	
+	@Column(name="FULL_PATH", length=255)
+	private String fullPath;
+	
+	@Column(name="MODULE_TYPE", length=255)
+	private String moduleType;
+	
+	@Column(name="USE_FLAG", length=1)
+	private Integer useFlag;
+	
+	@Column(name="REMARK", length=255)
+	private String remark;
+	
+	@Column(name="TABLE_NAME", length=255)
+	private String tableName;
+	
+	@Column(name="BUSSINESS_ID", length=255)
+	private String bussinessId;
+	
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+
+
+	/**
+	 * @return the uploadFileId
+	 */
+	public String getUploadFileId() {
+		return uploadFileId;
+	}
+
+	/**
+	 * @param uploadFileId the uploadFileId to set
+	 */
+	public void setUploadFileId(String uploadFileId) {
+		this.uploadFileId = uploadFileId;
+	}
+
+	/**
+	 * @return the module
+	 */
+	public String getModule() {
+		return module;
+	}
+
+	/**
+	 * @param module the module to set
+	 */
+	public void setModule(String module) {
+		this.module = module;
+	}
+
+	/**
+	 * @return the fullPath
+	 */
+	public String getFullPath() {
+		return fullPath;
+	}
+
+	/**
+	 * @param fullPath the fullPath to set
+	 */
+	public void setFullPath(String fullPath) {
+		this.fullPath = fullPath;
+	}
+
+	/**
+	 * @return the moduleType
+	 */
+	public String getModuleType() {
+		return moduleType;
+	}
+
+	/**
+	 * @param moduleType the moduleType to set
+	 */
+	public void setModuleType(String moduleType) {
+		this.moduleType = moduleType;
+	}
+
+	/**
+	 * @return the useFlag
+	 */
+	public Integer getUseFlag() {
+		return useFlag;
+	}
+
+	/**
+	 * @param useFlag the useFlag to set
+	 */
+	public void setUseFlag(Integer useFlag) {
+		this.useFlag = useFlag;
+	}
+
+	/**
+	 * @return the remark
+	 */
+	public String getRemark() {
+		return remark;
+	}
+
+	/**
+	 * @param remark the remark to set
+	 */
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	/**
+	 * @return the tableName
+	 */
+	public String getTableName() {
+		return tableName;
+	}
+
+	/**
+	 * @param tableName the tableName to set
+	 */
+	public void setTableName(String tableName) {
+		this.tableName = tableName;
+	}
+
+	/**
+	 * @return the bussinessId
+	 */
+	public String getBussinessId() {
+		return bussinessId;
+	}
+
+	/**
+	 * @param bussinessId the bussinessId to set
+	 */
+	public void setBussinessId(String bussinessId) {
+		this.bussinessId = bussinessId;
+	}
+
+	/**
+	 * @return the createId
+	 */
+	public String getCreateId() {
+		return createId;
+	}
+
+	/**
+	 * @param createId the createId to set
+	 */
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	/**
+	 * @return the createTime
+	 */
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	/**
+	 * @param createTime the createTime to set
+	 */
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	/**
+	 * @return the creator
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * @param creator the creator to set
+	 */
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	/**
+	 * @return the deleteFlag
+	 */
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	/**
+	 * @param deleteFlag the deleteFlag to set
+	 */
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	/**
+	 * @return the updateId
+	 */
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	/**
+	 * @param updateId the updateId to set
+	 */
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	/**
+	 * @return the updateTime
+	 */
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	/**
+	 * @param updateTime the updateTime to set
+	 */
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	/**
+	 * @return the updator
+	 */
+	public String getUpdator() {
+		return updator;
+	}
+
+	/**
+	 * @param updator the updator to set
+	 */
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysLog.java b/src/main/java/com/qxueyou/scc/sys/model/SysLog.java
new file mode 100644
index 0000000..3e0c99e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysLog.java
@@ -0,0 +1,229 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+import java.util.Date;
+
+
+/**
+ * The persistent class for the sys_log database table.
+ * 
+ */
+@Entity
+@Table(name="sys_log")
+@NamedQuery(name="SysLog.findAll", query="SELECT s FROM SysLog s")
+public class SysLog implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	/*
+	 * 锟斤拷志锟斤拷锟斤拷: 系统
+	 */
+	public static final short LOG_TYPE_SYS = (short)0;
+	
+	/*
+	 * 锟斤拷志锟斤拷锟斤拷: 业锟斤拷
+	 */
+	public static final short LOG_TYPE_BUSINESS = (short)1;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="LOG_ID", unique=true, nullable=false, length=32)
+	private String logId;
+
+	@Column(name="CONTENT", length=255)
+	private String content;
+
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	@Column(name="GPS", length=128)
+	private String gps;
+
+	@Column(name="IP", length=64)
+	private String ip;
+
+	@Column(name="MODULE", length=64)
+	private String module;
+
+	@Column(name="TYPE")
+	private short type;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@Column(name="USER_ID", length=32)
+	private String userId;
+	
+	@Column(name="DESP", length=128)
+	private String desp;
+	
+	@Column(name="USER_NAME", length=150)
+	private String userName;
+	
+	@Column(name="USER_AGENT", length=255)
+	private String userAgent;
+
+	public String getLogId() {
+		return this.logId;
+	}
+
+	public void setLogId(String logId) {
+		this.logId = logId;
+	}
+
+	public String getContent() {
+		return this.content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getGps() {
+		return this.gps;
+	}
+
+	public void setGps(String gps) {
+		this.gps = gps;
+	}
+
+	public String getIp() {
+		return this.ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public String getModule() {
+		return this.module;
+	}
+
+	public void setModule(String module) {
+		this.module = module;
+	}
+
+	public short getType() {
+		return this.type;
+	}
+
+	public void setType(short type) {
+		this.type = type;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getDesp() {
+		return desp;
+	}
+
+	public void setDesp(String desp) {
+		this.desp = desp;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getUserAgent() {
+		return userAgent;
+	}
+
+	public void setUserAgent(String userAgent) {
+		this.userAgent = userAgent;
+	}
+	
+	
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysMenu.java b/src/main/java/com/qxueyou/scc/sys/model/SysMenu.java
new file mode 100644
index 0000000..5957727
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysMenu.java
@@ -0,0 +1,286 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.user.model.UserRole;
+
+/**
+ * The persistent class for the sys_menu database table.
+ * 
+ */
+@Entity
+@Table(name = "sys_menu")
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
+@NamedQuery(name = "SysMenu.findAll", query = "SELECT s FROM SysMenu s")
+public class SysMenu implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "MENU_ID", unique = true, nullable = false, length = 32)
+	private String menuId;
+
+	@Column(name = "URL", length = 255)
+	private String url;
+
+	@Column(name = "ICON_URL", length = 255)
+	private String iconUrl;
+
+	@Column(name = "NAME", length = 128)
+	private String name;
+
+	@Column(name = "FULL_PATH", length = 255)
+	private String fullPath;
+
+	@Column(name = "PARENT_MENU_ID")
+	private String parentMenuId;
+
+	@Column(name = "DIR")
+	private boolean dir;
+
+	@Column(name = "hover")
+	private String hover;
+
+	@Column(name = "icon")
+	private String icon;
+
+	@Column(name = "LEVEL")
+	private int level;
+
+	@Column(name = "MENU_ORDER")
+	private int menuOrder;
+
+	@Column(name = "OPEN_TYPE")
+	private int openType;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	private boolean deleteFlag;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinTable(name = "SYS_PRIVILEGE", joinColumns = { @JoinColumn(name = "MENU_ID") }, inverseJoinColumns = {
+			@JoinColumn(name = "ROLE_ID") })
+	@GeneratedValue(generator = "hibernate-uuid1")
+	@GenericGenerator(name = "hibernate-uuid1", strategy = "uuid")
+	@CollectionId(columns = @Column(name = "PRIVILEGE_ID"), type = @Type(type = "string"), generator = "hibernate-uuid1")
+	@JsonIgnore
+	private List<UserRole> roles;
+
+	@ManyToOne(cascade = { CascadeType.ALL })
+	@JoinColumn(name = "PARENT_MENU_ID", referencedColumnName = "MENU_ID", updatable = false, insertable = false)
+	@JsonIgnore
+	private SysMenu parent;
+
+	@OneToMany(mappedBy = "parent")
+	@JsonIgnore
+	private List<SysMenu> children;
+
+	public int getOpenType() {
+		return openType;
+	}
+
+	public void setOpenType(int openType) {
+		this.openType = openType;
+	}
+
+	public boolean isDir() {
+		return dir;
+	}
+
+	public void setDir(boolean dir) {
+		this.dir = dir;
+	}
+
+	public int getLevel() {
+		return level;
+	}
+
+	public void setLevel(int level) {
+		this.level = level;
+	}
+
+	public int getMenuOrder() {
+		return menuOrder;
+	}
+
+	public void setMenuOrder(int menuOrder) {
+		this.menuOrder = menuOrder;
+	}
+
+	public SysMenu getParent() {
+		return parent;
+	}
+
+	public void setParent(SysMenu parent) {
+		this.parent = parent;
+	}
+
+	public List<SysMenu> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<SysMenu> children) {
+		this.children = children;
+	}
+
+	public List<UserRole> getRoles() {
+		return roles;
+	}
+
+	public void setRoles(List<UserRole> roles) {
+		this.roles = roles;
+	}
+
+	public String getMenuId() {
+		return this.menuId;
+	}
+
+	public void setMenuId(String menuId) {
+		this.menuId = menuId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getFullPath() {
+		return this.fullPath;
+	}
+
+	public void setFullPath(String fullPath) {
+		this.fullPath = fullPath;
+	}
+
+	public String getIconUrl() {
+		return this.iconUrl;
+	}
+
+	public void setIconUrl(String iconUrl) {
+		this.iconUrl = iconUrl;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUrl() {
+		return this.url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getParentMenuId() {
+		return parentMenuId;
+	}
+
+	public void setParentMenuId(String parentMenuId) {
+		this.parentMenuId = parentMenuId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/model/SysPrivilege.java b/src/main/java/com/qxueyou/scc/sys/model/SysPrivilege.java
new file mode 100644
index 0000000..f49727c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/model/SysPrivilege.java
@@ -0,0 +1,189 @@
+package com.qxueyou.scc.sys.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.user.model.UserRole;
+
+
+
+/**
+ * The persistent class for the sys_privilege database table.
+ * 
+ */
+@Entity
+@Table(name="sys_privilege")
+@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
+@NamedQuery(name="SysPrivilege.findAll", query="SELECT s FROM SysPrivilege s")
+public class SysPrivilege implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="PRIVILEGE_ID", unique=true, nullable=false, length=32)
+	private String privilegeId;
+
+	@Column(name="CREATE_ID", length=32)
+	private String createId;
+
+	@Column(name="CREATE_TIME" )
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="CREATOR", length=100)
+	private String creator;
+
+	@Column(name="DELETE_FLAG" )
+	private boolean deleteFlag;
+
+	@Column(name="MENU_ID", length=32)
+	private String menuId;
+
+	@Column(name="ROLE_ID", length=32)
+	private String roleId;
+
+	@Column(name="SUB_MENU")
+	private byte subMenu;
+
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ROLE_ID",referencedColumnName="ROLE_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private UserRole userRole;
+
+	public String getPrivilegeId() {
+		return this.privilegeId;
+	}
+
+	public void setPrivilegeId(String privilegeId) {
+		this.privilegeId = privilegeId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getMenuId() {
+		return this.menuId;
+	}
+
+	public void setMenuId(String menuId) {
+		this.menuId = menuId;
+	}
+
+	public String getRoleId() {
+		return this.roleId;
+	}
+
+	public void setRoleId(String roleId) {
+		this.roleId = roleId;
+	}
+
+	public byte getSubMenu() {
+		return this.subMenu;
+	}
+
+	public void setSubMenu(byte subMenu) {
+		this.subMenu = subMenu;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public UserRole getUserRole() {
+		return userRole;
+	}
+
+	public void setUserRole(UserRole userRole) {
+		this.userRole = userRole;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/msg/CustomMsgConsumerService.java b/src/main/java/com/qxueyou/scc/sys/msg/CustomMsgConsumerService.java
new file mode 100644
index 0000000..055a93b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/msg/CustomMsgConsumerService.java
@@ -0,0 +1,23 @@
+package com.qxueyou.scc.sys.msg;
+
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CustomMsgConsumerService implements ICustomerMsgConsumerService {
+
+	@Override
+	public void doCreateVideoLivePlaybackByMsg(ConsumerRecord<String,String> data) {
+		System.out.println("doCreateVideoLivePlaybackByMsg:"+data.value());
+	}
+
+	@Override
+	public void onMessage(ConsumerRecord<String,String> data) {
+		 System.out.println("received: " + data);
+		 doCreateVideoLivePlaybackByMsg(data);
+	}
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/msg/CustomerMsgProducerService.java b/src/main/java/com/qxueyou/scc/sys/msg/CustomerMsgProducerService.java
new file mode 100644
index 0000000..3332add
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/msg/CustomerMsgProducerService.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.sys.msg;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CustomerMsgProducerService implements ICustomerMsgProducerService{
+	
+	@Autowired
+	KafkaTemplate<String,String>  template;
+	
+	public static String VIDEO_LIVE_TOPIC ="test.topic";
+
+	@Override
+	public void doSendMediaVideoLiveMsg() {
+		
+		for(int i=0;;){
+			i++;
+			template.setDefaultTopic(VIDEO_LIVE_TOPIC);
+		    template.sendDefault(String.valueOf(i), "foo"+i);
+		    try {
+				Thread.sleep(10*1000);
+				 template.flush();
+			} catch (InterruptedException e) {
+				
+			}
+		   
+		}
+		
+//	    template.flush();
+//	    container.stop();
+		
+	}
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgConsumerService.java b/src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgConsumerService.java
new file mode 100644
index 0000000..4782ce2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgConsumerService.java
@@ -0,0 +1,16 @@
+package com.qxueyou.scc.sys.msg;
+
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.springframework.kafka.listener.MessageListener;
+
+public interface ICustomerMsgConsumerService extends MessageListener<String, String> {
+
+	
+
+	void onMessage(ConsumerRecord<String, String> data);
+
+
+	void doCreateVideoLivePlaybackByMsg(ConsumerRecord<String, String> data);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgProducerService.java b/src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgProducerService.java
new file mode 100644
index 0000000..0dd95bb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/msg/ICustomerMsgProducerService.java
@@ -0,0 +1,7 @@
+package com.qxueyou.scc.sys.msg;
+
+public interface ICustomerMsgProducerService {
+
+	void doSendMediaVideoLiveMsg();
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java b/src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java
new file mode 100644
index 0000000..8d53618
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java
@@ -0,0 +1,20 @@
+package com.qxueyou.scc.sys.service;
+
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+
+/**
+ * 授权服务
+ * @author 德虎
+ *
+ */
+public interface IAuthorizeService {
+	
+	/**
+	 * 添加用户信息到当前线程
+	 * @param wrapper
+	 * @return
+	 */
+	void addClientInfo(UserInfoWrapper wrapper);
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/IOssService.java b/src/main/java/com/qxueyou/scc/sys/service/IOssService.java
new file mode 100644
index 0000000..79ffaef
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/IOssService.java
@@ -0,0 +1,84 @@
+package com.qxueyou.scc.sys.service;
+
+import java.io.File;
+import java.io.InputStream;
+
+import com.qxueyou.scc.base.model.Result;
+
+/**
+ * 锟斤拷锟斤拷锟芥储锟斤拷锟斤拷
+ * @author 锟铰伙拷
+ *
+ */
+public interface IOssService {
+	
+	/**
+	 * 锟较达拷图片
+	 * @param file
+	 * @param destPath
+	 * @return 锟较达拷锟斤拷锟?
+	 */
+	Result uplpadImage(File file,String destPath);
+	
+	/**
+	 * 锟较达拷图片
+	 * @param file
+	 * @param destPath
+	 * @return 锟较达拷锟斤拷锟?
+	 */
+	Result uplpadImage(InputStream ins,String fileFormat,String destPath);
+	
+	/**
+	 * 锟较达拷锟侥硷拷
+	 * @param file
+	 * @param destPath
+	 * @return 锟较达拷锟斤拷锟?
+	 */
+	Result uplpadFile(File file,String destPath);
+	
+	/**
+	 * 锟较达拷锟侥憋拷转锟侥硷拷
+	 * @param byteArray
+	 * @param destPath
+	 * @return
+	 */
+	Result uploadFile(byte[] byteArray,String destPath); 
+	
+	/**
+	 * 锟较达拷锟斤拷频
+	 * @param input 锟斤拷锟斤拷锟斤拷
+	 * @param fileFormat 锟斤拷频锟斤拷式
+	 * @param fileLength 锟侥硷拷锟斤拷锟斤拷
+	 * @param destPath 目锟斤拷路锟斤拷
+	 * @return
+	 */
+	Result uplpadFile(InputStream input,String fileFormat,long fileLength, String destPath);
+	
+	/**
+	 * 锟斤拷取锟斤拷锟斤拷锟斤拷路锟斤拷
+	 * @return
+	 */
+	String getServerUrl();
+	
+	/**
+	 * 锟接凤拷锟斤拷锟斤拷锟斤拷取锟侥硷拷锟斤拷锟芥到锟斤拷锟斤拷
+	 * @param key
+	 * @param directory
+	 * @return
+	 */
+	File getObject(String key,String directory);
+	
+	/**
+	 * 锟接凤拷锟斤拷锟斤拷锟斤拷取锟斤拷锟襟,凤拷锟斤拷锟斤拷锟斤拷锟斤拷
+	 * @param key
+	 * @return
+	 */
+	
+	InputStream getObject(String key);
+	
+	/**
+	 * 删锟斤拷锟侥硷拷
+	 * @param destPath
+	 */
+	void deleteOSSFile (String destPath);
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/IOssVideoService.java b/src/main/java/com/qxueyou/scc/sys/service/IOssVideoService.java
new file mode 100644
index 0000000..8d359d5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/IOssVideoService.java
@@ -0,0 +1,29 @@
+package com.qxueyou.scc.sys.service;
+
+import java.io.File;
+import java.io.InputStream;
+
+import com.qxueyou.scc.base.model.Result;
+
+
+/**
+ * 锟斤拷锟斤拷锟斤拷锟斤拷频锟较达拷锟斤拷锟斤拷锟较达拷锟斤拷锟斤拷锟捷节点,转锟斤拷锟斤拷要
+ * @author 锟铰伙拷
+ *
+ */
+public interface IOssVideoService {
+	
+	public abstract Result uplpadVideoFile(File file, String destPath) ;
+	
+	public abstract Result uplpadVideoFile(InputStream input,String fileFormat,long fileLength, String destPath);
+	
+	public abstract File getObject(String key, String directory) ;
+	
+    /**
+	 * 锟斤拷OSS删锟斤拷M3U8锟侥硷拷
+	 * @param key
+	 * @return
+	 */
+	boolean delObject(String key);
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java b/src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java
new file mode 100644
index 0000000..fc722d3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java
@@ -0,0 +1,66 @@
+package com.qxueyou.scc.sys.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.sys.model.SysMenu;
+import com.qxueyou.scc.user.model.User;
+
+public interface IPrivilegeService {
+	
+	/**
+	 * 获取已授权菜单列表
+	 * @param name
+	 * @return
+	 */
+	List<SysMenu> getPrivilegesMenus(String userId);
+	
+	/**
+	 * 获取班主任在当前机构下的班级
+	 * @param name
+	 * @return
+	 */
+	List<ClsClass> getChargerClasses(String userId,String orgId);
+	
+	/**
+	 * 获取讲师在当前机构的班级
+	 * @param name
+	 * @return
+	 */
+	List<ClsClass> getTeacherClasses(String userId,String orgId);
+	
+	/**
+	 * 获取助理讲师在当前机构的班级
+	 * @param name
+	 * @return
+	 */
+	List<ClsClass> getAssisTeacherClasses(String userId,String orgId);
+	
+	/**
+	 * 新增list
+	 * @param privileges
+	 * @return
+	 */
+	Result updatePrivileges(String[] arrMenuIds,String roleId);
+	
+	/**
+	 * 删除list
+	 * @param privileges
+	 * @return
+	 */
+	Result deletePrivileges(String[] deleteMenuIds,String roleId);
+	
+	/*
+	 * 获取讲师直播关联的class
+	 * 
+	 */
+	public List<ClsClass> getTeacherLiveClasses(String userId,String orgId);
+	
+	
+	/**
+	 * 获取用户权限
+	 */
+	public Result getMenus(User user);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java b/src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java
new file mode 100644
index 0000000..ab16cf2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java
@@ -0,0 +1,31 @@
+package com.qxueyou.scc.sys.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface ISysAttachmentService {
+	
+	/**
+	 * 根据单据ID获取附件列表
+	 * @param relaedObjectId
+	 * @return
+	 */
+	Result querySysAttachement(String relaedObjectId);
+	
+	/**
+	 * 新增附件
+	 * @param attachmentName
+	 * @param attachmentPath
+	 * @param relaedObjectId
+	 * @return
+	 */
+	Result insertSysAttachment(String attachmentName, String attachmentPath,long fileSize ,String relaedObjectId);
+	
+	/**
+	 * 删除附件
+	 * @param attachementIds
+	 * @return
+	 */
+	public Result deleteSysAttachement(String attachementIds);
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/ISysConfigService.java b/src/main/java/com/qxueyou/scc/sys/service/ISysConfigService.java
new file mode 100644
index 0000000..d6dafe1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/ISysConfigService.java
@@ -0,0 +1,19 @@
+package com.qxueyou.scc.sys.service;
+
+import com.qxueyou.scc.sys.model.SysConfig;
+
+public interface ISysConfigService {
+	
+	String queryConfig(String key);
+
+	String queryConfigWithCache(String key,int expiredTime);
+	
+	SysConfig doTestInsert();
+	
+	SysConfig doTestUpdate();
+	
+	void doTestDelete();
+	
+	void doTestTransact();
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/ISysLogService.java b/src/main/java/com/qxueyou/scc/sys/service/ISysLogService.java
new file mode 100644
index 0000000..e819920
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/ISysLogService.java
@@ -0,0 +1,28 @@
+package com.qxueyou.scc.sys.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.sys.model.SysLog;
+
+public interface ISysLogService {
+
+	/**
+	 * 锟斤拷锟斤拷系统or业锟斤拷锟斤拷志
+	 * 
+	 * @param log
+	 * @param type
+	 * @return
+	 */
+	public abstract Result insertLog(SysLog log);
+
+	/**
+	 * 锟斤拷锟斤拷系统or业锟斤拷锟斤拷志
+	 * 
+	 * @param logs
+	 * @param type
+	 * @return
+	 */
+	public abstract Result insertLogs(List<SysLog> logs);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/ITestService.java b/src/main/java/com/qxueyou/scc/sys/service/ITestService.java
new file mode 100644
index 0000000..f42283a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/ITestService.java
@@ -0,0 +1,18 @@
+package com.qxueyou.scc.sys.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.user.model.User;
+
+/**
+ * 娴嬭瘯鏈嶅姟鎺ュ彛
+ * @author chenjunliang
+ *
+ */
+public interface ITestService {
+	
+	String addUser(String name,String password,String account);
+	String deleteUser(String userId);
+	List<User> findUserList();
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/AuthorizeService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/AuthorizeService.java
new file mode 100644
index 0000000..f365e2c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/AuthorizeService.java
@@ -0,0 +1,19 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.sys.service.IAuthorizeService;
+
+@Service
+public class AuthorizeService extends CommonAppService implements
+		IAuthorizeService {
+	
+	@Override
+	public void addClientInfo(UserInfoWrapper wrapper) {
+		ClientUtils.setUserInfo(wrapper);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/Listener.java b/src/main/java/com/qxueyou/scc/sys/service/impl/Listener.java
new file mode 100644
index 0000000..d832e70
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/Listener.java
@@ -0,0 +1,18 @@
+package com.qxueyou.scc.sys.service.impl;
+
+//import java.util.concurrent.CountDownLatch;
+//
+//import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Listener {
+//
+//    public final CountDownLatch latch1 = new CountDownLatch(1);
+//
+//    @KafkaListener(id = "foo", topics = "annotated1")
+//    public void listen1(String foo) {
+//        this.latch1.countDown();
+//    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java
new file mode 100644
index 0000000..9fcc976
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java
@@ -0,0 +1,250 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.sys.service.IOssService;
+
+/**
+ *上传服务
+ * 
+ * @author 德虎
+ * 
+ */
+@Service
+@EnableConfigurationProperties(SccConfig.class)
+public class OssService extends CommonAppService implements IOssService {
+
+	/*
+	 * 
+	 */
+//	private OSSClient client;
+
+	private final Logger log = LogManager.getLogger("OssService");
+	
+	/*
+	 * 文档服务地址
+	 */
+	private String resDomain;
+	
+	private static String resRootPath;
+	
+	@Autowired
+	SccConfig sccConfig;
+	
+
+	/**
+	 * 初始化客户端
+	 */
+	@PostConstruct
+	private void init() {
+		resRootPath = sccConfig.getResRootPath();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.etraining.qxueyou.sys.service.IOssService#uplpadImage(java.io.File,
+	 * java.lang.String)
+	 */
+	@Override
+	public Result uplpadImage(File file, String destPath) {
+		String fullPath = null;
+		try {
+			fullPath = resRootPath + destPath;
+			File fileRoot = new File(fullPath.substring(0, destPath.lastIndexOf("/")));
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			FileUtils.copyFile(file, new File(fullPath));
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return new Result(false);
+	}
+	
+	@Override
+	public Result uplpadImage(InputStream ins,String fileFormat, String destPath) {
+		String fullPath = null;
+		try {
+			fullPath = resRootPath + destPath;
+			File fileRoot = new File(fullPath.substring(0, destPath.lastIndexOf("/")));
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			FileUtils.copyInputStreamToFile(ins, new File(fullPath));
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e, e);
+		}finally{
+			IOUtils.closeQuietly(ins);
+		}
+		return new Result(false);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.etraining.qxueyou.sys.service.IOssService#uplpadVideo(java.io.InputStream, java.lang.String, long, java.lang.String)
+	 */
+	@Override
+	public Result uplpadFile(InputStream input,String fileFormat,long fileLength, String destPath) {
+		String fullPath = null;
+		try {
+			fullPath = resRootPath + destPath;
+			
+			
+			File fileRoot = new File(fullPath.substring(0, fullPath.lastIndexOf("/")));
+			
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			FileUtils.copyInputStreamToFile(input, new File(fullPath));
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e, e);
+		}finally{
+			IOUtils.closeQuietly(input);
+		}
+		return new Result(false);
+	}
+	
+	/**
+	 * 如果路径以 / 或 \ 开头,需要截取
+	 * @param destPath
+	 * @return
+	 */
+	public String chopPath(String destPath){
+		if(destPath.startsWith("/")||destPath.startsWith("\\")){
+			return destPath.substring(1);
+		}
+		return destPath;
+	}
+	
+	/**
+	 * 获取ContentType
+	 * @param fileName
+	 * @return
+	 */
+	public String getContentType(String fileName){
+		if(fileName.toUpperCase().endsWith("PNG")){
+			return "image/png";
+		}
+		return "image/jpeg";
+	}
+
+	@Override
+	public String getServerUrl() {
+		return resDomain;
+	}
+
+	@Override
+	public Result uplpadFile(File file, String destPath) {
+		String fullPath = null;
+		try {
+			fullPath = resRootPath + destPath;
+			File fileRoot = new File(fullPath.substring(0, destPath.lastIndexOf("/")));
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			FileUtils.copyFile(file,new File(fullPath));
+			
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return new Result(false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.etraining.qxueyou.sys.service.IOssService#getObject(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public File getObject(String key, String directory) {
+		File sourceFile = null;
+		File targetFile = null;
+		String fullPath = null;
+		try {
+			
+			sourceFile = new File(resRootPath + key);
+			if(sourceFile.exists()){
+				fullPath = (resRootPath + directory).replace("//", "/");
+				
+				File fileRoot = new File(fullPath.substring(0, fullPath.lastIndexOf("/")));
+				if(!fileRoot.exists()){
+					fileRoot.mkdirs();	
+				}
+				targetFile = new File(resRootPath + directory);
+				FileUtils.copyFile(sourceFile, targetFile);
+			}
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return targetFile;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.etraining.qxueyou.sys.service.IOssService#getObject(java.lang.String)
+	 */
+	@Override
+	public InputStream getObject(String key) {
+		File sourceFile = null;
+		InputStream in = null;
+		try {
+			sourceFile = new File(resRootPath + key);
+			if(sourceFile.exists()){
+				in = new FileInputStream(sourceFile);
+			}
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return in;
+	}
+
+	@Override
+	public Result uploadFile(byte[] byteArray, String destPath) {
+		InputStream  in = null;
+		
+		String fullPath = null;
+		try {
+			fullPath = resRootPath + destPath;
+			File fileRoot = new File(fullPath.substring(0, destPath.lastIndexOf("/")));
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			in= new BufferedInputStream(new ByteArrayInputStream(byteArray));
+			FileUtils.copyInputStreamToFile(in, new File(fullPath));
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e.getLocalizedMessage(), e);
+			return new Result(false);
+		}finally {
+			IOUtils.closeQuietly(in);
+		}
+	}
+	
+	@Override
+	public void deleteOSSFile (String destPath) {
+		FileUtils.deleteQuietly(new File(resRootPath+destPath));
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java
new file mode 100644
index 0000000..8e6bba2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java
@@ -0,0 +1,346 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysButton;
+import com.qxueyou.scc.sys.model.SysMenu;
+import com.qxueyou.scc.sys.model.SysPrivilege;
+import com.qxueyou.scc.sys.service.IPrivilegeService;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserRole;
+
+/**
+ * 系统权限服务
+ * 
+ * @author 德虎
+ *
+ */
+@Service
+public class PriviledgeService extends CommonAppService implements IPrivilegeService {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.iqtogether.qxueyou.sys.service.IPrivilegeService#getPrivilegesMenus(com.
+	 * iqtogether.qxueyou.user.model.User)
+	 */
+	@Override
+	public List<SysMenu> getPrivilegesMenus(String userId) {
+
+		// 获取当前用户角色ID, 过滤当前角色
+		String currRoleId = null;
+		Short currOrgType = null;
+		if (null != ClientUtils.getUserInfo() && StringUtils.isNotBlank(ClientUtils.getOrgId())) {
+			currRoleId = ClientUtils.getCurrentRoleId();
+		}
+
+		List<SysMenu> firstLevelMenus = new ArrayList<SysMenu>(5);
+
+		// 获取该用户当前角色的所有菜单权限
+		List<SysMenu> allMenus = initAllMenus(currRoleId);
+
+		// 过滤出第一层及第二层菜单权限
+		initFirstSecondMenu(allMenus, firstLevelMenus, currOrgType);
+
+		// 排序
+		sortMenuList(firstLevelMenus);
+
+		return firstLevelMenus;
+	}
+
+	private List<SysMenu> initAllMenus(String currRoleId) {
+
+		List<SysMenu> allMenus = new ArrayList<SysMenu>(10);
+
+		String hql = "select m from SysPrivilege s,SysMenu m where s.deleteFlag is false and m.deleteFlag is false "
+				+ " and s.menuId = m.menuId and s.roleId = ? ";
+
+		allMenus.addAll(this.find(hql, CollectionUtils.newList(currRoleId), SysMenu.class));
+
+		// 如果是超管,菜单
+		if ("6".equals(currRoleId) && allMenus.isEmpty()) {
+			UserRole role = this.read(UserRole.class, "6");
+			allMenus = role.getMenus();
+		}
+
+		return allMenus;
+
+	}
+
+	private void initFirstSecondMenu(List<SysMenu> allMenus, List<SysMenu> firstLevelMenus, Short currOrgType) {
+
+		List<SysMenu> childMenus = null;
+		List<SysMenu> secondMenus = null;
+
+		for (SysMenu menu : allMenus) {
+
+			if (menu.getLevel() == 1 && !firstLevelMenus.contains(menu)) {
+				childMenus = menu.getChildren();
+				secondMenus = new ArrayList<SysMenu>(5);
+
+				initSecondMenu(allMenus, secondMenus, childMenus, currOrgType);
+
+				if (!secondMenus.isEmpty()) {
+					// 排序
+					sortMenuList(secondMenus);
+					menu.setChildren(secondMenus);
+					firstLevelMenus.add(menu);
+				}
+			}
+		}
+
+	}
+
+	private void initSecondMenu(List<SysMenu> allMenus, List<SysMenu> secondMenus, List<SysMenu> childMenus,
+			Short currOrgType) {
+
+		for (SysMenu m : childMenus) {
+
+			if (m.getDeleteFlag()) {
+				continue;
+			}
+
+			if (allMenus.contains(m)) {
+
+				// 非高校过滤掉
+				if (currOrgType == null) {
+					continue;
+				}
+
+				secondMenus.add(m);
+			}
+		}
+	}
+
+	/**
+	 * 获取已授权按钮列表,默认已经编辑过按钮权限的用户
+	 * 
+	 * @param name
+	 * @return
+	 */
+	public Map<String, List<SysButton>> getPrivilegesButtons(String orgId, String topOrgId, String roleId) {
+
+		String hql = "select b from SysButtonPrivilege s, SysButton b where "
+				+ " s.deleteFlag is false and b.deleteFlag is false and s.buttonId = b.buttonId "
+				+ " and s.topOrgId = ? and s.roleId = ? ";
+
+		List<SysButton> lstButtons = this.find(hql, CollectionUtils.newList(topOrgId, roleId), SysButton.class);
+
+		Map<String, List<SysButton>> resultMap = new HashMap<String, List<SysButton>>();
+		List<SysButton> lsts;
+
+		for (SysButton button : lstButtons) {
+
+			if (!resultMap.containsKey(button.getModule())) {
+				lsts = new ArrayList<SysButton>(5);
+				lsts.add(button);
+				resultMap.put(button.getModule(), lsts);
+
+				continue;
+			}
+
+			lsts = resultMap.get(button.getModule());
+			lsts.add(button);
+			resultMap.put(button.getModule(), lsts);
+
+		}
+
+		return resultMap;
+
+	}
+
+	private void sortMenuList(List<SysMenu> sysMenus) {
+		Collections.sort(sysMenus, new Comparator<SysMenu>() {
+			public int compare(SysMenu menu1, SysMenu menu2) {
+
+				Integer order1 = (Integer) menu1.getMenuOrder();
+				Integer order2 = (Integer) menu2.getMenuOrder();
+				// 升序
+				return order1.compareTo(order2);
+			}
+		});
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.iqtogether.qxueyou.sys.service.IPrivilegeService#getAdminClasses(java.
+	 * lang.String)
+	 */
+	@Override
+	public List<ClsClass> getChargerClasses(String userId, String orgId) {
+
+		String hql = "select cls from ClsClass cls,OrgCharger charge "
+				+ "where cls.classChargerId = charge.orgChargerId " + "and charge.userId = ? " + "and charge.orgId = ? "
+				+ "and cls.deleteFlag is false order by cls.name asc";
+
+		return find(hql, CollectionUtils.newList(userId, ClientUtils.getOrgId()), ClsClass.class);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.iqtogether.qxueyou.sys.service.IPrivilegeService#getAdminLessons(java.
+	 * lang.String)
+	 */
+	@Override
+	public List<ClsClass> getTeacherClasses(String userId, String orgId) {
+
+		String hql = "select distinct  cls from SchClassSchedule lesson,OrgTeacher teacher , ClsClass cls "
+				+ "where lesson.teacherId = teacher.orgTeacherId " + "and lesson.classId = cls.classId "
+				+ "and teacher.userId= ? " + "and teacher.orgId= ? " + "and lesson.deleteFlag is false "
+				+ "and teacher.deleteFlag is false " + "and cls.deleteFlag is false ";
+
+		return find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class);
+	}
+
+	/*
+	 * 获取讲师直播关联的class
+	 * 
+	 */
+	@Override
+	public List<ClsClass> getTeacherLiveClasses(String userId, String orgId) {
+
+		String hql = "select distinct  cls from MediaVideoLive live,OrgTeacher teacher , ClsClass cls "
+				+ "where live.anchorId = teacher.orgTeacherId " + "and live.classId = cls.classId "
+				+ "and teacher.userId= ? " + "and teacher.orgId= ? " + "and live.deleteFlag is false "
+				+ "and teacher.deleteFlag is false " + "and cls.deleteFlag is false ";
+
+		return find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class);
+	}
+
+	/**
+	 * 助理讲师班级列表
+	 */
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	@Override
+	public List<ClsClass> getAssisTeacherClasses(String userId, String orgId) {
+		// 1、讲师助教
+		String hql = "select distinct  cls from MediaVideoLive live,OrgAssistantTeacher teacher , ClsClass cls "
+				+ "where live.anchorId = teacher.orgTeacherId " + "and live.classId = cls.classId "
+				+ "and teacher.userId= ? " + "and teacher.orgId= ? " + "and live.deleteFlag is false "
+				+ "and teacher.deleteFlag is false " + "and cls.deleteFlag is false ";
+
+		List<ClsClass> teacherList = find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class);
+
+		// 2.班主任助教
+		String hql2 = "select distinct  cls from OrgAssistantTeacher teacher , ClsClass cls "
+				+ "where teacher.orgTeacherId=cls.classChargerId " + "and teacher.classId = cls.classId "
+				+ "and teacher.userId= ? " + "and teacher.orgId= ? " + "and teacher.deleteFlag is false "
+				+ "and cls.deleteFlag is false ";
+
+		List<ClsClass> chargerList = find(hql2, CollectionUtils.newList(userId, orgId), ClsClass.class);
+
+		teacherList.addAll(chargerList);
+		// 去重
+		HashSet h = new HashSet(teacherList);
+		teacherList.clear();
+		teacherList.addAll(h);
+
+		return teacherList;
+	}
+
+	/**
+	 * 新增list
+	 * 
+	 * @param privileges
+	 * @return
+	 */
+	public Result updatePrivileges(String[] arrMenuIds, String roleId) {
+
+		List<SysPrivilege> lstPrivileges = new ArrayList<SysPrivilege>(arrMenuIds.length);
+		SysPrivilege privilege;
+		for (String menuId : arrMenuIds) {
+
+			privilege = new SysPrivilege();
+			TraceUtils.setCreateTrace(privilege);
+
+			privilege.setMenuId(menuId);
+			privilege.setOrgId(ClientUtils.getOrgId());
+			privilege.setRoleId(roleId);
+
+			lstPrivileges.add(privilege);
+
+		}
+
+		this.saveOrUpdateAll(lstPrivileges);
+
+		return new Result(true);
+
+	}
+
+	/**
+	 * 删除list
+	 * 
+	 * @param privileges
+	 * @return
+	 */
+	public Result deletePrivileges(String[] deleteMenuIds, String roleId) {
+
+		// 修改为使用update
+		// bulkUpdateInLoop("update SysPrivilege set deleteFlag = true where roleId = '"
+		// + roleId + "' and menuId = ?", deleteMenuIds );
+		String hql = " from SysPrivilege where menuId in (:menuIds) and deleteFlag is false and roleId = :roleId ";
+		Map<String, Object> argsMap = new HashMap<String, Object>();
+		argsMap.put("menuIds", deleteMenuIds);
+		argsMap.put("roleId", roleId);
+		List<SysPrivilege> lstPrivileges = this.findByComplexHql(hql, argsMap, SysPrivilege.class);
+
+		if (lstPrivileges.isEmpty()) {
+			return new Result(true);
+		}
+
+		for (SysPrivilege privilege : lstPrivileges) {
+			TraceUtils.setUpdateTrace(privilege);
+			privilege.setDeleteFlag(true);
+		}
+
+		this.saveOrUpdateAll(lstPrivileges);
+		return new Result(true);
+
+	}
+
+	@Override
+	public Result getMenus(User user) {
+
+		String hql = "select m.menuId as index ,m.name as title ,m.url as router ,  m.hover as hover , "
+				+ " m.icon as icon ,m.parentMenuId as parentMenuId ,m.menuOrder as menuOrder from SysMenu m , UserReRoleUser u ,"
+				+ "SysPrivilege s where m.deleteFlag is false and u.deleteFlag is false and s.deleteFlag is false and "
+				+ "u.userId =:userId and u.roleId = s.roleId  and s.menuId = m.menuId order by m.menuOrder ";
+
+		List<Map<String, Object>> menuLst = findListWithMapByHql(hql,
+				CollectionUtils.newObjectMap("userId", user.getUserId()));
+
+		for (Map<String, Object> map : menuLst) {
+			map.put("children", CollectionUtils.newList());
+		}
+
+		String hqlRole = "select min(u.type)   from UserRole u , UserReRoleUser r where u.deleteFlag is false and r.deleteFlag is false and r.userId =:userId and u.roleId =r.roleId";
+
+		String maxRoleTypeStr = findUniqueByHql(hqlRole, CollectionUtils.newObjectMap("userId", user.getUserId()));
+		if (StringUtils.isBlank(maxRoleTypeStr)) {
+			return new Result(false, "该用户没有权限,登录失败");
+		}
+		Integer maxRoleType = Integer.valueOf(maxRoleTypeStr);
+		return new Result(true, "success", CollectionUtils.newObjectMap("menuLst", menuLst, "userName", user.getName(),
+				"userId", user.getUserId(), "imgPath", user.getImgPath(), "roleType", maxRoleType));
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java
new file mode 100644
index 0000000..bccf540
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java
@@ -0,0 +1,103 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.IFileUploadService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysAttachment;
+import com.qxueyou.scc.sys.model.SysFileUploadTrace;
+import com.qxueyou.scc.sys.service.ISysAttachmentService;
+
+/**
+ * 数据库配置服务
+ * @author kevin
+ *
+ */
+@Service
+public class SysAttachmentService extends CommonAppService implements ISysAttachmentService {
+	
+	private final Logger logger = LogManager.getLogger(SysAttachmentService.class);
+	
+	@Autowired
+	IFileUploadService fileUploadService;
+
+	@Override
+	public Result querySysAttachement(String relaedObjectId) {
+		
+		String hql = "from SysAttachment s where s.realatedObjectId = ? and s.deleteFlag is false order by s.createTime desc";
+
+		List<SysAttachment> lstAttachements = this.find(hql, CollectionUtils.newList(relaedObjectId), SysAttachment.class);
+
+		return new Result(true, "",lstAttachements);
+	}
+
+	@Override
+	public Result insertSysAttachment(String attachmentName, String attachmentPath,long fileSize , String relatedObjectId) {
+		SysAttachment attachement = null;
+		String fileSuffix = null;
+		Result result = new Result(false);
+		try {
+			fileSuffix = StringUtils.substring(attachmentPath, attachmentPath.lastIndexOf('.'));
+			attachement = new SysAttachment();
+			TraceUtils.setCreateTrace(attachement);
+			attachement.setAttachmentId(null);
+			attachement.setAttachmentName(attachmentName);
+			attachement.setAttachmentPath(attachmentPath);
+			attachement.setFileSize(fileSize);
+			attachement.setRealatedObjectId(relatedObjectId);
+			attachement.setFileSuffix(fileSuffix);
+			attachement.setAttachmentType(0);
+			this.save(attachement);
+			
+			// 更新上传文件使用轨迹
+			fileUploadService.updateUploadTrace(attachmentPath, "sys_attachment_file", SysFileUploadTrace.FILE_USE, attachement.getAttachmentId());			
+			result =new Result(true);
+			Map<String,Object> attrMap = new HashMap<String,Object>();
+			attrMap.put("attachmentId", attachement.getAttachmentId());
+			result.setData(attrMap);
+		} catch (Exception ex) {
+			logger.error("新增附件出错。。attachmentName="+attachmentName,ex);
+		}
+		
+		return result;
+	}
+
+	@Override
+	public Result deleteSysAttachement(String attachementIds) {
+		Result result = new Result(false);
+		SysAttachment tempAttach = null;
+		String[] arrAttachementId = null;
+		try {
+			// 保存到服务器
+			if(StringUtils.isEmpty(attachementIds)){
+				return new Result(false,"参数错误,需要删除的附件不存在");
+			}
+			
+			arrAttachementId = attachementIds.split(",");
+			for (String tempId : arrAttachementId) {
+				tempAttach = read(SysAttachment.class, tempId);
+				tempAttach.setDeleteFlag(true);
+				TraceUtils.setUpdateTrace(tempAttach);
+				this.save(tempAttach);
+			}
+			result = new Result(true);
+		} catch (Exception ex) {
+			logger.error("删除附件出错。。attachementIds="+attachementIds,ex);
+		}
+		return result;
+	}
+}
+
+
+
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/SysConfigService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/SysConfigService.java
new file mode 100644
index 0000000..95c7dd2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/SysConfigService.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import javax.transaction.Transactional;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.sys.model.SysConfig;
+import com.qxueyou.scc.sys.service.ISysConfigService;
+
+
+@Service
+public class SysConfigService extends CommonAppService implements ISysConfigService {
+
+	@Override
+	public String queryConfig(String key) {
+		String hql = " select value from SysConfig where configKey=?";
+		return findUnique(hql, CollectionUtils.newList(key), String.class);
+	}
+	
+
+	@Transactional()
+	@Override
+	public SysConfig doTestInsert() {
+		SysConfig config = new SysConfig();
+		config.setConfigKey("test_key");
+		config.setValue("test_val_"+Math.random());
+		this.insert(config);
+		return config;
+	}
+
+	@Override
+	public SysConfig doTestUpdate() {
+		String hql = "SELECT c FROM SysConfig c where c.configKey = ? ";
+		SysConfig config = findUnique(hql, CollectionUtils.newList("test_key"), SysConfig.class) ;
+		config.setValue("test_val_"+Math.random());
+		this.save(config);
+		return config;
+	}
+
+	@Override
+	public void doTestDelete() {
+		String hql = "SELECT c FROM SysConfig c where c.configKey = ? ";
+		SysConfig config = findUnique(hql, CollectionUtils.newList("test_key"), SysConfig.class) ;
+		this.deleteAll(CollectionUtils.newList(config));
+	}
+
+	@Override
+	public void doTestTransact() {
+		this.doTestInsert();
+		System.out.println(1/0);
+	}
+
+
+
+	@Override
+	public String queryConfigWithCache(String key, int expiredTime) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/SysLogService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/SysLogService.java
new file mode 100644
index 0000000..3f30fde
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/SysLogService.java
@@ -0,0 +1,33 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.ISysLogService;
+
+@Service
+public class SysLogService extends CommonAppService implements ISysLogService {
+
+	@Override
+	public Result insertLog(SysLog log) {
+
+		this.save(log);
+
+		return new Result(true);
+
+	}
+
+	@Override
+	public Result insertLogs(List<SysLog> logs) {
+
+		this.saveOrUpdateAll(logs);
+
+		return new Result(true);
+
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/TestKafkaService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/TestKafkaService.java
new file mode 100644
index 0000000..2ce1074
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/TestKafkaService.java
@@ -0,0 +1,26 @@
+package com.qxueyou.scc.sys.service.impl;
+
+//import java.util.concurrent.TimeUnit;
+//
+//import org.junit.Test;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.kafka.core.KafkaTemplate;
+
+public class TestKafkaService {
+//	@Autowired
+//	private Listener listener;
+//
+//	@Autowired
+//	private KafkaTemplate<Integer, String> template;
+//
+//	@Test
+//	public void testSimple() throws Exception {
+//	    template.send("annotated1", 0, "foo");
+//	    template.flush();
+////	    assertTrue(this.listener.latch1.await(10, TimeUnit.SECONDS));
+//	}
+	
+	
+}
+
+
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/TestService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/TestService.java
new file mode 100644
index 0000000..ef17452
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/TestService.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.service.ITestService;
+import com.qxueyou.scc.user.model.User;
+
+@Service
+public class TestService extends CommonAppService implements ITestService {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.sys.service.ITestService#addUser(java.lang.String,
+	 * java.lang.String)
+	 */
+	@Override
+	public String addUser(String name, String password,String account) {
+		User user = new User();
+		user.setName(name);
+		user.setAccount(account);
+		user.setPassword(password);
+		user.setAccount(name);
+		TraceUtils.setCreateTrace(user);
+		this.insert(user);
+
+		return "add success";
+	}
+
+	@Override
+	public String deleteUser(String userId) {
+		User user = read(User.class, userId);
+		TraceUtils.setUpdateTrace(user);
+		user.setDeleteFlag(true);
+
+		this.save(user);
+		return "delete  success";
+	}
+
+	@Override
+	public List<User> findUserList() {
+		String hql = "from User where deleteFlag is false";
+		List<User> userList = findByComplexHql(hql, null, User.class);
+
+		return userList;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java b/src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java
new file mode 100644
index 0000000..db25f99
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java
@@ -0,0 +1,127 @@
+package com.qxueyou.scc.sys.service.impl;
+
+import java.io.File;
+import java.io.InputStream;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.sys.service.IOssVideoService;
+
+/**
+ *上传服务
+ * 
+ * @author 德虎
+ * 
+ */
+@Service
+public class VideoOssService extends CommonAppService implements IOssVideoService {
+	private final  Logger log = LogManager.getLogger("VideoOssService");
+	
+	@Autowired
+	SccConfig sccConfig;
+	
+	private static String resRootPath;
+
+	/**
+	 * 初始化客户端
+	 */
+	@PostConstruct
+	private void init() {
+		resRootPath =sccConfig.getResRootPath();
+	}
+
+
+	/**
+	 * 上传视频文件:
+	 */
+	public Result uplpadVideoFile(File file, String destPath) {
+		String fullPath = null;
+		try {
+			fullPath = resRootPath + destPath;
+			File fileRoot = new File(fullPath.substring(0, fullPath.lastIndexOf("/")));
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			FileUtils.copyFile(file, new File(fullPath));
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return new Result(false);
+	}
+	
+	/**
+	 * 上传视频文件:
+	 */
+	public Result uplpadVideoFile(InputStream input,String fileFormat,long fileLength, String destPath) {
+		String fullPath = null;
+		try {
+			fullPath = (resRootPath + destPath).replace("//", "/");
+			File fileRoot = new File(fullPath.substring(0, fullPath.lastIndexOf("/")));
+			if(!fileRoot.exists()){
+				fileRoot.mkdirs();	
+			}
+			FileUtils.copyInputStreamToFile(input, new File(fullPath));
+			return new Result(true);
+		} catch (Exception e) {
+			log.error(e, e);
+		}finally{
+			IOUtils.closeQuietly(input);
+		}
+		return new Result(false);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.etraining.qxueyou.sys.service.IOssService#getObject(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public File getObject(String key, String directory) {
+		File sourceFile = null;
+		File targetFile = null;
+		String fullPath = null;
+		try {
+			sourceFile = new File(resRootPath + key);
+			if(sourceFile.exists()){
+				fullPath = resRootPath + directory;
+				File fileRoot = new File(fullPath.substring(0, fullPath.lastIndexOf("/")));
+				if(!fileRoot.exists()){
+					fileRoot.mkdirs();	
+				}
+				targetFile = new File(resRootPath + directory);
+				FileUtils.copyFile(sourceFile, targetFile);
+			}
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return targetFile;
+	}
+	
+	/**
+	 * 如果路径以 / 或 \ 开头,需要截取
+	 * @param destPath
+	 * @return
+	 */
+	public String chopPath(String destPath){
+		if(destPath.startsWith("/")||destPath.startsWith("\\")){
+			return destPath.substring(1);
+		}
+		return destPath;
+	}
+	
+    @Override
+	public boolean delObject(String key) {
+    	FileUtils.deleteQuietly(new File(resRootPath + key));
+    	return true;
+	}	
+}
diff --git a/src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java b/src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java
new file mode 100644
index 0000000..a6e39fb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java
@@ -0,0 +1,160 @@
+package com.qxueyou.scc.sys.utils;
+
+import org.springframework.core.io.ClassPathResource;
+
+import javax.imageio.ImageIO;
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @author luodong
+ * @version 1.0
+ * @date 2020/5/23 21:13
+ */
+public class DrawingUtil {
+	public static void main(String[] args) {
+//		try {
+//			DrawingUtil.drawImage("D:\\IDEA\\spax_alibaba\\spax_alibaba_user\\src\\main\\resources\\static\\ca1.jpg",
+//					"D:\\IDEA\\spax_alibaba\\spax_alibaba_user\\src\\main\\resources\\static\\ca.jpg","D:\\IDEA\\spax_alibaba\\spax_alibaba_user\\src\\main\\resources\\static\\1.jpg"
+//					,"张三",
+//					"123456",
+//					"深圳市保安员资格考试",
+//					"123456",
+//					"666",
+//					"圆融教育考试中心(深圳)",
+//					"圆融教育考试中心(深圳)考场16",
+//					"71区兴东众里创业社区3~5楼五楼502",
+//					"地铁5号线兴东站D出口(右转直行100米到达建设" +
+//							"工业园J栋兴东众里创业社区);驾车:导航" +
+//							"(圆融考试中心)可直达考场。无提供车位," +
+//							"建议公共交通出行。",
+//					"2016-02-02 9:00",
+//					"2016-02-02 9:00",
+//					"男");
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+	}
+	/**
+	 * @param  img    图片路径
+	 * @param sImg   小图片  980x994
+	 * @param name,    姓名
+	 * @param card,   号码
+	 * @param cname,   科目
+	 * @param number,  证号
+	 * @param ID,       座位
+	 * @param sitename,     考站名称
+	 * @param ename,     考场名称
+	 * @param address,     考场地址
+	 * @param traffic,     考点交通
+	 * @param starttime,  开始
+	 * @param  endtime   结束
+	 * @param  sex    	性别
+	 * */
+	public static void drawImage(String img,
+								 String sImg,
+//								 String nImg,
+								 String name,
+								 String card,
+								 String cname,
+								 String number,
+								 String ID,
+								 String sitename,
+								 String ename,
+								 String address,
+								 String traffic,
+								 String starttime,
+								 String endtime,
+								 String sex,
+								 OutputStream outputStream
+	) throws Exception {
+		//读入图片到内存
+		InputStream is = DrawingUtil.class.getClassLoader().getResourceAsStream(img);
+		//创建JPEG解码器
+		BufferedImage bufferImg = ImageIO.read(is);
+//		JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
+		//获取缓冲数据流
+//		BufferedImage bufferImg = jpegDecoder.decodeAsBufferedImage();
+		//得到画笔对象
+		Graphics g = bufferImg.getGraphics();
+
+		/*创建附加的小图片对象*/
+//		ClassPathResource classP = new ClassPathResource(sImg);
+//		ImageIcon imgIcon=new ImageIcon(classP.getURL());
+//		//得到Image对象
+//		Image simg =imgIcon.getImage();
+//		//将小图片绘到大图片上,位置信息:(x,y)
+//		g.drawImage(simg,1241,433,null);
+
+
+		//设置字体颜色
+		g.setColor(new Color(78,76,75));//78,76,75
+		//字体、字体大小
+		Font f = new Font("微软雅黑", Font.PLAIN, 38);
+		g.setFont(f);
+		//图片上绘制字符串内容,位置信息(x,y)
+		g.drawString(name, 500,489);
+		g.drawString(card, 500, 561);
+		g.drawString(cname, 500,629);
+		g.drawString(number, 500, 699);
+		g.drawString(ID, 500, 769);
+		g.drawString(sitename, 500,857);
+		g.drawString(ename,500,909);
+//		g.drawString(address, 500,979);
+		drawText(g.getFont().getSize(),500,979,700,5,g,address);
+//		g.drawString(traffic, 500,1157);
+		drawText(g.getFont().getSize(),500,1080,700,5,g,traffic);
+		g.drawString(starttime, 500, 1337);
+		g.drawString(endtime, 500, 1405);
+		g.drawString(sex, 1081,489);
+		g.dispose();
+//		//输出新图片
+//		OutputStream out = new FileOutputStream(nImg);
+		//解析内存中的图像数据
+//		JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(outputStream);
+//		en.encode(bufferImg);
+		ImageIO.write(bufferImg, "jpeg", outputStream);
+
+		//关闭流
+		is.close();
+//		out.close();
+	}
+
+	/**
+	 *  根据宽度自动换行
+	 * @param fontSize 字体大小
+	 * @param beginX   开始X
+	 * @param beginY	开始Y
+	 * @param imgWidth  区域宽度
+	 * @param rowSpacing  行距
+	 * @param g			画笔
+	 * @param text		文本
+	 */
+	public static void drawText(int fontSize,int beginX,int beginY,int imgWidth,int rowSpacing,Graphics g,String text){
+		//文字叠加,自动换行叠加
+		int tempX = beginX ;
+		int tempY = beginY ;
+		int tempCharLen = 0;//单字符长度
+		int tempLineLen = 0;//单行字符总长度临时计算
+		StringBuffer sb = new StringBuffer();
+		int textMaxWidth = imgWidth - 10;
+		for (int i = 0; i < text.length(); i++) {
+			char tempChar = text.charAt(i);
+			tempCharLen = g.getFontMetrics(g.getFont()).charWidth(tempChar);
+			tempLineLen += tempCharLen;
+			if (tempLineLen >= textMaxWidth) {
+				//长度已经满一行,进行文字叠加
+				g.drawString(sb.toString(), tempX, tempY);
+				sb.delete(0, sb.length());//清空内容,重新追加
+				tempY += (fontSize + rowSpacing);
+				tempLineLen = 0;
+			}
+			sb.append(tempChar);//追加字符
+		}
+		g.drawString(sb.toString(), tempX, tempY);//最后叠加余下的文字
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/dao/MediaLiveDAO.java b/src/main/java/com/qxueyou/scc/teach/live/dao/MediaLiveDAO.java
new file mode 100644
index 0000000..83ca0bd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/dao/MediaLiveDAO.java
@@ -0,0 +1,54 @@
+package com.qxueyou.scc.teach.live.dao;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import com.alibaba.druid.util.StringUtils;
+import com.qxueyou.scc.base.service.impl.RedisCacheBean;
+import com.qxueyou.scc.base.util.UUIDUtils;
+
+@Repository
+public class MediaLiveDAO {
+	
+	@Autowired
+	RedisCacheBean cache;
+
+	public void saveLiveClasses(String liveId,List<String> classIds) {
+		
+		List<String> origNoticeClasses = cache.lstAll("LiveClasses_"+liveId);
+		for(String classId:origNoticeClasses) {
+			cache.lstRemove("ClassLives_"+classId, liveId);
+		}
+		
+		cache.lstTrim("LiveClasses_"+liveId, 1, 0);
+		cache.lstRightPushAll("LiveClasses_"+liveId, classIds);
+		
+		for(String classId:classIds) {
+			cache.lstRightPush("ClassLives_"+classId, liveId);
+		}
+	}
+	
+	public List<String> getLiveClasses(String liveId) {
+		return cache.lstAll("LiveClasses_"+liveId);
+	}
+	
+	public List<String> getClassLives(String classId) {
+		return cache.lstAll("ClassLives_"+classId);
+	}
+	
+	public String getChatRoomId(String liveId) {
+		String chatRoomId = cache.get(liveId);
+		
+		if(StringUtils.isEmpty(chatRoomId)){
+			chatRoomId = UUIDUtils.UUID();
+			if(!cache.setIfAbsent(liveId,chatRoomId)){
+				return this.getChatRoomId(liveId);
+			}
+		}
+		
+		return chatRoomId;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
new file mode 100644
index 0000000..3de2cd5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
@@ -0,0 +1,727 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.Where;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.SchLiveReVideo;
+import com.qxueyou.scc.media.model.VideoLiveChatroom;
+import com.qxueyou.scc.teach.subject.model.Subject;
+
+
+/**
+ * 视频直播表  实体
+ * @author ody.yuan
+ *
+ */
+/**
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="MEDIA_VIDEO_LIVE")
+public class MediaVideoLive implements Serializable, ITrace {
+	
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = -313139100670956005L;
+
+	/** 草稿,新增直播默认状态 */
+	public static final short STATUS_LIVE_DRAFT = 0;
+	
+	/** 预告,当前不在直播状态 */
+	public static final short STATUS_LIVE_ORDER = 1;
+	
+	/** 直播 中,正在直播*/
+	public static final short STATUS_LIVE_LIVE = 2;
+	
+	/** 回放  */
+	public static final short STATUS_LIVE_REVIEW = 3;
+	
+	/** 废弃,后台查询不到网易直播的房间信息状态 */
+	public static final short STATUS_LIVE_TAKEOFF = 4;
+	
+	/** 暂停 ,直播中的暂停状态*/
+	public static final short STATUS_LIVE_PAUSE = 5;
+	
+	/** 回放下载中 ,下载完成后才是回放状态*/
+	public static final short STATUS_LIVE_DOWNLOAD = 6;
+	
+	/** 回放下载失败*/
+	public static final short STATUS_LIVE_DOWNLOAD_ERROR = 8;
+	
+	/** 回放下载成功*/
+	public static final short STATUS_LIVE_DOWNLOAD_SUCCESS = 7;
+	
+	/** 停止直播*/
+	public static final short STATUS_LIVE_STOP = 9;
+	
+	/** 待编辑状态*/
+	public static final short STATUS_LIVE_PREPARED = 10;
+	
+	/** 预处理失败*/
+	public static final short STATUS_LIVE_PREPARE_FAILD = 11;
+	
+	/** 编辑准备中*/
+	public static final short STATUS_LIVE_PREPARED_READY = 12;
+
+	/** 仅限班级 */
+	public static final String PERMISSION_STATUS_LIMITCLASS = "limitClass";
+	
+	/** 公开 */
+	public static final String PERMISSION_STATUS_PUBLIC = "public";
+	
+	/** 仅限机构 */
+	public static final String PERMISSION_STATUS_LIMITORG = "limitOrg";
+	
+	/** 预约观看 */
+	public static final String PERMISSION_STATUS_ORDERWATCH = "orderWatch";
+	
+	/** 直播 */
+	public static final int TYPE_LIVE_LIVE = 1;
+	
+	/** 回放 */
+	public static final int TYPE_LIVE_DOWNLOAD = 2;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_LIVE_ID", unique=true, nullable=false, length=32)
+	private String videoLiveId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  是否自动生成回放(0、是,1、否。默认为0) */
+	@Column(name="EDIT_REPLAY_FLAG", nullable=false)
+	private boolean editReplayFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  名称 */
+	@Column(name="NAME", length=128)
+	private String name;
+	
+	/**  状态 1:预告 2 直播  3 回放 4 废弃 */
+	@Column(name="STATUS")
+	private short status;
+	
+	/**  直播人ID */
+	@Column(name="ANCHOR_ID", length=32)
+	private String anchorId;
+	
+	/**  直播人 */
+	@Column(name="ANCHOR", length=128)
+	private String anchor;
+	
+	/**  预告图片URL  */
+	@Column(name="PREVIEW_IMG_URL",length=256)
+	private String previewImgUrl;
+	
+	/**  咨询图片URL  */
+	@Column(name="CONSULT_IMG_URL",length=256)
+	private String consultImgUrl;
+	
+	/**  预告片视频URL  */
+	@Column(name="PREVIEW_VIDEO_URL",length=256)
+	private String previewVideoUrl;
+	
+	/**  预约次数  */
+	@Column(name="ORDER_TIMES")
+	private Integer orderTimes;
+	
+	/**  直播观看人次  */
+	@Column(name="WATCH_TIMES")
+	private Integer watchTimes;
+	
+	/**  点赞人次  */
+	@Column(name="PRAISE_TIMES")
+	private Integer praiseTimes;
+	
+	/**  直播最高观看人次  */
+	@Column(name="WATCH_MAX_TIMES")
+	private Integer watchMaxTimes;
+	
+	/**  回放次数  */
+	@Column(name="REVIEW_TIMES")
+	private Integer reviewTimes;
+	
+	/**  报名人数上限  */
+	@Column(name="WATCHER_LIMIT")
+	private Integer watcherLimit;
+	
+	/**  备注详情 */
+	@Column(name="REMARK", length=16777215)
+	private String remark;
+	
+	/** 直播预计开始时间  */
+	@Column(name="START_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date startTime;
+	
+	/** 直播预计结束时间  */
+	@Column(name="END_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date endTime;
+	
+	/** 是否按时开始直播,误差5分钟内  */
+	@Column(name="ON_TIME_FLAG")
+	private boolean onTimeFlag;
+
+	/** 是否有完成直播  */
+	@Column(name="COMPLETE_FLAG")
+	private boolean completeFlag;
+	
+	/** 腾讯云房间号码  */
+	@Column(name="TECENT_LIVE_NUMBER", length=128)
+	private String tecentLiveNumber;
+	
+	/** 网易云信房间号码  */
+	@Column(name="WY_LIVE_NUMBER", length=128)
+	private String wyLiveNumber;
+	
+	/** 网易云信直播推流url  */
+	@Column(name="WY_PUSH_URL", length=128)
+	private String pushUrl;
+	
+	/** 网易云信直播拉流:httpPullUrl   */
+	@Column(name="WY_HTTP_PULL_URL", length=128)
+	private String httpPullUrl;
+	
+	/** 网易云信直播拉流:hlsPullUrl    */
+	@Column(name="WY_HLS_PULL_URL", length=128)
+	private String hlsPullUrl;
+	
+	/** 网易云信直播拉流:rtmpPullUrl   */
+	@Column(name="WY_RTMP_PULL_URL", length=128)
+	private String rtmpPullUrl;
+	
+	/**  权限:limitClass:仅限班级  public:公开  orderWatch:预约观看  limitOrg:仅限机构  */
+	@Column(name="PERMISSION", length=32)
+	private String permission;
+	
+	/** 清晰度  LD:流畅  SD:标清   HD:高清  */
+	@Column(name="DEFINITION", length=32)
+	private String definition;
+	
+	/** 预计时长  单位:分钟  */
+	@Column(name="EXPECTED_TIMES")
+	private Integer expectedTimes;
+	
+	/** 实际播放时长   单位:秒   */
+	@Column(name="PLAY_TIMES")
+	private BigInteger playTimes;
+
+	/** 分享次数  */
+	@Column(name="SHARE_TIMES")
+	private BigInteger shareTimes;
+	
+	/** 扩展字段(显示异常、预处理失败及进度条)  */
+	@Column(name="ATTRIBUTE")
+	private String attribute;
+	
+	/** 网易状态回调,记录最后录制时间 */
+	@Column(name="LAST_RECORD_TIME")
+	@JsonIgnore
+	private long lastRecordTime;
+	
+	/**  唐桥会议id */
+	@Column(name="TQ_MEETING_ID", length=32)
+	private String meetingId;
+	
+	/**  唐桥加入课堂密码 */
+	@Column(name="TQ_MEETING_PWD", length=32)
+	private String meetingPwd;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "videoLive")
+	@JsonIgnore
+	private List<SchLiveReVideo> liveReVideos;
+	
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "mediaVideoLive")
+	@JsonIgnore
+	private List<VideoLiveChatroom> videoLiveChatrooms;
+	
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
+	@JoinTable(name = "MEDIA_VIDEO_LIVE_RE_CLASS", joinColumns = { 
+			@JoinColumn(name = "LIVE_ID") }, 
+			inverseJoinColumns = { @JoinColumn(name = "CLASS_ID") })
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@CollectionId(
+		        columns = @Column(name="LIVE_RE_CLASS_ID"), 
+		        type=@Type(type="string"), 
+		        generator = "hibernate-uuid"
+		    )
+	@Where(clause="DELETE_FLAG=0")
+	private List<ClsClass> classes;
+	
+	@Transient
+	private List<MediaVideo> lstVideoVO;
+	
+	@Column(name="SUBJECT_ID")
+	private String subjectId;
+	
+	@Column(name="SUBJECT_NAME")
+	private String subjectName;
+	
+	@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+	@JoinColumn(name = "SUBJECT_ID",referencedColumnName="SUBJECT_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private Subject subject;
+	
+	@Transient
+	private int lotteryItemCount;
+	
+	public int getLotteryItemCount() {
+		return lotteryItemCount;
+	}
+
+	public boolean getEditReplayFlag() {
+		return editReplayFlag;
+	}
+
+	public void setEditReplayFlag(boolean editReplayFlag) {
+		this.editReplayFlag = editReplayFlag;
+	}
+	
+	public void setLotteryItemCount(int lotteryItemCount) {
+		this.lotteryItemCount = lotteryItemCount;
+	}
+
+	public List<MediaVideo> getLstVideoVO() {
+		return lstVideoVO;
+	}
+
+	public void setLstVideoVO(List<MediaVideo> lstVideoVO) {
+		this.lstVideoVO = lstVideoVO;
+	}
+
+	public String getVideoLiveId() {
+		return videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getAnchorId() {
+		return anchorId;
+	}
+
+	public void setAnchorId(String anchorId) {
+		this.anchorId = anchorId;
+	}
+
+	public String getAnchor() {
+		return anchor;
+	}
+
+	public void setAnchor(String anchor) {
+		this.anchor = anchor;
+	}
+
+	public String getPreviewImgUrl() {
+		return previewImgUrl;
+	}
+
+	public void setPreviewImgUrl(String previewImgUrl) {
+		this.previewImgUrl = previewImgUrl;
+	}
+	
+	public String getPreviewVideoUrl() {
+		return previewVideoUrl;
+	}
+	
+	public void setConsultImgUrl(String consultImgUrl) {
+		this.consultImgUrl = consultImgUrl;
+	}
+	
+	public String getConsultImgUrl() {
+		return consultImgUrl;
+	}
+
+	public void setPreviewVideoUrl(String previewVideoUrl) {
+		this.previewVideoUrl = previewVideoUrl;
+	}
+   
+	public Integer getOrderTimes() {
+		return orderTimes;
+	}
+
+	public void setOrderTimes(Integer orderTimes) {
+		this.orderTimes = orderTimes;
+	}
+
+	public Integer getWatchTimes() {
+		return watchTimes;
+	}
+
+	public void setWatchTimes(Integer watchTimes) {
+		this.watchTimes = watchTimes;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Date getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+
+	public Date getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Date endTime) {
+		this.endTime = endTime;
+	}
+
+	public boolean getOnTimeFlag() {
+		return onTimeFlag;
+	}
+
+	public void setOnTimeFlag(boolean onTimeFlag) {
+		this.onTimeFlag = onTimeFlag;
+	}
+
+	public boolean getCompleteFlag() {
+		return completeFlag;
+	}
+
+	public void setCompleteFlag(boolean completeFlag) {
+		this.completeFlag = completeFlag;
+	}
+
+	public String getTecentLiveNumber() {
+		return tecentLiveNumber;
+	}
+
+	public void setTecentLiveNumber(String tecentLiveNumber) {
+		this.tecentLiveNumber = tecentLiveNumber;
+	}
+
+	public List<SchLiveReVideo> getLiveReVideos() {
+		return liveReVideos;
+	}
+
+	public void setLiveReVideos(List<SchLiveReVideo> liveReVideos) {
+		this.liveReVideos = liveReVideos;
+	}
+	
+	public List<VideoLiveChatroom> getVideoLiveChatrooms() {
+		return videoLiveChatrooms;
+	}
+
+	public void setVideoLiveChatrooms(List<VideoLiveChatroom> videoLiveChatrooms) {
+		this.videoLiveChatrooms = videoLiveChatrooms;
+	}
+
+	public Integer getWatcherLimit() {
+		return watcherLimit;
+	}
+
+	public void setWatcherLimit(Integer watcherLimit) {
+		this.watcherLimit = watcherLimit;
+	}
+
+	public String getWyLiveNumber() {
+		return wyLiveNumber;
+	}
+
+	public void setWyLiveNumber(String wyLiveNumber) {
+		this.wyLiveNumber = wyLiveNumber;
+	}
+
+	public String getPushUrl() {
+		return pushUrl;
+	}
+
+	public void setPushUrl(String pushUrl) {
+		this.pushUrl = pushUrl;
+	}
+
+	public String getHttpPullUrl() {
+		return httpPullUrl;
+	}
+
+	public void setHttpPullUrl(String httpPullUrl) {
+		this.httpPullUrl = httpPullUrl;
+	}
+
+	public String getHlsPullUrl() {
+		return hlsPullUrl;
+	}
+
+	public void setHlsPullUrl(String hlsPullUrl) {
+		this.hlsPullUrl = hlsPullUrl;
+	}
+
+	public String getRtmpPullUrl() {
+		return rtmpPullUrl;
+	}
+
+	public void setRtmpPullUrl(String rtmpPullUrl) {
+		this.rtmpPullUrl = rtmpPullUrl;
+	}
+
+	public Integer getWatchMaxTimes() {
+		return watchMaxTimes;
+	}
+
+	public void setWatchMaxTimes(Integer watchMaxTimes) {
+		this.watchMaxTimes = watchMaxTimes;
+	}
+
+	public Integer getReviewTimes() {
+		return reviewTimes;
+	}
+
+	public void setReviewTimes(Integer reviewTimes) {
+		this.reviewTimes = reviewTimes;
+	}
+
+	public String getPermission() {
+		return permission;
+	}
+
+	public void setPermission(String permission) {
+		this.permission = permission;
+	}
+
+	public String getDefinition() {
+		return definition;
+	}
+
+	public void setDefinition(String definition) {
+		this.definition = definition;
+	}
+
+	public Integer getExpectedTimes() {
+		return expectedTimes;
+	}
+
+	public void setExpectedTimes(Integer expectedTimes) {
+		this.expectedTimes = expectedTimes;
+	}
+
+	public BigInteger getShareTimes() {
+		return shareTimes;
+	}
+
+	public void setShareTimes(BigInteger shareTimes) {
+		this.shareTimes = shareTimes;
+	}
+
+	public BigInteger getPlayTimes() {
+		return playTimes;
+	}
+
+	public void setPlayTimes(BigInteger playTimes) {
+		this.playTimes = playTimes;
+	}
+
+	public String getAttribute() {
+		return attribute;
+	}
+
+	public void setAttribute(String attribute) {
+		this.attribute = attribute;
+	}
+
+	public long getLastRecordTime() {
+		return lastRecordTime;
+	}
+
+	public void setLastRecordTime(long lastRecordTime) {
+		this.lastRecordTime = lastRecordTime;
+	}
+
+	public String getMeetingId() {
+		return meetingId;
+	}
+
+	public void setMeetingId(String meetingId) {
+		this.meetingId = meetingId;
+	}
+
+	public String getMeetingPwd() {
+		return meetingPwd;
+	}
+
+	public void setMeetingPwd(String meetingPwd) {
+		this.meetingPwd = meetingPwd;
+	}
+
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public List<ClsClass> getClasses() {
+		return classes;
+	}
+
+	public void setClasses(List<ClsClass> classes) {
+		this.classes = classes;
+	}
+
+	public Integer getPraiseTimes() {
+		return praiseTimes;
+	}
+
+	public void setPraiseTimes(Integer praiseTimes) {
+		this.praiseTimes = praiseTimes;
+	}
+
+	public Subject getSubject() {
+		return subject;
+	}
+
+	public void setSubject(Subject subject) {
+		this.subject = subject;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java
new file mode 100644
index 0000000..9cfaf87
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java
@@ -0,0 +1,201 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 剪辑片段
+ * The persistent class for the media_video_live_clip database table.
+ * 
+ */
+@Entity
+@Table(name="media_video_live_clip")
+@NamedQuery(name="MediaVideoLiveClip.findAll", query="SELECT m FROM MediaVideoLiveClip m")
+public class MediaVideoLiveClip implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="clip_id")
+	private String clipId;
+
+	/** 创建人ID */
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**  创建人 */
+	private String creator;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人  */
+	private String updator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	/**  时长 */
+	private Integer duration;
+
+	/**  版本ID */
+	@Column(name="VERSION_ID")
+	private String versionId;
+
+	/** 开始时间 */
+	@Column(name="BEGIN_TIME")
+	private Integer beginTime;
+
+	/** 结束时间 */
+	@Column(name="end_Time")
+	private Integer endTime;
+	
+	/** 片段编号 */
+	@Column(name="clip_num")
+	private int clipNum;
+	
+	/**  直播ID */
+	@Column(name="video_live_id")
+	private String videoLiveId;
+
+	public Integer getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(Integer beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Integer getDuration() {
+		return duration;
+	}
+
+	public void setDuration(Integer duration) {
+		this.duration = duration;
+	}
+
+
+	public String getClipId() {
+		return this.clipId;
+	}
+
+	public void setClipId(String clipId) {
+		this.clipId = clipId;
+	}
+
+	public int getClipNum() {
+		return this.clipNum;
+	}
+
+	public void setClipNum(int clipNum) {
+		this.clipNum = clipNum;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getVersionId() {
+		return versionId;
+	}
+
+	public void setVersionId(String versionId) {
+		this.versionId = versionId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Integer getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(Integer endTime) {
+		this.endTime = endTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getVideoLiveId() {
+		return this.videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java
new file mode 100644
index 0000000..1ffc827
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java
@@ -0,0 +1,170 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 剪辑版本
+ * 
+ * The persistent class for the media_video_live_clip_ver database table.
+ * 
+ */
+@Entity
+@Table(name="media_video_live_clip_ver")
+@NamedQuery(name="MediaVideoLiveClipVer.findAll", query="SELECT m FROM MediaVideoLiveClipVer m")
+public class MediaVideoLiveClipVer implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  是否最新版本 : 1、最新版本  2、旧版本  **/
+	public static final short ISNEW_NEW = 1;
+	public static final short ISNEW_OLD = 2;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="version_id")
+	private String versionId;
+
+	/** 创建人ID */
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/** 创建人 */
+	private String creator;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	/**  创建时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	private String updator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	/**  是否最新版本 */
+	@Column(name="is_new")
+	private short isNew;
+
+	/**  版本编号 */
+	@Column(name="version_no")
+	private String versionNo;
+
+	/**  直播ID */
+	@Column(name="video_live_id")
+	private String videoLiveId;
+
+	public String getVersionId() {
+		return this.versionId;
+	}
+
+	public void setVersionId(String versionId) {
+		this.versionId = versionId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public short getIsNew() {
+		return this.isNew;
+	}
+
+	public void setIsNew(short isNew) {
+		this.isNew = isNew;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getVersionNo() {
+		return this.versionNo;
+	}
+
+	public void setVersionNo(String versionNo) {
+		this.versionNo = versionNo;
+	}
+
+	public String getVideoLiveId() {
+		return this.videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java
new file mode 100644
index 0000000..40cf6c4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java
@@ -0,0 +1,280 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 视频直播扩展表
+ * @author zhiyong
+ *
+ */
+@Entity
+@Table(name="media_video_live_extend")
+public class MediaVideoLiveExtend implements Serializable, ITrace {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4933960856649570706L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_LIVE_EXTEND_ID", unique=true, nullable=false, length=32)
+	private String videoLiveExtendId;
+	
+	@Column(name="VIDEO_LIVE_ID", length=32)
+	private String videoLiveId;
+	
+	/**  用户IP */
+	@Column(name="USER_IP", length=32)
+	private String userIp;
+	
+	/** 流名  */
+	@Column(name="TQ_STREAM_NAME", length=64)
+	private String streamName;
+	
+	/** 用户显示名  */
+	@Column(name="TQ_USER_DISPLAY_NAME", length=64)
+	private String userDisplayName;
+	
+	/** 主持人密码。默认值123456 */
+	@Column(name="TQ_HOST_PWD", length=32)
+	private String hostPwd;
+	
+	/** pc端访问地址 */
+	@Column(name="TQ_activeX_Url", length=1024)
+	private String activeXUrl;
+	
+	/**  课堂私密性属性 (默认是1)1:公开课堂2:内部课堂3:私密课堂  */
+	@Column(name="TQ_MEETING_CONTROL")
+	private Integer meetingControl;
+	
+	/**  课堂类型(默认是3)1:培训模式 2:大会模式 3:讨论模式  */
+	@Column(name="TQ_MEETING_TYPE")
+	private Integer meetingType;
+	
+	/** 课堂锁定状态//1 锁定 0 未锁定*/
+	@Column(name="TQ_MEETING_LOCK")
+	private Integer meetingLock;
+	
+	/**  老师可以提前进入课堂的时间  */
+	@Column(name="TQ_ALLOW_STARTTIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date allowStartTime;
+	
+	/** 提示老师课堂即将强制结束的时间  */
+	@Column(name="TQ_ALERT_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date alertTime;
+	
+	/** 课堂强制结束的时间  */
+	@Column(name="TQ_FORCE_ENDTIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	private Date forceEndTime;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getVideoLiveExtendId() {
+		return videoLiveExtendId;
+	}
+
+	public void setVideoLiveExtendId(String videoLiveExtendId) {
+		this.videoLiveExtendId = videoLiveExtendId;
+	}
+
+	public String getVideoLiveId() {
+		return videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+	public String getUserIp() {
+		return userIp;
+	}
+
+	public void setUserIp(String userIp) {
+		this.userIp = userIp;
+	}
+
+	public String getUserDisplayName() {
+		return userDisplayName;
+	}
+
+	public void setUserDisplayName(String userDisplayName) {
+		this.userDisplayName = userDisplayName;
+	}
+
+	public String getHostPwd() {
+		return hostPwd;
+	}
+
+	public void setHostPwd(String hostPwd) {
+		this.hostPwd = hostPwd;
+	}
+
+	public Integer getMeetingControl() {
+		return meetingControl;
+	}
+
+	public void setMeetingControl(Integer meetingControl) {
+		this.meetingControl = meetingControl;
+	}
+
+	public Integer getMeetingType() {
+		return meetingType;
+	}
+
+	public void setMeetingType(Integer meetingType) {
+		this.meetingType = meetingType;
+	}
+
+	public Integer getMeetingLock() {
+		return meetingLock;
+	}
+
+	public void setMeetingLock(Integer meetingLock) {
+		this.meetingLock = meetingLock;
+	}
+
+	public Date getAllowStartTime() {
+		return allowStartTime;
+	}
+
+	public void setAllowStartTime(Date allowStartTime) {
+		this.allowStartTime = allowStartTime;
+	}
+
+	public Date getAlertTime() {
+		return alertTime;
+	}
+
+	public void setAlertTime(Date alertTime) {
+		this.alertTime = alertTime;
+	}
+
+	public Date getForceEndTime() {
+		return forceEndTime;
+	}
+
+	public void setForceEndTime(Date forceEndTime) {
+		this.forceEndTime = forceEndTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getActiveXUrl() {
+		return activeXUrl;
+	}
+
+	public void setActiveXUrl(String activeXUrl) {
+		this.activeXUrl = activeXUrl;
+	}
+
+	public String getStreamName() {
+		return streamName;
+	}
+
+	public void setStreamName(String streamName) {
+		this.streamName = streamName;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java
new file mode 100644
index 0000000..a04a277
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java
@@ -0,0 +1,184 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 直播-用户预约表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="MEDIA_VIDEO_LIVE_ORDER")
+@NamedQuery(name="MediaVideoLiveOrder.findAll", query="SELECT m FROM MediaVideoLiveOrder m")
+public class MediaVideoLiveOrder implements Serializable, ITrace {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1315180569787136077L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_ORDER_ID", unique=true, nullable=false, length=32)
+	private String videoOrderId;
+	
+	/**  预约的直播ID */
+	@Column(name="LIVE_VIDEO_ID", length=32)
+	private String liveVideoId;
+	
+	/**  预约直播用户ID */
+	@Column(name="ORDER_USER_ID", length=32)
+	private String orderUserId;
+	
+	/**  预约直播结果,是否成功 */
+	@Column(name="ORDER_FLAG")
+	private boolean orderFlag;
+	
+	/**  预约发生时间 */
+	@Column(name="ORDER_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date orderTime;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+
+	public String getVideoOrderId() {
+		return videoOrderId;
+	}
+
+	public void setVideoOrderId(String videoOrderId) {
+		this.videoOrderId = videoOrderId;
+	}
+
+	public String getLiveVideoId() {
+		return liveVideoId;
+	}
+
+	public void setLiveVideoId(String liveVideoId) {
+		this.liveVideoId = liveVideoId;
+	}
+
+	public String getOrderUserId() {
+		return orderUserId;
+	}
+
+	public void setOrderUserId(String orderUserId) {
+		this.orderUserId = orderUserId;
+	}
+
+	public boolean getOrderFlag() {
+		return orderFlag;
+	}
+
+	public void setOrderFlag(boolean orderFlag) {
+		this.orderFlag = orderFlag;
+	}
+
+	public Date getOrderTime() {
+		return orderTime;
+	}
+
+	public void setOrderTime(Date orderTime) {
+		this.orderTime = orderTime;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReClass.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReClass.java
new file mode 100644
index 0000000..45133b0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReClass.java
@@ -0,0 +1,169 @@
+package com.qxueyou.scc.teach.live.model;
+// Generated 2018-8-28 10:42:29 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * MediaVideoLiveReClass generated by hbm2java
+ */
+@Entity
+@Table(name = "MEDIA_VIDEO_LIVE_RE_CLASS")
+public class MediaVideoLiveReClass implements java.io.Serializable,ITrace {
+
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1584952679485218134L;
+	private String liveReClassId;
+	private String classId;
+	private String liveId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	
+	public MediaVideoLiveReClass() {
+	}
+
+	public MediaVideoLiveReClass(String liveReClassId, String classId, String liveId, Date createTimne,
+			String creator, String createId, boolean deleteFlag) {
+		this.liveReClassId = liveReClassId;
+		this.classId = classId;
+		this.liveId = liveId;
+		this.createTime = createTimne;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public MediaVideoLiveReClass(String liveReClassId, String classId, String liveId, Date createTimne,
+			Date updateTime, String creator, String createId, String updator, String updateId, boolean deleteFlag) {
+		this.liveReClassId = liveReClassId;
+		this.classId = classId;
+		this.liveId = liveId;
+		this.createTime = createTimne;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "LIVE_RE_CLASS_ID", unique = true, nullable = false, length = 32)
+	public String getLiveReClassId() {
+		return this.liveReClassId;
+	}
+
+	public void setLiveReClassId(String liveReClassId) {
+		this.liveReClassId = liveReClassId;
+	}
+
+	@Column(name = "CLASS_ID", nullable = false, length = 32)
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "LIVE_ID", nullable = false, length = 32)
+	public String getLiveId() {
+		return this.liveId;
+	}
+
+	public void setLiveId(String liveId) {
+		this.liveId = liveId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTimne) {
+		this.createTime = createTimne;
+	}
+
+	@Column(name = "UPDATE_TIME", length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java
new file mode 100644
index 0000000..3e156d1
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java
@@ -0,0 +1,320 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="MEDIA_VIDEO_LIVE_RECORD")
+public class MediaVideoLiveRecord implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/** 直播 */
+	public static final int RECORD_LIVE = 1;
+	
+	/** 回放 */
+	public static final int RECORD_PLAY_BACK = 2;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="VIDEO_RECORD_ID", unique=true, nullable=false, length=32)
+	private String videoRecordId;
+	
+	/**  创建者ID */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  机构ID */
+	@Column(name="ORG_ID",length=32)
+	private String orgId;
+	
+	/**  班级ID */
+	@Column(name="CLASS_ID",length=32)
+	private String classId;
+	
+	/**  视频ID */
+	@Column(name="VIDEO_ID",length=32)
+	private String videoId;
+	
+	/**  直播ID */
+	@Column(name="LIVE_ID",length=32)
+	private String liveId;
+	
+	/**  用户ID */
+	@Column(name="USER_ID",length=32)
+	private String userId;
+	
+	/**  记录类型(1 直播  2 回放)*/
+	@Column(name="TYPE",length=1)
+	private Integer type;
+	/**  观看进度 (观看视频的进度) */
+	@Column(name="WATCH_TIME",length=11)
+	private Integer watchTime;
+	
+	/** 离开时间 */
+	@Column(name="LEAVE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date leaveTime;
+	
+	/** 播放时间()*/
+	@Column(name="PLAY_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date playTime;
+	
+	/**  网络 */
+	@Column(name="NETWORK",length=15)
+	private String network;
+	
+	/**  平台 */
+	@Column(name="PLATFORM",length=15)
+	private String platform;
+	
+	/**  版本 */
+	@Column(name="VERSION",length=15)
+	private String version;
+	
+	/**  机型 */
+	@Column(name="model",length=50)
+	private String model;
+	
+	/**  app版本 */
+	@Column(name="APP_VERSION",length=15)
+	private String appVersion;
+	
+	/**  运营商 */
+	@Column(name="OPERATOR",length=15)
+	private String operator;
+
+	public String getVideoRecordId() {
+		return videoRecordId;
+	}
+
+	public void setVideoRecordId(String videoRecordId) {
+		this.videoRecordId = videoRecordId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getVideoId() {
+		return videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+
+	public Integer getWatchTime() {
+		return watchTime;
+	}
+
+	public void setWatchTime(Integer watchTime) {
+		this.watchTime = watchTime;
+	}
+
+
+
+	public Date getLeaveTime() {
+		return leaveTime;
+	}
+
+	public void setLeaveTime(Date leaveTime) {
+		this.leaveTime = leaveTime;
+	}
+
+	public Date getPlayTime() {
+		return playTime;
+	}
+
+	public void setPlayTime(Date playTime) {
+		this.playTime = playTime;
+	}
+
+	public String getNetwork() {
+		return network;
+	}
+
+	public void setNetwork(String network) {
+		this.network = network;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getAppVersion() {
+		return appVersion;
+	}
+
+	public void setAppVersion(String appVersion) {
+		this.appVersion = appVersion;
+	}
+
+	public String getOperator() {
+		return operator;
+	}
+
+	public void setOperator(String operator) {
+		this.operator = operator;
+	}
+
+	public String getLiveId() {
+		return liveId;
+	}
+
+	public void setLiveId(String liveId) {
+		this.liveId = liveId;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+	
+	
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java
new file mode 100644
index 0000000..80b1923
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java
@@ -0,0 +1,343 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 直播回放 - 原视频
+ * 
+ * @author lihanqi
+ *
+ */
+@Entity
+@Table(name="MEDIA_VIDEO_LIVE_REPLAY")
+@NamedQuery(name="MediaVideoLiveReplay.findAll", query="SELECT m FROM MediaVideoLiveReplay m")
+public class MediaVideoLiveReplay implements Serializable, ITrace {
+	
+	private static final long serialVersionUID = -313139100670956005L;
+	
+	public static final short LIVE_REPLAY_CONSTANT_0 = 0;
+	public static final short LIVE_REPLAY_CONSTANT_1 = 1;
+	public static final short LIVE_REPLAY_CONSTANT_2 = 2;
+	
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="LIVE_REPLAY_ID", unique=true, nullable=false, length=32)
+	private String liveReplayId;
+	
+	/** 创建人ID */
+	@Column(name="CREATE_ID", length=32)
+	private String createId;
+	
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	
+	/**  创建人 */
+	@Column(name="CREATOR", length=100)
+	private String creator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	/**  修改人ID */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+	
+	/**  修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	/**  修改人 */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  名称 */
+	@Column(name="NAME", length=128)
+	private String name;
+	
+	/**  简称 */
+	@Column(name="SHORT_NAME", length=32)
+	private String shortName;
+	
+	/** 状态(是否参与裁剪:0参与,1不参与 。默认参与) */
+	@Column(name="STATUS")
+	private short status;
+	
+	/** 视频来源:0网易1上传*/
+	@Column(name="DATA_SOURCE")
+	private int dataSource;
+	
+	/** 视频排序 */
+	@Column(name="ORDER_NO")
+	private int orderNo;
+	
+	/**  下载状态:是否下载中 */
+	@Column(name="DOWN_LOAD_FLAG")
+	private short downLoadFlag;
+	
+	/** 关联直播id */
+	@Column(name="VIDEO_LIVE_ID", length=32)
+	private String videoLiveId;
+	
+	/** 关联网易直播id */
+	@Column(name="WY_LIVE_NUMBER", length=32)
+	private String wyLiveNumber;
+	
+	/** 网易用户id */
+	@Column(name="WY_UID", length=32)
+	private String wyUid;
+	
+	/** 网易点播视频id主键 */
+	@Column(name="WY_VID", length=32)
+	private String wyVid;
+	
+	/** 播放地址 */
+	@Column(name="URL", length=255)
+	private String url;
+	
+	/** 视频开始时间 */
+	@Column(name="BEGIN_TIME", length=15)
+	private long beginTime;
+	
+	/** 视频结束时间 */
+	@Column(name="end_Time", length=15)
+	private long endTime;
+	
+	/** 时长 */
+	@Column(name="duration", length=15)
+	private long duration;
+	
+	/** 视频大小 */
+	@Column(name="INITIAL_SIZE", length=10)
+	private long initialSize;
+	
+	/**  是否下载中 */
+	@Transient
+	private Long downLoadSize;
+	
+	/**  第一张缩略图  */
+	@Transient
+	private String imgUrl;
+
+	public int getDataSource() {
+		return dataSource;
+	}
+
+	public void setDataSource(int dataSource) {
+		this.dataSource = dataSource;
+	}
+
+	public int getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(int orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public Long getDownLoadSize() {
+		return downLoadSize;
+	}
+
+	public void setDownLoadSize(Long downLoadSize) {
+		this.downLoadSize = downLoadSize;
+	}
+
+	public short getDownLoadFlag() {
+		return downLoadFlag;
+	}
+
+	public void setDownLoadFlag(short downLoadFlag) {
+		this.downLoadFlag = downLoadFlag;
+	}
+
+	public long getInitialSize() {
+		return initialSize;
+	}
+
+	public void setInitialSize(long initialSize) {
+		this.initialSize = initialSize;
+	}
+
+	public String getLiveReplayId() {
+		return liveReplayId;
+	}
+
+	public void setLiveReplayId(String liveReplayId) {
+		this.liveReplayId = liveReplayId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public short getStatus() {
+		return status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getVideoLiveId() {
+		return videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+	public String getWyLiveNumber() {
+		return wyLiveNumber;
+	}
+
+	public void setWyLiveNumber(String wyLiveNumber) {
+		this.wyLiveNumber = wyLiveNumber;
+	}
+
+	public long getDuration() {
+		return duration;
+	}
+
+	public void setDuration(long duration) {
+		this.duration = duration;
+	}
+
+	@Override
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public String getWyUid() {
+		return wyUid;
+	}
+
+	public void setWyUid(String wyUid) {
+		this.wyUid = wyUid;
+	}
+
+	public String getWyVid() {
+		return wyVid;
+	}
+
+	public void setWyVid(String wyVid) {
+		this.wyVid = wyVid;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public long getBeginTime() {
+		return beginTime;
+	}
+
+	public void setBeginTime(long beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public long getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(long endTime) {
+		this.endTime = endTime;
+	}
+
+	public String getImgUrl() {
+		return imgUrl;
+	}
+
+	public void setImgUrl(String imgUrl) {
+		this.imgUrl = imgUrl;
+	}
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java
new file mode 100644
index 0000000..c0017bf
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java
@@ -0,0 +1,210 @@
+package com.qxueyou.scc.teach.live.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 剪辑明细  实体类
+ * 
+ */
+@Entity
+@Table(name="media_video_live_replay_re_clip")
+@NamedQuery(name="MediaVideoLiveReplayReClip.findAll", query="SELECT m FROM MediaVideoLiveReplayReClip m")
+public class MediaVideoLiveReplayReClip implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键 */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="re_id")
+	private String reId;
+	
+	/**  截取对应的片段id */
+	@Column(name="clip_id")
+	private String clipId;
+
+	/** 创建人ID */
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	/**  创建时间 */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**  创建人 */
+	private String creator;
+
+	/**  修改人ID */
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	/** 修改时间 */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人 */
+	private String updator;
+	
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	private Integer duration;
+
+	/** 开始时间 */
+	@Column(name="begin_time")
+	private Integer beginTime;
+	
+	/** 结束时间 */
+	@Column(name="end_time")
+	private Integer endTime;
+
+	/** 排序 */
+	@Column(name="order_no")
+	private int orderNo;
+
+	/** 回放-原视频Id */
+	@Column(name="replay_id")
+	private String replayId;
+
+	/** 直播Id */
+	@Column(name="video_live_id")
+	private String videoLiveId;
+
+	public String getClipId() {
+		return clipId;
+	}
+
+	public void setClipId(String clipId) {
+		this.clipId = clipId;
+	}
+
+	public String getReId() {
+		return this.reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public Integer getBeginTime() {
+		return this.beginTime;
+	}
+
+	public void setBeginTime(Integer beginTime) {
+		this.beginTime = beginTime;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Integer getDuration() {
+		return this.duration;
+	}
+
+	public void setDuration(Integer duration) {
+		this.duration = duration;
+	}
+
+	public Integer getEndTime() {
+		return this.endTime;
+	}
+
+	public void setEndTime(Integer endTime) {
+		this.endTime = endTime;
+	}
+
+	public int getOrderNo() {
+		return this.orderNo;
+	}
+
+	public void setOrderNo(int orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public String getReplayId() {
+		return this.replayId;
+	}
+
+	public void setReplayId(String replayId) {
+		this.replayId = replayId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getVideoLiveId() {
+		return this.videoLiveId;
+	}
+
+	public void setVideoLiveId(String videoLiveId) {
+		this.videoLiveId = videoLiveId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java b/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
new file mode 100644
index 0000000..b8d75bc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
@@ -0,0 +1,156 @@
+package com.qxueyou.scc.teach.live.service;
+
+import java.util.Date;
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+
+public interface IMediaLiveService {
+	
+	/**
+	 * 新增直播
+	 * @param name 直播名称
+	 * @param content 直播介绍
+	 * @param imgPath 封面图片路径
+	 * @param startTime 开始时间
+	 * @param endTime 结束时间
+	 * @param record 是否录制
+	 * @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);
+	
+	/**
+	 * 查询直播
+	 * @param liveId 直播Id
+	 * @return
+	 */
+	MediaVideoLive read(String liveId);
+	
+	/**
+	 * 查询直播
+	 * @param noticeId 直播Id
+	 * @return
+	 */
+	List<MediaVideoLive> readByStatus(List<String> liveIdLst,short[] status);
+	
+	/**
+	 * 查询直播
+	 * @param keyword 查询关键字
+	 * @param pageNum 页码
+	 * @param pageSize 每页数据大小
+	 * @return
+	 */
+	List<MediaVideoLive> listOfMine(String keyword,Integer pageNum, Integer pageSize);
+	
+	/**
+	 * 查询直播总数
+	 * @param keyword 查询关键字
+	 * @return
+	 */
+	int listCountOfMine(String keyword);
+	
+	/**
+	 * 查询直播
+	 * @param keyword 查询关键字
+	 * @param pageNum 页码
+	 * @param pageSize 每页数据大小
+	 * @return
+	 */
+	List<MediaVideoLive> list(String keyword,String[] classIds,String subjectId,Short status,Integer pageNum, Integer pageSize);
+	
+	/**
+	 * 查询直播总数
+	 * @param keyword 查询关键字
+	 * @return
+	 */
+	int listCount(String keyword,String [] classIds,String subjectId,Short status);
+	
+	/**
+	 * 修改直播
+	 * @param liveId 直播ID
+	 * @param name 直播名称
+	 * @param content 直播介绍
+	 * @param teacherId 直播讲师ID
+	 * @param teacherName 直播讲师名称
+	 * @param subjectId   直播课程ID
+	 * @param subjectName 直播课程名称
+	 * @param definition  清晰度
+	 * @param imgPath 封面图片路径
+	 * @param startTime 开始时间
+	 * @param endTime 结束时间
+	 * @param record 是否录制
+	 * @param classId 班级ids
+	 * @return
+	 */
+	Result update(String liveId,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);
+	
+	/**
+	 * 删除直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result delete(String liveId);
+	
+	/**
+	 * 删除直播
+	 * @param liveId 直播ID数组
+	 * @return
+	 */
+	Result delete(String[] liveIds);
+	
+	/**
+	 * 发布直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result doIssue(String liveId);
+	
+	/**
+	 * 取消直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result doCancel(String liveId);
+	
+	
+	/**
+	 * 发布直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result doStart(String liveId);
+	
+	/**
+	 * 取消直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result doPause(String liveId);
+	
+	/**
+	 * 取消直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result doStop(String liveId);
+	
+	/**
+	 * 读取直播班级
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	List<String> getLiveClasses(String liveId);
+	
+	
+	/**
+	 * 点赞直播
+	 * @param liveId 直播ID
+	 * @return
+	 */
+	Result doPraise(String liveId);
+	
+	
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java b/src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java
new file mode 100644
index 0000000..45b3bb7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java
@@ -0,0 +1,28 @@
+package com.qxueyou.scc.teach.live.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.teach.live.model.MediaVideoLiveReplay;
+
+/**
+ * 直播回放处理相关操作
+ * @author kevin
+ *
+ */
+public interface IMediaVideoLivePlayBackService {
+	
+	/**
+	 * 查询回放列表
+	 * @param videoLiveId
+	 * @return
+	 */
+	List<MediaVideoLiveReplay> queryVideoLiveReplay(String videoLiveId);
+
+	/**
+	 * 测试直播回放
+	 * @param liveId
+	 */
+	void testPlayBack(String liveId);
+	
+		
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java b/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
new file mode 100644
index 0000000..437a80d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
@@ -0,0 +1,366 @@
+package com.qxueyou.scc.teach.live.service.impl;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.msg.model.MsgInfo;
+import com.qxueyou.scc.msg.service.IMsgInfoService;
+import com.qxueyou.scc.teach.live.dao.MediaLiveDAO;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.qxueyou.scc.teach.live.model.MediaVideoLiveReClass;
+import com.qxueyou.scc.teach.live.service.IMediaLiveService;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.user.model.UserTeacher;
+
+@Service
+public class MediaLiveService extends CommonAppService implements IMediaLiveService {
+	
+	@Autowired
+	MediaLiveDAO liveDao;
+	
+	@Autowired
+	SccConfig cfg;
+	
+	@Autowired
+	IMsgInfoService msgInfoService;
+	
+	@Autowired
+	ICacheService cacheService;
+	
+	@Autowired
+	private ITeacherService teacherService;
+	
+	
+	@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) {
+		
+		UserTeacher teacher = teacherService.getTeacherByUserId(ClientUtils.getUserId());
+		
+		MediaVideoLive live = new MediaVideoLive();
+		TraceUtils.setCreateTrace(live);
+		
+		live.setName(name);
+		live.setRemark(content);
+		live.setPreviewImgUrl(imgPath);
+		live.setStartTime(startTime);
+		live.setEndTime(endTime);
+		live.setStatus(MediaVideoLive.STATUS_LIVE_DRAFT);
+		
+		if(teacher!=null){
+			live.setAnchorId(teacher.getTeacherId());
+			live.setAnchor(teacher.getName());
+		}else{
+			live.setAnchorId(ClientUtils.getUserId());
+			live.setAnchor(ClientUtils.getUserName());
+		}
+		
+		live.setSubjectId(subjectId);
+		live.setSubjectName(subjectName);
+	
+		String uuid = UUIDUtils.UUID();
+		live.setWyLiveNumber(uuid);
+		live.setPushUrl(cfg.getRtmpService().concat(uuid));
+		live.setHlsPullUrl(cfg.getHlsService().concat(uuid).concat(".m3u8"));
+		
+		save(live);
+		
+		//保存直播权限班级
+		if(classIds!=null && classIds.size()>0){
+			this.doClearAndAddLiveReClass(live.getVideoLiveId(), classIds.toArray(new String[classIds.size()]));
+		}
+		
+		return new Result(true,"",CollectionUtils.newObjectMap("videoLiveId",live.getVideoLiveId()));
+	}
+
+	@Override
+	public Result update(String liveId, 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) {
+		MediaVideoLive live = read(MediaVideoLive.class,liveId);
+		TraceUtils.setUpdateTrace(live);
+		
+		live.setName(name);
+		live.setRemark(content);
+		live.setPreviewImgUrl(imgPath);
+		live.setStartTime(startTime);
+		live.setEndTime(endTime);
+		live.setSubjectId(subjectId);
+		live.setSubjectName(subjectName);
+		
+		save(live);
+		
+		//更新班级课程关联关系
+		this.doClearAndAddLiveReClass(live.getVideoLiveId(), classIds!=null?classIds.toArray(new String[classIds.size()]):null);
+		
+		
+//		liveDao.saveLiveClasses(liveId, classIds);
+		
+		return Result.SUCCESS;
+	}
+	
+	/**
+	 * 清理并添加直播权限班级
+	 * @param liveId
+	 * @param classIds
+	 */
+	private void doClearAndAddLiveReClass(String liveId, String [] classIds) {
+		List<String>  reIdLst =  this.find("select r.liveReClassId from MediaVideoLiveReClass r where r.liveId=?",
+					CollectionUtils.newList(liveId), String.class);
+
+		//删除关联关系
+		if(reIdLst!=null && reIdLst.size()>0){
+			this.bulkUpdateInLoop("delete from MediaVideoLiveReClass  where liveReClassId=?", reIdLst.toArray());  
+		}
+		if(classIds!=null && classIds.length>0){
+			for(String classId:classIds){
+				MediaVideoLiveReClass re = new MediaVideoLiveReClass();
+			    TraceUtils.setCreateTrace(re);
+			    re.setClassId(classId);
+			    re.setLiveId(liveId);
+			    save(re);
+			}
+		}
+	}	
+
+	@Override
+	public List<String> getLiveClasses(String liveId) {
+		return this.find("select r.classId from MediaVideoLiveReClass r where r.liveId=? and r.deleteFlag is false",
+				CollectionUtils.newList(liveId), String.class);
+	}
+
+	@Override
+	public Result delete(String liveId) {
+		MediaVideoLive live = read(MediaVideoLive.class,liveId);
+		TraceUtils.setUpdateTrace(live);
+		live.setDeleteFlag(true);
+		save(live);
+		return Result.SUCCESS;
+	}
+	
+	@Override
+	public Result delete(String[] liveIds) {
+		for(String liveId:liveIds) {
+			delete(liveId);
+		}
+		return Result.SUCCESS;
+	}
+
+	@Override
+	public Result doIssue(String liveId) {
+		status(liveId,MediaVideoLive.STATUS_LIVE_ORDER);
+		doSendMsg(liveId,MsgInfo.TYPE_LIVE,"发布了直播");
+		return new Result(true);
+	}
+	
+	private void doSendMsg(String liveId,short type,String msg){
+		MediaVideoLive  liveInfo = this.read(liveId);
+		//查询直播关联的班级
+		String hql = "select s.userId from MediaVideoLiveReClass m,StuStudent s where m.classId=s.classId and m.liveId=? and m.deleteFlag is false and s.deleteFlag is false";
+		
+		List<String> lstUserIds = this.find(hql, CollectionUtils.newList(liveId),String.class);
+		
+		if(lstUserIds!=null && lstUserIds.size()>0){
+			Map<String,String> attrs = CollectionUtils.newStringMap("liveId",liveId,"liveName",liveInfo.getName(),"subjectId",liveInfo.getSubjectId(),
+					"subjectName",liveInfo.getSubjectName(),"startTime",String.valueOf(liveInfo.getStartTime().getTime()));
+				
+			msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]),type,msg,attrs);
+		}
+	}
+	
+	@Scheduled(cron = " 0 0/5 * * * ?")
+	protected void doTimer() {
+//		System.out.println("执行直播提醒定时器");
+		Calendar cal = Calendar.getInstance();
+		cal.add(Calendar.HOUR, 1);
+		Date beginDate = cal.getTime();
+		
+		cal.add(Calendar.MINUTE, 5);
+		Date endDate = cal.getTime();
+
+		//查询1小时内将开始的直播
+ 		List<MediaVideoLive> lstLives = this.find("from MediaVideoLive where startTime>=? and startTime<? and status=? and deleteFlag is false ", 
+ 				CollectionUtils.newList(beginDate,endDate,MediaVideoLive.STATUS_LIVE_REVIEW), MediaVideoLive.class);
+		
+		if(lstLives!=null && lstLives.size()>0){
+			for(MediaVideoLive live:lstLives){
+				this.doLiveRemindMsg(live.getVideoLiveId(),MsgInfo.TYPE_REMIND, "直播马上开始了,请做好直播准备");
+			}
+		}
+	}
+	
+	private void doLiveRemindMsg(String liveId,short type,String msg){
+		MediaVideoLive  liveInfo = this.read(liveId);
+		Map<String,String> attrs = CollectionUtils.newStringMap("liveId",liveId,
+					"liveName",liveInfo.getName(),
+					"remindType","live",
+					"status",String.valueOf(liveInfo.getStatus()),
+				    "subjectId",liveInfo.getSubjectId(),
+					"subjectName",liveInfo.getSubjectName(),
+					"startTime",String.valueOf(liveInfo.getStartTime().getTime()),
+					"endTime",String.valueOf(liveInfo.getEndTime().getTime()));
+				
+		msgInfoService.doSendTextMsgToUsers(new String[]{liveInfo.getCreateId()},type,msg,attrs);
+	}
+
+	@Override
+	public Result doCancel(String liveId) {
+		return status(liveId,MediaVideoLive.STATUS_LIVE_DRAFT);
+	}
+
+	@Override
+	public Result doStart(String liveId) {
+		return status(liveId,MediaVideoLive.STATUS_LIVE_LIVE);
+	}
+
+	@Override
+	public Result doPause(String liveId) {
+		return status(liveId,MediaVideoLive.STATUS_LIVE_PAUSE);
+	}
+
+	@Override
+	public Result doStop(String liveId) {
+		//发送生成回放消息
+		cacheService.lstRightPush(MediaVideoLivePlayBackService.LIVE_PLAYBACK_LST, liveId);
+		
+		return status(liveId,MediaVideoLive.STATUS_LIVE_DOWNLOAD);
+		
+	}
+	
+	private Result status(String liveId,short status) {
+		MediaVideoLive live = read(MediaVideoLive.class,liveId);
+		TraceUtils.setUpdateTrace(live);
+		live.setStatus(status);
+		save(live);
+		return Result.SUCCESS;
+	}
+
+	@Override
+	public Result doPraise(String liveId) {
+		return this.bulkUpdate("update MediaVideoLive set praiseTimes = praiseTimes+1 where videoLiveId=?",new Object[]{liveId});
+	}
+
+	@Override
+	public List<MediaVideoLive> list(String keyword, String [] classIds,String subjectId,Short status,Integer pageNum, Integer pageSize) {
+		StringBuffer hql = new StringBuffer(1000);
+		Map<String,Object> params = new HashMap<String,Object>();
+		hql.append("from MediaVideoLive m left join fetch m.classes c left join fetch m.subject s where m.deleteFlag is false  and m.name like :name ");
+		
+		params.put("name",keyword + "%");
+		
+		if(classIds!=null && classIds.length>0){
+			hql.append(" and (c.classId in(:classIds) or s.type=:subjectType)");
+			params.put("classIds", classIds);
+			params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
+		}else{
+			hql.append(" and  s.type=:subjectType");
+			params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
+		}
+		
+		if(!StringUtils.isEmpty(subjectId)){
+			 hql.append(" and m.subjectId=:subjectId");
+			 params.put("subjectId", subjectId);
+		}
+		
+		if(status!=null){
+			hql.append(" and m.status=:status");
+			params.put("status", status);
+		}else{
+			hql.append(" and m.status!=:status");
+			params.put("status",MediaVideoLive.STATUS_LIVE_DRAFT);
+		}
+		
+		hql.append(" order by m.createTime desc");
+		
+		return this.findByComplexHql(hql.toString(),new Pager(pageSize,pageNum),params,MediaVideoLive.class);
+	}	
+	
+	@Override
+	public int listCount(String keyword,String [] classIds,String subjectId,Short status) {
+		StringBuffer hql = new StringBuffer(1000);
+		Map<String,Object> params = new HashMap<String,Object>();
+		hql.append("from MediaVideoLive m left join m.subject s where m.deleteFlag is false and m.name like :name ");
+		params.put("name","%" + keyword + "%");
+		
+		if(!StringUtils.isEmpty(subjectId)){
+			 hql.append(" and m.subjectId=:subjectId");
+			 params.put("subjectId", subjectId);
+		}
+		
+		if(status!=null){
+			hql.append(" and m.status=:status");
+			params.put("status", status);
+		}else{
+			hql.append(" and m.status!=:status");
+			params.put("status",MediaVideoLive.STATUS_LIVE_DRAFT);
+		}
+		
+		if(classIds!=null && classIds.length>0){
+			 hql.append(" and ( exists (select 1 from MediaVideoLiveReClass r where r.deleteFlag is false and r.liveId= m.videoLiveId and r.classId in (:classIds) ) or s.type=:subjectType )");
+			 params.put("classIds", classIds);
+			 params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
+		}else{
+			 hql.append(" and  s.type=:subjectType ");
+			 params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
+		}
+		
+		return this.findCountByComplexHql(hql.toString(), params);
+	}
+	
+	@Override
+	public List<MediaVideoLive> listOfMine(String keyword, Integer pageNum, Integer pageSize) {
+		
+		String hql = "from MediaVideoLive where deleteFlag is false and name like ? and createId=?  order by createTime desc";
+
+		return findList(hql, new Pager(pageSize, pageNum), CollectionUtils.newList(keyword + "%",ClientUtils.getUserId()), MediaVideoLive.class);
+	}
+	
+	@Override
+	public int listCountOfMine(String keyword) {
+		
+		String hql = "from MediaVideoLive where deleteFlag is false and name like ? and createId=? order by createTime desc";
+
+		return findCount(hql, CollectionUtils.newList(keyword + "%",ClientUtils.getUserId()));
+	}
+
+	@Override
+	public MediaVideoLive read(String liveId) {
+		return read(MediaVideoLive.class,liveId);
+	}
+	
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<MediaVideoLive> readByStatus(List<String> liveIdLst,short[] status) {
+		
+		if(liveIdLst.isEmpty()) {
+			return Collections.EMPTY_LIST;
+		}
+		
+		Object[] _status = new Object[status.length];
+		for(int i=0;i<status.length;i++) {
+			_status[i]=status[i];
+		}
+		
+		String hql = "from MediaVideoLive where deleteFlag is false and videoLiveId in (:liveId) and status in (:status)";
+		return findByComplexHql(hql, CollectionUtils.newObjectMap("liveId",liveIdLst,"status",_status), MediaVideoLive.class);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java b/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java
new file mode 100644
index 0000000..628cdd4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java
@@ -0,0 +1,279 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.teach.live.service.impl;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Comparator;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.teach.live.model.MediaVideoLive;
+import com.qxueyou.scc.teach.live.model.MediaVideoLiveReplay;
+import com.qxueyou.scc.teach.live.service.IMediaVideoLivePlayBackService;
+import com.qxueyou.scc.teach.live.utils.FfmpegFileVO;
+import com.qxueyou.scc.teach.live.utils.FfmpegMediaHelper;
+import com.qxueyou.scc.teach.live.utils.FfmpegVideoInfo;
+
+@Service
+public class MediaVideoLivePlayBackService extends CommonAppService implements IMediaVideoLivePlayBackService {
+	
+	private static final Logger log = LogManager.getLogger(MediaVideoLivePlayBackService.class);
+	
+	//直播回放队列
+	public static final String LIVE_PLAYBACK_LST = "LIVE_PLAYBACK_LST";
+	
+	//直播回放全局锁
+	public static final String  LIVE_PLAYBACK_LOCK = "LIVE_PLAYBACK_LOCK";
+	
+	@Autowired
+	SccConfig cfg;
+	
+	@Autowired
+	ICacheService cacheService;
+	
+	@Autowired
+	private StringRedisTemplate redisTemplate;
+	
+	@Override
+	public List<MediaVideoLiveReplay> queryVideoLiveReplay(String videoLiveId){
+		StringBuffer hql = new StringBuffer(500);
+		hql.append("from MediaVideoLiveReplay  where videoLiveId=? and deleteFlag is false ");
+		List<Object> params = CollectionUtils.newList(videoLiveId);
+		
+		hql.append(" order by orderNo asc");
+		return this.find(hql.toString(),params, MediaVideoLiveReplay.class);
+	}
+	
+	//生成回放(需修改为晚上2:00 开始执行)
+	@Scheduled(cron = " 0 0/2 * * * ?")
+	protected void doTimer(){
+		if(this.lock()){
+			String liveId = null;
+			try {
+				liveId = cacheService.lstLeftPop(LIVE_PLAYBACK_LST);
+				
+				if(StringUtils.isEmpty(liveId)){
+					return ;
+				}
+				
+				//判断是否是回放状态
+				MediaVideoLive live = this.read(MediaVideoLive.class, liveId);
+				
+				if(live.getStatus()==MediaVideoLive.STATUS_LIVE_DOWNLOAD){
+			
+					log.info("doTimer live: "+live.getVideoLiveId());
+					
+					this.doVideoLivePlayBack(live);
+					
+					//更新状态
+					live.setStatus(MediaVideoLive.STATUS_LIVE_REVIEW);
+					this.save(live);
+				}	
+			} catch (Exception e) {
+				//重新处理
+				if(StringUtils.isNotEmpty(liveId)){
+					cacheService.lstRightPush(LIVE_PLAYBACK_LST,liveId);
+				}
+			}finally{
+				this.releaseLock();
+			}
+		}
+	}	
+	
+	@Override
+	public  void testPlayBack(String liveId){
+		//判断是否是回放状态
+		MediaVideoLive live = this.read(MediaVideoLive.class, liveId);
+		
+		if(live.getStatus()==MediaVideoLive.STATUS_LIVE_DOWNLOAD){
+			try {
+				this.doVideoLivePlayBack(live);
+				
+				//更新状态
+				live.setStatus(MediaVideoLive.STATUS_LIVE_REVIEW);
+				this.save(live);
+				
+			} catch (Exception e) {
+				//重新处理
+				cacheService.lstRightPush(LIVE_PLAYBACK_LST,liveId);
+			}
+		}
+	}
+	
+	
+	public void doVideoLivePlayBack(MediaVideoLive videoLive) throws Exception{
+		//读取原文件
+		File srcRootFile = new File(cfg.getSrcLivePath());
+	    
+		String[] fileNames=  srcRootFile.list(new FilenameFilter(){
+				@Override
+				public boolean accept(File dir, String name) {
+					return name.startsWith(videoLive.getWyLiveNumber());
+				}
+			});
+		
+		 log.info("doVideoLivePlayBack fileNames: "+fileNames==null?"xxx":Arrays.toString(fileNames));
+		
+		//排序
+		Arrays.sort(fileNames, new Comparator<String>(){
+			@Override
+			public int compare(String o1, String o2) {
+				if(StringUtils.isNotEmpty(o1) && StringUtils.isNotEmpty(o2)){
+					return getStartTime(o1).compareTo(getStartTime(o2));
+				}
+				return 0;
+			}
+		});
+	   
+	   //读取
+		if(fileNames!=null && fileNames.length>0){
+		   short order = 1 ;
+		   for(String srcFileName:fileNames){
+			   log.info("doCreateVideoLiveReplay srcFileName: "+srcFileName);
+			   doCreateVideoLiveReplay(videoLive,srcFileName,order++); //生成回放
+		   }
+		}
+		
+		//清理源文件
+		if(fileNames!=null && fileNames.length>0){
+			for(String srcFileName:fileNames){
+				log.info("删除原文件:filePath"+srcRootFile.getAbsolutePath().concat(File.separator).concat(srcFileName));
+				FileUtils.deleteQuietly(new File(srcRootFile.getAbsolutePath().concat(File.separator).concat(srcFileName)));
+			}
+		}
+	}
+	
+	
+	//生成VideoLiveReplay信息
+	private String doCreateVideoLiveReplay(MediaVideoLive videoLive,String srcFileName,short order) throws Exception{
+		//视频文件后缀
+		String mediaSuffix = srcFileName.substring(srcFileName.lastIndexOf("."));
+		
+		//回放地址
+		String dstPath =this.generateDstPath(videoLive.getVideoLiveId(), mediaSuffix);
+		
+		File srcFile = new File(cfg.getSrcLivePath() + srcFileName);
+		
+		File dstFileDir = new File(cfg.getResRootPath().concat(dstPath)).getParentFile();
+		
+		//创建目录
+		dstFileDir.mkdirs();
+		
+		log.info("开始生成  doCreateVideoLiveReplay:  srcFile"+srcFile.getAbsolutePath());
+		
+		String dstFile =  this.convertFlvToMp4(srcFile, dstFileDir);	
+		
+		log.info("结束生成  doCreateVideoLiveReplay:  dstFile"+ dstFile);
+		
+		//获取视频时长
+		long playTime = this.getMediaPlayTime(srcFile.getAbsolutePath());
+		
+		MediaVideoLiveReplay liveReplay = new MediaVideoLiveReplay();
+		liveReplay.setName((videoLive.getName() + "-" + order + mediaSuffix).replace(".flv", ".mp4"));
+		liveReplay.setVideoLiveId(videoLive.getVideoLiveId());
+		liveReplay.setOrderNo(order);
+		liveReplay.setBeginTime(this.getStartTime(srcFileName));
+		liveReplay.setEndTime(this.getStartTime(srcFileName)+playTime);
+		liveReplay.setDuration(playTime);
+		liveReplay.setInitialSize(srcFile.length());
+		liveReplay.setUrl(dstFile.substring(dstFile.indexOf("live")).replace("\\", "/"));
+		TraceUtils.setCreateTrace(liveReplay);
+		this.save(liveReplay);
+	
+		return liveReplay.getLiveReplayId();
+	}
+	
+	
+
+	/**
+	 * 获取文件目标路径
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private String generateDstPath(String liveId,String suffix) {
+		StringBuffer path = new StringBuffer(256);
+		path.append("live");
+		Calendar now = new GregorianCalendar();
+
+		path.append('/');
+		path.append(now.get(Calendar.YEAR));
+		path.append(StringUtils.leftPad(String.valueOf(now.get(Calendar.MONTH)), 2, '0'));
+		path.append('/');
+		path.append(now.get(Calendar.DAY_OF_MONTH));
+		path.append('/');
+		path.append(liveId);
+		path.append('/');
+		path.append(UUIDUtils.UUID());
+		path.append(suffix);
+
+		return path.toString();
+	}
+	
+	
+	private long getMediaPlayTime(String filePath) throws Exception{
+		FfmpegFileVO fileVO = new FfmpegFileVO();
+		fileVO.setInputPath(filePath);
+		FfmpegVideoInfo videoInfo = new FfmpegVideoInfo();
+		FfmpegMediaHelper.mediaInfo(fileVO, videoInfo);
+		return videoInfo.getPlayTime();
+	}
+	
+	private String convertFlvToMp4(File srcFile,File dstFile) throws Exception{
+		// 获取直播视频片段信息
+		FfmpegFileVO videoFileVO = new FfmpegFileVO();
+		videoFileVO.setInputPath(srcFile.getPath());
+
+		// 转码视频
+		videoFileVO.setOutputPath(dstFile.getPath() + File.separator);
+		
+		return FfmpegMediaHelper.converUploadVideoToLiveMp4(videoFileVO, new FfmpegVideoInfo());
+		
+		//copy备份原片段(暂不备份)
+//		FileUtils.copyFile(srcFile, dstFile); 
+	}	
+	
+	
+	//格式: d72de336c7ed45beb14641a79074f9bb-1541497652-rec ,  时间戳单位: 秒
+	private Long getStartTime(String filePath){
+		return Long.valueOf(filePath.split("-")[1]);  
+	}	
+	
+	private boolean lock(){
+		 boolean lockResult = redisTemplate.opsForValue().setIfAbsent(LIVE_PLAYBACK_LOCK, "lock");
+		 //可能发生死锁,需要手动清除锁
+		 if(lockResult==true){
+			 redisTemplate.expire(LIVE_PLAYBACK_LOCK, 6, TimeUnit.HOURS);
+		 }		 
+		 return lockResult;
+	}
+	
+	private void releaseLock(){
+		redisTemplate.delete(LIVE_PLAYBACK_LOCK);
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java b/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java
new file mode 100644
index 0000000..49aed4a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java
@@ -0,0 +1,34 @@
+package com.qxueyou.scc.teach.live.utils;
+
+import java.io.Serializable;
+
+public class FfmpegFileVO implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**文件输入路径*/
+    private String inputPath = "";
+    
+    /**文件输出路径*/
+    private String outputPath = "";
+
+	public String getInputPath() {
+		return inputPath;
+	}
+
+	public void setInputPath(String inputPath) {
+		this.inputPath = inputPath;
+	}
+
+	public String getOutputPath() {
+		return outputPath;
+	}
+
+	public void setOutputPath(String outputPath) {
+		this.outputPath = outputPath;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java b/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java
new file mode 100644
index 0000000..e5ec4f6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java
@@ -0,0 +1,729 @@
+package com.qxueyou.scc.teach.live.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.teach.live.utils.FfmpegFileVO;
+import com.qxueyou.scc.teach.live.utils.FfmpegVideoInfo;
+
+/**
+ * 视频转码类
+ * @author cyq
+ *
+ */
+public class FfmpegMediaHelper {
+	/**
+	 * 实例化log
+	 */
+	private static final Logger log = LogManager.getLogger(FfmpegMediaHelper.class);
+
+	/**
+	 * 高清码率
+	 */
+	private static int bitRateHd = 800 * 1024;
+	/**
+	 * 标清码率
+	 */
+	private static int bitRateSd = 400 * 1024;
+	/**
+	 * 低清码率
+	 */
+	private static int bitRateLd = 200 * 1024;
+	/**
+	 * 转mp4的固定命令
+	 */
+	private static List<String> commandMp4 = new ArrayList<String>(10);
+	/**
+	 * 转m3u8的固定命令
+	 */
+	private static String commandM3u8;
+
+	/**
+	 * 是否为视频
+	 */
+	private static Boolean videoFlag = false;
+
+	/**
+	 * 转mp4
+	 * @param fileVO
+	 * @param videoInfo
+	 * @return
+	 */
+	public static boolean convertMp4(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return false;
+		}
+		try {
+			System.out.println("FfmpegMediaHelper--转码mp4中...");
+			commandMp4.clear();
+			commandMp4.add("ffmpeg");
+			commandMp4.add("-i");
+			commandMp4.add(fileVO.getInputPath());
+			commandMp4.add("-ab");		// 设置音频码率
+			commandMp4.add("128*1024");
+			commandMp4.add("-r");
+			commandMp4.add("23");
+	
+			if (videoInfo.getVideoHeight() >= 1000) {
+				convertMp4Hd(fileVO, videoInfo);
+				convertMp4Sd(fileVO, videoInfo);
+				convertMp4Ld(fileVO, videoInfo);
+			} else if (videoInfo.getVideoHeight() >= 700) {
+				convertMp4Sd(fileVO, videoInfo);
+				convertMp4Ld(fileVO, videoInfo);
+			} else {
+				convertMp4Ld(fileVO, videoInfo);
+			}
+			System.out.println("FfmpegMediaHelper--转码mp4完成...");
+			return true;
+		} catch (Exception e) {
+			System.out.println("FfmpegMediaHelper--转码mp4异常...");
+			log.error("转码mp4异常:" + e.getMessage());
+			throw e;
+		}
+	}
+	/**
+	 * 转m3u8
+	 * @param fileVO
+	 * @param videoInfo
+	 * @return
+	 */
+	public static boolean convertM3u8(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return false;
+		}
+		try {
+			System.out.println("FfmpegMediaHelper--转码m3h8中...");
+			commandM3u8 = "ffmpeg -i " + fileVO.getInputPath() + " -strict -2 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0";
+	
+			if (videoInfo.getVideoHeight() >= 1000) {
+				convertM3u8Hd(fileVO, videoInfo);
+				convertM3u8Sd(fileVO, videoInfo);
+				convertM3u8Ld(fileVO, videoInfo);
+			} else if (videoInfo.getVideoHeight() >= 700) {
+				convertM3u8Sd(fileVO, videoInfo);
+				convertM3u8Ld(fileVO, videoInfo);
+			} else {
+				convertM3u8Ld(fileVO, videoInfo);
+			}
+			System.out.println("FfmpegMediaHelper--转码m3u8完成...");
+			return true;
+		} catch (Exception e) {
+			System.out.println("FfmpegMediaHelper--转码m3u8异常...");
+			log.error("转码m3u8异常:" + e.getMessage());
+			throw e;
+		}
+	}
+	
+	/**
+	 * 转高清mp4
+	 */
+	private static void convertMp4Hd(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		try {
+			String resolution = (int) (1080 * videoInfo.getAspectRatio() / 2) * 2 + "*1080"; // 宽高必须是偶数
+			List<String> command = new ArrayList<String>(commandMp4);
+			if (videoInfo.getVideoBitRate() == null || videoInfo.getVideoBitRate() > bitRateHd) {
+				command.add("-vb"); // 视频码率
+				command.add(String.valueOf(bitRateHd));
+			}
+			command.add("-s"); // 尺寸(分辨率)
+			command.add(resolution);
+			command.add(fileVO.getOutputPath() + videoInfo.getUuid() + "mp4-hd.mp4");
+			convertMp4(command);
+			videoInfo.setMp4HdUrl(fileVO.getOutputPath() + videoInfo.getUuid() + "mp4-hd.mp4");	// 转码成功,将路径设置到videoInfo中
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+	/**
+	 * 转高清m3u8
+	 */
+	private static void convertM3u8Hd(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		try {
+			String resolution = (int) (1080 * videoInfo.getAspectRatio() / 2) * 2 + "*1080"; // 宽高必须是偶数
+			
+			StringBuffer commandBuffer = new StringBuffer(commandM3u8);
+			if (videoInfo.getVideoBitRate() == null || videoInfo.getVideoBitRate() > bitRateHd) {
+				commandBuffer.append(" -vb ").append(String.valueOf(bitRateHd)).append(' ');
+			}
+			commandBuffer.append(" -s ").append(resolution).append(' ');
+			commandBuffer.append(fileVO.getOutputPath());
+			commandBuffer.append(videoInfo.getUuid()).append("m3u8-hd.m3u8");
+			convertM3u8(commandBuffer.toString());
+			videoInfo.setM3u8HdUrl(fileVO.getOutputPath() + videoInfo.getUuid() + "m3u8-hd.m3u8");
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+	
+	/**
+	 * 转标清mp4
+	 */
+	private static void convertMp4Sd(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		try {
+			String resolution = (int) (720 * videoInfo.getAspectRatio() / 2) * 2 + "*720";
+			List<String> command = new ArrayList<String>(commandMp4);
+			if (videoInfo.getVideoBitRate() == null || videoInfo.getVideoBitRate() > bitRateSd) {
+				command.add("-vb");
+				command.add(String.valueOf(bitRateSd));
+			}
+			command.add("-s");
+			command.add(resolution);
+			command.add(fileVO.getOutputPath() + videoInfo.getUuid() + "mp4-sd.mp4");
+			convertMp4(command);
+			videoInfo.setMp4SdUrl(fileVO.getOutputPath() + videoInfo.getUuid() + "mp4-sd.mp4");
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+	/**
+	 * 转标清m3u8
+	 */
+	private static void convertM3u8Sd(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		try {
+			String resolution = (int) (720 * videoInfo.getAspectRatio() / 2) * 2 + "*720";
+			StringBuffer commandBuffer = new StringBuffer(commandM3u8);
+			if (videoInfo.getVideoBitRate() == null || videoInfo.getVideoBitRate() > bitRateSd) {
+				commandBuffer.append(" -vb ").append(String.valueOf(bitRateSd)).append(' ');
+			}
+			commandBuffer.append(" -s ").append(resolution).append(' ');
+			commandBuffer.append(fileVO.getOutputPath()).append(videoInfo.getUuid()).append("m3u8-sd.m3u8");
+			convertM3u8(commandBuffer.toString());
+			videoInfo.setM3u8SdUrl(fileVO.getOutputPath() + videoInfo.getUuid() + "m3u8-sd.m3u8");
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+
+	/**
+	 * 转低清mp4
+	 */
+	private static void convertMp4Ld(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		try	{
+			String resolution = (int) (480 * videoInfo.getAspectRatio() / 2) * 2 + "*480";
+			List<String> command = new ArrayList<String>(commandMp4);
+			if (videoInfo.getVideoBitRate() == null || videoInfo.getVideoBitRate() > bitRateLd) {
+				command.add("-vb");
+				command.add(String.valueOf(bitRateLd));
+			}
+			command.add("-s");
+			command.add(resolution);
+			command.add(fileVO.getOutputPath() + videoInfo.getUuid() + "mp4-ld.mp4");
+			convertMp4(command);
+			videoInfo.setMp4LdUrl(fileVO.getOutputPath() + videoInfo.getUuid() + "mp4-ld.mp4");
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+	/**
+	 * 转低清m3u8
+	 */
+	private static void convertM3u8Ld(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		try {
+			String resolution = (int) (480 * videoInfo.getAspectRatio() / 2) * 2 + "*480";
+			StringBuffer commandBuffer = new StringBuffer(commandM3u8);
+			if (videoInfo.getVideoBitRate() == null || videoInfo.getVideoBitRate() > bitRateLd) {
+				commandBuffer.append(" -vb ").append(String.valueOf(bitRateSd)).append(' ');
+			}
+			commandBuffer.append(" -s ").append(resolution).append(' ');
+			commandBuffer.append(fileVO.getOutputPath()).append(videoInfo.getUuid()).append("m3u8-ld.m3u8");
+			convertM3u8(commandBuffer.toString());
+			videoInfo.setM3u8LdUrl(fileVO.getOutputPath() + videoInfo.getUuid() + "m3u8-ld.m3u8");
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+
+	/**
+	 * 获取媒体信息
+	 * 
+	 * @param fileVO
+	 * @param videoInfo
+	 * @return
+	 */
+	public static boolean mediaInfo(FfmpegFileVO fileVO, FfmpegVideoInfo videoInfo) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return false;
+		}
+		BufferedReader buf = null; // 保存ffmpeg的输出结果流
+		String currLine = null;
+		String line = null;
+		try {
+
+			log.debug("获取媒体信息...");
+			List<String> command = new ArrayList<String>();
+
+			// ffprobe 命令获取媒体信息
+			command.add("ffprobe");
+			command.add("-print_format");
+
+			// json格式输出
+			command.add("json");
+
+			command.add("-show_streams");
+
+			command.add(fileVO.getInputPath());
+			ProcessBuilder process = new ProcessBuilder();
+			process.command(command);
+			process.redirectErrorStream(true);
+			Process p = process.start();
+
+			buf = new BufferedReader(new InputStreamReader(p.getInputStream()));
+			while ((currLine = buf.readLine()) != null) {
+				// 处理多余字符
+				line = currLine.trim().replaceAll("\"", "").replaceAll(",", "").replace(" ", "");
+				handleLine(line, videoInfo);
+
+				// 获取文件时长(flv需要这么取)
+	        	if(currLine.trim().startsWith("Duration:") && currLine.contains(",") ){
+	        		String strFirst = currLine.trim().split(",")[0].substring(9).trim().substring(0,8);
+	        		String[] arrTime = strFirst.split(":");
+	        		if(null != arrTime && arrTime.length == 3 ){
+	        			Integer iHour = Integer.parseInt(arrTime[0]);
+	        			Integer iMinute = Integer.parseInt(arrTime[1]);
+	        			Integer iSecond = Integer.parseInt(arrTime[2]);
+	        			
+	        			videoInfo.setPlayTime(iHour * 60 * 60 + iMinute * 60 + iSecond);
+	        			log.debug("视频时长:" + videoInfo.getPlayTime());
+	        		}
+	        	}
+			}
+
+			p.waitFor();// 这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行
+
+			log.debug("获取媒体信息完成");
+			return true;
+
+		} catch (Exception e) {
+			log.debug("获取媒体信息异常:" + e.getMessage());
+			throw e;
+		}
+	}
+	private static void handleLine(String line, FfmpegVideoInfo videoInfo) {
+		if (line.contains(":")) {
+			String[] arr = line.split(":");
+			if (null != arr && arr.length == 2) {
+				// 1. 如果是标志位
+				if ("codec_type".equals(arr[0].trim())) {
+					// 视频
+					if ("video".equals(arr[1].trim())) {
+						videoFlag = true;
+					}
+					// 音频
+					if ("audio".equals(arr[1].trim())) {
+						videoFlag = false;
+					}
+				}
+				// 视频宽度
+				if (videoFlag && "width".equals(arr[0])) {
+					videoInfo.setVideoWidth(Integer.valueOf(arr[1]));
+					if (videoInfo.getVideoHeight() != null) {
+						videoInfo.setAspectRatio((float) (videoInfo.getVideoWidth().floatValue() / videoInfo.getVideoHeight().floatValue()));
+						log.debug("计算宽高比:" + videoInfo.getVideoWidth() + "/" + videoInfo.getVideoHeight() + ":" + videoInfo.getAspectRatio());
+					}
+				}
+				// 视频高度
+				if (videoFlag && "height".equals(arr[0])) {
+					videoInfo.setVideoHeight(Integer.valueOf(arr[1]));
+					if (videoInfo.getVideoWidth() != null) {
+						videoInfo.setAspectRatio((float) (videoInfo.getVideoWidth().floatValue() / videoInfo.getVideoHeight().floatValue()));
+						log.debug("计算宽高比:" + videoInfo.getVideoWidth() + "/" + videoInfo.getVideoHeight() + ":" + videoInfo.getAspectRatio());
+					}
+				}
+				
+				//获取视屏帧率表达式
+				if (videoFlag && "avg_frame_rate".equals(arr[0])) {
+					log.info("开始计算帧率,"+arr[1]);
+					if(StringUtils.isNotEmpty(arr[1])){
+						String [] strFrameArr = arr[1].split("/");
+						if(strFrameArr!=null && strFrameArr.length==2 && Double.valueOf(strFrameArr[1].trim())>0){
+							int frameRate = (int) Math.ceil((Double.valueOf(strFrameArr[0].trim())/Double.valueOf(strFrameArr[1].trim())));
+							videoInfo.setFrameRate(frameRate);	
+							videoInfo.setFrameRateExp(arr[1]);
+							log.info("计算帧率:frameRate="+frameRate+" frameRateExp="+arr[1]);
+						}
+					}
+				}
+				
+				
+				// 视频码率
+				if (videoFlag && "bit_rate".equals(arr[0])) {
+					videoInfo.setVideoBitRate(Integer.valueOf(arr[1]));
+					log.debug("视频码率:" + videoInfo.getVideoBitRate());
+				}
+				// 文件时长
+				if (videoFlag && "duration".equals(arr[0])) {
+					if (arr[1].contains(".")) {
+						//videoInfo.setPlayTime(Integer.valueOf(arr[1].indexOf('.')));
+						videoInfo.setPlayTime(Integer.parseInt(arr[1].substring(0, arr[1].indexOf('.'))));
+					} else {
+						videoInfo.setPlayTime(Integer.valueOf(arr[1]));
+					}
+					log.debug("视频时长:" + videoInfo.getPlayTime());
+				}
+			}
+		}
+	}
+
+
+	/**
+	 * 截图
+	 * 
+	 * @param fileVO
+	 * @param outputPath
+	 * @return
+	 */
+	public static boolean snapshot(FfmpegFileVO fileVO) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return false;
+		}
+		try {
+
+			log.debug("FfmpegMediaHelper--视频截屏...");
+			String comm = "ffmpeg -ss 00:00:01 -i " + fileVO.getInputPath() + " -t 0.1 -f mjpeg -y " + fileVO.getOutputPath() + "snapshot.jpg";
+	
+			Process videoProcess = Runtime.getRuntime().exec(comm);
+			new PrintStreamThread(videoProcess.getErrorStream()).start();
+	
+			videoProcess.waitFor();
+			log.debug("FfmpegMediaHelper--视频截屏完成");
+			return true;
+		} catch (Exception e) {
+			log.error("视频截屏异常" + e.getMessage());
+			throw e;
+		}
+	}
+	
+	/**
+	 * 根据帧率截屏
+	 * @param fileVO 待截图视频文件信息
+	 * @param imgPrefixName 截取图片名称的前缀信息
+	 * @param framePerSecond 每秒图片帧数
+	 * @param width  截取图片宽度(ps:单位像素点)
+	 * @param height 截取图片高度(ps:单位像素点)
+	 * @return 是否截取成功
+	 * @throws Exception
+	 */
+	
+	/**
+	 * 
+	 * @param fileVO  文件信息
+	 * @param imgPrefixName  截取图片的前缀信息
+	 * @param framePerSecond  每秒多少帧
+	 * @return
+	 * @throws Exception
+	 */
+	
+	public static boolean screenShot(FfmpegFileVO fileVO,String imgPrefixName,int framePerSecond,int width,int height) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return false;
+		}
+
+		if(framePerSecond<=0 || width * height<=0){
+			return false;
+		}
+		
+		Process process = null;
+		try {
+			
+//			ffmpeg  -ss 00:00:00.000  -i D:/usr/qxueyou/huifang/test.mp4 -f image2 -vf fps=fps=1/5 D:/usr/qxueyou/huifang/pic/new_%d.jpg
+			
+			String comm = "ffmpeg -ss 00:00:00.000 -i " + fileVO.getInputPath() + " -f image2 -s " + width + "*" + height + " -vf fps=fps=1/"+ framePerSecond +" "+ fileVO.getOutputPath()+"/" + imgPrefixName + "%d.jpg";
+			log.info("screenShot命令, "+ comm);
+			process = Runtime.getRuntime().exec(comm);
+			new PrintStreamThread(process.getErrorStream()).start();
+			process.waitFor();
+			return true;
+		} catch (Exception e) {
+			log.error("视频截屏异常" + e.getMessage());
+			throw e;
+		}finally {
+			closeProcess(process);
+		}
+	}
+	
+	
+	
+
+	public static boolean dividVideo(FfmpegFileVO fileVO,int statTime,int duration) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return false;
+		}
+		Process process = null;
+		try {
+			String comm = "ffmpeg -ss "+ statTime + " -t " + duration + " -i "+ fileVO.getInputPath() + " -y -vcodec copy -acodec copy " + fileVO.getOutputPath();
+			log.info("dividVideo命令, "+ comm);
+			process = Runtime.getRuntime().exec(comm);
+			new PrintStreamThread(process.getErrorStream()).start();
+			process.waitFor();
+			return true;
+		} catch (Exception e) {
+			log.error("切割视频失败" + e.getMessage());
+			throw e;
+		}finally {
+			closeProcess(process);
+		}
+	}
+	
+	
+	
+	/**
+	 * 合并视频
+	 * 
+	 * @param fileVO
+	 * @return
+	 * @throws Exception
+	 */
+	public static Process mergeVideo(FfmpegFileVO fileVO) throws Exception {
+		if (!checkfile(fileVO.getInputPath())) {
+			return null;
+		}
+		
+		String comm = "ffmpeg -f concat -safe 0 -i " + fileVO.getInputPath() + " -c copy " + fileVO.getOutputPath();
+		log.info("mergeVideo命令, "+ comm);
+		
+		Process videoProcess = Runtime.getRuntime().exec(comm);
+		new PrintStreamThread(videoProcess.getErrorStream()).start();
+
+		videoProcess.waitFor();
+		return videoProcess;
+	}
+	
+	
+	
+	/**
+	 * 合并视频
+	 * 
+	 * @param fileVO
+	 * @return
+	 * @throws Exception
+	 */
+	public static boolean concatVideo(FfmpegFileVO fileVO) throws Exception {
+		Process process = null;
+		try {
+			List<String> command = new ArrayList<String>(20);
+			command.add("ffmpeg");
+			command.add("-f");
+			command.add("concat");
+			command.add("-safe");
+			command.add("0");
+			command.add("-i");
+			command.add( fileVO.getInputPath());
+			command.add( "-y");
+			command.add( "-c");
+			command.add( "copy");
+			command.add( "-bsf:a");
+			command.add( "aac_adtstoasc");
+			command.add( "-f");
+			command.add( "mp4");
+			command.add(fileVO.getOutputPath());
+			ProcessBuilder pBuilder = new ProcessBuilder(command);
+			pBuilder.directory(new File(fileVO.getInputPath()).getParentFile());
+			log.info("ProcessBuilder directory:"+pBuilder.directory().getAbsolutePath());
+			process = pBuilder.start();
+			new PrintStreamThread(process.getErrorStream()).start();
+			process.waitFor();
+			return true;
+		} catch (Exception e) {
+			throw e;
+		} finally {
+			closeProcess(process);
+		}
+	}
+	
+	
+	public static String converUploadVideoToLiveMp4(FfmpegFileVO fileVO,FfmpegVideoInfo videoInfo) throws Exception{
+		String outputPath = null;
+		try {
+//			log.info("FfmpegMediaHelper.TransferUploadVideoToWyMp4,直播上传...");
+			List<String> command = new ArrayList<String>();
+			String name = UUIDUtils.generateUUID().replace("-", "");
+			outputPath = fileVO.getOutputPath() +name + ".mp4";
+			command.add("ffmpeg");
+			command.add("-i");
+			command.add(fileVO.getInputPath());
+			command.add("-q:v");
+			command.add("6");
+//			command.add(" -r ");
+//			command.add(videoInfo.getFrameRateExp());
+			command.add("-pix_fmt");
+			command.add("yuv420p");
+			command.add(outputPath);
+			convertMp4(command);
+			log.error(command.toString());
+		} catch (Exception e) {
+			throw e;
+		}
+		return outputPath;
+	 }
+	
+	/**
+	 * mp4转ts文件
+	 * ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts out1.ts
+	 * 
+	 * @param fileVO
+	 * @return
+	 * @throws Exception
+	 */
+	public static boolean mp4toannexb(FfmpegFileVO fileVO) throws Exception {
+		Process process= null;
+		try {
+			String comm = "ffmpeg -i " + fileVO.getInputPath() + " -c copy -bsf:v h264_mp4toannexb -y -f mpegts " + fileVO.getOutputPath();
+			log.info("mp4toannexb命令, "+ comm);
+			process = Runtime.getRuntime().exec(comm);
+			new PrintStreamThread(process.getErrorStream()).start();
+			process.waitFor();
+			return true;
+		} catch (Exception e) {
+			throw e;
+		}finally {
+			closeProcess(process);
+		}
+	}
+	
+	private static void closeProcess(Process process) throws Exception {
+		try {
+			if (process != null) {
+				if (process.getInputStream() != null) {
+					process.getInputStream().close();
+				}
+				if (process.getOutputStream() != null) {
+					process.getOutputStream().close();
+				}
+				if (process.getErrorStream() != null) {
+					process.getErrorStream().close();
+				}
+				process.destroy();
+			}
+		} catch (IOException e) {
+			log.error("关闭process失败。。", e);
+		}
+	}
+	
+
+	/**
+	 * 关闭进程
+	 * 
+	 * @param process
+	 * @return
+	 */
+    public static boolean stop(Process process) {  
+        if (process != null) {  
+            process.destroy();  
+            return true;  
+        }  
+        return false;  
+    } 
+
+	/**
+	 * 解析成MP4格式
+	 * 
+	 * @param oldfilepath
+	 * @return
+	 */
+	private static boolean convertMp4(List<String> command) throws Exception {
+		Process process = null;
+		try {
+			process = new ProcessBuilder(command).redirectErrorStream(true).start();
+			new PrintStreamThread(process.getInputStream()).start();
+			process.waitFor();
+			return true;
+		} catch (Exception e) {
+			throw e;
+		} finally {
+			if (process != null) {
+				try {
+					process.getInputStream().close();
+					process.getOutputStream().close();
+					process.getErrorStream().close();
+				} catch (IOException e) {
+					throw e;
+				}
+			}
+		}
+	}
+
+	/**
+	 * 解析m3u8格式
+	 * 
+	 * @param oldfilepath
+	 * @return
+	 */
+	private static boolean convertM3u8(String command) throws Exception {
+		Process process = null;
+		try {
+			process = Runtime.getRuntime().exec(command);
+
+			new PrintStreamThread(process.getErrorStream()).start();
+
+			process.waitFor();
+
+			return true;
+		} catch (Exception e) {
+			throw e;
+		} finally {
+			if (process != null) {
+				try {
+					process.getInputStream().close();
+					process.getOutputStream().close();
+					process.getErrorStream().close();
+				} catch (IOException e) {
+					throw e;
+				}
+			}
+		}
+	}
+	
+	/**
+     * 检查转码输入文件是否存在
+     * @param path
+     * @return
+     */
+    private static boolean checkfile(String path) {
+        File file = new File(path);
+        return file.isFile();
+    }
+}
+/**
+ * 打印线程
+ * @author cyq
+ *
+ */
+class PrintStreamThread extends Thread {
+	/**
+	 * 输入流
+	 */
+	java.io.InputStream __is;
+
+	/**
+	 * 构造方法
+	 * @param is
+	 */
+	public PrintStreamThread(java.io.InputStream is) {
+		__is = is;
+	}
+
+	/**
+	 * 线程执行方法
+	 */
+	public void run() {
+		try {
+			while (this != null) {
+				if (__is.read() == -1) {
+					break;
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java b/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java
new file mode 100644
index 0000000..67a8c8a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java
@@ -0,0 +1,490 @@
+package com.qxueyou.scc.teach.live.utils;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 
+ * 转码视频文件信息
+ * @author cyq
+ *
+ */
+public class FfmpegVideoInfo implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/**  主键 */
+	private String videoInfoId;
+	
+	/**  视频格式: AVI,MP4... */
+	private String format;
+	
+	/**  视频格式: audio , video */
+	private String type;
+	
+	/**  封面图片URL  */
+	private String coverPageUrl;
+	
+	/**  资源 MD5值  */
+	private String md;
+	
+	/**  视频大小,单位KB */
+	private Integer size ;
+	
+	/**  时长 */
+	private Integer playTime ;
+	
+	/**  原始宽度 */
+	private Integer videoWidth ;
+	
+	/**  原始高度 */
+	private Integer videoHeight ;
+	
+	/**  设置横纵比 */
+	private Float aspectRatio ;
+	
+	
+	/**
+	 * 帧率表达式(如:1000/333)
+	 */
+	private String frameRateExp;
+	
+	/**  帧率,是用于测量画面显示帧数的量度。 */
+	/**  所谓的测量单位为每秒显示帧数(Frames per Second,缩写:FPS)。
+	 * 如电影的帧率一般是25fps和29.97fps,
+	 *   而第一人称射击游戏等要求画面极为顺畅的特殊场合,
+	 *   则需要30fps以上的效果,高于60fps就没有必要了*/
+	private Integer frameRate ;
+	
+	/**  音频码率 */
+	/**  指视频或音频文件在单位时间内使用的数据流量,
+	 * 该参数的单位通常是Kbps,也就是千比特每秒。
+	 *   通常2000kbps~3000kbps就已经足以将画质效果表现到极致了。
+	 *   码率参数与视频文件最终体积大小有直接性的关系。*/
+	private Integer audioBitRate ;
+	
+	/**  视频码率 */
+	/**  指视频或音频文件在单位时间内使用的数据流量,
+	 * 该参数的单位通常是Kbps,也就是千比特每秒。
+	 *   通常2000kbps~3000kbps就已经足以将画质效果表现到极致了。
+	 *   码率参数与视频文件最终体积大小有直接性的关系。*/
+	private Integer videoBitRate ;
+	
+	/**  采样率 */
+	/**  每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。
+	 * 一般音乐CD的采样率是44100Hz,
+	 *   所以视频编码中的音频采样率保持在这个级别就完全足够了,
+	 *   通常视频转换器也将这个采样率作为默认设置。*/
+	private Integer sampleRate ;
+	
+	/** 
+	 * 音频通道数 
+	*/
+	private Integer channel ;
+	
+	/**
+	 * uuid作为文件前缀
+	 */
+	private String uuid;
+	
+	/**
+	 *  mp4 hd地址
+	 */
+	private String mp4HdUrl;
+	
+	/**
+	 *  mp4 sd地址
+	 */
+	private String mp4SdUrl;
+	
+	/**
+	 *  mp4 ld地址
+	 */
+	private String mp4LdUrl;
+	
+	/**
+	 *  m3u8 hd地址
+	 */
+	private String m3u8HdUrl;
+	
+	/**
+	 *  m3u8 sd地址
+	 */
+	private String m3u8SdUrl;
+	
+	/**
+	 *  m3u8 ld地址
+	 */
+	private String m3u8LdUrl;
+
+	/**
+	 *  重写toString方法
+	 */
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+	
+	/**
+	 *  返回 videoInfoId
+	 * @return
+	 */
+	public String getVideoInfoId() {
+		return videoInfoId;
+	}
+
+	/**
+	 *  赋值 videoInfoId
+	 * @param videoInfoId
+	 */
+	public void setVideoInfoId(String videoInfoId) {
+		this.videoInfoId = videoInfoId;
+	}
+
+	/**
+	 *  返回format
+	 * @return
+	 */
+	public String getFormat() {
+		return format;
+	}
+
+	/**
+	 * 
+	 * @param format
+	 */
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	/**
+	 * 
+	 * @param coverPageUrl
+	 */
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getMd() {
+		return md;
+	}
+
+	/**
+	 * 
+	 * @param md
+	 */
+	public void setMd(String md) {
+		this.md = md;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getSize() {
+		return size;
+	}
+
+	/**
+	 * 
+	 * @param size
+	 */
+	public void setSize(Integer size) {
+		this.size = size;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getPlayTime() {
+		return playTime;
+	}
+
+	/**
+	 * 
+	 * @param playTime
+	 */
+	public void setPlayTime(Integer playTime) {
+		this.playTime = playTime;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getVideoWidth() {
+		return videoWidth;
+	}
+
+	/**
+	 * 
+	 * @param videoWidth
+	 */
+	public void setVideoWidth(Integer videoWidth) {
+		this.videoWidth = videoWidth;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getVideoHeight() {
+		return videoHeight;
+	}
+
+	/**
+	 * 
+	 * @param videoHeight
+	 */
+	public void setVideoHeight(Integer videoHeight) {
+		this.videoHeight = videoHeight;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Float getAspectRatio() {
+		return aspectRatio;
+	}
+
+	/**
+	 * 
+	 * @param aspectRatio
+	 */
+	public void setAspectRatio(Float aspectRatio) {
+		this.aspectRatio = aspectRatio;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getFrameRate() {
+		return frameRate;
+	}
+
+	/**
+	 * 
+	 * @param frameRate
+	 */
+	public void setFrameRate(Integer frameRate) {
+		this.frameRate = frameRate;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getAuditBitRate() {
+		return audioBitRate;
+	}
+
+	/**
+	 * 
+	 * @param audioBitRate
+	 */
+	public void setAudioBitRate(Integer audioBitRate) {
+		this.audioBitRate = audioBitRate;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getVideoBitRate() {
+		return videoBitRate;
+	}
+
+	/**
+	 * 
+	 * @param videoBitRate
+	 */
+	public void setVideoBitRate(Integer videoBitRate) {
+		this.videoBitRate = videoBitRate;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getSampleRate() {
+		return sampleRate;
+	}
+
+	/**
+	 * 
+	 * @param sampleRate
+	 */
+	public void setSampleRate(Integer sampleRate) {
+		this.sampleRate = sampleRate;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * 
+	 * @param type
+	 */
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public Integer getChannel() {
+		return channel;
+	}
+
+	/**
+	 * 
+	 * @param channel
+	 */
+	public void setChannel(Integer channel) {
+		this.channel = channel;
+	}
+	
+	/**
+	 * 
+	 */
+	public String getUuid() {
+		return uuid;
+	}
+
+	/**
+	 * 
+	 */
+	public void setUuid(String uuid) {
+		this.uuid = uuid;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getMp4HdUrl() {
+		return mp4HdUrl;
+	}
+
+	/**
+	 * 
+	 * @param mp4HdUrl
+	 */
+	public void setMp4HdUrl(String mp4HdUrl) {
+		this.mp4HdUrl = mp4HdUrl;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getMp4SdUrl() {
+		return mp4SdUrl;
+	}
+
+	/**
+	 * 
+	 * @param mp4SdUrl
+	 */
+	public void setMp4SdUrl(String mp4SdUrl) {
+		this.mp4SdUrl = mp4SdUrl;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getMp4LdUrl() {
+		return mp4LdUrl;
+	}
+
+	/**
+	 * 
+	 * @param mp4LdUrl
+	 */
+	public void setMp4LdUrl(String mp4LdUrl) {
+		this.mp4LdUrl = mp4LdUrl;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getM3u8HdUrl() {
+		return m3u8HdUrl;
+	}
+
+	/**
+	 * 
+	 * @param m3u8HdUrl
+	 */
+	public void setM3u8HdUrl(String m3u8HdUrl) {
+		this.m3u8HdUrl = m3u8HdUrl;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getM3u8SdUrl() {
+		return m3u8SdUrl;
+	}
+
+	/**
+	 * 
+	 * @param m3u8SdUrl
+	 */
+	public void setM3u8SdUrl(String m3u8SdUrl) {
+		this.m3u8SdUrl = m3u8SdUrl;
+	}
+
+	/**
+	 * 
+	 * @return
+	 */
+	public String getM3u8LdUrl() {
+		return m3u8LdUrl;
+	}
+
+	/**
+	 * 
+	 * @param m3u8LdUrl
+	 */
+	public void setM3u8LdUrl(String m3u8LdUrl) {
+		this.m3u8LdUrl = m3u8LdUrl;
+	}
+
+	public String getFrameRateExp() {
+		return frameRateExp;
+	}
+
+	public void setFrameRateExp(String frameRateExp) {
+		this.frameRateExp = frameRateExp;
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/Res.java b/src/main/java/com/qxueyou/scc/teach/res/model/Res.java
new file mode 100644
index 0000000..d191896
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/Res.java
@@ -0,0 +1,292 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * ResItem generated by hbm2java
+ */
+@Entity
+@Table(name = "res")
+public class Res implements java.io.Serializable, ITrace {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 3267758298280722636L;
+	private String resId;
+	private String resDirId;
+	private String libId;
+	private String tenantId;
+	private String name;
+	private String type;
+	private String itemDestId;
+	private int useCount;
+	private int resOrder;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	private String coverPageUrl;
+	private String status;
+	private String remark;
+	private String fileId;
+
+
+
+	public final static String STATUS_DRAFT = "draft";
+
+	public final static String STATUS_ISSUED = "issued";
+
+	public final static String STATUS_OFFLINE = "offline";
+
+	public final static String STATUS_CONVER = "conver";
+
+	public final static String FILE_TYPE_VIDEO = "0";
+
+	public final static String FILE_TYPE_AUDIO = "1";
+
+	public final static String FILE_TYPE_DOC = "2";
+
+	public final static String FILE_TYPE_EXERCISE = "3";
+
+	public final static String FILE_TYPE_ARTICLE = "4";
+
+	public Res() {
+	}
+
+	public Res(String resId, String tenantId, String type, String itemDestId, int useCount, Date createTime,
+			Date updateTime, String creator, String createId, String updator, String updateId, boolean deleteFlag,
+			String status) {
+		this.resId = resId;
+		this.tenantId = tenantId;
+		this.type = type;
+		this.itemDestId = itemDestId;
+		this.useCount = useCount;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.status = status;
+	}
+
+	public Res(String itemId, String tenantId, String name, String type, String itemDestId, int useCount,
+			Date createTime, Date updateTime, String creator, String createId, String updator, String updateId,
+			boolean deleteFlag, String coverPageUrl, String status) {
+		this.resId = itemId;
+		this.tenantId = tenantId;
+		this.name = name;
+		this.type = type;
+		this.itemDestId = itemDestId;
+		this.useCount = useCount;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.coverPageUrl = coverPageUrl;
+		this.status = status;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "RES_ID", unique = true, nullable = false, length = 32)
+	public String getResId() {
+		return this.resId;
+	}
+
+	public void setResId(String resId) {
+		this.resId = resId;
+	}
+
+	@Column(name = "TENANT_ID", nullable = false, length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "TYPE", nullable = false)
+	public String getType() {
+		return this.type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@Column(name = "ITEM_DEST_ID", nullable = false, length = 32)
+	public String getItemDestId() {
+		return this.itemDestId;
+	}
+
+	public void setItemDestId(String itemDestId) {
+		this.itemDestId = itemDestId;
+	}
+
+	@Column(name = "USE_COUNT", nullable = false)
+	public int getUseCount() {
+		return this.useCount;
+	}
+
+	public void setUseCount(int useCount) {
+		this.useCount = useCount;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", nullable = false, length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", nullable = false, length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "COVER_PAGE_URL", length = 512)
+	public String getCoverPageUrl() {
+		return this.coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	@Column(name = "STATUS", nullable = false, length = 16)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Column(name = "RES_ORDER")
+	public int getResOrder() {
+		return resOrder;
+	}
+
+	public void setResOrder(int resOrder) {
+		this.resOrder = resOrder;
+	}
+
+	@Column(name = "RES_DIR_ID", length = 32)
+	public String getResDirId() {
+		return resDirId;
+	}
+
+	public void setResDirId(String resDirId) {
+		this.resDirId = resDirId;
+	}
+
+	@Column(name = "REMARK", length = 128)
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	@Column(name = "LIB_ID", length = 32)
+	public String getLibId() {
+		return libId;
+	}
+
+	public void setLibId(String resLibId) {
+		this.libId = resLibId;
+	}
+
+	@Transient
+	public String getFileId() {
+		return fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResDatas.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResDatas.java
new file mode 100644
index 0000000..2d1ad2e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResDatas.java
@@ -0,0 +1,23 @@
+package com.qxueyou.scc.teach.res.model;
+
+import com.qxueyou.scc.base.model.FileMeta;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class ResDatas implements Serializable {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -9022321373677113630L;
+	private List<FileMeta> items;
+
+    public List<FileMeta> getItems() {
+        return items;
+    }
+
+    public void setItems(List<FileMeta> items) {
+        this.items = items;
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResDir.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResDir.java
new file mode 100644
index 0000000..b7cf799
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResDir.java
@@ -0,0 +1,188 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResDir generated by hbm2java
+ */
+@Entity
+@Table(name = "res_dir")
+public class ResDir implements java.io.Serializable,ITrace {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 3681948135391422972L;
+	private String dirId;
+	private String name;
+	private String parentDirId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	private String tenantId;
+	private String libId;
+
+	public ResDir() {
+	}
+
+	public ResDir(String dirId, String parentDirId, Date createTime, Date updateTime, String creator, String createId,
+			boolean deleteFlag) {
+		this.dirId = dirId;
+		this.parentDirId = parentDirId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResDir(String dirId, String parentDirId, Date createTime, Date updateTime, String creator, String createId,
+			String updator, String updateId, boolean deleteFlag, String tenantId) {
+		this.dirId = dirId;
+		this.parentDirId = parentDirId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.tenantId = tenantId;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "DIR_ID", unique = true, nullable = false, length = 32)
+	public String getDirId() {
+		return this.dirId;
+	}
+
+	public void setDirId(String dirId) {
+		this.dirId = dirId;
+	}
+
+	@Column(name = "PARENT_DIR_ID", nullable = false)
+	public String getParentDirId() {
+		return this.parentDirId;
+	}
+
+	public void setParentDirId(String parentDirId) {
+		this.parentDirId = parentDirId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "LIB_ID", length = 32)
+	public String getLibId() {
+		return libId;
+	}
+
+	public void setLibId(String libId) {
+		this.libId = libId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResFile.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResFile.java
new file mode 100644
index 0000000..b0e3b2c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResFile.java
@@ -0,0 +1,224 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResFile generated by hbm2java
+ */
+@Entity
+@Table(name = "res_file")
+public class ResFile implements java.io.Serializable,ITrace {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4323997082899669942L;
+	private String fileId;
+	private String tenantId;
+	private String path;
+	private String fileType;
+	private String fileName;
+	private String fileFormat;
+	private Long size;
+	private String md5Hash;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+
+	public ResFile() {
+	}
+
+	public ResFile(String fileId, String path, Date createTime, Date updateTime, String creator, String createId,
+			boolean deleteFlag) {
+		this.fileId = fileId;
+		this.path = path;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResFile(String fileId, String tenantId, String path, String fileType, String fileName, String fileFormat,
+			Long size, String md5Hash, Date createTime, Date updateTime, String creator, String createId,
+			String updator, String updateId, boolean deleteFlag) {
+		this.fileId = fileId;
+		this.tenantId = tenantId;
+		this.path = path;
+		this.fileType = fileType;
+		this.fileName = fileName;
+		this.fileFormat = fileFormat;
+		this.size = size;
+		this.md5Hash = md5Hash;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "FILE_ID", unique = true, nullable = false, length = 32)
+	public String getFileId() {
+		return this.fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "PATH", nullable = false)
+	public String getPath() {
+		return this.path;
+	}
+
+	public void setPath(String path) {
+		this.path = path;
+	}
+
+	@Column(name = "FILE_TYPE", length = 16)
+	public String getFileType() {
+		return this.fileType;
+	}
+
+	public void setFileType(String fileType) {
+		this.fileType = fileType;
+	}
+
+	@Column(name = "FILE_NAME")
+	public String getFileName() {
+		return this.fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	@Column(name = "FILE_FORMAT", length = 32)
+	public String getFileFormat() {
+		return this.fileFormat;
+	}
+
+	public void setFileFormat(String fileFormat) {
+		this.fileFormat = fileFormat;
+	}
+
+	@Column(name = "SIZE", precision = 15, scale = 0)
+	public Long getSize() {
+		return this.size;
+	}
+
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+	@Column(name = "MD5_HASH", length = 32)
+	public String getMd5Hash() {
+		return this.md5Hash;
+	}
+
+	public void setMd5Hash(String md5Hash) {
+		this.md5Hash = md5Hash;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResItemArticle.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemArticle.java
new file mode 100644
index 0000000..2fda045
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemArticle.java
@@ -0,0 +1,182 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResItemArticle generated by hbm2java
+ */
+@Entity
+@Table(name = "res_item_article")
+public class ResItemArticle implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = -672848566298069055L;
+	private String articleId;
+	private String fileId;
+	private String tenantId;
+	private String name;
+	private String status;
+	private Date updateTime;
+	private Date createTime;
+	
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	
+	private boolean deleteFlag;
+
+	public ResItemArticle() {
+	}
+
+	public ResItemArticle(String articleId, String fileId, Date updateTime, Date createTime, boolean deleteFlag) {
+		this.articleId = articleId;
+		this.fileId = fileId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResItemArticle(String articleId, String fileId, String tenantId, String name, String status, Date updateTime,
+			Date createTime, boolean deleteFlag) {
+		this.articleId = articleId;
+		this.fileId = fileId;
+		this.tenantId = tenantId;
+		this.name = name;
+		this.status = status;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "ARTICLE_ID", unique = true, nullable = false, length = 32)
+	public String getArticleId() {
+		return this.articleId;
+	}
+
+	public void setArticleId(String articleId) {
+		this.articleId = articleId;
+	}
+
+	@Column(name = "FILE_ID", nullable = false, length = 32)
+	public String getFileId() {
+		return this.fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java
new file mode 100644
index 0000000..39330a5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java
@@ -0,0 +1,292 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResItemAudio generated by hbm2java
+ */
+@Entity
+@Table(name = "res_item_audio")
+public class ResItemAudio implements java.io.Serializable ,ITrace{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2372476474860432579L;
+	private String audioId;
+	private String fileId;
+	private String tenantId;
+	private String mediaVideoId;
+	private String name;
+	private Integer playTime;
+	private String format;
+	private Integer size;
+	private String transcodeStatus;
+	private Short status;
+	private Date updateTime;
+	private Date createTime;
+	
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	
+	private boolean deleteFlag;
+	private String mark;
+	
+	private Integer seconds;
+
+	public ResItemAudio() {
+	}
+
+	public ResItemAudio(String audioId, String fileId, Date updateTime, Date createTime, boolean deleteFlag) {
+		this.audioId = audioId;
+		this.fileId = fileId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResItemAudio(String audioId, String fileId, String tenantId, String name, Integer playTime, String format,
+			Integer size, String transcodeStatus, Short status, Date updateTime, Date createTime, boolean deleteFlag,
+			String mark) {
+		this.audioId = audioId;
+		this.fileId = fileId;
+		this.tenantId = tenantId;
+		this.name = name;
+		this.playTime = playTime;
+		this.format = format;
+		this.size = size;
+		this.transcodeStatus = transcodeStatus;
+		this.status = status;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+		this.mark = mark;
+	}
+	
+	/*
+	 * 草稿
+	 */
+	public static final short STATUS_DRAFT = 0;
+
+	/*
+	 * 转码中
+	 */
+	public static final short STATUS_TRANSFORMING = 1;
+
+	/*
+	 * 已发布
+	 */
+	public static final short STATUS_PUBLISHED = 2;
+
+	/*
+	 * 已下架
+	 */
+	public static final short STATUS_TAKEOFF = 3;
+
+	/*
+	 * 转码失败
+	 */
+	public static final short STATUS_TRANSFAILED = 4;
+
+	/*
+	 * 排队中
+	 */
+	public static final short STATUS_LINEUP = 5;
+
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "AUDIO_ID", unique = true, nullable = false, length = 32)
+	public String getAudioId() {
+		return this.audioId;
+	}
+
+	public void setAudioId(String audioId) {
+		this.audioId = audioId;
+	}
+
+	@Column(name = "FILE_ID", nullable = false, length = 32)
+	public String getFileId() {
+		return this.fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "PLAY_TIME")
+	public Integer getPlayTime() {
+		return this.playTime;
+	}
+
+	public void setPlayTime(Integer playTime) {
+		this.playTime = playTime;
+	}
+
+	@Column(name = "FORMAT", length = 32)
+	public String getFormat() {
+		return this.format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	@Column(name = "SIZE")
+	public Integer getSize() {
+		return this.size;
+	}
+
+	public void setSize(Integer size) {
+		this.size = size;
+	}
+
+	@Column(name = "TRANSCODE_STATUS", length = 16)
+	public String getTranscodeStatus() {
+		return this.transcodeStatus;
+	}
+
+	public void setTranscodeStatus(String transcodeStatus) {
+		this.transcodeStatus = transcodeStatus;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public Short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "MARK")
+	public String getMark() {
+		return this.mark;
+	}
+
+	public void setMark(String mark) {
+		this.mark = mark;
+	}
+	
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "AUDIO_SECONDS")
+	public Integer getSeconds() {
+		return seconds;
+	}
+
+	public void setSeconds(Integer seconds) {
+		this.seconds = seconds;
+	}
+	
+	@Column(name = "MEDIA_VIDEO_ID", length = 32)
+	public String getMediaVideoId() {
+		return mediaVideoId;
+	}
+
+	public void setMediaVideoId(String mediaVideoId) {
+		this.mediaVideoId = mediaVideoId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java
new file mode 100644
index 0000000..4e94e72
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java
@@ -0,0 +1,236 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResItemDoc generated by hbm2java
+ */
+@Entity
+@Table(name = "res_item_doc")
+public class ResItemDoc implements java.io.Serializable, ITrace {
+	/*
+	 * 草稿
+	 */
+	public static final short STATUS_DRAFT = 0;
+
+	/*
+	 * 转码中
+	 */
+	public static final short STATUS_TRANSFORMING = 1;
+
+	/*
+	 * 已发布
+	 */
+	public static final short STATUS_PUBLISHED = 2;
+
+	/*
+	 * 已下架
+	 */
+	public static final short STATUS_TAKEOFF = 3;
+
+	/*
+	 * 转码失败
+	 */
+	public static final short STATUS_TRANSFAILED = 4;
+
+	/*
+	 * 排队中
+	 */
+	public static final short STATUS_LINEUP = 5;
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4120454964618342613L;
+	private String docId;
+	private String name;
+	private String tenantId;
+	private String origFileId;
+	private String finalFileId;
+	private Short status;
+	private Date updateTime;
+	private Date createTime;
+	private boolean deleteFlag;
+
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private String handoutId;
+
+	public ResItemDoc() {
+	}
+
+	public ResItemDoc(String docId, String origFileId, String finalFileId, Date updateTime, Date createTime,
+			boolean deleteFlag) {
+		this.docId = docId;
+		this.origFileId = origFileId;
+		this.finalFileId = finalFileId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResItemDoc(String docId, String name, String tenantId, String origFileId, String finalFileId, Short status,
+			Date updateTime, Date createTime, boolean deleteFlag) {
+		this.docId = docId;
+		this.name = name;
+		this.tenantId = tenantId;
+		this.origFileId = origFileId;
+		this.finalFileId = finalFileId;
+		this.status = status;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "DOC_ID", unique = true, nullable = false, length = 32)
+	public String getDocId() {
+		return this.docId;
+	}
+
+	public void setDocId(String docId) {
+		this.docId = docId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "ORIG_FILE_ID", nullable = false, length = 32)
+	public String getOrigFileId() {
+		return this.origFileId;
+	}
+
+	public void setOrigFileId(String origFileId) {
+		this.origFileId = origFileId;
+	}
+
+	@Column(name = "FINAL_FILE_ID", nullable = false, length = 32)
+	public String getFinalFileId() {
+		return this.finalFileId;
+	}
+
+	public void setFinalFileId(String finalFileId) {
+		this.finalFileId = finalFileId;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public Short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "HANDOUT_ID", length = 32)
+	public String getHandoutId() {
+		return handoutId;
+	}
+
+	public void setHandoutId(String handoutId) {
+		this.handoutId = handoutId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResItemExercise.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemExercise.java
new file mode 100644
index 0000000..cc153c7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemExercise.java
@@ -0,0 +1,185 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-16 10:59:23 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResItemExercise generated by hbm2java
+ */
+@Entity
+@Table(name = "res_item_exercise")
+public class ResItemExercise implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = -72831040636403588L;
+	private String exerciseId;
+	private String name;
+	private String tenantId;
+	private String exerciseGroupId;
+	private String status;
+	private Date updateTime;
+	private Date createTime;
+	private boolean deleteFlag;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+
+	public ResItemExercise() {
+	}
+
+	public ResItemExercise(String exerciseId, Date updateTime, Date createTime, boolean deleteFlag) {
+		this.exerciseId = exerciseId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResItemExercise(String exerciseId, String name, String tenantId, String exerciseGroupId, String status,
+			Date updateTime, Date createTime, boolean deleteFlag, String creator, String createId, String updator,
+			String updateId) {
+		this.exerciseId = exerciseId;
+		this.name = name;
+		this.tenantId = tenantId;
+		this.exerciseGroupId = exerciseGroupId;
+		this.status = status;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "EXERCISE_ID", unique = true, nullable = false, length = 32)
+	public String getExerciseId() {
+		return this.exerciseId;
+	}
+
+	public void setExerciseId(String exerciseId) {
+		this.exerciseId = exerciseId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "EXERCISE_GROUP_ID", length = 32)
+	public String getExerciseGroupId() {
+		return this.exerciseGroupId;
+	}
+
+	public void setExerciseGroupId(String exerciseGroupId) {
+		this.exerciseGroupId = exerciseGroupId;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "CREATOR", length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java
new file mode 100644
index 0000000..d8af1aa
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java
@@ -0,0 +1,323 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-11 10:57:10 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResItemVideo generated by hbm2java
+ */
+@Entity
+@Table(name = "res_item_video")
+public class ResItemVideo implements java.io.Serializable, ITrace {
+
+	/*
+	 * 草稿
+	 */
+	public static final short STATUS_DRAFT = 0;
+
+	/*
+	 * 转码中
+	 */
+	public static final short STATUS_TRANSFORMING = 1;
+
+	/*
+	 * 已发布
+	 */
+	public static final short STATUS_PUBLISHED = 2;
+
+	/*
+	 * 已下架
+	 */
+	public static final short STATUS_TAKEOFF = 3;
+
+	/*
+	 * 转码失败
+	 */
+	public static final short STATUS_TRANSFAILED = 4;
+
+	/*
+	 * 排队中
+	 */
+	public static final short STATUS_LINEUP = 5;
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 975658599869198441L;
+	private String videoId;
+	private String fileId;
+	private String mediaVideoId;
+	private String tenantId;
+	private String name;
+	private Integer playTime;
+	private String format;
+	private Integer size;
+	private Integer finalFileCount;
+	private String transcodeStatus;
+	private Short status;
+	private Integer videoOrigWidth;
+	private Integer videoOrigHeight;
+	private Date updateTime;
+	private Date createTime;
+
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+
+	private boolean deleteFlag;
+	private String mark;
+	private Integer videoSeconds;
+
+	public ResItemVideo() {
+	}
+
+	public ResItemVideo(String videoId, String fileId, Date updateTime, Date createTime, boolean deleteFlag) {
+		this.videoId = videoId;
+		this.fileId = fileId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResItemVideo(String videoId, String fileId, String tenantId, String name, Integer playTime, String format,
+			Integer size, Integer finalFileCount, String transcodeStatus, Short status, Integer videoOrigWidth,
+			Integer videoOrigHeight, Date updateTime, Date createTime, boolean deleteFlag, String mark) {
+		this.videoId = videoId;
+		this.fileId = fileId;
+		this.tenantId = tenantId;
+		this.name = name;
+		this.playTime = playTime;
+		this.format = format;
+		this.size = size;
+		this.finalFileCount = finalFileCount;
+		this.transcodeStatus = transcodeStatus;
+		this.status = status;
+		this.videoOrigWidth = videoOrigWidth;
+		this.videoOrigHeight = videoOrigHeight;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+		this.mark = mark;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "VIDEO_ID", unique = true, nullable = false, length = 32)
+	public String getVideoId() {
+		return this.videoId;
+	}
+
+	public void setVideoId(String videoId) {
+		this.videoId = videoId;
+	}
+
+	@Column(name = "FILE_ID", nullable = false, length = 32)
+	public String getFileId() {
+		return this.fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "PLAY_TIME")
+	public Integer getPlayTime() {
+		return this.playTime;
+	}
+
+	public void setPlayTime(Integer playTime) {
+		this.playTime = playTime;
+	}
+
+	@Column(name = "FORMAT", length = 32)
+	public String getFormat() {
+		return this.format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	@Column(name = "SIZE")
+	public Integer getSize() {
+		return this.size;
+	}
+
+	public void setSize(Integer size) {
+		this.size = size;
+	}
+
+	@Column(name = "FINAL_FILE_COUNT")
+	public Integer getFinalFileCount() {
+		return this.finalFileCount;
+	}
+
+	public void setFinalFileCount(Integer finalFileCount) {
+		this.finalFileCount = finalFileCount;
+	}
+
+	@Column(name = "TRANSCODE_STATUS", length = 16)
+	public String getTranscodeStatus() {
+		return this.transcodeStatus;
+	}
+
+	public void setTranscodeStatus(String transcodeStatus) {
+		this.transcodeStatus = transcodeStatus;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public Short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	@Column(name = "VIDEO_ORIG_WIDTH")
+	public Integer getVideoOrigWidth() {
+		return this.videoOrigWidth;
+	}
+
+	public void setVideoOrigWidth(Integer videoOrigWidth) {
+		this.videoOrigWidth = videoOrigWidth;
+	}
+
+	@Column(name = "VIDEO_ORIG_HEIGHT")
+	public Integer getVideoOrigHeight() {
+		return this.videoOrigHeight;
+	}
+
+	public void setVideoOrigHeight(Integer videoOrigHeight) {
+		this.videoOrigHeight = videoOrigHeight;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "MARK")
+	public String getMark() {
+		return this.mark;
+	}
+
+	public void setMark(String mark) {
+		this.mark = mark;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "MEDIA_VIDEO_ID", length = 32)
+	public String getMediaVideoId() {
+		return mediaVideoId;
+	}
+
+	public void setMediaVideoId(String mediaVideoId) {
+		this.mediaVideoId = mediaVideoId;
+	}
+
+	@Column(name = "VIDEO_SECONDS")
+	public Integer getVideoSeconds() {
+		return videoSeconds;
+	}
+
+	public void setVideoSeconds(Integer videoSeconds) {
+		this.videoSeconds = videoSeconds;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/model/ResLib.java b/src/main/java/com/qxueyou/scc/teach/res/model/ResLib.java
new file mode 100644
index 0000000..88eff62
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/model/ResLib.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.teach.res.model;
+// Generated 2018-3-16 9:12:37 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * ResLib generated by hbm2java
+ */
+@Entity
+@Table(name = "res_lib")
+public class ResLib implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = 4966621787683231275L;
+	private String libId;
+	private String rootDirId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	private String tenantId;
+	private String ownerType;
+	private String ownerId;
+	
+	public final static String OWNNER_TYPE_ORG="org";
+	
+	public final static String OWNNER_TYPE_USER="user";
+	
+	public final static String OWNNER_TYPE_CLASS="class";
+
+	public ResLib() {
+	}
+
+	public ResLib(String libId, String rootDirId, Date createTime, Date updateTime, String creator, String createId,
+			boolean deleteFlag) {
+		this.libId = libId;
+		this.rootDirId = rootDirId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public ResLib(String libId, String rootDirId, Date createTime, Date updateTime, String creator, String createId,
+			String updator, String updateId, boolean deleteFlag, String tenantId, String ownerType, String ownerId) {
+		this.libId = libId;
+		this.rootDirId = rootDirId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.tenantId = tenantId;
+		this.ownerType = ownerType;
+		this.ownerId = ownerId;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "LIB_ID", unique = true, nullable = false, length = 32)
+	public String getLibId() {
+		return this.libId;
+	}
+
+	public void setLibId(String libId) {
+		this.libId = libId;
+	}
+
+	@Column(name = "ROOT_DIR_ID", nullable = false)
+	public String getRootDirId() {
+		return this.rootDirId;
+	}
+
+	public void setRootDirId(String rootDirId) {
+		this.rootDirId = rootDirId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "OWNER_TYPE", length = 128)
+	public String getOwnerType() {
+		return this.ownerType;
+	}
+
+	public void setOwnerType(String ownnerType) {
+		this.ownerType = ownnerType;
+	}
+
+	@Column(name = "OWNER_ID", length = 128)
+	public String getOwnerId() {
+		return this.ownerId;
+	}
+
+	public void setOwnerId(String ownnerId) {
+		this.ownerId = ownnerId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java b/src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java
new file mode 100644
index 0000000..f6d4393
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.teach.res.service;
+
+import java.io.InputStream;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.res.model.ResFile;
+
+public interface IFileService {
+
+	/**
+	 * 上传文件
+	 * @param in 文件输入流
+	 * @param name 文件名
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"fileId","90023afwe32300fee23"}},若成功,则返回fileId
+	 */
+	Result doUpload(InputStream in,String name);
+	
+	/**
+	 * 返回文件
+	 * @param fileId
+	 * @return
+	 */
+	ResFile read(String fileId);
+	
+	/**
+	 * 返回文件Id
+	 * @param path 文件路径
+	 * @return
+	 */
+	String readIdByPath(String path);
+	
+	/**
+	 * 返回文件流
+	 * @param id 文件路径
+	 * @return
+	 */
+	InputStream readStreamById(String id);
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java b/src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java
new file mode 100644
index 0000000..d8ffec8
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.teach.res.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface IResAudioService {
+	
+	/**
+	 * 修改音频时长
+	 * @param audioId 音频id
+	 * @param duration 时长
+	 * @return 主键
+	 */
+	Result updateDuration(String audioId,int duration);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java b/src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java
new file mode 100644
index 0000000..d00b8da
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java
@@ -0,0 +1,37 @@
+package com.qxueyou.scc.teach.res.service;
+
+import com.qxueyou.scc.base.model.Result;
+
+public interface IResItemService {
+	
+	/**
+	 * 新增资源
+	 * @param fileId 文件id,如果为练习,则fileId为空
+	 * @param name 资源名称
+	 * @return 主键
+	 */
+	String add(String fileId,String name);
+	
+	/**
+	 * 修改资源
+	 * @param id 资源id
+	 * @param name 名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result update(String id,String name);
+	
+	
+	/**
+	 * 读取资源真实文件访问路径
+	 * @param resId 资源id数组
+	 * @param attribute 资源附加属性
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"type":"",path:""}}
+	 */
+	String readAccessPath(String resId,String attribute);
+	
+	/**
+	 * 获取资源类型
+	 * @return
+	 */
+	String getResItemType();
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/IResService.java b/src/main/java/com/qxueyou/scc/teach/res/service/IResService.java
new file mode 100644
index 0000000..0dca1c9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/IResService.java
@@ -0,0 +1,239 @@
+package com.qxueyou.scc.teach.res.service;
+
+import com.qxueyou.scc.base.model.FileMeta;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResDir;
+import com.qxueyou.scc.teach.res.model.ResLib;
+
+import java.util.List;
+
+public interface IResService {
+
+    /**
+     * 初始化个人资源库
+     *
+     * @return
+     */
+    Result initUserLib();
+
+    /**
+     * 获取个人资源库
+     *
+     * @return
+     */
+    ResLib readUserLib();
+
+    /**
+     * 读取个人资源库
+     *
+     * @param type 资源库类型
+     * @return
+     */
+    ResLib getResLib(String type, String ownerId);
+
+    /**
+     * 新增资源
+     *
+     * @param dirId        文件夹id
+     * @param itemDestId   如果为视频,文档,文章等,则为文件id,如果为练习,则为exerciseGroupId
+     * @param name         资源名称
+     * @param remark       说明
+     * @param type         资源类型
+     * @param coverPageUrl 封面文件id,如果为练习,则为空
+     * @return 上传结果:{"success":true,msg:"success",attrs:{"resId","90023afwe32300fee23"}},若成功,则返回resId
+     */
+    Result add(String dirId, String itemDestId, String name, String remark, String type, String coverPageUrl);
+
+    /**
+     * 批量上传资源
+     */
+    Result addBatchRes(String dirId, String type, List<FileMeta> items);
+
+    /**
+     * 返回资源
+     *
+     * @param resId
+     * @return
+     */
+    Res read(String resId);
+
+    /**
+     * 修改资源
+     *
+     * @param resId        资源id
+     * @param name         名称
+     * @param remark       说明
+     * @param coverPageUrl 封面文件id,如果为练习,则为空
+     * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+     */
+    Result update(String resId, String name, String remark, String coverPageUrl);
+
+    /**
+     * 删除资源
+     *
+     * @param resIds 资源id数组
+     * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+     */
+    Result delete(String[] resIds);
+
+    /**
+     * 复制资源
+     *
+     * @param resId     资源id数组
+     * @param destDirId 目标文件夹id
+     * @param name      资源名称
+     * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+     */
+    Result doCopy(String resId, String destDirId, String name);
+
+    /**
+     * 移动资源
+     *
+     * @param resId     资源id数组
+     * @param destDirId 目标文件夹id
+     * @param name      资源名称
+     * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+     */
+    Result doMove(String resId, String destDirId, String name);
+
+    /**
+     * 查询资源
+     *
+     * @param dirId   资源文件夹id
+     * @param text    搜索文本
+     * @param pageNo  页码
+     * @param pageNum 每页显示行数
+     * @param type    资源类型
+     * @return 返回资源列表
+     */
+    List<Res> listRes(String dirId, String text, Integer pageSize, Integer pageNum, String type);
+
+    /**
+     * 查询我的所有资源
+     *
+     * @param text    搜索文本
+     * @param pageNo  页码
+     * @param pageNum 每页显示行数
+     * @param type    资源类型
+     * @return 返回资源列表
+     */
+    List<Res> listMyRes(String text, Integer pageSize, Integer pageNum, String type);
+
+    /**
+     * 根据资源库类型查找资源
+     *
+     * @param libType  资源库类型
+     * @param ownerId  所有者id
+     * @param text     搜索文本
+     * @param pageSize 每页显示行数
+     * @param pageNum  页码
+     * @param resType  资源类型
+     * @return 返回资源列表
+     */
+    List<Res> listResByLib(String libType, String ownerId, String text, Integer pageSize, Integer pageNum,
+                           String resType);
+
+    /**
+     * 根据资源库类型查找资源总数
+     *
+     * @param libType 资源库类型
+     * @param ownerId 所有者id
+     * @param text    搜索文本
+     * @param resType 资源类型
+     * @return 返回资源列表
+     */
+    int listResCountByLib(String libType, String ownerId, String text, String resType);
+
+    /**
+     * 我的所有资源的数量
+     *
+     * @param text 搜索文本
+     * @param type 资源类型
+     * @return 返回资源列表
+     */
+    int listMyResCount(String text, String type);
+
+    /**
+     * 查询资源个数
+     *
+     * @param dirId   资源文件夹id
+     * @param text    搜索文本
+     * @param pageNo  页码
+     * @param pageNum 每页显示行数
+     * @param type    资源类型
+     * @return 返回资源总数
+     */
+    int listResCount(String dirId, String text, String type);
+
+    /**
+     * 读取资源真实文件访问路径
+     *
+     * @param resId     资源id数组
+     * @param attribute 资源附加属性
+     * @return 上传结果:{"success":true,msg:"success",attrs:{"type":"",path:""}}
+     */
+    Result readAccessPath(String resId, String attribute);
+
+    /**
+     * 新增资源文件夹
+     *
+     * @param parentDirId 父级资源文件夹id
+     * @param name        文件夹名称
+     * @return 上传结果:{"success":true,msg:"success",attrs:{"dirId","90023afwe32300fee23"}},若成功,则返回dirId
+     */
+    Result addDir(String parentDirId, String name);
+
+    /**
+     * 读取资源文件夹
+     *
+     * @param dirId 资源文件夹id
+     * @return 上传结果:{"success":true,msg:"success",attrs:{"dirId","90023afwe32300fee23"}},若成功,则返回dirId
+     */
+    ResDir readDir(String dirId);
+
+    /**
+     * 修改资源文件夹
+     *
+     * @param dirId 文件夹id
+     * @param name  名称
+     * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+     */
+    Result updateDir(String dirId, String name);
+
+    /**
+     * 删除资源文件夹
+     *
+     * @param dirIds 资源文件夹id数组
+     * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+     */
+    Result deleteDir(String[] dirIds);
+
+    /**
+     * 返回个人资源库下级资源文件夹列表
+     *
+     * @param parentDirId 父级资源文件夹id
+     * @return 返回资源列表
+     */
+    List<ResDir> doGetMyLibChildDirs(String parentDirId);
+
+    /**
+     * 返回下级资源文件夹列表
+     *
+     * @param parentDirId 父级资源文件夹id
+     * @param type        资源库类型
+     * @return 返回资源列表
+     */
+    List<ResDir> doGetChildDirs(String parentDirId, String type);
+
+    /**
+     * 返回资源库根节点
+     *
+     * @param type    类型
+     * @param ownerId 拥有者id
+     * @return 返回资源库根节点
+     */
+    ResDir doGetRootDir(String type, String ownerId);
+
+    void deleteFile4Dir(String dirId);
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java
new file mode 100644
index 0000000..46cee30
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java
@@ -0,0 +1,211 @@
+package com.qxueyou.scc.teach.res.service.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+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.base.util.QFileUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.teach.res.model.ResFile;
+import com.qxueyou.scc.teach.res.service.IFileService;
+
+/**
+ * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
+ * 
+ * @author xiadehu
+ *
+ */
+@Service
+public class FileService extends CommonAppService implements IFileService {
+
+	private final Logger log = LogManager.getLogger(FileService.class);
+
+	/*
+	 * 文件类型:目前支持四种
+	 */
+	public final static String FILE_TYPE_VIDEO = "video";
+
+	public final static String FILE_TYPE_DOC = "doc";
+
+	public final static String FILE_TYPE_AUDIO = "audio";
+
+	public final static String FILE_TYPE_DATA = "data";
+
+	public final static String FILE_TYPE_IMG = "img";
+
+	private static final Map<String, String> fileFormatMap = CollectionUtils.newStringMap("MPEG", FILE_TYPE_VIDEO,
+			"AVI", FILE_TYPE_VIDEO, "MOV", FILE_TYPE_VIDEO, "ASF", FILE_TYPE_VIDEO, "WMV", FILE_TYPE_VIDEO, "NAVI",
+			FILE_TYPE_VIDEO, "3GP", FILE_TYPE_VIDEO, "RAM", FILE_TYPE_VIDEO, "RA", FILE_TYPE_VIDEO, "MKV",
+			FILE_TYPE_VIDEO, "F4V", FILE_TYPE_VIDEO, "RMVB", FILE_TYPE_VIDEO, "MP4", FILE_TYPE_VIDEO,
+
+			"DOC", FILE_TYPE_DOC, "DOCX", FILE_TYPE_DOC, "PDF", FILE_TYPE_DOC, "PPT", FILE_TYPE_DOC, "PPTX",
+			FILE_TYPE_DOC, "XLS", FILE_TYPE_DOC, "XLSX", FILE_TYPE_DOC,
+
+			"MP3", FILE_TYPE_AUDIO, "WMA", FILE_TYPE_AUDIO, "WAV", FILE_TYPE_AUDIO,
+
+			"DATA", FILE_TYPE_DATA,
+
+			"JPG", FILE_TYPE_IMG,"JPEG", FILE_TYPE_IMG, "GIF", FILE_TYPE_IMG, "BMP", FILE_TYPE_IMG, "PNG", FILE_TYPE_IMG
+
+	);
+
+	@Autowired
+	private SccConfig config;
+
+	@Override
+	public Result doUpload(InputStream in, String name) {
+		try {
+
+			String destPath = getDestPath(name);
+			String fullPath = config.getResRootPath() + "/" + destPath;
+
+			File fileRoot = new File(fullPath.substring(0, fullPath.lastIndexOf("/")));
+
+			if (!fileRoot.exists()) {
+				fileRoot.mkdirs();
+			}
+			FileUtils.copyInputStreamToFile(in, new File(fullPath));
+
+			ResFile file = insertFileToDB(name, fullPath, destPath, getFileType(name));
+
+			return new Result(true, "success",
+					CollectionUtils.newStringMap("fileId", file.getFileId(), "path", destPath));
+		} catch (Exception e) {
+			log.error(e, e);
+		} finally {
+			IOUtils.closeQuietly(in);
+		}
+		return new Result(false, "save file error");
+	}
+
+	/**
+	 * 插入文件信息到数据库
+	 * 
+	 * @param name
+	 * @param fullPath
+	 *            全路径
+	 * @param relativePath
+	 *            相对路径
+	 * @param type
+	 *            文件类型,非文件格式
+	 * @return
+	 */
+	private ResFile insertFileToDB(String name, String fullPath, String relativePath, String type) {
+
+		ResFile file = new ResFile();
+
+		TraceUtils.setCreateTrace(file);
+		file.setFileName(name);
+		file.setFileFormat(QFileUtils.getFileFormat(name));
+		file.setFileType(type);
+		// TODO
+		file.setMd5Hash(null);
+		file.setPath(relativePath);
+		file.setSize(FileUtils.sizeOf(new File(fullPath)));
+		// TODO
+		file.setTenantId(null);
+		file.setDeleteFlag(false);
+
+		save(file);
+
+		return file;
+
+	}
+
+	/**
+	 * 获取文件类型
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private String getFileType(String name) {
+		String fileType = fileFormatMap.get(QFileUtils.getFileFormat(name));
+		return StringUtils.isEmpty(fileType) ? FILE_TYPE_DATA : fileType;
+	}
+
+	/**
+	 * 获取文件目标路径
+	 * 
+	 * @param name
+	 * @return
+	 */
+	private String getDestPath(String name) {
+		String fileType = getFileType(name);
+
+		StringBuffer path = new StringBuffer(128);
+		path.append(fileType);
+
+		Calendar now = new GregorianCalendar();
+
+		path.append('/');
+		path.append(now.get(Calendar.YEAR));
+		path.append(StringUtils.leftPad(String.valueOf(now.get(Calendar.MONTH)), 2, '0'));
+		path.append('/');
+		path.append(now.get(Calendar.DAY_OF_MONTH));
+		path.append('/');
+		path.append(UUIDUtils.UUID());
+		path.append('.');
+		path.append(QFileUtils.getFileFormat(name));
+
+		return path.toString();
+
+	}
+
+	@Override
+	public ResFile read(String fileId) {
+		ResFile file = read(ResFile.class, fileId);
+		return file;
+	}
+
+	@Override
+	public String readIdByPath(String path) {
+
+		String hql = "from ResFile where path=? and deleteFlag is false";
+
+		ResFile result = findUnique(hql, CollectionUtils.newList(chopFirstSlash(path)), ResFile.class);
+
+		return result.getFileId();
+	}
+
+	private String chopFirstSlash(String path) {
+		if (path.startsWith("/")) {
+			return path.substring(1);
+		}
+		return path;
+	}
+
+	@Override
+	public InputStream readStreamById(String id) {
+
+		ResFile file = read(id);
+
+		if (null == file) {
+			return null;
+		}
+
+		String absolutePath = config.getResRootPath() + "/" + file.getPath();
+
+		try {
+			return FileUtils.openInputStream(new File(absolutePath));
+		} catch (IOException e) {
+			log.error(e, e);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
new file mode 100644
index 0000000..d142c62
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
@@ -0,0 +1,521 @@
+package com.qxueyou.scc.teach.res.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.base.model.FileMeta;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResDir;
+import com.qxueyou.scc.teach.res.model.ResLib;
+import com.qxueyou.scc.teach.res.service.IResItemService;
+import com.qxueyou.scc.teach.res.service.IResService;
+import com.qxueyou.scc.teach.subject.service.impl.SubjectLectureService;
+
+/**
+ * 资源服务
+ *
+ * @author 夏德虎
+ */
+@Service
+public class ResService extends CommonAppService implements IResService {
+
+    public static final String RES_TOUPDATE_CONVER_STATUS_LST = "RES_TOUPDATE_CONVER_STATUS_LST";
+
+    private static final String RES_DIR_ROOT = "0";
+
+    @Autowired
+    ICacheService cacheService;
+
+    @Autowired
+    private ApplicationContext appContext;
+    
+    @Autowired
+    private IClassLectureService classLectureService;
+
+    /**
+     * 各类型资源服务实现
+     */
+    private Map<String, IResItemService> resItemServiceMap = new HashMap<String, IResItemService>(6);
+
+    @PostConstruct
+    private void init() {
+        registerResItemService(appContext.getBean("ResItemVideoService", IResItemService.class));
+        registerResItemService(appContext.getBean("ResItemAudioService", IResItemService.class));
+        registerResItemService(appContext.getBean("ResItemDocService", IResItemService.class));
+        registerResItemService(appContext.getBean("ResItemExerciseService", IResItemService.class));
+        registerResItemService(appContext.getBean("ResItemArticleService", IResItemService.class));
+    }
+
+    private void registerResItemService(IResItemService service) {
+        resItemServiceMap.put(service.getResItemType(), service);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.qxueyou.scc.teach.res.service.IResService#add(java.lang.String,
+     * java.lang.String, java.lang.String, java.lang.String)
+     */
+    @Override
+    public Result add(String dirId, String itemDestId, String name, String remark, String type, String coverPageUrl) {
+
+        ResDir dir = read(ResDir.class, dirId);
+
+        String resItemId = resItemServiceMap.get(type).add(itemDestId, name);
+
+        Res res = new Res();
+        TraceUtils.setCreateTrace(res);
+
+        res.setCoverPageUrl(coverPageUrl);
+        res.setItemDestId(resItemId);
+        res.setName(name);
+        res.setStatus(Res.STATUS_CONVER);
+        res.setType(type);
+        res.setResDirId(dirId);
+        res.setRemark(remark);
+        res.setLibId(dir.getLibId());
+
+        save(res);
+
+        return new Result(true, "success", CollectionUtils.newStringMap("resId", res.getResId()));
+    }
+
+    @Override
+    public Result addBatchRes(String dirId, String type, List<FileMeta> items) {
+        ResDir dir = read(ResDir.class, dirId);
+        Res res = null;
+        for (FileMeta fileMeta : items) {
+            String name = fileMeta.getFileName();
+            String resItemId = resItemServiceMap.get(type).add(fileMeta.getFileId(), name);
+            res = new Res();
+            TraceUtils.setCreateTrace(res);
+            res.setItemDestId(resItemId);
+            res.setName(name);
+            res.setStatus(Res.STATUS_CONVER);
+            res.setType(type);
+            res.setLibId(dir.getLibId());
+            res.setResDirId(dirId);
+            save(res);
+        }
+        return Result.SUCCESS;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.qxueyou.scc.teach.res.service.IResService#update(java.lang.String,
+     * java.lang.String, java.lang.String)
+     */
+    @Override
+    public Result update(String resId, String name, String remark, String coverPageUrl) {
+
+        Res res = read(Res.class, resId);
+
+        resItemServiceMap.get(res.getType()).update(res.getItemDestId(), name);
+
+        TraceUtils.setUpdateTrace(res);
+        res.setName(name);
+        res.setCoverPageUrl(coverPageUrl);
+        res.setRemark(remark);
+
+        save(res);
+
+        return new Result(true, "success");
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see com.qxueyou.scc.teach.res.service.IResService#delete(java.lang.String[])
+     */
+    @Override
+    public Result delete(String[] resIds) {
+
+        for (String resId : resIds) {
+            delete(resId);
+        }
+
+        return new Result(true, "success");
+    }
+
+    /**
+     * @param resId 资源id
+     * @return
+     */
+    private Result delete(String resId) {
+
+        Res res = read(Res.class, resId);
+
+        TraceUtils.setUpdateTrace(res);
+        res.setDeleteFlag(true);
+
+        save(res);
+
+        return new Result(true, "success");
+    }
+
+    @Override
+    public Result doCopy(String resId, String destDirId, String name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Result doMove(String resId, String destDirId, String name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<Res> listRes(String dirId, String text, Integer pageSize, Integer pageNum, String type) {
+
+        StringBuffer hql = new StringBuffer("from Res where deleteFlag is false and name like ? and resDirId=? ");
+
+        List<Object> args = CollectionUtils.newList(text + "%", dirId);
+
+        if (!StringUtils.isEmpty(type)) {
+            hql.append(" and type=?");
+            args.add(type);
+        }
+        hql.append(" order by createTime desc");
+        List<Res> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Res.class);
+        return result;
+    }
+
+    @Override
+    public List<Res> listMyRes(String keyword, Integer pageSize, Integer pageNum, String type) {
+
+        ResLib lib = readUserLib();
+
+        StringBuffer hql = new StringBuffer("from Res where deleteFlag is false and libId=? and status ='draft'");
+
+        List<Object> args = CollectionUtils.newList(lib.getLibId());
+
+        if (!StringUtils.isEmpty(type)) {
+            hql.append(" and type=?");
+            args.add(type);
+        }
+
+        if (!StringUtils.isEmpty(keyword)) {
+            hql.append(" and name like ?");
+            args.add("%" + keyword + "%");
+        }
+
+        hql.append(" order by updateTime desc");
+
+        List<Res> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Res.class);
+
+        return result;
+    }
+
+    @Override
+    public int listMyResCount(String text, String type) {
+
+        ResLib lib = readUserLib();
+
+        StringBuffer hql = new StringBuffer("from Res where deleteFlag is false and libId=? and status ='draft'");
+
+        List<Object> args = CollectionUtils.newList(lib.getLibId());
+
+        if (!StringUtils.isEmpty(type)) {
+            hql.append(" and type=?");
+            args.add(type);
+        }
+
+        if (!StringUtils.isEmpty(text)) {
+            hql.append(" and name like ?");
+            args.add("%" + text + "%");
+        }
+
+        hql.append(" order by updateTime desc");
+
+        return findCount(hql.toString(), args);
+
+    }
+
+    @Override
+    public List<Res> listResByLib(String libType, String ownerId, String keyword, Integer pageSize, Integer pageNum,
+                                  String resType) {
+
+        ResLib lib = this.getResLib(libType, ownerId);
+
+        StringBuffer hql = new StringBuffer(
+                "from Res where deleteFlag is false and name like ? and libId=? and status=? order by updateTime desc");
+
+        List<Object> args = CollectionUtils.newList(keyword + "%", lib == null ? null : lib.getLibId(),Res.STATUS_DRAFT);
+
+        if (!StringUtils.isEmpty(resType)) {
+            hql.append(" and type=?");
+            args.add(resType);
+        }
+
+        List<Res> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Res.class);
+
+        return result;
+    }
+
+    @Override
+    public int listResCountByLib(String libType, String ownerId, String text, String resType) {
+        ResLib lib = this.getResLib(libType, ownerId);
+
+        StringBuffer hql = new StringBuffer("from Res where deleteFlag is false and libId=? order by updateTime desc");
+
+        List<Object> args = CollectionUtils.newList(null == lib ? null : lib.getLibId());
+
+        if (!StringUtils.isEmpty(resType)) {
+            hql.append(" and type=?");
+            args.add(resType);
+        }
+
+        return findCount(hql.toString(), args);
+
+    }
+
+    @Override
+    public int listResCount(String dirId, String text, String type) {
+
+        String hql = "from Res where resDirId=? and deleteFlag is false and name like ? ";
+        List<Object> args = CollectionUtils.newList(dirId, text + "%");
+        if (!StringUtils.isEmpty(type)) {
+            hql = hql.concat(" and type = ?");
+            args.add(type);
+        }
+        return findCount(hql, args);
+
+    }
+
+    @Override
+    public Result readAccessPath(String resId, String attribute) {
+
+        Res res = read(Res.class, resId);
+        
+        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));
+        if(Res.FILE_TYPE_DOC.equals(res.getType())) {
+        	 return new Result(true, "success",
+                     CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size",
+                    		 this.classLectureService.readDocPageCount(res.getItemDestId())));//文件的页数
+        }else {
+        	 return new Result(true, "success",
+                     CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size", 0));
+        }
+       
+    }
+
+    @Override
+    public Result addDir(String parentDirId, String name) {
+
+        ResDir parent = read(ResDir.class, parentDirId);
+
+        ResDir resDir = new ResDir();
+
+        TraceUtils.setCreateTrace(resDir);
+        resDir.setName(name);
+        resDir.setParentDirId(parentDirId);
+        resDir.setLibId(null == parent ? null : parent.getLibId());
+
+        save(resDir);
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("dirId", resDir.getDirId(), "name", name));
+
+    }
+
+    @Override
+    public ResDir readDir(String dirId) {
+        return read(ResDir.class, dirId);
+    }
+
+    @Override
+    public Result updateDir(String dirId, String name) {
+
+        ResDir resDir = read(ResDir.class, dirId);
+
+        TraceUtils.setUpdateTrace(resDir);
+        resDir.setName(name);
+
+        save(resDir);
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("dirId", resDir.getDirId(), "name", name));
+    }
+
+    @Override
+    public Result deleteDir(String[] dirIds) {
+
+        for (String dirId : dirIds) {
+            deleteFile4Dir(dirId);// 删除对应的文件
+            deleteDir(dirId);
+        }
+
+        return new Result(true, "success");
+    }
+
+    private void deleteDir(String dirId) {
+
+        ResDir resDir = read(ResDir.class, dirId);
+
+        TraceUtils.setUpdateTrace(resDir);
+        resDir.setDeleteFlag(true);
+
+        save(resDir);
+
+    }
+
+    /**
+     * 删除资源库文件夹对应删除文件
+     *
+     * @param dirId 文件夹id
+     */
+    @Override
+    public void deleteFile4Dir(String dirId) {
+        String[] dirIds = dirId.split(",");
+        this.bulkUpdateInLoop("update Res set deleteFlag = true where deleteFlag is false and resDirId = ?", dirIds);
+
+    }
+
+    @Override
+    public ResDir doGetRootDir(String type, String ownerId) {
+        ResLib lib = getResLib(type, ownerId);
+        // 无资源库则初始化,并返回根节点
+        if (lib == null) {
+            Result result = initResLib(type, ownerId);
+            return read(ResDir.class, result.getDataT("rootDirId"));
+        }
+//        System.out.println(lib.getRootDirId());
+        return read(ResDir.class, lib.getRootDirId());
+    }
+
+    @Override
+    public List<ResDir> doGetMyLibChildDirs(String parentDirId) {
+
+        return doGetChildDirsInner(parentDirId, ResLib.OWNNER_TYPE_USER);
+
+    }
+
+    private List<ResDir> doGetChildDirsInner(String parentDirId, String type) {
+
+        // 根节点的处理
+        if (StringUtils.isEmpty(parentDirId)) {
+            ResLib lib = getResLib(type, ClientUtils.getUserId());
+
+            // 无资源库则初始化,并返回根节点
+            if (lib == null) {
+                Result result = initUserLib();
+                return CollectionUtils.newList(ResDir.class, read(ResDir.class, result.getDataT("rootDirId")));
+            }
+            return CollectionUtils.newList(ResDir.class, read(ResDir.class, lib.getRootDirId()));
+        }
+
+        return listDir(parentDirId);
+    }
+
+    private List<ResDir> listDir(String parentDirId) {
+
+        String hql = "from ResDir where parentDirId=? and deleteFlag is false";
+
+        List<ResDir> result = find(hql, CollectionUtils.newList(parentDirId), ResDir.class);
+
+        return result;
+    }
+
+    @Override
+    public Res read(String resId) {
+        return read(Res.class, resId);
+    }
+
+    @Override
+    public Result initUserLib() {
+
+        return initResLib(ResLib.OWNNER_TYPE_USER, ClientUtils.getUserId());
+    }
+
+    private Result initResLib(String type, String ownerId) {
+
+        String hql = "from ResLib where ownerId=? and ownerType=? and deleteFlag is false";
+
+        ResLib lib = findUnique(hql, CollectionUtils.newList(ownerId, type), ResLib.class);
+
+        if (lib == null) {
+
+            Result result = addDir(RES_DIR_ROOT, "根目录");
+
+            lib = new ResLib();
+
+            TraceUtils.setCreateTrace(lib);
+            lib.setOwnerId(ownerId);
+            lib.setOwnerType(type);
+            lib.setRootDirId(result.getDataT("dirId"));
+
+            save(lib);
+
+            ResDir root = read(ResDir.class, result.getDataT("dirId"));
+            root.setLibId(lib.getLibId());
+            save(root);
+
+            return new Result(true, "success",
+                    CollectionUtils.newStringMap("rootDirId", lib.getRootDirId(), "libId", lib.getLibId()));
+        }
+
+        return new Result(true, "success",
+                CollectionUtils.newStringMap("rootDirId", lib.getRootDirId(), "libId", lib.getLibId()));
+    }
+
+    @Override
+    public ResLib readUserLib() {
+
+        String hql = "from ResLib where ownerId=? and ownerType=? and deleteFlag is false";
+
+        ResLib lib = findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId(), ResLib.OWNNER_TYPE_USER),
+                ResLib.class);
+
+        return lib;
+    }
+
+    @Override
+    public ResLib getResLib(String type, String ownerId) {
+        String hql = "from ResLib where ownerId=? and ownerType=? and deleteFlag is false";
+
+        return findUnique(hql, CollectionUtils.newList(ownerId, type), ResLib.class);
+    }
+
+    @Override
+    public List<ResDir> doGetChildDirs(String parentDirId, String type) {
+        return doGetChildDirsInner(parentDirId, type);
+    }
+
+    /**
+     * 定时器监控转码完成后设置同步res表的状态
+     */
+    @Scheduled(cron = "0/2 * * * * ?")
+    public void doTimer() {
+        String itemDestId = cacheService.lstLeftPop(RES_TOUPDATE_CONVER_STATUS_LST);
+
+        if (StringUtils.isEmpty(itemDestId)) {
+            return;
+        }
+        Res res = findUnique("from Res where deleteFlag is false and itemDestId = ?",
+                CollectionUtils.newList(itemDestId), Res.class);
+        res.setStatus(Res.STATUS_DRAFT);
+        TraceUtils.setUpdateTrace(res);
+        save(res);
+
+        cacheService.lstRightPush(SubjectLectureService.RES_LECTURE_CONVER_LST, res.getResId());
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemArticleService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemArticleService.java
new file mode 100644
index 0000000..6f588a7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemArticleService.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.res.service.impl.resitem;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResFile;
+import com.qxueyou.scc.teach.res.model.ResItemArticle;
+import com.qxueyou.scc.teach.res.service.IResItemService;
+
+@Service(value="ResItemArticleService")
+public class ResItemArticleService extends CommonAppService implements IResItemService {
+
+	@Override
+	public String add(String fileId, String name) {
+		
+		ResItemArticle article = new ResItemArticle();
+		
+		TraceUtils.setCreateTrace(article);
+		
+		article.setFileId(fileId);
+		article.setName(name);
+		
+		save(article);
+		
+		return article.getArticleId();
+	}
+
+	@Override
+	public Result update(String id, String name) {
+		
+		ResItemArticle article = read(ResItemArticle.class,id);
+		
+		TraceUtils.setUpdateTrace(article);
+		
+		article.setName(name);
+		
+		save(article);
+		
+		return new Result(true,"success");
+	}
+
+	@Override
+	public String readAccessPath(String resId, String attribute) {
+		
+		ResItemArticle article = read(ResItemArticle.class,resId);
+		ResFile file = read(ResFile.class,article.getFileId());
+		
+		return file.getPath();
+	}
+
+	@Override
+	public String getResItemType() {
+		return Res.FILE_TYPE_ARTICLE;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java
new file mode 100644
index 0000000..11d5695
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java
@@ -0,0 +1,138 @@
+package com.qxueyou.scc.teach.res.service.impl.resitem;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.VideoConverTask;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResFile;
+import com.qxueyou.scc.teach.res.model.ResItemAudio;
+import com.qxueyou.scc.teach.res.service.IFileService;
+import com.qxueyou.scc.teach.res.service.IResAudioService;
+import com.qxueyou.scc.teach.res.service.IResItemService;
+
+@Service(value = "ResItemAudioService")
+public class ResItemAudioService extends CommonAppService implements IResItemService, IResAudioService {
+	@Autowired
+	IFileService fileService;
+
+	@Autowired
+	ICacheService cacheService;
+
+	@Override
+	public String add(String fileId, String name) {
+		ResFile file = fileService.read(fileId);
+		String mediaVideoId = addVideoConverTask(file);
+		ResItemAudio audio = new ResItemAudio();
+		TraceUtils.setCreateTrace(audio);
+
+		audio.setFileId(fileId);
+		audio.setName(name);
+		audio.setMediaVideoId(mediaVideoId);
+		// 将mediaVideoId放进缓存
+		cacheService.lstRightPush(ResItemVideoService.RES_VIDEO_CONVER_LST, mediaVideoId);
+		save(audio);
+
+		return audio.getAudioId();
+	}
+
+	private String addVideoConverTask(ResFile file) {
+
+		MediaVideo video = insertMediaVideo(file);
+		insertMediaVideoConverTask(video);
+
+		return video.getVideoId();
+
+	}
+
+	private MediaVideo insertMediaVideo(ResFile file) {
+
+		MediaVideo video = new MediaVideo();
+
+		TraceUtils.setCreateTrace(video);
+
+		video.setDeleteFlag(false);
+		video.setName(file.getFileName());
+		video.setOrigUrl(file.getPath());
+		video.setStatus(MediaVideo.STATUS_LINEUP);
+		video.setType(MediaVideo.MEDIA_AUDIO);
+
+		save(video);
+
+		return video;
+	}
+
+	private Result insertMediaVideoConverTask(MediaVideo resVideo) {
+
+		VideoConverTask task = new VideoConverTask();
+
+		task.setCreateTime(new Date());
+		task.setDeleteFlag(false);
+		task.setVideoId(resVideo.getVideoId());
+		task.setVideoUrl(resVideo.getOrigUrl());
+		task.setType(MediaVideo.MEDIA_AUDIO);
+		task.setPriority(5);
+
+		save(task);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result update(String id, String name) {
+
+		ResItemAudio audio = read(ResItemAudio.class, id);
+
+		TraceUtils.setUpdateTrace(audio);
+
+		audio.setName(name);
+
+		save(audio);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public String readAccessPath(String resId, String attribute) {
+		ResItemAudio resItemAudio = read(ResItemAudio.class, resId);
+
+		if (resItemAudio != null && resItemAudio.getStatus() != ResItemAudio.STATUS_DRAFT) {
+			return null;
+		}
+
+		MediaVideo video = read(MediaVideo.class, resItemAudio.getMediaVideoId());
+
+		if (video == null) {
+			return null;
+		}
+
+		return StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD()
+				: StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD();
+	}
+
+	@Override
+	public String getResItemType() {
+		return Res.FILE_TYPE_AUDIO;
+	}
+
+	@Override
+	public Result updateDuration(String audioId, int duration) {
+
+		ResItemAudio audio = read(ResItemAudio.class, audioId);
+
+		audio.setSeconds(duration);
+
+		save(audio);
+
+		return new Result(true);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java
new file mode 100644
index 0000000..e74e798
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java
@@ -0,0 +1,149 @@
+package com.qxueyou.scc.teach.res.service.impl.resitem;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.school.model.HandoutConverTask;
+import com.qxueyou.scc.school.model.SchHandout;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResFile;
+import com.qxueyou.scc.teach.res.model.ResItemDoc;
+import com.qxueyou.scc.teach.res.service.IFileService;
+import com.qxueyou.scc.teach.res.service.IResItemService;
+import com.qxueyou.scc.teach.res.service.impl.ResService;
+
+@Service(value = "ResItemDocService")
+public class ResItemDocService extends CommonAppService implements IResItemService {
+
+	private static final String RES_DOC_CONVER_LST = "RES_DOC_CONVER_LST";
+
+	@Autowired
+	IFileService fileService;
+	@Autowired
+	ICacheService cacheService;
+
+	@Override
+	public String add(String fileId, String name) {
+
+		ResFile file = fileService.read(fileId);
+		String handoutId = addDocConverTask(file);
+		ResItemDoc doc = new ResItemDoc();
+		TraceUtils.setCreateTrace(doc);
+		doc.setOrigFileId(fileId);
+		doc.setName(name);
+		doc.setHandoutId(handoutId);
+		doc.setStatus(ResItemDoc.STATUS_LINEUP);
+		save(doc);
+		// 将文档id放进缓存
+		cacheService.lstRightPush(RES_DOC_CONVER_LST, handoutId);
+		return doc.getDocId();
+	}
+
+	private String addDocConverTask(ResFile file) {
+
+		SchHandout handout = insertHandout(file);
+		insertHandoutConverTask(handout);
+
+		return handout.getHandoutId();
+
+	}
+
+	private SchHandout insertHandout(ResFile file) {
+
+		SchHandout handout = new SchHandout();
+
+		TraceUtils.setCreateTrace(handout);
+
+		handout.setDeleteFlag(false);
+		handout.setName(file.getFileName());
+		handout.setStatus(SchHandout.STATUS_PROCESSING);
+		handout.setFullPath(file.getPath());
+		handout.setDeleteFlag(false);
+
+		save(handout);
+
+		return handout;
+	}
+
+	private Result insertHandoutConverTask(SchHandout handout) {
+
+		HandoutConverTask task = new HandoutConverTask();
+
+		task.setCreateTime(new Date());
+		task.setHandoutId(handout.getHandoutId());
+		task.setHandoutUrl(handout.getFullPath());
+		task.setStatus(HandoutConverTask.STATUS_DRAFT);
+		task.setDeleteFlag(false);
+
+		save(task);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result update(String id, String name) {
+
+		ResItemDoc doc = read(ResItemDoc.class, id);
+
+		TraceUtils.setUpdateTrace(doc);
+
+		doc.setName(name);
+
+		save(doc);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public String readAccessPath(String resId, String attribute) {
+		ResItemDoc resItemDoc = read(ResItemDoc.class, resId);
+		if (ResItemDoc.STATUS_DRAFT != resItemDoc.getStatus()) {
+			return null;
+		}
+		SchHandout schHandout = read(SchHandout.class, resItemDoc.getHandoutId());
+
+		if (schHandout == null) {
+			return null;
+		}
+
+		return schHandout.getFullPath();
+	}
+
+	@Override
+	public String getResItemType() {
+		return Res.FILE_TYPE_DOC;
+	}
+
+	@Scheduled(cron = "0/2 * * * * ?") // 每10秒执行一次
+	public void doTimer() {
+
+		String id = cacheService.lstLeftPop(RES_DOC_CONVER_LST);
+
+		if (StringUtils.isBlank(id)) {
+			return;
+		}
+
+		SchHandout schHandout = read(SchHandout.class, id);
+
+		if (schHandout.getStatus() == SchHandout.STATUS_DRAFT) {
+
+			ResItemDoc resItemDoc = findUnique("from ResItemDoc where deleteFlag is false and handoutId = ?",
+					CollectionUtils.newList(id), ResItemDoc.class);
+			resItemDoc.setStatus(SchHandout.STATUS_DRAFT);
+			TraceUtils.setUpdateTrace(resItemDoc);
+			save(resItemDoc);
+			cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemDoc.getDocId());
+			return;
+		}
+		cacheService.lstRightPush(RES_DOC_CONVER_LST, id);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemExerciseService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemExerciseService.java
new file mode 100644
index 0000000..b678cae
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemExerciseService.java
@@ -0,0 +1,54 @@
+package com.qxueyou.scc.teach.res.service.impl.resitem;
+
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResItemExercise;
+import com.qxueyou.scc.teach.res.service.IResItemService;
+
+@Service(value="ResItemExerciseService")
+public class ResItemExerciseService extends CommonAppService implements IResItemService {
+
+	@Override
+	public String add(String fileId, String name) {
+		
+		ResItemExercise exercise = new ResItemExercise();
+		
+		TraceUtils.setCreateTrace(exercise);
+		
+		exercise.setName(name);
+		
+		save(exercise);
+		
+		return exercise.getExerciseId();
+	}
+
+	@Override
+	public Result update(String id, String name) {
+		
+		ResItemExercise exercise = read(ResItemExercise.class,id);
+		
+		TraceUtils.setUpdateTrace(exercise);
+		
+		exercise.setName(name);
+		
+		save(exercise);
+		
+		return new Result(true,"success");
+	}
+
+	@Override
+	public String readAccessPath(String resId, String attribute) {
+		
+		return null;
+	}
+
+	@Override
+	public String getResItemType() {
+		return Res.FILE_TYPE_EXERCISE;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java
new file mode 100644
index 0000000..de22b0d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java
@@ -0,0 +1,183 @@
+
+package com.qxueyou.scc.teach.res.service.impl.resitem;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.media.model.MediaVideo;
+import com.qxueyou.scc.media.model.VideoConverTask;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.model.ResFile;
+import com.qxueyou.scc.teach.res.model.ResItemAudio;
+import com.qxueyou.scc.teach.res.model.ResItemVideo;
+import com.qxueyou.scc.teach.res.service.IFileService;
+import com.qxueyou.scc.teach.res.service.IResItemService;
+import com.qxueyou.scc.teach.res.service.impl.ResService;
+
+@Service(value = "ResItemVideoService")
+public class ResItemVideoService extends CommonAppService implements IResItemService {
+
+	public static final String RES_VIDEO_CONVER_LST = "RES_VIDEO_CONVER_LST";
+
+	@Autowired
+	IFileService fileService;
+
+	@Autowired
+	ICacheService cacheService;
+
+	@Override
+	public String add(String fileId, String name) {
+
+		ResFile file = fileService.read(fileId);
+		String mediaVideoId = addVideoConverTask(file);
+
+		ResItemVideo resVideo = new ResItemVideo();
+
+		TraceUtils.setCreateTrace(resVideo);
+
+		resVideo.setFileId(fileId);
+		resVideo.setName(name);
+		resVideo.setMediaVideoId(mediaVideoId);
+		resVideo.setStatus(ResItemVideo.STATUS_LINEUP);
+		save(resVideo);
+
+		// 将mediaVideoId放进缓存
+		cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
+
+		return resVideo.getVideoId();
+	}
+
+	private String addVideoConverTask(ResFile file) {
+
+		MediaVideo video = insertMediaVideo(file);
+		insertMediaVideoConverTask(video);
+
+		return video.getVideoId();
+
+	}
+
+	private MediaVideo insertMediaVideo(ResFile file) {
+
+		MediaVideo video = new MediaVideo();
+
+		TraceUtils.setCreateTrace(video);
+
+		video.setDeleteFlag(false);
+		video.setName(file.getFileName());
+		video.setOrigUrl(file.getPath());
+		video.setStatus(MediaVideo.STATUS_LINEUP);
+		video.setType(MediaVideo.MEDIA_VIDEO);
+
+		save(video);
+
+		return video;
+	}
+
+	private Result insertMediaVideoConverTask(MediaVideo resVideo) {
+
+		VideoConverTask task = new VideoConverTask();
+
+		task.setCreateTime(new Date());
+		task.setDeleteFlag(false);
+		task.setVideoId(resVideo.getVideoId());
+		task.setVideoUrl(resVideo.getOrigUrl());
+		task.setType(MediaVideo.MEDIA_VIDEO);
+		task.setPriority(5);
+
+		save(task);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Result update(String id, String name) {
+
+		ResItemVideo video = read(ResItemVideo.class, id);
+
+		TraceUtils.setUpdateTrace(video);
+
+		video.setName(name);
+
+		save(video);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public String readAccessPath(String resId, String attribute) {
+
+		ResItemVideo resItemVideo = read(ResItemVideo.class, resId);
+
+		if (resItemVideo != null && resItemVideo.getStatus() != ResItemVideo.STATUS_DRAFT) {
+			return null;
+		}
+
+		MediaVideo video = read(MediaVideo.class, resItemVideo.getMediaVideoId());
+
+		if (video == null) {
+			return null;
+		}
+
+		return JSONObject.toJSONString(CollectionUtils.newObjectMap("hd",video.getAndroidHD(), "sd", video.getAndroidSD(), "ld", video.getAndroidLD(), "path",StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD()
+				: StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD()));
+				
+	}
+
+	@Override
+	public String getResItemType() {
+		return Res.FILE_TYPE_VIDEO;
+	}
+
+	/**
+	 * 定时器转码成功后 同步更新ResItemVideo的状态
+	 */
+	@Scheduled(cron = "0/2 * * * * ?") // 每2秒执行一次
+	public void doTimer() {
+
+		String mediaVideoId = cacheService.lstLeftPop(RES_VIDEO_CONVER_LST);
+
+		if (StringUtils.isBlank(mediaVideoId)) {
+			return;
+		}
+		
+		MediaVideo mediaVideo = read(MediaVideo.class, mediaVideoId);
+		if (mediaVideo.getStatus() == MediaVideo.STATUS_DRAFT) {
+			if (mediaVideo.getType().equals("video")) {
+				ResItemVideo resItemVideo = findUnique(
+						"from ResItemVideo where deleteFlag is false and mediaVideoId = ?",
+						CollectionUtils.newList(mediaVideoId), ResItemVideo.class);
+				resItemVideo.setStatus(ResItemVideo.STATUS_DRAFT);
+				TraceUtils.setUpdateTrace(resItemVideo);
+				resItemVideo.setVideoSeconds(mediaVideo.getPlayTime());
+				save(resItemVideo);
+
+				cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemVideo.getVideoId());// 将转码完成后的文件id放入缓存。
+				return;
+			} else if (mediaVideo.getType().equals("audio")) {
+				ResItemAudio resItemAudio = findUnique(
+						"from ResItemAudio where deleteFlag is false and mediaVideoId = ?",
+						CollectionUtils.newList(mediaVideoId), ResItemAudio.class);
+				resItemAudio.setStatus(ResItemVideo.STATUS_DRAFT);
+				TraceUtils.setUpdateTrace(resItemAudio);
+				resItemAudio.setSeconds(mediaVideo.getPlayTime());
+				save(resItemAudio);
+
+				cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemAudio.getAudioId());// 将转码完成后的文件id放入缓存。
+				return;
+			}
+
+		}
+		cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
+
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/student/dao/StudentDAO.java b/src/main/java/com/qxueyou/scc/teach/student/dao/StudentDAO.java
new file mode 100644
index 0000000..3b2ea80
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/student/dao/StudentDAO.java
@@ -0,0 +1,16 @@
+package com.qxueyou.scc.teach.student.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.util.CollectionUtils;
+
+@Repository
+public class StudentDAO extends BaseDAO {
+
+	public boolean exists(String studentNo,String organizationId) {
+		return findCount("from StuStudent s,User u where s.userId=u.userId and s.studentNo=? and u.organizationId=? and s.deleteFlag is false ",
+				CollectionUtils.newList(studentNo,organizationId))>0;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java b/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
new file mode 100644
index 0000000..df3b710
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
@@ -0,0 +1,270 @@
+package com.qxueyou.scc.teach.student.model;
+// Generated 2018-3-15 16:54:31 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * StuStudent generated by hbm2java
+ */
+@Entity
+@Table(name = "stu_student")
+public class StuStudent implements java.io.Serializable,ITrace {
+
+	private static final long serialVersionUID = 7504161189427721559L;
+	
+	/*
+	 * 状态: 已报名
+	 */
+	public static final String STATUS_REGISTER = "register";
+	public static final String STATUS_ACTIVE = "active";
+	public static final String STATUS_DEACTIVE = "deactive";
+
+	private String studentId;
+	private Date createTime;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private String updator;
+	private String updateId;
+	private boolean deleteFlag;
+	private String userId;
+	private String name;
+	private String classId;
+	private String subjectId;
+	private String tenantId;
+	private String status;
+	private String studentNo;
+	private boolean sex;
+	private String mobilePhone;
+	private BigDecimal studyDuration;
+	private BigDecimal score;
+
+	public StuStudent() {
+	}
+
+	public StuStudent(String studentId, Date createTime, Date updateTime, String creator, String createId,
+			boolean deleteFlag) {
+		this.studentId = studentId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.deleteFlag = deleteFlag;
+	}
+
+	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) {
+		this.studentId = studentId;
+		this.createTime = createTime;
+		this.updateTime = updateTime;
+		this.creator = creator;
+		this.createId = createId;
+		this.updator = updator;
+		this.updateId = updateId;
+		this.deleteFlag = deleteFlag;
+		this.userId = userId;
+		this.name = name;
+		this.classId = classId;
+		this.tenantId = tenantId;
+		this.status = status;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "STUDENT_ID", unique = true, nullable = false, length = 32)
+	public String getStudentId() {
+		return this.studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	@Column(name = "UPDATOR", length = 100)
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "UPDATE_ID", length = 32)
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "NAME", length = 150)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "CLASS_ID", length = 32)
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Column(name = "STUDENT_NO", length = 32)
+	public String getStudentNo() {
+		return studentNo;
+	}
+
+	public void setStudentNo(String studentNo) {
+		this.studentNo = studentNo;
+	}
+
+	@Column(name = "SEX")
+	public boolean getSex() {
+		return sex;
+	}
+
+	public void setSex(boolean sex) {
+		this.sex = sex;
+	}
+
+	@Column(name = "MOBILE_PHONE", length = 16)
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	@Column(name = "STUDY_DURATION", precision = 10, scale = 2)
+	public BigDecimal getStudyDuration() {
+		return studyDuration;
+	}
+
+	public void setStudyDuration(BigDecimal studyDuration) {
+		this.studyDuration = studyDuration;
+	}
+
+	@Column(name = "SCORE", precision = 10, scale = 2)
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	@Column(name = "SUBJECT_ID", length=32)
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+	
+	
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java b/src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java
new file mode 100644
index 0000000..499b241
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java
@@ -0,0 +1,105 @@
+package com.qxueyou.scc.teach.student.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+
+public interface IStudentService {
+
+	/**
+	 * 新增学员
+	 * @param name 学员姓名
+	 * @param studentNo 学号
+	 * @param sex 性别,Boolean: 1:男;0:女
+	 * @param phoneNo 手机号码
+	 * @return
+	 */
+	Result insertStudent(String classId,String name, String studentNo, boolean sex,String phoneNo, String orgId);
+
+	Result insertStudent(String classId,String name, String studentNo, boolean sex,String phoneNo, String orgId,String comName);
+
+	/**
+	 * 获取学员列表
+	 * @param classId 班级id
+	 * @param keyword 关键词
+	 * @param pageNum 页码
+	 * @param pageSize 每页显示数量
+	 * @return
+	 */
+	List<Map<String, Object>> getStudentLst(String classId,String keyword, Pager pager);
+	Result updateImgStudent(String studentId);
+
+	/**
+	 * 获取学员数量
+	 * @param classId 班级id
+	 * @param keyword 关键词
+	 * @return
+	 */
+	int getStudentsCount(String classId,String keyword);
+
+	/**
+	 * 删除学员
+	 * @param classId 班级id
+	 * @param studentIds 学员id
+	 * @return
+	 */
+	Result deleteStudent(String classId,String[] studentIds);
+
+	/**
+	 * 查看学员
+	 * @param classId 班级id
+	 * @param studentId 学员id
+	 * @return
+	 */
+	Result queryStudent(String classId,String studentId);
+
+	/**
+	 *
+	 * @param studentIds
+	 * @return
+	 */
+	Result doActivateStudent(String[] studentIds);
+
+	/**
+	 *
+	 * @param studentIds
+	 * @return
+	 */
+	Result doDeActivateStudent(String[] studentIds);
+
+	/**
+	 * 学员学习进度
+	 *
+	 * @param classId
+	 * @param studentId
+	 * @return
+	 */
+	Result studentProgress(String classId, String studentId);
+
+	/**
+	 * 更新学生信息
+	 * @param studentId
+	 * @param name
+	 * @param password
+	 * @param studentNo
+	 * @param sex
+	 * @param phoneNo
+	 * @return
+	 */
+	Result updateStudent(String studentId, String name, String password, String studentNo, boolean sex, String phoneNo);
+
+	/**
+	 * 通过用户获取学生信息
+	 * @param userId
+	 * @return
+	 */
+	StuStudent getStudentByUserId(String userId);
+
+	List<StuStudent> getStudentByclassId(String classId);
+
+	StuStudent getStudentByNo(String studentNo);
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java b/src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java
new file mode 100644
index 0000000..84d109e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java
@@ -0,0 +1,329 @@
+package com.qxueyou.scc.teach.student.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.exam.model.ExamResultV;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.service.IClassService;
+import com.qxueyou.scc.admin.progress.model.view.QSubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.student.dao.StudentDAO;
+import com.qxueyou.scc.teach.student.model.QStuStudent;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.student.service.IStudentService;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+import com.qxueyou.scc.user.model.QUser;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.service.IUserService;
+
+@Service
+public class StudentService extends CommonAppService implements IStudentService {
+
+    @Autowired
+    IClassService clsService;
+
+    @Autowired
+    IUserService userService;
+
+    @Autowired
+    ISubjectService subjectService;
+
+    @Autowired
+    StudentDAO dao;
+
+    @Override
+    public Result insertStudent(String classId, String name, String studentNo, boolean sex, String phoneNo, String orgId) {
+
+        if (dao.exists(studentNo, orgId)) {
+            return new Result(false, "学号已存在");
+        }
+
+        User user = userService.insertUser(name, studentNo, phoneNo, "000000", sex, orgId);
+
+        //ClsClass cls = clsService.read(classId);
+
+        StuStudent student = new StuStudent();
+        TraceUtils.setCreateTrace(student);
+
+        student.setStatus(StuStudent.STATUS_ACTIVE);
+        student.setClassId(classId);
+        //student.setSubjectId(cls.getSubjects().get(0).getSubjectId());
+        student.setName(name);
+        student.setStudentNo(studentNo);
+        student.setSex(sex);
+        student.setUserId(user.getUserId());
+        student.setMobilePhone(phoneNo);
+        if(StringUtils.isNoneBlank(classId)) {
+        	bulkUpdate("update ClsClass set studentCount = studentCount + 1  where deleteFlag is false and classId = ?", new Object[]{classId});
+        }
+        save(student);
+
+        return new Result(true, "success", CollectionUtils.newStringMap("studentId", student.getStudentId(), "password", user.getPassword()));
+    }
+    @Override
+    public Result insertStudent(String classId, String name, String studentNo, boolean sex, String phoneNo, String orgId,String comName) {
+
+        if (dao.exists(studentNo, orgId)) {
+            return new Result(false, "学号已存在");
+        }
+
+        User user = userService.insertUser(name, studentNo, phoneNo, "000000", sex, orgId);
+
+        //ClsClass cls = clsService.read(classId);
+
+        StuStudent student = new StuStudent();
+        TraceUtils.setCreateTrace(student);
+
+        student.setStatus(StuStudent.STATUS_ACTIVE);
+        student.setClassId(classId);
+        //student.setSubjectId(cls.getSubjects().get(0).getSubjectId());
+        student.setName(name);
+        student.setStudentNo(studentNo);
+        student.setSex(sex);
+        student.setUserId(user.getUserId());
+        student.setMobilePhone(phoneNo);
+        //公司名称
+        student.setSubjectId(comName);
+
+        if(StringUtils.isNoneBlank(classId)) {
+        	bulkUpdate("update ClsClass set studentCount = studentCount + 1  where deleteFlag is false and classId = ?", new Object[]{classId});
+        }
+        save(student);
+
+        return new Result(true, "success", CollectionUtils.newStringMap("studentId", student.getStudentId(), "password", user.getPassword()));
+    }
+
+	@Override
+	public Result updateImgStudent(String studentId){
+		//根据学学员ID,获取用户信息
+		StuStudent stu = this.read(StuStudent.class, studentId);
+		stu.setTenantId("1");
+		save(stu);
+		return new Result(true, "success");
+	}
+	@Override
+    public Result updateStudent(String studentId, String name,String password, String studentNo, boolean sex, String phoneNo) {
+    	//根据学学员ID,获取用户信息
+        StuStudent stu = this.read(StuStudent.class, studentId);
+
+    	if (!stu.getStudentNo().equals(studentNo) && dao.exists(studentNo,ClientUtils.getOrgId())) {
+            return new Result(false, "学号已存在");
+        }
+
+        stu.setName(name);
+        stu.setSex(sex);
+        stu.setStudentNo(studentNo);
+        stu.setMobilePhone(phoneNo);
+        TraceUtils.setUpdateTrace(stu);
+        save(stu);
+
+        User user = this.read(User.class, stu.getUserId());
+        user.setAccount(studentNo);
+        user.setSex(sex);
+        user.setMobilePhone(phoneNo);
+        if(!StringUtils.isEmpty(password)){
+        	user.setPassword(password);
+        }
+        user.setName(name);
+        save(user);
+
+        return new Result(true, "success");
+    }
+
+    @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,
+						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("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 Result deleteStudent(String classId, String[] studentIds) {
+        for (String studentId : studentIds) {
+            Result result = deleteStudent(classId, studentId);
+            if (!result.isSuccess()) {
+                return result;
+            }
+        }
+        return new Result(true);
+    }
+
+    private Result deleteStudent(String classId, String studentId) {
+        StuStudent student = read(StuStudent.class, studentId);
+		User user = read(User.class, student.getUserId());
+        if (StuStudent.STATUS_ACTIVE.equals(student.getStatus())) {
+            return new Result(false, "已激活学员不能移除");
+        }
+        TraceUtils.setUpdateTrace(student);
+        student.setDeleteFlag(true);
+        save(student);
+		deleteTrace(user);
+
+        return new Result(true);
+    }
+
+    @Override
+    public Result doActivateStudent(String[] studentIds) {
+        for (String studentId : studentIds) {
+            activateStudent(studentId, StuStudent.STATUS_ACTIVE);
+        }
+        return new Result(true);
+    }
+
+    @Override
+    public Result doDeActivateStudent(String[] studentIds) {
+        for (String studentId : studentIds) {
+            activateStudent(studentId, StuStudent.STATUS_DEACTIVE);
+        }
+        return new Result(true);
+    }
+
+    private Result activateStudent(String studentId, String status) {
+        StuStudent student = read(StuStudent.class, studentId);
+
+        if (StringUtils.equals(status, student.getStatus())) {
+            return new Result(false);
+        }
+
+        TraceUtils.setUpdateTrace(student);
+        student.setStatus(status);
+        save(student);
+
+        clsService.addStudent(student.getClassId(), StuStudent.STATUS_DEACTIVE.equals(status) ? -1 : 1);
+
+        return new Result(true);
+    }
+
+    @Override
+    public Result queryStudent(String classId, String studentId) {
+
+        StuStudent student = read(StuStudent.class, studentId);
+        if(student == null) {
+        	return new Result(false, "未查询到学员信息");
+        }
+
+        return new Result(true, "success", CollectionUtils.newObjectMap("studentId", student.getStudentId(), "name", student.getName(), "status",
+                student.getStatus(), "studentNo", student.getStudentNo(), "sex", student.getSex(), "mobilePhone",
+                student.getMobilePhone()));
+    }
+
+    @Override
+    public StuStudent getStudentByUserId(String userId) {
+        return this.findUnique("from StuStudent where userId=? ", CollectionUtils.newList(userId), StuStudent.class);
+    }
+    @Override
+    public StuStudent getStudentByNo(String studentNo) {
+        return this.findUnique("from StuStudent where studentNo=? ", CollectionUtils.newList(studentNo), StuStudent.class);
+    }
+    @Override
+    public List<StuStudent> getStudentByclassId(String classId) {
+		QStuStudent qClassStudent=QStuStudent.stuStudent;
+		return new ArrayList<>(this.getQueryFactory()
+				.select(qClassStudent
+				)
+				.from(qClassStudent)
+				.where(qClassStudent.classId.eq(classId))
+				.fetch());
+    }
+
+
+
+
+
+    @Override
+    public Result studentProgress(String classId, String studentId) {
+
+    	StuStudent student = read(StuStudent.class, studentId);
+    	if(student == null) {
+    		return new Result(false, "未查询到学员信息");
+    	}
+
+    	String userId = student.getUserId();
+
+    	User u = this.read(User.class, userId);
+    	if(u == null) {
+    		return new Result(false, "未查询到用户信息");
+    	}
+
+    	QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+
+    	//班级进度
+    	SubjectProgressTreeV objSubjectProgressTreeV = this.getQueryFactory().selectFrom(qSubjectProgressTreeV).where(qSubjectProgressTreeV.id.nodeId.eq(classId).and(qSubjectProgressTreeV.id.userId.eq(userId))).fetchOne();
+
+    	if(objSubjectProgressTreeV != null) {
+    		//学员总数
+    		long studentCount = this.getQueryFactory().selectFrom(qSubjectProgressTreeV).where(qSubjectProgressTreeV.id.nodeId.eq(classId)).fetchCount();
+
+			// 当前学员排行
+			long studentIndex = this
+					.getQueryFactory().selectFrom(qSubjectProgressTreeV).where(qSubjectProgressTreeV.id.nodeId
+							.eq(classId).and(qSubjectProgressTreeV.percent.gt(objSubjectProgressTreeV.getPercent())
+									.or(qSubjectProgressTreeV.percent.eq(objSubjectProgressTreeV.getPercent()))))
+					.fetchCount();
+
+    		//学员的课程
+    		List<Map<String, Object>> lstSubject =  this.subjectService.myClsSubjectlist(classId, userId, new Pager(Integer.MAX_VALUE, 0));
+
+    		return new Result(true, "success", CollectionUtils.newObjectMap("studentId", student.getStudentId(), "name", student.getName(), "imgPath", u.getImgPath(),
+    				 "status", student.getStatus(), "studentNumber", student.getStudentNo(), "sex", student.getSex(), "mobilePhone",
+    				student.getMobilePhone(), "subjectList", lstSubject, "studentCount", studentCount, "studentIndex", studentIndex, "studyDuration", objSubjectProgressTreeV.getProgressValue()));
+    	}{
+    		return new Result(true, "success", CollectionUtils.newObjectMap("studentId", student.getStudentId(), "name", student.getName(), "imgPath", u.getImgPath(),
+    				"status", student.getStatus(), "studentNumber", student.getStudentNo(), "sex", student.getSex(), "mobilePhone",
+    				student.getMobilePhone(), "subjectList", new ArrayList<Map<String, Object>>(), "studentCount", 0, "studentIndex", 1, "studyDuration", 0));
+    	}
+
+
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/dao/SubjectDAO.java b/src/main/java/com/qxueyou/scc/teach/subject/dao/SubjectDAO.java
new file mode 100644
index 0000000..0ae91c7
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/dao/SubjectDAO.java
@@ -0,0 +1,19 @@
+package com.qxueyou.scc.teach.subject.dao;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Result;
+
+@Repository
+public class SubjectDAO extends BaseDAO {
+
+	public int addLectureCount(String lectureId,int count) {
+		
+		String hql = "update Subject set lectureCount = lectureCount+? where subjectId=?";
+		
+		Result r = bulkUpdate(hql, new Object[] {count,lectureId});
+		
+		return r.getDataT("doCount");
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java b/src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java
new file mode 100644
index 0000000..8492f72
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java
@@ -0,0 +1,366 @@
+package com.qxueyou.scc.teach.subject.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * 课程
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="SUBJECT")
+public class Subject implements Serializable,ITrace {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="SUBJECT_ID", unique=true, nullable=false, length=32)
+	private String subjectId;
+
+	/**  名称  */
+	@Column(name="NAME", length=150)
+	private String name;
+
+	/**  全称 */
+	@Column(name="FULL_NAME", length=255)
+	private String fullName;
+	
+	/**  编码 */
+	@Column(name="CODE", length=64)
+	private String code;
+	
+	@Column(name="COURSE_ID", length=32)
+	private String courseId;
+
+	@Column(name="CREATE_ID")
+	@JsonIgnore
+	private String createId;
+
+	@Column(name="CREATE_TIME")
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name="CREATOR")
+	@JsonIgnore
+	private String creator;
+
+	
+	@Column(name="DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	@Column(name="UPDATE_ID")
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name="UPDATE_TIME")
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name="UPDATOR")
+	@JsonIgnore
+	private String updator;
+	
+	@Column(name="ORDER_NUM")
+	private int orderNum;
+	
+	@Column(name="TYPE")
+	private Integer type;
+	
+	@Column(name="COVER_PAGE_URL")
+	private String coverPageUrl;
+	
+	@Column(name="COVER_PAGE_FILE_ID")
+	private String coverPageFileId;
+	
+	@Column(name="CONTENT_FILE_ID")
+	private String contentFileId;
+	
+	public final static String STATUS_DRAFT = "0";
+	
+	public final static String STATUS_ISSUED = "1";
+	
+	public final static String STATUS_OFFLINE = "2";
+	
+	/**
+	 * 1:管理员课程,2:班级课程,3:公开课程
+	 */
+	public final static int TYPE_ORG_SUBJECT =1;
+	
+	public final static int TYPE_CLS_SUBJECT =2;
+	
+	public final static int TYPE_PUBLIC_SUBJECT = 3;
+	
+	
+	@Column(name="STATUS")
+	private String status;
+	
+	@Column(name="LECTURE_COUNT")
+	private Integer lectureCount;
+	
+	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "subjects")
+	@JsonIgnore
+	private List<ClsClass> classes;
+	
+	@Column(name="ORIG_SUBJECT_ID")
+	private String origSubjectId;
+	
+	@Column(name="ORIG_COPY_SUBJECT_ID")
+	private String origCopySubjectId;
+	
+	@Column(name="TEACHER_ID")
+	private String teacherId;
+	
+	@Column(name="TEACHER_NAME")
+	private String teacherName;
+	
+	@Column(name="ORG_ID")
+	private String orgId;
+	
+	@Column(name="SCHOOL_YEAR")
+	private Integer schoolYear;
+	
+	@Column(name="TERM")
+	private Integer term;
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFullName() {
+		return fullName;
+	}
+
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+	
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getCoverPageUrl() {
+		return coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	public String getContentFileId() {
+		return contentFileId;
+	}
+
+	public void setContentFileId(String contentFileId) {
+		this.contentFileId = contentFileId;
+	}
+
+	public String getCoverPageFileId() {
+		return coverPageFileId;
+	}
+
+	public void setCoverPageFileId(String coverPageFileId) {
+		this.coverPageFileId = coverPageFileId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public Integer getLectureCount() {
+		return lectureCount;
+	}
+
+	public void setLectureCount(Integer lectureCount) {
+		this.lectureCount = lectureCount;
+	}
+
+	public List<ClsClass> getClasses() {
+		return classes;
+	}
+
+	public String getOrigSubjectId() {
+		return origSubjectId;
+	}
+
+	public void setOrigSubjectId(String origSubjectId) {
+		this.origSubjectId = origSubjectId;
+	}
+
+	public String getOrigCopySubjectId() {
+		return origCopySubjectId;
+	}
+
+	public void setOrigCopySubjectId(String origCopySubjectId) {
+		this.origCopySubjectId = origCopySubjectId;
+	}
+
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public Integer getSchoolYear() {
+		return schoolYear;
+	}
+
+	public void setSchoolYear(Integer schoolYear) {
+		this.schoolYear = schoolYear;
+	}
+
+	public Integer getTerm() {
+		return term;
+	}
+
+	public void setTerm(Integer term) {
+		this.term = term;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectChapter.java b/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectChapter.java
new file mode 100644
index 0000000..3cb0cd3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectChapter.java
@@ -0,0 +1,190 @@
+package com.qxueyou.scc.teach.subject.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+//import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+//import org.hibernate.annotations.Fetch;
+//import org.hibernate.annotations.FetchMode;
+//import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * The persistent class for the sch_chapter database table.
+ * 
+ */
+@Entity
+@Table(name = "SUBJECT_CHAPTER")
+public class SubjectChapter implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")	
+	@Column(name="CHAPTER_ID")
+	private String chapterId;
+
+	@Column(name = "CODE")
+	private String code;
+
+	@Column(name = "CREATE_ID")
+	private String createId;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR")
+	private String creator;
+
+	@Column(name = "DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name = "NAME")
+	private String name;
+
+	@Column(name = "PARENT_CHAPTER_ID")
+	private String parentChapterId;
+
+	@Column(name = "SUBJECT_ID")
+	private String subjectId;
+
+	@Column(name = "UPDATE_ID")
+	private String updateId;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	@Column(name = "UPDATOR")
+	private String updator;
+
+	@Column(name = "ORDER_NUM")
+	private int orderNum;
+	
+	public static final String ROOT_CHAPTER_ID = "0";
+
+	public int getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(int orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getParentChapterId() {
+		return this.parentChapterId;
+	}
+
+	public void setParentChapterId(String parentChapterId) {
+		this.parentChapterId = parentChapterId;
+	}
+
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+	
+	
+	
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectLecture.java b/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectLecture.java
new file mode 100644
index 0000000..6ef3c18
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectLecture.java
@@ -0,0 +1,239 @@
+package com.qxueyou.scc.teach.subject.model;
+// Generated 2018-3-11 11:06:50 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+import com.qxueyou.scc.teach.res.model.Res;
+
+/**
+ * SubjectLecture generated by hbm2java
+ */
+@Entity
+@Table(name = "subject_lecture")
+public class SubjectLecture implements java.io.Serializable, ITrace {
+
+	public final static String STATUS_DRAFT = "draft";
+
+	public final static String STATUS_ISSUED = "issued";
+
+	public final static String STATUS_OFFLINE = "offline";
+
+	public final static String STATUS_CONVER = "conver";
+	
+	public final static String TYPE_VIDEO = Res.FILE_TYPE_VIDEO;
+
+	public final static String TYPE_AUDIO = Res.FILE_TYPE_AUDIO;
+
+	public final static String TYPE_DOC = Res.FILE_TYPE_DOC;
+
+	public final static String TYPE_EXERCISE = Res.FILE_TYPE_EXERCISE;
+
+	public final static String TYPE_ARTICLE = Res.FILE_TYPE_ARTICLE;
+
+	private static final long serialVersionUID = -522912778293506902L;
+	private String lectureId;
+	private String name;
+	private String resItemId;
+	private String lectureType;
+	private String tenantId;
+	private String status;
+	private String updateId;
+	private String updator;
+	private Date updateTime;
+	private String creator;
+	private String createId;
+	private Date createTime;
+	private boolean deleteFlag;
+	private String remark;
+	private String subjectId;
+	private String chapterId;
+
+	public SubjectLecture() {
+	}
+
+	public SubjectLecture(String lectureId, Date updateTime, Date createTime, boolean deleteFlag) {
+		this.lectureId = lectureId;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+	}
+
+	public SubjectLecture(String lectureId, String name, String resItemId, String lectureType, String tenantId,
+			String status, Date updateTime, Date createTime, boolean deleteFlag, String remark) {
+		this.lectureId = lectureId;
+		this.name = name;
+		this.resItemId = resItemId;
+		this.lectureType = lectureType;
+		this.tenantId = tenantId;
+		this.status = status;
+		this.updateTime = updateTime;
+		this.createTime = createTime;
+		this.deleteFlag = deleteFlag;
+		this.remark = remark;
+	}
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "LECTURE_ID", unique = true, nullable = false, length = 32)
+	public String getLectureId() {
+		return this.lectureId;
+	}
+
+	public void setLectureId(String lectureId) {
+		this.lectureId = lectureId;
+	}
+
+	@Column(name = "NAME", length = 128)
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "RES_ITEM_ID", length = 32)
+	public String getResItemId() {
+		return this.resItemId;
+	}
+
+	public void setResItemId(String resItemId) {
+		this.resItemId = resItemId;
+	}
+
+	@Column(name = "LECTURE_TYPE", length = 16)
+	public String getLectureType() {
+		return this.lectureType;
+	}
+
+	public void setLectureType(String lectureType) {
+		this.lectureType = lectureType;
+	}
+
+	@Column(name = "TENANT_ID", length = 32)
+	public String getTenantId() {
+		return this.tenantId;
+	}
+
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	@Column(name = "STATUS", length = 16)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	@Column(name = "REMARK")
+	public String getRemark() {
+		return this.remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	@Column(name = "SUBJECT_ID")
+	public String getSubjectId() {
+		return subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "CHAPTER_ID")
+	public String getChapterId() {
+		return chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	@Column(name = "UPDATE_ID")
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	@Column(name = "UPDATOR")
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	@Column(name = "CREATOR")
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	@Column(name = "CREATE_ID")
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureAudioV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureAudioV.java
new file mode 100644
index 0000000..3aa48cb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureAudioV.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * MySubjectV generated by hbm2java
+ */
+@Entity
+@Table(name = "lecture_audio_v")
+public class LectureAudioV implements java.io.Serializable {
+
+	private static final long serialVersionUID = -4081977427286253454L;
+	
+	private String lectureId;
+	private String audioId;
+	private String name;
+	private Integer seconds;
+
+	public LectureAudioV() {
+	}
+
+	@Id
+	@Column(name="LECTURE_ID")
+	public String getLectureId() {
+		return this.lectureId;
+	}
+
+	public void setLectureId(String lectureId) {
+		this.lectureId = lectureId;
+	}
+
+	@Column(name="NAME")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name="AUDIO_SECONDS")
+	public Integer getSeconds() {
+		return seconds;
+	}
+
+	public void setSeconds(Integer seconds) {
+		this.seconds = seconds;
+	}
+
+	@Column(name="AUDIO_ID")
+	public String getAudioId() {
+		return audioId;
+	}
+
+	public void setAudioId(String audioId) {
+		this.audioId = audioId;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureDocV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureDocV.java
new file mode 100644
index 0000000..d436557
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureDocV.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "lecture_doc_v")
+public class LectureDocV implements java.io.Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private String lectureId;
+	private String docId;
+	private String name;
+	private Integer docPages;
+
+	public LectureDocV() {
+	}
+
+	@Id
+	@Column(name = "LECTURE_ID")
+	public String getLectureId() {
+		return this.lectureId;
+	}
+
+	public void setLectureId(String lectureId) {
+		this.lectureId = lectureId;
+	}
+
+	@Column(name = "NAME")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "DOC_ID")
+	public String getDocId() {
+		return docId;
+	}
+
+	public void setDocId(String docId) {
+		this.docId = docId;
+	}
+
+	@Column(name = "DOC_PAGES")
+	public Integer getDocPages() {
+		return docPages;
+	}
+
+	public void setDocPages(Integer docPages) {
+		this.docPages = docPages;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureVideoV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureVideoV.java
new file mode 100644
index 0000000..dcccce6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/LectureVideoV.java
@@ -0,0 +1,52 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * MySubjectV generated by hbm2java
+ */
+@Entity
+@Table(name = "lecture_video_v")
+public class LectureVideoV implements java.io.Serializable {
+
+	private static final long serialVersionUID = -4081977427286253454L;
+	
+	private String lectureId;
+	private String name;
+	private int seconds;
+
+	public LectureVideoV() {
+	}
+
+	@Id
+	@Column(name="LECTURE_ID")
+	public String getLectureId() {
+		return this.lectureId;
+	}
+
+	public void setLectureId(String lectureId) {
+		this.lectureId = lectureId;
+	}
+
+	@Column(name="NAME")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name="VIDEO_SECONDS")
+	public int getSeconds() {
+		return seconds;
+	}
+
+	public void setSeconds(int seconds) {
+		this.seconds = seconds;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressV.java
new file mode 100644
index 0000000..e9ff052
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressV.java
@@ -0,0 +1,95 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-23 10:58:00 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * MyChapterProgressV generated by hbm2java
+ */
+@Entity
+@Table(name = "my_chapter_progress_v")
+public class MyChapterProgressV implements java.io.Serializable {
+
+	private static final long serialVersionUID = 9025787325676338205L;
+	private MyChapterProgressVId id;
+	private String subjectName;
+	private String chapterName;
+	private String userName;
+	private BigDecimal progressValue;
+	private BigDecimal percent;
+
+	public MyChapterProgressV() {
+	}
+
+	public MyChapterProgressV(MyChapterProgressVId id) {
+		this.id = id;
+	}
+
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "subjectId", column = @Column(name = "SUBJECT_ID", length = 32)),
+			@AttributeOverride(name = "userId", column = @Column(name = "USER_ID", length = 128)),
+			@AttributeOverride(name = "chapterId", column = @Column(name = "CHAPTER_ID", length = 32)),
+			@AttributeOverride(name = "classId", column = @Column(name = "CLASS_ID", length = 32)),
+	})
+	public MyChapterProgressVId getId() {
+		return this.id;
+	}
+
+	public void setId(MyChapterProgressVId id) {
+		this.id = id;
+	}
+	
+	@Column(name = "SUBJECT_NAME", length = 150)
+	public String getSubjectName() {
+		return this.subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+	
+	@Column(name = "CHAPTER_NAME", length = 150)
+	public String getChapterName() {
+		return this.chapterName;
+	}
+
+	public void setChapterName(String chapterName) {
+		this.chapterName = chapterName;
+	}
+
+	@Column(name = "USER_NAME", length = 128)
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+	
+	@Column(name = "PROGRESS_VALUE", precision = 10)
+	public BigDecimal getProgressValue() {
+		return this.progressValue;
+	}
+
+	public void setProgressValue(BigDecimal progressValue) {
+		this.progressValue = progressValue;
+	}
+
+	@Column(name = "PERCENT", precision = 10)
+	public BigDecimal getPercent() {
+		return percent;
+	}
+
+	public void setPercent(BigDecimal percent) {
+		this.percent = percent;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressVId.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressVId.java
new file mode 100644
index 0000000..f3c0afb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyChapterProgressVId.java
@@ -0,0 +1,103 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-23 10:58:00 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * MyChapterProgressVId generated by hbm2java
+ */
+@Embeddable
+public class MyChapterProgressVId implements java.io.Serializable {
+
+	private static final long serialVersionUID = 8198482204950194696L;
+	private String subjectId;
+	private String userId;
+	private String chapterId;
+	private String classId;
+
+	public MyChapterProgressVId() {
+	}
+
+	public MyChapterProgressVId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public MyChapterProgressVId(BigDecimal progressValue, String subjectId, String userId,
+			String chapterId) {
+		this.subjectId = subjectId;
+		this.userId = userId;
+		this.chapterId = chapterId;
+	}
+
+	@Column(name = "SUBJECT_ID", length = 32)
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "CHAPTER_ID", length = 32)
+	public String getChapterId() {
+		return this.chapterId;
+	}
+
+	public void setChapterId(String chapterId) {
+		this.chapterId = chapterId;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof MyChapterProgressVId))
+			return false;
+		MyChapterProgressVId castOther = (MyChapterProgressVId) other;
+
+		return (
+				((this.getSubjectId() == castOther.getSubjectId()) || (this.getSubjectId() != null
+						&& castOther.getSubjectId() != null && this.getSubjectId().equals(castOther.getSubjectId())))
+				&& ((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				&& ((this.getChapterId() == castOther.getChapterId()) || (this.getChapterId() != null
+						&& castOther.getChapterId() != null && this.getChapterId().equals(castOther.getChapterId())))
+				&& ((this.getClassId() == castOther.getClassId()) || (this.getClassId() != null
+				&& castOther.getClassId() != null && this.getClassId().equals(castOther.getClassId())))
+				)
+				;
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getSubjectId() == null ? 0 : this.getSubjectId().hashCode());
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		result = 37 * result + (getChapterId() == null ? 0 : this.getChapterId().hashCode());
+		result = 37 * result + (getClassId() == null ? 0 : this.getClassId().hashCode());
+		return result;
+	}
+
+	@Column(name = "CLASS_ID", length = 32)
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java
new file mode 100644
index 0000000..5c4df35
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java
@@ -0,0 +1,176 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * MySubjectV generated by hbm2java
+ */
+@Entity
+@Table(name = "my_lecture_v")
+public class MyLectureV implements java.io.Serializable {
+
+    private static final long serialVersionUID = -332455459706490649L;
+
+    private MyLectureVId id;
+
+    private String chapterId;
+    private String lectureType;
+    private String lectureName;
+    private String userName;
+    private String subjectName;
+    private Date lectureUpdateTime;
+    private BigDecimal progressValue;
+    private Double percent;
+    private String subjectId;
+    private String classId;
+    private Date lectureCreateTime;
+    private String status;
+
+    public MyLectureV() {
+    }
+
+    public MyLectureV(MyLectureVId id) {
+        this.id = id;
+    }
+
+    @EmbeddedId
+    @AttributeOverrides({@AttributeOverride(name = "userId", column = @Column(name = "USER_ID", length = 32)),
+            @AttributeOverride(name = "lectureId", column = @Column(name = "LECTURE_ID", nullable = false, length = 32)),})
+    public MyLectureVId getId() {
+        return this.id;
+    }
+
+    public void setId(MyLectureVId id) {
+        this.id = id;
+    }
+
+    @Column(name = "SUBJECT_NAME")
+    public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	@Column(name = "PROGRESS_VALUE")
+    public BigDecimal getProgressValue() {
+        return this.progressValue;
+    }
+
+    public void setProgressValue(BigDecimal progressValue) {
+        this.progressValue = progressValue;
+    }
+
+    @Column(name = "CHAPTER_ID")
+    public String getChapterId() {
+        return chapterId;
+    }
+
+    public void setChapterId(String chapterId) {
+        this.chapterId = chapterId;
+    }
+
+    @Column(name = "LECTURE_TYPE")
+    public String getLectureType() {
+        return lectureType;
+    }
+
+    public void setLectureType(String lectureType) {
+        this.lectureType = lectureType;
+    }
+
+    @Column(name = "LECTURE_NAME")
+    public String getLectureName() {
+        return lectureName;
+    }
+
+    public void setLectureName(String lectureName) {
+        this.lectureName = lectureName;
+    }
+
+    @Column(name = "USER_NAME")
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    @Column(name = "PERCENT")
+    public Double getPercent() {
+        return percent;
+    }
+
+    public void setPercent(Double percent) {
+        this.percent = percent;
+    }
+
+    @Column(name = "LECTURE_UPDATE_TIME")
+    @Temporal(TemporalType.TIMESTAMP)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonIgnore
+    public Date getLectureUpdateTime() {
+        return lectureUpdateTime;
+    }
+
+    public void setLectureUpdateTime(Date lectureUpdateTime) {
+        this.lectureUpdateTime = lectureUpdateTime;
+    }
+
+    @Column(name = "SUBJECT_ID")
+    public String getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(String subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    @Column(name = "CLASS_ID")
+    public String getClassId() {
+        return classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
+    @Column(name = "LECTURE_CREATE_TIME")
+    public Date getLectureCreateTime() {
+        return lectureCreateTime;
+    }
+
+    public void setLectureCreateTime(Date lectureCreateTime) {
+        this.lectureCreateTime = lectureCreateTime;
+    }
+    
+    @Column(name = "STATUS")
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+    
+    
+    
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureVId.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureVId.java
new file mode 100644
index 0000000..994e56d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureVId.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * MySubjectVId generated by hbm2java
+ */
+@Embeddable
+public class MyLectureVId implements java.io.Serializable {
+
+	private static final long serialVersionUID = -2625337293794687416L;
+	private String userId;
+	private String lectureId;
+
+	public MyLectureVId() {
+	}
+
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "LECTURE_ID", nullable = false, length = 32)
+	public String getLectureId() {
+		return this.lectureId;
+	}
+
+	public void setLectureId(String lectureId) {
+		this.lectureId = lectureId;
+	}
+
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof MyLectureVId))
+			return false;
+		MyLectureVId castOther = (MyLectureVId) other;
+
+		return (
+				((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				
+				
+				&& ((this.getLectureId() == castOther.getLectureId()) || (this.getLectureId() != null
+						&& castOther.getLectureId() != null && this.getLectureId().equals(castOther.getLectureId())))
+				);
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		result = 37 * result + (getLectureId() == null ? 0 : this.getLectureId().hashCode());
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java
new file mode 100644
index 0000000..bce521d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java
@@ -0,0 +1,171 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * MySubjectV generated by hbm2java
+ */
+@Entity
+@Table(name = "my_subject_v")
+public class MySubjectV implements java.io.Serializable {
+
+	private static final long serialVersionUID = -1272201343379309257L;
+	private MySubjectVId id;
+	
+
+	private BigDecimal progressValue;
+	private Double percent;
+	private String coverPageUrl;
+	private String userName;
+	private String subjectName;
+	private String className;
+	private String origSubjectId;
+	private String teacherId;
+	
+	private String subjectStatus;
+	
+	private Integer schoolYear;
+	
+	private Integer term;
+	private Integer lectureCount;
+
+	public MySubjectV() {
+	}
+
+	public MySubjectV(MySubjectVId id) {
+		this.id = id;
+	}
+
+	@EmbeddedId
+
+	@AttributeOverrides({
+			@AttributeOverride(name = "userId", column = @Column(name = "USER_ID", length = 32)),
+			@AttributeOverride(name = "subjectId", column = @Column(name = "SUBJECT_ID", nullable = false, length = 32)),
+			@AttributeOverride(name = "classId", column = @Column(name = "CLASS_ID", nullable = false, length = 32)),
+			})
+	public MySubjectVId getId() {
+		return this.id;
+	}
+
+	@Column(name="TEACHER_ID")
+	public String getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(String teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public void setId(MySubjectVId id) {
+		this.id = id;
+	}
+	
+	@Column(name="LECTURE_COUNT")
+	public Integer getLectureCount() {
+		return lectureCount;
+	}
+
+	public void setLectureCount(Integer lectureCount) {
+		this.lectureCount = lectureCount;
+	}
+
+	@Column(name="SCHOOL_YEAR")
+	public Integer getSchoolYear() {
+		return schoolYear;
+	}
+
+	public void setSchoolYear(Integer schoolYear) {
+		this.schoolYear = schoolYear;
+	}
+
+	@Column(name="TERM")
+	public Integer getTerm() {
+		return term;
+	}
+
+	public void setTerm(Integer term) {
+		this.term = term;
+	}
+
+	@Column(name = "PROGRESS_VALUE", precision = 10)
+	public BigDecimal getProgressValue() {
+		return this.progressValue;
+	}
+
+	public void setProgressValue(BigDecimal progressValue) {
+		this.progressValue = progressValue;
+	}
+	
+	@Column(name = "PERCENT", nullable = false)
+	public Double getPercent() {
+		return this.percent;
+	}
+
+	public void setPercent(Double percent) {
+		this.percent = percent;
+	}
+	
+	@Column(name = "COVER_PAGE_URL", length = 256)
+	public String getCoverPageUrl() {
+		return this.coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+
+	@Column(name = "USER_NAME", length = 150)
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+	
+	@Column(name = "SUBJECT_NAME", length = 150)
+	public String getSubjectName() {
+		return this.subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+	
+	@Column(name = "CLASS_NAME")
+	public String getClassName() {
+		return this.className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	@Column(name = "ORIG_SUBJECT_ID")
+	public String getOrigSubjectId() {
+		return origSubjectId;
+	}
+
+	public void setOrigSubjectId(String origSubjectId) {
+		this.origSubjectId = origSubjectId;
+	}
+
+	@Column(name = "SUBJECT_STATUS")
+	public String getSubjectStatus() {
+		return subjectStatus;
+	}
+
+	
+	public void setSubjectStatus(String subjectStatus) {
+		this.subjectStatus = subjectStatus;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectVId.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectVId.java
new file mode 100644
index 0000000..79e3ccc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectVId.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * MySubjectVId generated by hbm2java
+ */
+@Embeddable
+public class MySubjectVId implements java.io.Serializable {
+
+	private static final long serialVersionUID = 7826222429187298941L;
+	private String userId;
+	private String subjectId;
+	private String classId;
+
+	public MySubjectVId() {
+	}
+
+	public MySubjectVId(String subjectId, String classId, int percent) {
+		this.subjectId = subjectId;
+		this.classId = classId;
+	}
+
+	public MySubjectVId(String coverPageUrl, String name, BigDecimal progressValue, String userId, String userName,
+			String subjectId, String subjectName, String classId, String className, int percent) {
+		this.userId = userId;
+		this.subjectId = subjectId;
+		this.classId = classId;
+	}
+
+	@Column(name = "USER_ID", length = 32)
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	@Column(name = "SUBJECT_ID", nullable = false, length = 32)
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	@Column(name = "CLASS_ID", nullable = false, length = 32)
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof MySubjectVId))
+			return false;
+		MySubjectVId castOther = (MySubjectVId) other;
+
+		return (
+				((this.getUserId() == castOther.getUserId()) || (this.getUserId() != null
+						&& castOther.getUserId() != null && this.getUserId().equals(castOther.getUserId())))
+				
+				&& ((this.getSubjectId() == castOther.getSubjectId()) || (this.getSubjectId() != null
+						&& castOther.getSubjectId() != null && this.getSubjectId().equals(castOther.getSubjectId())))
+				
+				&& ((this.getClassId() == castOther.getClassId()) || (this.getClassId() != null
+						&& castOther.getClassId() != null && this.getClassId().equals(castOther.getClassId())))
+				);
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result + (getUserId() == null ? 0 : this.getUserId().hashCode());
+		result = 37 * result + (getSubjectId() == null ? 0 : this.getSubjectId().hashCode());
+		result = 37 * result + (getClassId() == null ? 0 : this.getClassId().hashCode());
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/OpenSubjectV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/OpenSubjectV.java
new file mode 100644
index 0000000..d41e0c6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/OpenSubjectV.java
@@ -0,0 +1,128 @@
+package com.qxueyou.scc.teach.subject.model.view;
+// Generated 2018-3-19 20:40:08 by Hibernate Tools 5.2.8.Final
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * MyOpenSubjectV generated by hbm2java
+ */
+@Entity(name = "OpenSubjectV")
+@Table(name = "open_subject_v")
+@NamedQuery(name = "OpenSubjectV.findAll", query = "SELECT u FROM OpenSubjectV u")
+public class OpenSubjectV implements java.io.Serializable {
+
+	private static final long serialVersionUID = -1272201343379309257L;
+
+	@Column(name = "COVER_PAGE_URL", length = 256)
+	private String coverPageUrl;
+	
+	@Column(name = "SUBJECT_NAME", length = 150)
+	private String subjectName;
+	
+	@Id
+	@Column(name = "SUBJECT_ID", nullable = false, length = 32)
+	private String subjectId;
+	
+	@Column(name="SCHOOL_YEAR")
+	private Integer schoolYear;
+	
+	@Column(name="TERM")
+	private Integer term;
+	@Column(name="MEDIA_VIDEO_COUNT")
+	private Integer mediaVideoCount;
+	@Column(name="LEARNER_COUNT")
+	private Integer learnerCount;
+	
+	@Column(name="CREATE_TIME")
+	@Temporal(TemporalType.TIMESTAMP)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public OpenSubjectV() {
+	}
+
+	public Integer getMediaVideoCount() {
+		return mediaVideoCount;
+	}
+
+
+	public void setMediaVideoCount(Integer mediaVideoCount) {
+		this.mediaVideoCount = mediaVideoCount;
+	}
+
+	
+	public Integer getLearnerCount() {
+		return learnerCount;
+	}
+
+
+	public void setLearnerCount(Integer learnerCount) {
+		this.learnerCount = learnerCount;
+	}
+
+
+	
+	public Integer getSchoolYear() {
+		return schoolYear;
+	}
+
+	public void setSchoolYear(Integer schoolYear) {
+		this.schoolYear = schoolYear;
+	}
+
+	
+	public Integer getTerm() {
+		return term;
+	}
+
+	public void setTerm(Integer term) {
+		this.term = term;
+	}
+	
+	
+	public String getCoverPageUrl() {
+		return this.coverPageUrl;
+	}
+
+	public void setCoverPageUrl(String coverPageUrl) {
+		this.coverPageUrl = coverPageUrl;
+	}
+	
+	
+	public String getSubjectId() {
+		return this.subjectId;
+	}
+
+	public void setSubjectId(String subjectId) {
+		this.subjectId = subjectId;
+	}
+
+	
+	
+	public String getSubjectName() {
+		return this.subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java
new file mode 100644
index 0000000..7f60922
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java
@@ -0,0 +1,255 @@
+package com.qxueyou.scc.teach.subject.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.LectureAudioV;
+import com.qxueyou.scc.teach.subject.model.view.LectureDocV;
+import com.qxueyou.scc.teach.subject.model.view.LectureVideoV;
+import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
+
+public interface ILectureService {
+
+	/**
+	 * 新增章节文件夹
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @param name
+	 *            文件夹名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回ChapterId
+	 */
+	Result addChapter(String subjectId, String parentChapterId, String name);
+
+	/**
+	 * 读取课件目录
+	 * 
+	 * @param chapterId
+	 * @return
+	 */
+	SubjectChapter readChapter(String chapterId);
+
+	/**
+	 * 修改章节文件夹
+	 * 
+	 * @param chapterId
+	 *            文件夹id
+	 * @param name
+	 *            名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result updateChapter(String chapterId, String name);
+
+	/**
+	 * 删除章节文件夹
+	 * 
+	 * @param chapterIds
+	 *            章节文件夹id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result deleteChapter(String[] chapterIds);
+
+	/**
+	 * 返回下级章节文件夹列表,如果
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @return 返回章节列表
+	 */
+	List<SubjectChapter> doGetListChapter(String subjectId, String parentChapterId);
+
+	/**
+	 * 返回下级章节文件夹列表,如果
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @return 返回章节列表
+	 */
+	List<SubjectProgressTreeV> getChapterTreeVList(String subjectId, String parentChapterId);
+
+	/**
+	 * 返回下级章节文件夹列表
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @param parentChapterId
+	 *            父级章节文件夹id
+	 * @return 返回章节列表
+	 */
+	List<SubjectChapter> getListChapter(String subjectId, String parentChapterId);
+
+	/**
+	 * 返回所有章节列表,按createTime排序
+	 * 
+	 * @param subjectId
+	 *            课程id
+	 * @return 返回章节列表
+	 */
+	List<SubjectChapter> getAllChapterBySubjectId(String subjectId);
+
+	/**
+	 * 新增课件
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param resId
+	 *            资源id
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"chapterId","90023afwe32300fee23"}},若成功,则返回chapterId
+	 */
+	Result addLecture(String chapterId, String resId);
+
+	/**
+	 * 读取课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @return SubjectLecture
+	 */
+	SubjectLecture readLecture(String lectureId);
+
+	/**
+	 * 读取视频课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @return SubjectLecture
+	 */
+	LectureVideoV readVideoLecture(String lectureId);
+
+	/**
+	 * 读取音频课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @return LectureAudioV
+	 */
+	LectureAudioV readAudioLecture(String lectureId);
+
+	/**
+	 * 修改课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param resId
+	 *            资源id
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result updateLecture(String lectureId, String resId);
+
+	/**
+	 * 删除课件
+	 * 
+	 * @param lectureIds
+	 *            课件id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result deleteLecture(String[] lectureIds);
+
+	/**
+	 * 复制课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param destChapterId
+	 *            目标章节id
+	 * @param name
+	 *            课件名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result doCopyLecture(String lectureId, String destChapterId, String name);
+
+	/**
+	 * 移动课件
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @param destChapterId
+	 *            目标章节id
+	 * @param name
+	 *            课件名称
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result doMoveLecture(String lectureId, String destChapterId, String name);
+
+	/**
+	 * 课件列表搜索
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param keyword
+	 *            关键字
+	 * @param pageSize
+	 *            页码
+	 * @param pageNum
+	 *            每页显示数据条数
+	 * @param type
+	 *            类型
+	 * @return
+	 */
+	List<SubjectLecture> listLecture(String chapterId, String keyword, Integer pageSize, Integer pageNum, String type);
+
+	/**
+	 * 课件列表大小
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param keyword
+	 *            关键字
+	 * @param type
+	 *            类型
+	 * @return
+	 */
+	int listLectureCount(String chapterId, String keyword, String type);
+
+	/**
+	 * 课件列表搜索
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @param keyword
+	 *            关键字
+	 * @param pageSize
+	 *            页码
+	 * @param pageNum
+	 *            每页显示数据条数
+	 * @param type
+	 *            类型
+	 * @return
+	 */
+	List<MyLectureV> listLectureV(String learnerId, String chapterId, String keyword, Integer pageSize, Integer pageNum,
+			String type);
+
+	/**
+	 * 课件列表搜索
+	 * 
+	 * @return
+	 */
+	List<SubjectLecture> listLectureBySubjectId(String subjectId);
+
+	/**
+	 * 读取课件真实文件访问路径
+	 * 
+	 * @param lectureId
+	 *            课件id数组
+	 * @param attribute
+	 *            课件附加属性
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{"type":"",path:""}}
+	 */
+	Result readLectureAccessPath(String lectureId, String attribute);
+
+	Result doStudy(String lectureId, Double from, Double to);
+
+	/**
+	 * 读取文档课件
+	 */
+	LectureDocV readDocLecture(String handoutId);
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java
new file mode 100644
index 0000000..cb49dca
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java
@@ -0,0 +1,383 @@
+package com.qxueyou.scc.teach.subject.service;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.model.view.MySubjectV;
+
+public interface ISubjectService {
+
+	/**
+	 * 新增课程
+	 * 
+	 * @param subjectName
+	 *            课程名称
+	 * @param coverPageFileId
+	 *            封面文件id
+	 * @param contentFileId
+	 *            内容文件id
+	 * @return
+	 */
+	Result add(String subjectName, String coverPageFileId, String contentFileId,int type);
+
+	/**
+	 * 修改课程
+	 * 
+	 * @param subjectName
+	 *            课程名称
+	 * @param subjectId
+	 *            课程id
+	 * @param coverPageFileId
+	 *            封面文件id
+	 * @param contentFileId
+	 *            内容文件id
+	 * @return
+	 */
+	Result update(String subjectId, String subjectName, String coverPageFileId, String contentFileId,int  type);
+
+	/**
+	 * 删除课程
+	 * 
+	 * @param subjectIds
+	 *            课程id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result delete(String[] subjectIds);
+
+	/**
+	 * 发布课程
+	 * 
+	 * @param subjectIds
+	 *            课程id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result doRelease(String[] subjectIds);
+
+	/**
+	 * 撤回课程
+	 * 
+	 * @param subjectIds
+	 *            课程id数组
+	 * @return 上传结果:{"success":true,msg:"success",attrs:{}}
+	 */
+	Result doCancel(String[] subjectIds);
+
+	/**
+	 * 更新课件数量
+	 * 
+	 * @param subjectId
+	 * @param count
+	 * @return
+	 */
+	Result addLectureCount(String subjectId, int count);
+
+	/**
+	 * 查询课程
+	 * 
+	 * @param text
+	 *            搜索文本
+	 * @param pageSize
+	 *            页码
+	 * @param pageNum
+	 *            每页显示行数
+	 * @return 返回课程列表
+	 */
+	List<Subject> list(String text, String teacherId, String status,Integer type, Integer pageSize, Integer pageNum);
+
+	/**
+	 * 查询课程个数
+	 * 
+	 * @param text
+	 *            搜索文本
+	 * @return 返回课程总数
+	 */
+	int listCount(String text, String teacherId, String status,Integer type);
+
+	/**
+	 * 读取课程
+	 * 
+	 * @param subjectId
+	 *            课程ID
+	 * @return 返回课程列表
+	 */
+	Subject read(String subjectId);
+
+	/**
+	 * 读取课程详情介绍
+	 * 
+	 * @param subjectId
+	 *            课程ID
+	 * @return 返回课程详情介绍
+	 */
+	String readSubjectContent(String subjectId);
+
+	/**
+	 * 查询我的课程
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @return 返回课程列表
+	 */
+	List<MySubjectV> listMySubjectV(String classId,String userId);
+
+	/**
+	 * 首页查询我的课程
+	 */
+	List<Map<String, Object>> getMySubjectList();
+
+	/**
+	 * 查询我的课程
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @return 返回课程列表
+	 */
+	MySubjectV getMy1stSubjectVById(String subjectId);
+
+	/**
+	 * 查询个人课程章节的学习进度
+	 * 
+	 * @param classId
+	 *            班级id
+	 * @return 返回章节学习进度列表
+	 */
+	List<Map<String, Object>> listChapterStudyProgress(String subjectId);
+
+	/**
+	 * 获取subject对象
+	 */
+	Subject readSubject(String subjectId);
+
+	/**
+	 * 我的活动获取课程完成情况
+	 * 
+	 * @return
+	 */
+	Result getPerformance4Subject();
+
+	/**
+	 * 首页获取课程详情列表
+	 */
+	Result lstSubjectDetail(String userId);
+
+	/**
+	 * 获取数据排行
+	 * 
+	 * @return
+	 */
+	Result getDataDesc(String classId, String subjectId);
+
+	/**
+	 * 获取上次学习的位置
+	 */
+	Result lastStudied(String userId);
+	
+	/**
+	 * 添加班级课程
+	 * @param origSubjectId
+	 * @param teacherId
+	 * @param schoolYear
+	 * @param term
+	 * @return
+	 * @throws InvocationTargetException 
+	 * @throws IllegalAccessException 
+	 */
+	Result addClsSubject(String classId,String origSubjectId, String teacherId, Integer schoolYear, Integer term) throws IllegalAccessException, InvocationTargetException;
+	
+	
+	/**
+	 * 更新班级课程
+	 * @param subjectId
+	 * @param origSubjectId
+	 * @param teacherId
+	 * @param schoolYear
+	 * @param term
+	 * @return
+	 */
+	Result updateClsSubject(String classId,String subjectId, String origSubjectId, String teacherId, Integer schoolYear, Integer term);
+	
+	/**
+	 * 删除班级课程
+	 * @param classId
+	 * @param subjectIds
+	 * @return
+	 */
+	Result deleteClsSubject(String classId, String[] subjectIds);
+	
+	/**
+	 * 查询班级课程
+	 * 
+	 * @param classId
+	 * @param schoolYear
+	 * @param term
+	 * @return
+	 */
+	public List<Map<String, Object>> clsSubjectlist(String classId, Integer schoolYear, Integer term);
+	
+	/**
+	 * 获取班级学期
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> termList(String classId);
+	
+	/**
+	 * 我的课程按学期分类
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> myTermSubjectList(String classId);
+	
+	/**
+	 * 我的课程,按时间排序
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> mySubjectList(String classId, Pager pager);
+	
+	/**
+	 * 查询老师或管理员可用的课程ID和课程名字列表
+	 * @param teacherId 根据教师ID过滤
+	 * @return
+	 */
+	List<Map<String, Object>> queryAvailableSubjectIdAndName(String teacherId,Integer sbujectType);
+	
+	/**
+	 * 我的班级信息
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public Map<String,Object> myClassInfo(String classId);
+	
+	/**
+	 * 获取我的课程数量
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public long myClsSubjectCount(String classId);
+	
+	/**
+	 * 获取我的课程进度
+	 * 
+	 * @param classId
+	 * @param userId
+	 * @return
+	 */
+	public List<Map<String,Object>> myClsSubjectlist(String classId, String userId, Pager pager);
+	
+	/**
+	 * 学员课程作业进度
+	 * 
+	 * @param classId
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String, Object> studentSubjectHomeworkProgress(String classId, String subjectId, String userId);
+	
+	/**
+	 * 学员考试作业进度
+	 * 
+	 * @param classId
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String, Object> studentSubjectExamProgress(String classId, String subjectId, String studentId);
+	
+	/**
+	 * 获取学员的课程进度
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> studentSubjectProgress(String classId, Pager pager);
+	
+	/**
+	 * 班级学员课件总体进度
+	 * 
+	 * @param subjectId
+	 * @param classId
+	 * @return
+	 */
+    public List<Map<String, Object>> studentSubjectLectureProgress(String subjectId, String classId);
+    
+    /**
+	 * 我的公开课列表
+	 * 
+	 * @param pageNum
+	 * @param pageSize
+	 * @param keyword
+	 * @return
+	 */
+	public Map<String,Object> myOpenSubjectList(Integer pageNum, Integer pageSize, String keyword);
+	
+	/**
+	 * 公开课列表
+	 * 
+	 * @param pageNum
+	 * @param pageSize
+	 * @param keyword
+	 * @return
+	 */
+	public Map<String,Object> openSubjectList(Integer pageNum, Integer pageSize, String keyword);
+	
+	/**
+	 * 公开课详情
+	 * 
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String,Object> openSubjectInfo(String subjectId);
+	
+	/**
+	 * 我的课程详情
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public Map<String,Object> mySubjectInfo(String subjectId, String classId);
+	
+	/**
+	 * app教师端课程列表
+	 * 
+	 * @param text
+	 * @param status
+	 * @param type
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	Result teacherSubjectList(Pager pager, String keyword, String status,Integer type);
+	
+	/**
+	 * 课程按学期分类
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	List<Map<String,Object>> termSubjectList(String classId, List<Map<String,Object>> clsSubjectlist);
+	
+	
+	/**
+	 * 查询课程关联的班级信息
+	 * @param origSubjectId
+	 * @return
+	 */
+	List<Map<String, Object>> querySubjectReClassInfos(String origSubjectId);
+	
+	/**
+	 * 获取课件数量
+	 * 
+	 * @param subjectId
+	 * @return
+	 */
+	public long getLectureCount(String subjectId);
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
new file mode 100644
index 0000000..37b1585
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
@@ -0,0 +1,398 @@
+package com.qxueyou.scc.teach.subject.service.impl;
+
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.service.IProgressService;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.teach.res.model.Res;
+import com.qxueyou.scc.teach.res.service.IResService;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.LectureAudioV;
+import com.qxueyou.scc.teach.subject.model.view.LectureDocV;
+import com.qxueyou.scc.teach.subject.model.view.LectureVideoV;
+import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+
+@Service
+public class SubjectLectureService extends CommonAppService implements ILectureService {
+
+	public static final String RES_LECTURE_CONVER_LST = "RES_LECTURE_CONVER_LST";
+
+	@Autowired
+	ISubjectService subjectService;
+
+	@Autowired
+	IResService resService;
+
+	@Autowired
+	ICacheService cacheService;
+
+	@Autowired
+	IProgressService progressService;
+
+	@Override
+	public Result addChapter(String subjectId, String parentChapterId, String name) {
+
+		SubjectChapter chapter = new SubjectChapter();
+
+		TraceUtils.setCreateTrace(chapter);
+		chapter.setName(name);
+		chapter.setParentChapterId(parentChapterId);
+		chapter.setSubjectId(subjectId);
+
+		save(chapter);
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("id", chapter.getChapterId(), "name", name));
+
+	}
+
+	@Override
+	public Result updateChapter(String chapterId, String name) {
+
+		SubjectChapter chapter = read(SubjectChapter.class, chapterId);
+
+		TraceUtils.setUpdateTrace(chapter);
+		chapter.setName(name);
+
+		save(chapter);
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("id", chapter.getChapterId(), "name", name));
+	}
+
+	@Override
+	public Result deleteChapter(String[] chapterIds) {
+		for (String chapterId : chapterIds) {
+			deleteChapter(chapterId);
+		}
+
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 删除单个章节
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @return
+	 */
+	private Result deleteChapter(String chapterId) {
+
+		SubjectChapter chapter = read(SubjectChapter.class, chapterId);
+
+		TraceUtils.setUpdateTrace(chapter);
+		chapter.setDeleteFlag(true);
+
+		save(chapter);
+		Result result = this.deleteCourseware4Chapter(chapterId);
+		if (!result.isSuccess()) {
+			return result;
+		}
+		return new Result(true, "success");
+	}
+
+	private Result deleteCourseware4Chapter(String chapterId) {
+
+		this.bulkUpdate("update SubjectLecture set deleteFlag = true where chapterId = ?", new String[] { chapterId });
+		return new Result(true);
+
+	}
+
+	@Override
+	public List<SubjectChapter> doGetListChapter(String subjectId, String parentChapterId) {
+
+		List<SubjectChapter> result = getListChapter(subjectId, parentChapterId);
+
+		if (result.isEmpty() && StringUtils.isEmpty(parentChapterId)) {
+			return CollectionUtils.newList(SubjectChapter.class, initLectureChapter(subjectId));
+		}
+
+		return result;
+	}
+
+	@Override
+	public List<SubjectProgressTreeV> getChapterTreeVList(String subjectId, String parentChapterId) {
+
+		if (parentChapterId == null) {
+			return progressService.getSubjectChapterTreeVList(subjectId, ClientUtils.getUserId());
+		}
+
+		return progressService.getSubjectChapterTreeVList(parentChapterId, ClientUtils.getUserId());
+	}
+
+	/**
+	 * 初始化
+	 * 
+	 * @param subjectId
+	 * @return
+	 */
+	private SubjectChapter initLectureChapter(String subjectId) {
+
+		SubjectChapter chapter = new SubjectChapter();
+
+		TraceUtils.setCreateTrace(chapter);
+		chapter.setName("根节点");
+		chapter.setSubjectId(subjectId);
+		chapter.setParentChapterId(SubjectChapter.ROOT_CHAPTER_ID);
+
+		save(chapter);
+
+		return chapter;
+	}
+
+	@Override
+	public Result addLecture(String chapterId, String resId) {
+
+		SubjectChapter chapter = read(SubjectChapter.class, chapterId);
+
+		Res res = resService.read(resId);
+
+		SubjectLecture lecture = new SubjectLecture();
+
+		TraceUtils.setCreateTrace(lecture);
+		lecture.setChapterId(chapterId);
+		lecture.setLectureType(res.getType());
+		lecture.setName(res.getName());
+		lecture.setStatus(res.getStatus());
+		lecture.setRemark(res.getRemark());
+		lecture.setSubjectId(chapter.getSubjectId());
+		lecture.setResItemId(res.getResId());
+
+		save(lecture);
+
+		subjectService.addLectureCount(chapter.getSubjectId(), 1);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public Result updateLecture(String lectureId, String resId) {
+
+		SubjectLecture lecture = read(SubjectLecture.class, lectureId);
+
+		Res res = resService.read(resId);
+
+		TraceUtils.setUpdateTrace(lecture);
+		lecture.setLectureType(res.getType());
+		lecture.setName(res.getName());
+		lecture.setRemark(res.getRemark());
+		lecture.setResItemId(res.getResId());
+
+		save(lecture);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public Result deleteLecture(String[] lectureIds) {
+		for (String lectureId : lectureIds) {
+			deleteLecture(lectureId);
+		}
+
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 
+	 * @param lectureId
+	 *            课件id
+	 * @return
+	 */
+	private Result deleteLecture(String lectureId) {
+
+		SubjectLecture lecture = read(SubjectLecture.class, lectureId);
+
+		TraceUtils.setUpdateTrace(lecture);
+		lecture.setDeleteFlag(true);
+
+		save(lecture);
+
+		subjectService.addLectureCount(lecture.getSubjectId(), -1);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public Result doCopyLecture(String lectureId, String destChapterId, String name) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Result doMoveLecture(String lectureId, String destChapterId, String name) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<SubjectLecture> listLecture(String chapterId, String keyword, Integer pageSize, Integer pageNum,
+			String type) {
+
+		StringBuffer hql = new StringBuffer("from SubjectLecture where chapterId=? and name like ? and deleteFlag is false");
+		List<Object> args = CollectionUtils.newList(chapterId,'%' + keyword.trim() + '%');
+
+		if (StringUtils.isNotEmpty(type)) {
+			hql.append(" and lectureType=?");
+			args.add(type);
+		}
+
+		List<SubjectLecture> result = findList(hql.toString(), new Pager(pageSize, pageNum), args,
+				SubjectLecture.class);
+
+		return result;
+	}
+
+	@Override
+	public List<MyLectureV> listLectureV(String learnerId, String chapterId, String keyword, Integer pageSize,
+			Integer pageNum, String type) {
+		StringBuffer hql = new StringBuffer("from MyLectureV where chapterId=? and id.userId=?");
+		List<Object> args = CollectionUtils.newList(chapterId, learnerId);
+
+		if (StringUtils.isNotEmpty(type)) {
+			hql.append(" and lectureType=?");
+			args.add(type);
+		}
+
+		List<MyLectureV> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, MyLectureV.class);
+
+		return result;
+	}
+
+	@Override
+	public int listLectureCount(String chapterId, String keyword, String type) {
+		StringBuffer hql = new StringBuffer("from SubjectLecture where chapterId=? and name like ? and deleteFlag is false");
+		
+		List<Object> args = CollectionUtils.newList(chapterId,'%' + keyword.trim() + '%');
+
+		if (StringUtils.isNotEmpty(type)) {
+			hql.append(" and lectureType=?");
+			args.add(type);
+		}
+		
+		return findCount(hql.toString(),args);
+
+	}
+
+	@Override
+	public Result readLectureAccessPath(String lectureId, String attribute) {
+		SubjectLecture lecture = read(SubjectLecture.class, lectureId);
+		String resItemId = null;
+		if(lecture == null) {
+			resItemId = read(ClsSubjectLecture.class, lectureId).getResItemId();//班级课件
+		}else {
+			resItemId = lecture.getResItemId();
+		}
+		return resService.readAccessPath(resItemId, attribute);
+	}
+
+	@Override
+	public SubjectLecture readLecture(String lectureId) {
+		return read(SubjectLecture.class, lectureId);
+	}
+
+	@Override
+	public SubjectChapter readChapter(String chapterId) {
+		return read(SubjectChapter.class, chapterId);
+	}
+
+	@Override
+	public List<SubjectChapter> getListChapter(String subjectId, String parentChapterId) {
+
+		StringBuffer hql = new StringBuffer(
+				"from SubjectChapter where subjectId=? and deleteFlag is false and parentChapterId=?");
+
+		List<Object> args = CollectionUtils.newList(subjectId);
+
+		if (StringUtils.isEmpty(parentChapterId)) {
+			args.add(SubjectChapter.ROOT_CHAPTER_ID);
+		} else {
+			args.add(parentChapterId);
+		}
+
+		List<SubjectChapter> result = find(hql.toString(), args, SubjectChapter.class);
+
+		return result;
+	}
+
+	@Override
+	public List<SubjectLecture> listLectureBySubjectId(String subjectId) {
+		String hql = "from SubjectLecture where subjectId=? and deleteFlag is false";
+
+		List<SubjectLecture> result = find(hql, CollectionUtils.newList(subjectId), SubjectLecture.class);
+
+		return result;
+	}
+
+	/**
+	 * 监控resId转码状态同步Lecture的状态
+	 */
+	@Scheduled(cron = "0/2 * * * * ?") // 每2秒执行一次
+	public void doTimer() {
+		String resId = cacheService.lstLeftPop(RES_LECTURE_CONVER_LST);
+		if (StringUtils.isBlank(resId)) {
+			return;
+		}
+		Res res = read(Res.class, resId);
+		if (res.getStatus().equals(Res.STATUS_DRAFT)) {
+			String[] resIds = resId.split(",");
+			bulkUpdate(
+					"update  SubjectLecture set status = 'draft' where deleteFlag is false and status = 'conver' and resItemId = ?",
+					resIds);
+			bulkUpdate(
+					"update  ClsSubjectLecture set status = 'draft' where deleteFlag is false and status = 'conver' and resItemId = ?",
+					resIds);
+			return;
+		}
+		cacheService.lstRightPush(RES_LECTURE_CONVER_LST, resId);
+	}
+
+	@Override
+	public Result doStudy(String lectureId, Double from, Double to) {
+		String userId = null;
+		return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, lectureId, from.intValue(), to.intValue(),
+				userId);
+	}
+
+	@Cacheable(value = "LectureVideoV", key = "#lectureId")
+	@Override
+	public LectureVideoV readVideoLecture(String lectureId) {
+		return read(LectureVideoV.class, lectureId);
+	}
+
+	@Cacheable(value = "LectureAudioV", key = "#lectureId")
+	@Override
+	public LectureAudioV readAudioLecture(String lectureId) {
+		return read(LectureAudioV.class, lectureId);
+	}
+
+	@Override
+	public List<SubjectChapter> getAllChapterBySubjectId(String subjectId) {
+
+		String hql = "from SubjectChapter where deleteFlag is false and subjectId = ? order by createTime";
+		return find(hql, CollectionUtils.newList(subjectId), SubjectChapter.class);
+
+	}
+
+	@Override
+	public LectureDocV readDocLecture(String lectureId) {
+
+		return read(LectureDocV.class, lectureId);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
new file mode 100644
index 0000000..c26c94f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -0,0 +1,1548 @@
+package com.qxueyou.scc.teach.subject.service.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.sys.model.CacheParamters;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.querydsl.core.Tuple;
+import com.querydsl.core.types.Order;
+import com.querydsl.core.types.OrderSpecifier;
+import com.querydsl.core.types.Predicate;
+import com.querydsl.core.types.dsl.CaseBuilder;
+import com.querydsl.core.types.dsl.NumberExpression;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.admin.classes.model.ClsClassReSubject;
+import com.qxueyou.scc.admin.classes.model.QClsClassReSubject;
+import com.qxueyou.scc.admin.classes.model.QClsSubjectLecture;
+import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.admin.progress.dao.ProgressDAO;
+import com.qxueyou.scc.admin.progress.model.Progress;
+import com.qxueyou.scc.admin.progress.model.QProgress;
+import com.qxueyou.scc.admin.progress.model.view.QSubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV;
+import com.qxueyou.scc.admin.progress.service.IProgressService;
+import com.qxueyou.scc.admin.teacher.service.ITeacherService;
+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.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.QueryDslOptionBuilder;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.exam.model.QExamResultV;
+import com.qxueyou.scc.exam.service.IExamService;
+import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
+import com.qxueyou.scc.exercise.model.ExerciseInfo;
+import com.qxueyou.scc.exercise.model.QExerciseResultV;
+import com.qxueyou.scc.exercise.service.IExerciseInfoService;
+import com.qxueyou.scc.teach.live.model.QMediaVideoLive;
+import com.qxueyou.scc.teach.live.service.IMediaLiveService;
+import com.qxueyou.scc.teach.res.model.ResFile;
+import com.qxueyou.scc.teach.res.service.IFileService;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.teach.subject.dao.SubjectDAO;
+import com.qxueyou.scc.teach.subject.model.QSubject;
+import com.qxueyou.scc.teach.subject.model.QSubjectLecture;
+import com.qxueyou.scc.teach.subject.model.Subject;
+import com.qxueyou.scc.teach.subject.model.SubjectChapter;
+import com.qxueyou.scc.teach.subject.model.SubjectLecture;
+import com.qxueyou.scc.teach.subject.model.view.MySubjectV;
+import com.qxueyou.scc.teach.subject.model.view.OpenSubjectV;
+import com.qxueyou.scc.teach.subject.model.view.QMyLectureV;
+import com.qxueyou.scc.teach.subject.model.view.QMySubjectV;
+import com.qxueyou.scc.teach.subject.model.view.QOpenSubjectV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
+import com.qxueyou.scc.teach.subject.service.ISubjectService;
+import com.qxueyou.scc.user.model.QUser;
+import com.qxueyou.scc.user.model.UserTeacher;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Service
+public class SubjectService extends CommonAppService implements ISubjectService {
+
+	private final Logger log = LogManager.getLogger(SubjectService.class);
+
+	@Autowired
+	SubjectDAO subjectDAO;
+
+	@Autowired
+	IFileService fileService;
+
+	@Autowired
+	ILectureService lectureService;
+	
+	@Autowired
+	IClassLectureService clsLectureService;
+
+	@Autowired
+	IProgressService progressService;
+
+	@Autowired
+	IExamService examService;
+
+	@Autowired
+	IExerciseInfoService exerciseInfoService;
+
+	@Autowired
+	ProgressDAO progressDao;
+
+	@Autowired
+	private ITeacherService teacherService;
+	
+	@Autowired
+	private IMediaLiveService mediaLiveService;
+
+	@Override
+	public Result add(String subjectName,String coverPageFileId, String contentFileId,int type) {
+
+		Subject subject = new Subject();
+		if (StringUtils.isNotEmpty(coverPageFileId)) {
+			ResFile file = fileService.read(coverPageFileId);
+			subject.setCoverPageFileId(coverPageFileId);
+			subject.setCoverPageUrl(file.getPath());
+		}
+
+		TraceUtils.setCreateTrace(subject);
+		subject.setContentFileId(contentFileId);
+		subject.setName(subjectName);
+		subject.setStatus(Subject.STATUS_DRAFT);
+		subject.setLectureCount(0);
+		subject.setType(type);
+		subject.setOrgId(ClientUtils.getOrgId());
+
+		save(subject);
+		
+		//初始化创建 根节点
+		SubjectChapter chapter = new SubjectChapter();
+		TraceUtils.setCreateTrace(chapter);
+		chapter.setName("根节点");
+		chapter.setSubjectId(subject.getSubjectId());
+		chapter.setParentChapterId(SubjectChapter.ROOT_CHAPTER_ID);
+		save(chapter);
+
+		return new Result(true,"success",CollectionUtils.newObjectMap("subjectId",subject.getSubjectId()));
+	}
+
+	@Override
+	public Result update(String subjectId, String subjectName, String coverPageFileId, String contentFileId,int type) {
+		Subject subject = read(Subject.class, subjectId);
+		if (StringUtils.isNotEmpty(coverPageFileId)) {
+			ResFile file = fileService.read(coverPageFileId);
+			subject.setCoverPageUrl(file.getPath());
+			subject.setCoverPageFileId(coverPageFileId);
+		}else{
+			subject.setCoverPageUrl(null);
+			subject.setCoverPageFileId(null);
+		}
+
+		TraceUtils.setUpdateTrace(subject);
+		subject.setContentFileId(contentFileId);
+		subject.setName(subjectName);
+		subject.setType(type);
+
+		save(subject);
+		
+		//更新所有关联的课程
+		if(subject.getType()==Subject.TYPE_ORG_SUBJECT){
+			this.bulkUpdate("update Subject t set t.name=?,t.contentFileId=?,"
+					+ "t.coverPageFileId=?,t.coverPageUrl=? where t.deleteFlag is false and t.origSubjectId=? ",new Object[]{subject.getName(),
+							subject.getContentFileId(),subject.getCoverPageFileId(),subject.getCoverPageUrl(),subject.getSubjectId()} );
+		}
+		
+		return new Result(true, "success");
+	}
+
+	@Override
+	public Result delete(String[] subjectIds) {
+		for (String subjectId : subjectIds) {
+			deleteSubject(subjectId);
+			
+			//删除班级课程
+			List<Map<String,Object>> result = this.findListWithMapByHql(
+					"select r.classId as classId,r.subjectId as subjectId from ClsClassReSubject r,Subject j  "
+					+ "where r.subjectId = j.subjectId and j.origSubjectId=:origSubjectId and r.deleteFlag is false and j.deleteFlag is false", 
+					CollectionUtils.newObjectMap("origSubjectId",subjectId));
+			
+			if(result!=null && result.size()>0){
+				for(Map<String,Object> map : result){
+					this.deleteClsSubject((String)map.get("classId"), new String []{(String)map.get("subjectId")});
+				}
+			}
+		}
+
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 删除单个课程
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @return
+	 */
+	private Result deleteSubject(String subjectId) {
+
+		Subject subject = read(Subject.class, subjectId);
+
+		TraceUtils.setUpdateTrace(subject);
+		subject.setDeleteFlag(true);
+
+		save(subject);
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public List<Subject> list(String text, String teacherId, String status,Integer type, Integer pageSize, Integer pageNum) {
+
+		StringBuffer hql = new StringBuffer("from Subject where name like ? and orgId=? and deleteFlag is false and origSubjectId is null ");
+
+		List<Object> args = CollectionUtils.newList(text + "%",ClientUtils.getOrgId());
+
+		if(type!=null){
+			hql.append(" and type=?");
+			args.add(type);
+		}
+		
+		if (!StringUtils.isEmpty(status)) {
+			hql.append(" and status=?");
+			args.add(status);
+		}
+
+		if (!StringUtils.isEmpty(teacherId)) {
+			hql.append(" and createId=?");
+			args.add(teacherId);
+		}
+		hql.append(" order by createTime desc");
+		List<Subject> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Subject.class);
+		
+		return result;
+	}
+	
+
+	/**
+	 * app教师端课程列表
+	 * 
+	 * @param text
+	 * @param status
+	 * @param type
+	 * @param pageSize
+	 * @param pageNum
+	 * @return
+	 */
+	@Override
+	public Result teacherSubjectList(Pager pager, String keyword, String status,Integer type) {
+		String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+		if(StringUtils.isEmpty(teacherId)) {
+			return new Result(false, "当前用户无老师角色");
+		}
+		
+		QSubject qSubject = QSubject.subject;
+		QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+		QProgress qProgress = QProgress.progress;
+		QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
+		
+		JPAQuery<Tuple> query = this.getQueryFactory()
+				.select(qSubject.subjectId, qSubject.name, qSubject.term,qSubject.coverPageUrl, qSubject.schoolYear, qSubject.createTime, qSubject.type)
+				.from(qSubject)
+				.where(qSubject.deleteFlag.isFalse()
+						.and(qSubject.status.eq(Subject.STATUS_ISSUED)).and(qSubject.type.eq(type))
+						.and(qSubject.createId.eq(ClientUtils.getUserId()))
+						.and(qSubject.name.like("%" + keyword + "%")));
+		
+		long count = query.fetchCount();
+		
+		List<Map<String, Object>> listData = query.orderBy(qSubject.createTime.desc()).limit(pager.getPageSize())
+				.offset(pager.getOffset()).fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(10);
+					String subjectId = tuple.get(qSubject.subjectId);
+
+					map.put("name", tuple.get(qSubject.name));
+					map.put("subjectId", subjectId);
+					map.put("schoolYear", tuple.get(qSubject.schoolYear));
+					map.put("term", tuple.get(qSubject.term));
+					map.put("coverPageUrl", tuple.get(qSubject.coverPageUrl));
+					map.put("createTime", tuple.get(qSubject.createTime));
+					map.put("type", tuple.get(qSubject.type));
+					map.put("classId", "");
+					map.put("studyCount", this.getQueryFactory().selectDistinct(qProgress.learnerId).from(qProgress, qSubjectLecture)
+							.where(qProgress.deleteFlag.isFalse().and(qSubjectLecture.subjectId.eq(subjectId)).and(qProgress.targetType.eq(Progress.PROGRESS_TYPE_LECTURE))
+									.and(qProgress.targetId.eq(qSubjectLecture.lectureId)).and(qSubjectLecture.deleteFlag.isFalse())).fetchCount());
+					map.put("classCount",
+							this.getQueryFactory().selectDistinct(qClsClassReSubject.classId)
+									.from(qClsClassReSubject, qSubject)
+									.where(qSubject.deleteFlag.isFalse().and(qClsClassReSubject.deleteFlag.isFalse())
+											.and(qClsClassReSubject.subjectId.eq(qSubject.subjectId)).and(qSubject.origSubjectId.eq(subjectId))).fetchCount());
+
+					return map;
+				}).collect(Collectors.toList());
+		
+		return new Result(true, "", CollectionUtils.newObjectMap("count", count, "listData", listData));
+	}
+
+	@Override
+	public int listCount(String text, String teacherId, String status,Integer type) {
+		StringBuffer hql = new StringBuffer("from Subject where name like ? and orgId=? and deleteFlag is false and origSubjectId is null ");
+		List<Object> args = CollectionUtils.newList(text + "%",ClientUtils.getOrgId());	
+		
+		if(type!=null){
+			hql.append(" and type=?");
+			args.add(type);
+		}
+		
+		if (StringUtils.isNotBlank(status)) {
+			hql = hql.append(" and status = ?");
+			args.add(status);
+		}
+
+		if (!StringUtils.isEmpty(teacherId)) {
+			hql.append(" and createId=?");
+			args.add(teacherId);
+		}
+
+		return findCount(hql.toString(), args);
+
+	}
+
+	@Override
+	public Subject read(String subjectId) {
+		return read(Subject.class, subjectId);
+	}
+
+	@Override
+	public String readSubjectContent(String subjectId) {
+
+		Subject sub = read(subjectId);
+		
+		//读取原课程
+		if(StringUtils.isNotBlank(sub.getOrigSubjectId())) {
+			sub = read(sub.getOrigSubjectId());
+		}
+
+		try {
+			if(!StringUtils.isEmpty(sub.getContentFileId())){
+				return IOUtils.toString(fileService.readStreamById(sub.getContentFileId()));
+			}
+		} catch (Exception e) {
+			log.error(e, e);
+		}
+		return null;
+
+	}
+
+	@Override
+	public Result doRelease(String[] subjectIds) {
+		for (String subjectId : subjectIds) {
+			releaseSubject(subjectId);
+		}
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public Result doCancel(String[] subjectIds) {
+		for (String subjectId : subjectIds) {
+			cancelSubject(subjectId);
+		}
+
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 发布单个课程
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @return
+	 */
+	private Result releaseSubject(String subjectId) {
+
+		Subject subject = read(Subject.class, subjectId);
+
+		TraceUtils.setUpdateTrace(subject);
+		subject.setStatus(Subject.STATUS_ISSUED);
+
+		save(subject);
+		
+		//更新所有关联的课程
+		this.bulkUpdate("update Subject set status='" + Subject.STATUS_ISSUED + "' where origSubjectId=? and deleteFlag is false ",new Object[]{subjectId});
+		
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 发布单个课程
+	 * 
+	 * @param chapterId
+	 *            章节id
+	 * @return
+	 */
+	private Result cancelSubject(String subjectId) {
+
+		Subject subject = read(Subject.class, subjectId);
+
+		TraceUtils.setUpdateTrace(subject);
+		subject.setStatus(Subject.STATUS_OFFLINE);
+
+		save(subject);
+		
+		//更新所有关联的课程
+		this.bulkUpdate("update Subject set status='" + Subject.STATUS_OFFLINE + "' where origSubjectId=? and deleteFlag is false ",new Object[]{subjectId});
+
+		return new Result(true, "success");
+	}
+
+	@Override
+	public List<MySubjectV> listMySubjectV(String classId,String userId) {
+		StringBuffer hql = new StringBuffer("from MySubjectV p where p.id.userId=? and p.subjectStatus=?");
+//		UserInfoWrapper wrapper=new UserInfoWrapper();
+//		System.out.println("cc"+ClientUtils.getUserInfo().getInfo(wrapper.INF_CLASS_ID));
+//		System.out.println("1-"+ClientUtils.getUserId()+"2-"+Subject.STATUS_ISSUED+"aaaaaa"+userId);
+		List<Object> args = CollectionUtils.newList(userId,Subject.STATUS_ISSUED);
+
+		if (!StringUtils.isEmpty(classId)) {
+			hql.append(" and p.id.classId = ?");
+			args.add(classId);
+
+		}
+		List<MySubjectV> result = find(hql.toString(), args, MySubjectV.class);
+
+		return result;
+	}
+
+	@Override
+	public List<Map<String, Object>> listChapterStudyProgress(String subjectId) {
+
+		QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+    	
+    	List<Map<String, Object>> lstResult = this.getQueryFactory().selectFrom(qSubjectProgressTreeV).
+    			where(qSubjectProgressTreeV.parentId.eq(subjectId).and(qSubjectProgressTreeV.id.userId.eq(ClientUtils.getUserId())))
+    			.fetch().stream().map(objSubjectProgressTreeV ->{
+    				Map<String, Object> map = new HashMap<>();
+    				map.put("chapterName", objSubjectProgressTreeV.getNodeName());
+    				map.put("chapterId", objSubjectProgressTreeV.getId().getNodeId());
+    				map.put("percent", objSubjectProgressTreeV.getPercent());
+    				map.put("studyTime", objSubjectProgressTreeV.getProgressValue());
+    				
+    				return map;
+    			}).collect(Collectors.toList());
+    	
+		return lstResult;
+	}
+
+	@Override
+	public MySubjectV getMy1stSubjectVById(String subjectId) {
+		String hql = "from MySubjectV p where p.id.userId=? and p.id.subjectId=?";
+
+		MySubjectV result = findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId(), subjectId),
+				MySubjectV.class);
+
+		return result;
+	}
+
+	@Override
+	public Result addLectureCount(String subjectId, int count) {
+
+		subjectDAO.addLectureCount(subjectId, count);
+
+		return new Result(true);
+	}
+
+	@Override
+	public Subject readSubject(String subjectId) {
+
+		return read(Subject.class, subjectId);
+	}
+
+	@Override
+	public Result addClsSubject(String classId,String origSubjectId, String teacherId, Integer schoolYear,Integer term) throws IllegalAccessException, InvocationTargetException {
+		//新增老师课程
+		Subject newSubject = new Subject();
+		Subject origSubject = this.read(origSubjectId);
+		UserTeacher teacher = this.read(UserTeacher.class, teacherId);
+		BeanUtils.copyProperties(newSubject,origSubject);
+		
+		TraceUtils.setCreateTrace(newSubject);
+		newSubject.setSubjectId(null);
+		newSubject.setTeacherId(teacherId);
+		newSubject.setSchoolYear(schoolYear);
+		newSubject.setTerm(term);
+		newSubject.setStatus(origSubject.getStatus());
+		newSubject.setOrigSubjectId(origSubjectId);
+		newSubject.setOrigCopySubjectId(origSubjectId);
+		newSubject.setType(Subject.TYPE_CLS_SUBJECT);
+		newSubject.setTeacherName(teacher.getName());
+		newSubject.setOrgId(ClientUtils.getOrgId());
+		save(newSubject);
+		
+		//添加班级课程关系
+		addClassReSubject(newSubject.getSubjectId(),classId);
+		
+		//复制课件
+		clsLectureService.doCopyLecturesToClass(origSubjectId,newSubject.getSubjectId(),classId);
+		
+		return new Result(true, "success",CollectionUtils.newStringMap("subjectId",newSubject.getSubjectId()));
+	}
+	
+    private void addClassReSubject(String subjectId, String classId) {
+        ClsClassReSubject re = new ClsClassReSubject();
+        TraceUtils.setCreateTrace(re);
+        re.setClassId(classId);
+        re.setSubjectId(subjectId);
+        save(re);
+    }	
+
+	@Override
+	public Result updateClsSubject(String classId,String subjectId,String origSubjectId, String teacherId, Integer schoolYear,Integer term) {
+		Subject origSubject = this.read(origSubjectId);
+		Subject subject = this.read(subjectId);
+		UserTeacher teacher = this.read(UserTeacher.class, teacherId);
+		
+		//如果原课程做出了修改
+		if(!origSubjectId.equals(subject.getOrigSubjectId())){
+			subject.setContentFileId(origSubject.getCoverPageFileId());
+			subject.setCoverPageUrl(origSubject.getCoverPageUrl());
+			subject.setContentFileId(origSubject.getContentFileId());
+			subject.setName(origSubject.getName());
+			subject.setOrigSubjectId(origSubjectId);
+			subject.setOrigCopySubjectId(origSubjectId);
+			
+			//清理并复制原课程
+			clsLectureService.doClearLecturesToClass(classId,subjectId);
+			clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId);
+		}
+		
+		TraceUtils.setUpdateTrace(subject);
+		subject.setTeacherId(teacherId);
+		subject.setTeacherName(teacher.getName());
+		subject.setSchoolYear(schoolYear);
+		subject.setTerm(term);
+		
+		save(subject);
+		return new Result(true, "success");
+	}
+	
+	@Override
+	public Result deleteClsSubject(String classId,String[] subjectIds) {
+		Map<String,Object> paramMap = new HashMap<String,Object>();
+		paramMap.put("classId", classId);
+		paramMap.put("subjectIds", subjectIds);
+		
+		List<String>  reIdLst =  this.findByComplexHql("select r.clsReSubjectId from ClsClassReSubject r where r.deleteFlag is false and r.classId=:classId and r.subjectId in (:subjectIds) ",
+					paramMap, String.class);
+		
+		//删除关联关系
+		if(reIdLst!=null && reIdLst.size()>0){
+			this.bulkUpdateInLoop("update ClsClassReSubject set deleteFlag = true where clsReSubjectId=?", reIdLst.toArray());
+		}
+		
+		this.delete(subjectIds);
+		return new Result(true, "success");
+	}
+
+	@Override
+	public Result getPerformance4Subject() {
+		String findCompleteCountByHql = "from MySubjectV where id.userId = ? and percent = 1 ";
+		String findUndoneByHql = "from MySubjectV where id.userId = ? and (percent != 1 or percent is null)";
+		String userId = ClientUtils.getUserId();
+		int CompleteCount = findCount(findCompleteCountByHql, CollectionUtils.newList(userId));
+		int UndoneCount = findCount(findUndoneByHql, CollectionUtils.newList(userId));
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("CompleteCount", CompleteCount, "UndoneCount", UndoneCount));
+	}
+
+	@Override
+	public Result lstSubjectDetail(String userId) {
+//		String userId = ClientUtils.getUserId();
+		StringBuffer hql = new StringBuffer(
+				"select percent as percent,className as className ,id.classId as classId ,id.subjectId as subjectId ,"
+						+ "subjectName as subjectName ,coverPageUrl as coverPageUrl , progressValue as progressValue from"
+						+ " MySubjectV p where p.id.userId =:userId and p.subjectStatus=:subjectStatus ");
+
+		Map<String, Object> args = CollectionUtils.newObjectMap("userId", userId,"subjectStatus",Subject.STATUS_ISSUED);
+
+		List<Map<String, Object>> subjectLstMap = findListWithMapByHql(hql.toString(), args);
+
+		for (Map<String, Object> subject : subjectLstMap) {
+
+			String classId = (String) subject.get("classId");
+			String subjectId = (String) subject.get("subjectId");
+			Map<String, Object> map = progressDao.getStudyById(userId, subjectId, classId);
+			subject.put("lectureParentId", map.get("lectureParentId"));
+			subject.put("lectureId", map.get("lectureId"));
+			subject.put("unCommitExerciseCount", exerciseInfoService.getUnCommitExerciseCount(classId, userId));
+			subject.put("toBeCommitExerciseCount", exerciseInfoService.getToBeCommitExerciseCount(classId, userId));
+			subject.put("CommitExerciseCount", exerciseInfoService.getCommitExerciseCount(classId, userId));
+			subject.put("exerciseCount", exerciseInfoService.getExerciseCount(classId, userId));
+			subject.put("examCount", examService.getExamCount(classId, userId));
+			subject.put("unCommitExamCount", examService.getUnCommitExamCount(classId, userId));
+			subject.put("commitExamCount", examService.getCommitExamCount(classId, userId));
+			subject.put("toBeCommitExamCount", examService.getToBeCommitExamCount(classId, userId));
+
+		}
+		return new Result(true, "success", subjectLstMap);
+	}
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	@Override
+	public Result getDataDesc(String classId, String subjectId) {
+		if(StringUtils.isEmpty(classId)) {
+			return new Result(false, "班级id参数错误");
+		}
+		QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+
+		List<Map<String, Object>> percentDesc = this.percentDesc(classId, subjectId, new OrderSpecifier(Order.DESC, qSubjectProgressTreeV.percent));
+
+		List<Map<String, Object>> studyTimeDesc = this.percentDesc(classId, subjectId, new OrderSpecifier(Order.DESC, qSubjectProgressTreeV.progressValue));
+
+		List<Map<String, Object>> exerciseInfoDesc = this.exerciseInfoDesc(classId, subjectId);
+
+		List<Map<String, Object>> examInfoDesc = this.examInfoDesc(classId, subjectId);
+
+		return new Result(true, "success", CollectionUtils.newObjectMap("percentDesc", percentDesc, "studyTimeDesc",
+				studyTimeDesc, "exerciseInfoDesc", exerciseInfoDesc, "examInfoDesc", examInfoDesc));
+	}
+
+	/**
+	 * 获取班级对应的学员 按进度进行排序
+	 */
+	private List<Map<String, Object>> percentDesc(String classId, String subjectId, @SuppressWarnings("rawtypes") OrderSpecifier order) {
+		QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+		QUser qUser = QUser.user;
+		String nodeId = StringUtils.isNotEmpty(subjectId)?subjectId:classId;
+		String nodeType = StringUtils.isNotEmpty(subjectId)?Progress.PROGRESS_TYPE_SUBJECT:Progress.PROGRESS_TYPE_CLASS;
+		
+		List<Map<String, Object>> lstMap = this.getQueryFactory().select(qSubjectProgressTreeV.progressValue,
+				qSubjectProgressTreeV.percent, qUser.name, qUser.userId,qSubjectProgressTreeV.id.nodeId).from(qSubjectProgressTreeV, qUser).
+				where(qSubjectProgressTreeV.id.userId.eq(qUser.userId).and(qSubjectProgressTreeV.nodeType.eq(nodeType))
+						.and(qSubjectProgressTreeV.id.nodeId.eq(nodeId))).orderBy(order).fetch().stream().map(tuple -> {
+							Map<String, Object> map = new HashMap<>();
+							map.put("userName", tuple.get(qUser.name));
+							map.put("userId", tuple.get(qUser.userId));
+							map.put("classId", tuple.get(qSubjectProgressTreeV.id.nodeId));
+							map.put("percent", tuple.get(qSubjectProgressTreeV.percent));
+							map.put("progressValue", tuple.get(qSubjectProgressTreeV.progressValue));
+							return map;
+						}).collect(Collectors.toList());
+		return lstMap;
+	}
+
+	/**
+	 * 通过作业完成个数排序
+	 *
+	 */
+	private List<Map<String, Object>> exerciseInfoDesc(String classId, String subjectId) {
+		QExerciseResultV qExerciseResultV = QExerciseResultV.exerciseResultV;
+		//查询条件
+		Predicate predicate = StringUtils.isEmpty(subjectId)?qExerciseResultV.id.classId.eq(classId):
+			qExerciseResultV.id.classId.eq(classId).and(qExerciseResultV.subjectId.eq(subjectId));
+		//case数量判断
+		NumberExpression<BigDecimal> caseCount = new CaseBuilder()
+		.when(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
+				.or(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
+		.then(BigDecimal.ONE).otherwise(BigDecimal.ZERO).sum();
+		
+		//case分数
+		NumberExpression<BigDecimal> caseScoreSum = new CaseBuilder()
+				.when(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
+						.or(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
+				.then(qExerciseResultV.score).otherwise(BigDecimal.ZERO).sum();
+		
+		List<Map<String, Object>> lstMap = this.getQueryFactory().select(qExerciseResultV.userId,qExerciseResultV.studentName,
+				caseScoreSum.divide(caseCount), qExerciseResultV.count(), caseCount).from(qExerciseResultV).where(predicate).
+				groupBy(qExerciseResultV.userId).
+				orderBy(caseScoreSum.divide(caseCount).desc()).fetch().stream().map(tuple ->{
+					Map<String, Object> map = new HashMap<>();
+					map.put("userId", tuple.get(qExerciseResultV.userId));
+					map.put("userName", tuple.get(qExerciseResultV.studentName));
+					map.put("avgScore", tuple.get(2, BigDecimal.class));
+					map.put("exerciseCount",tuple.get(3, BigDecimal.class));
+					map.put("commitExerciseCount", tuple.get(4, BigDecimal.class));
+					
+					return map;
+				}).collect(Collectors.toList());
+		
+		return lstMap;
+
+	}
+
+	/**
+	 * 
+	 */
+	private List<Map<String, Object>> examInfoDesc(String classId, String subjectId) {
+		
+		QExamResultV qExamResultV = QExamResultV.examResultV;
+		//查询条件
+		Predicate predicate = StringUtils.isEmpty(subjectId)?qExamResultV.id.classId.eq(classId):
+			qExamResultV.id.classId.eq(classId).and(qExamResultV.subjectId.eq(subjectId));
+		//case判断
+		NumberExpression<BigDecimal> caseCount = new CaseBuilder()
+			    .when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(BigDecimal.ONE).sum();
+		//case分数
+		NumberExpression<BigDecimal> caseScoreSum = new CaseBuilder()
+				.when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(qExamResultV.score).sum();
+		
+		List<Map<String, Object>> lstMap = this.getQueryFactory().select(qExamResultV.userId,qExamResultV.studentName,
+				caseScoreSum.divide(caseCount), qExamResultV.count(), caseCount).from(qExamResultV).where(predicate).
+				groupBy(qExamResultV.userId).
+				orderBy(caseScoreSum.divide(caseCount).desc()).fetch().stream().map(tuple ->{
+					Map<String, Object> map = new HashMap<>();
+					map.put("userId", tuple.get(qExamResultV.userId));
+					map.put("userName", tuple.get(qExamResultV.studentName));
+					map.put("avgScore", tuple.get(2, BigDecimal.class));
+					map.put("examCount",tuple.get(3, BigDecimal.class));
+					map.put("commitExamCount", tuple.get(4, BigDecimal.class));
+					
+					return map;
+				}).collect(Collectors.toList());
+		return lstMap;
+
+	}
+
+	@Override
+	public Result lastStudied(String userId) {
+		Map<String, Object> map = progressDao.getStudyByUserId(userId);
+		String subjectId = (String) map.get("subjectId");
+		Subject subject = read(Subject.class, subjectId);
+		if (subject != null) {
+			map.put("subjectName", subject.getName());
+		}
+		return new Result(true, "success", map);
+	}
+	
+	@Override
+	public List<Map<String,Object>> queryAvailableSubjectIdAndName(String teacherId,Integer subjectType){
+		List<Map<String,Object>> result = null;
+		
+		if(subjectType==Subject.TYPE_PUBLIC_SUBJECT){
+			result =  this.findListWithMapByHql(
+					"select subjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_PUBLIC_SUBJECT + " and orgId='" + ClientUtils.getOrgId() + "'" , null);
+		}else{
+			if(StringUtils.isNotEmpty(teacherId)){
+				 result =  this.findListWithMapByHql(
+							"select distinct origSubjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_CLS_SUBJECT + " and teacherId='" + teacherId + "'", null);
+			}else{
+				 result =  this.findListWithMapByHql(
+							"select subjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_ORG_SUBJECT + " and orgId='" + ClientUtils.getOrgId() + "'", null);
+			}
+		}
+		
+		return result; 
+	}
+
+	@Override
+	public List<Map<String, Object>> getMySubjectList() {
+		String sql = "SELECT o.CLASS_ID, a.`NAME` AS subjectName, a.SUBJECT_ID, o.`NAME` AS className FROM ( ( SELECT "
+				+ "c.CLASS_ID, c.`NAME` FROM stu_student s, cls_class c WHERE s.CLASS_ID = c.CLASS_ID AND s.USER_ID =:userId"
+				+ " ) o LEFT JOIN ( SELECT r.class_id,s.SUBJECT_ID, s.`NAME` FROM `subject` s, cls_class_re_subject r WHERE "
+				+ "s.SUBJECT_ID = r.subject_id ) a ON o.CLASS_ID = a.class_id ) ";
+		List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()),
+				Object[].class);
+		List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(list.size());
+		Map<String, Object> map = null;
+		for (Object[] objects : list) {
+			map = new HashMap<String, Object>(objects.length);
+			map.put("classId", objects[0]);
+			map.put("subjectName", objects[1]);
+			map.put("subjectId", objects[2]);
+			map.put("className", objects[3]);
+			lstMap.add(map);
+		}
+		return lstMap;
+	}
+
+	
+	@Override
+	public List<Map<String,Object>> clsSubjectlist(String classId, Integer schoolYear, Integer term) {
+		QSubject qSubject = QSubject.subject;
+		QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
+		
+		QueryDslOptionBuilder builder = new QueryDslOptionBuilder().
+				and(qSubject.deleteFlag::eq, false)
+				.and(qClsClassReSubject.classId::eq, classId)
+				.and(qClsClassReSubject.subjectId::eq, qSubject.subjectId)
+				.and(qClsClassReSubject.deleteFlag::eq, false).and(qSubject.status::eq, Subject.STATUS_ISSUED);
+		if(schoolYear != null && schoolYear != 0){//学年
+			builder = builder.and(qSubject.schoolYear::eq, schoolYear);
+		}
+		if(term != null && term != 0){//学期
+			builder = builder.and(qSubject.term::eq, term);
+		}
+		
+		return this.getQueryFactory().select(qSubject.name,qSubject.origSubjectId,qSubject.subjectId,qSubject.schoolYear, qSubject.term).distinct()
+			    .from(qSubject, qClsClassReSubject)
+			    .where(builder.build())
+			    .orderBy(qSubject.createTime.desc())
+			    .fetch().stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(2);
+			    	map.put("name", tuple.get(qSubject.name));
+			    	map.put("subjectId",  tuple.get(qSubject.subjectId));
+			    	map.put("schoolYear",  tuple.get(qSubject.schoolYear));
+			    	map.put("term",  tuple.get(qSubject.term));
+			    	map.put("origSubjectId",  tuple.get(qSubject.origSubjectId));
+			    	return map;
+			    }).collect(Collectors.toList());
+	}
+	
+	@Override
+	public List<Map<String,Object>> termList(String classId) {
+		QSubject qSubject = QSubject.subject;
+		QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
+		
+		QueryDslOptionBuilder builder = new QueryDslOptionBuilder().
+				and(qSubject.deleteFlag::eq, false)
+				.and(qClsClassReSubject.classId::eq, classId)
+				.and(qClsClassReSubject.subjectId::eq, qSubject.subjectId)
+				.and(qClsClassReSubject.deleteFlag::eq, false).and(qSubject.status::eq, Subject.STATUS_ISSUED);
+		
+		return this.getQueryFactory().select(qSubject.schoolYear.as("schoolYear"),qSubject.term.as("term"))
+			    .from(qSubject, qClsClassReSubject)
+			    .where(builder.build().and(qSubject.schoolYear.isNotNull())
+			    		.and(qSubject.term.isNotNull())).groupBy(qSubject.schoolYear, qSubject.term)
+			    .orderBy(qSubject.schoolYear.desc(), qSubject.term.desc())
+			    .fetch().stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(2);
+			    	map.put("schoolYear", tuple.get(0, Integer.class));
+			    	map.put("term",  tuple.get(1, Integer.class));
+			    	return map;
+			    }).collect(Collectors.toList());
+	}
+	
+	/**
+	 * 我的班级信息
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public Map<String,Object> myClassInfo(String classId){
+		ClsClass objClsClass = this.read(ClsClass.class, classId);
+		QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+		
+		List<Subject> lstSubject = objClsClass.getSubjects();
+		
+		//过滤掉状态为草稿的
+		List<String> teachers = lstSubject.stream().filter(u->u.getStatus().equals(Subject.STATUS_ISSUED)).map(tuple -> {
+			return tuple.getTeacherName();
+		}).collect(Collectors.toList());
+		
+		SubjectProgressTreeV objSubjectProgressTreeV = this.getQueryFactory().selectFrom(qSubjectProgressTreeV)
+				.where(qSubjectProgressTreeV.id.nodeId.eq(classId).and(qSubjectProgressTreeV.id.userId.eq(ClientUtils.getUserId())).and(qSubjectProgressTreeV.nodeType.eq("class"))).fetchOne();
+		
+		if(objSubjectProgressTreeV != null) {
+			
+			long allCount = this.getQueryFactory().selectFrom(qSubjectProgressTreeV)
+					.where(qSubjectProgressTreeV.id.nodeId.eq(classId)).fetchCount();
+			
+			long lgCount = this.getQueryFactory().selectFrom(qSubjectProgressTreeV)
+					.where(qSubjectProgressTreeV.id.nodeId.eq(classId).and(qSubjectProgressTreeV.percent.gt(objSubjectProgressTreeV.getPercent()))).fetchCount();
+			//排行
+			float rank = (allCount-lgCount)/allCount;
+			
+			return CollectionUtils.newObjectMap("className", objClsClass.getName(), "progressPercent",
+					objSubjectProgressTreeV.getPercent(), "progressValue", objSubjectProgressTreeV.getProgressValue(), "rank", rank, "teacherName", teachers);
+		}else {
+			return CollectionUtils.newObjectMap("className", objClsClass.getName(), "percent",
+					0, "progressValue", 0, "rank", 0, teachers);
+		}
+	}
+	
+	/**
+	 * 获取我的课程进度
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> myClsSubjectlist(String classId, String userId,  Pager pager){
+		String teacherId = this.teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+		QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
+		
+		Predicate predicate = null;
+		if(StringUtils.isNotEmpty(teacherId)) {
+			predicate = qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(userId)).and(qMySubjectV.teacherId.eq(teacherId).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)));
+		}else {
+			predicate = qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(userId).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)));
+		}
+		return this.getQueryFactory().select(qMySubjectV.id.subjectId,
+				qMySubjectV.subjectName,qMySubjectV.term,
+				qMySubjectV.schoolYear,qMySubjectV.percent, qMySubjectV.coverPageUrl,qMySubjectV.origSubjectId)
+			    .from(qMySubjectV)
+			    .where(predicate)
+			    .orderBy(qMySubjectV.schoolYear.desc(),qMySubjectV.term.desc())
+			    .limit(pager.getPageSize()).offset(pager.getOffset())
+			    .fetch().stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(5);
+			    	map.put("name", tuple.get(qMySubjectV.subjectName));
+			    	map.put("origSubjectId",  tuple.get(qMySubjectV.origSubjectId));
+			    	map.put("subjectId",  tuple.get(qMySubjectV.id.subjectId));
+			    	map.put("progressPercent",  tuple.get(qMySubjectV.percent));
+			    	map.put("schoolYear",  tuple.get(qMySubjectV.schoolYear));
+			    	map.put("term",  tuple.get(qMySubjectV.term));
+			    	map.put("coverPageUrl",  tuple.get(qMySubjectV.coverPageUrl));
+			    	return map;
+			    }).collect(Collectors.toList());
+	}
+	
+	/**
+	 * 获取我的课程数量
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public long myClsSubjectCount(String classId){
+		QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
+		
+		return this.getQueryFactory().select(qMySubjectV.id.subjectId,
+				qMySubjectV.subjectName,qMySubjectV.term,
+				qMySubjectV.schoolYear,qMySubjectV.percent)
+			    .from(qMySubjectV)
+			    .where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(ClientUtils.getUserId())).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)))
+			    .fetchCount();
+	}
+	
+	/**
+	 * 获取学员的课程进度
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> studentSubjectProgress(String classId, Pager pager){
+		String teacherId = this.teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
+		QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+		
+		QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
+		return this.getQueryFactory().select(qMySubjectV.id.subjectId,
+				qMySubjectV.subjectName,qMySubjectV.term,qMySubjectV.coverPageUrl,
+				qMySubjectV.schoolYear,qMySubjectV.lectureCount, qMySubjectV.percent.avg().as(qMySubjectV.percent))
+			    .from(qMySubjectV)
+			    .where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.teacherId.eq(teacherId)))
+			    .groupBy(qMySubjectV.id.subjectId)
+			    .orderBy(qMySubjectV.schoolYear.desc(),qMySubjectV.term.desc())
+			    .limit(pager.getPageSize()).offset(pager.getOffset())
+			    .fetch().stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(5);
+			    	map.put("name", tuple.get(qMySubjectV.subjectName));
+			    	map.put("subjectId",  tuple.get(qMySubjectV.id.subjectId));
+			    	map.put("schoolYear",  tuple.get(qMySubjectV.schoolYear));
+			    	map.put("term",  tuple.get(qMySubjectV.term));
+			    	map.put("progressPercent",
+							this.getQueryFactory().select(qSubjectProgressTreeV.percent.avg())
+									.from(qSubjectProgressTreeV)
+									.where(qSubjectProgressTreeV.id.nodeId.eq(tuple.get(qMySubjectV.id.subjectId))
+											.and(qSubjectProgressTreeV.nodeType.eq(Progress.PROGRESS_TYPE_SUBJECT)))
+									.groupBy(qSubjectProgressTreeV.id.nodeId).fetchOne());
+			    	
+			    	map.put("coverPageUrl",  tuple.get(qMySubjectV.coverPageUrl));
+			    	map.put("lectureCount",  this.getLectureCount(tuple.get(qMySubjectV.id.subjectId)));
+			    	return map;
+			    }).collect(Collectors.toList());
+	}
+	
+	/**
+	 * 获取课件数量
+	 * 
+	 * @param subjectId
+	 * @return
+	 */
+	public long getLectureCount(String subjectId) {
+		
+		Subject subject = this.read(subjectId);
+		if(subject == null) {
+			return 0l;
+		}
+		if(subject.getType() == Subject.TYPE_CLS_SUBJECT) {//班级课程
+
+			QClsSubjectLecture qSubjectLecture = QClsSubjectLecture.clsSubjectLecture;
+			
+			return this.getQueryFactory().selectFrom(qSubjectLecture).where(qSubjectLecture.deleteFlag.isFalse()
+	    			.and(qSubjectLecture.subjectId.eq(subjectId)).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT))).fetchCount();
+		}else {
+
+			QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+			
+			return this.getQueryFactory().selectFrom(qSubjectLecture).where(qSubjectLecture.deleteFlag.isFalse()
+	    			.and(qSubjectLecture.subjectId.eq(subjectId)).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT))).fetchCount();
+		}
+	}
+		
+	
+	/**
+	 * 我的公开课列表
+	 * 
+	 * @param pageNum
+	 * @param pageSize
+	 * @param keyword
+	 * @return
+	 */
+	public Map<String,Object> myOpenSubjectList(Integer pageNum, Integer pageSize, String keyword){
+		QSubject qSubject = QSubject.subject;
+		QProgress qProgress = QProgress.progress;
+		QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+		
+		JPAQuery<Tuple> query = this.getQueryFactory()
+				.select(qSubject.subjectId, qSubject.name, qSubject.term,qSubject.coverPageUrl, qSubject.schoolYear,
+						qProgress.progressPercent.avg().as(qProgress.progressPercent), qProgress.progressValue.sum().as(qProgress.progressValue))
+				.from(qSubject, qProgress, qSubjectLecture )
+				.where(qSubject.deleteFlag.isFalse().and(qSubjectLecture.subjectId.eq(qSubject.subjectId))
+						.and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.lectureId.eq(qProgress.targetId))
+						.and(qProgress.learnerId.eq(ClientUtils.getUserId()))
+						.and(qSubject.name.like("%" + keyword + "%").and(qProgress.deleteFlag.isFalse()))
+						.and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE)).and(qSubject.status.eq(Subject.STATUS_ISSUED))).groupBy(qSubject.subjectId);
+		
+		long count = query.fetchCount();
+		List<Map<String, Object>> listData = query.orderBy(qProgress.createTime.desc()).limit(pageSize).offset(pageNum).fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(7);
+					String subjectId = tuple.get(qSubject.subjectId);
+					
+					map.put("name", tuple.get(qSubject.name));
+					map.put("subjectId", subjectId);
+					map.put("schoolYear", tuple.get(qSubject.schoolYear));
+					map.put("term", tuple.get(qSubject.term));
+					map.put("coverPageUrl", tuple.get(qSubject.coverPageUrl));
+					map.put("progressPercent", tuple.get(qProgress.progressPercent));
+					map.put("progressValue", tuple.get(qProgress.progressValue));
+
+					Map<String,Object> openSubjectDetail = this.openSubjectDetail(subjectId);
+					
+					// 直播数量
+					map.put("mediaVideoLiveCount",openSubjectDetail.get("mediaVideoLiveCount"));
+
+					// 课件数量
+					map.put("subjectLectureCount",openSubjectDetail.get("subjectLectureCount"));
+					
+					//学习人次
+					map.put("studyCount",openSubjectDetail.get("studyCount"));
+					
+					map.put("content",openSubjectDetail.get("content"));
+
+					// 已观看完成课件数量
+					map.put("subjectLectureDoCount",openSubjectDetail.get("subjectLectureDoCount"));
+
+					return map;
+				}).collect(Collectors.toList());
+		
+		return CollectionUtils.newObjectMap("count", count, "listData", listData);
+	}
+	
+	/**
+	 * 课程统计详情
+	 * 
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String,Object> openSubjectDetail(String subjectId){
+		Map<String, Object> map = new HashMap<String, Object>();
+		QMediaVideoLive qMediaVideoLive = QMediaVideoLive.mediaVideoLive;
+		QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+		QProgress qProgress = QProgress.progress;
+		
+		// 直播数量
+		map.put("mediaVideoLiveCount",
+				this.getQueryFactory().select(qMediaVideoLive).from(qMediaVideoLive)
+						.where(qMediaVideoLive.deleteFlag.isFalse()
+								.and(qMediaVideoLive.status.gt(0))
+								.and(qMediaVideoLive.subjectId.eq(subjectId)))
+						.fetchCount());
+
+		// 课件数量
+		map.put("subjectLectureCount",
+				this.getQueryFactory().select(qSubjectLecture).from(qSubjectLecture)
+						.where(qSubjectLecture.deleteFlag.isFalse()
+								.and(qSubjectLecture.subjectId.eq(subjectId)).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT)))
+						.fetchCount());
+		
+		//学习人次
+		map.put("studyCount",
+				this.getQueryFactory().selectDistinct(qProgress.learnerId).from(qProgress, qSubjectLecture)
+						.where(qProgress.deleteFlag.isFalse().and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.subjectId.eq(subjectId)).and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))
+								.and(qProgress.targetId.eq(qSubjectLecture.lectureId)))
+						.fetchCount());
+		
+		map.put("content", this.readSubjectContent(subjectId));
+
+		// 已观看完成课件数量
+		map.put("subjectLectureDoCount",
+				this.getQueryFactory().select(qSubjectLecture).from(qSubjectLecture, qProgress)
+						.where(qSubjectLecture.deleteFlag.isFalse().and(qProgress.deleteFlag.isFalse())
+								.and(qProgress.learnerId.eq(ClientUtils.getUserId())).and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))
+								.and(qProgress.progressPercent.gt(0.95)).and(qProgress.targetId.eq(qSubjectLecture.lectureId))
+								.and(qSubjectLecture.subjectId.eq(subjectId)))
+						.fetchCount());
+		
+		return map;
+	}
+	
+	/**
+	 * 公开课详情
+	 * 
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String,Object> openSubjectInfo(String subjectId){
+		QProgress qProgress = QProgress.progress;
+		QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+		
+		Subject objSubject = this.read(subjectId);
+		
+		Tuple progress = this.getQueryFactory()
+				.select(qProgress.progressPercent.sum().as(qProgress.progressPercent), qProgress.progressValue.sum().as(qProgress.progressValue)).from(qProgress,qSubjectLecture).where(qProgress.learnerId.eq(ClientUtils.getUserId())
+								.and(qProgress.targetId.eq(qSubjectLecture.lectureId))
+						.and(qProgress.deleteFlag.isFalse()).and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.subjectId.eq(subjectId))
+						.and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))).fetchOne();
+		
+		Map<String, Object> subjectInfo = new HashMap<String, Object>(7);
+		
+		subjectInfo.put("name", objSubject.getName());
+		subjectInfo.put("subjectId", subjectId);
+		subjectInfo.put("schoolYear", objSubject.getSchoolYear());
+		subjectInfo.put("term", objSubject.getTerm());
+		subjectInfo.put("coverPageUrl", objSubject.getCoverPageUrl());
+		subjectInfo.put("teacherName", objSubject.getTeacherName());
+		
+
+		Map<String,Object> openSubjectDetail = this.openSubjectDetail(subjectId);
+		
+		Map<String, Object> map = new HashMap<String, Object>(7);
+		
+		// 直播数量
+		map.put("mediaVideoLiveCount",openSubjectDetail.get("mediaVideoLiveCount"));
+
+		// 课件数量
+		map.put("subjectLectureCount",openSubjectDetail.get("subjectLectureCount"));
+		
+		//学习人次
+		map.put("studyCount",openSubjectDetail.get("studyCount"));
+		
+		subjectInfo.put("content",openSubjectDetail.get("content"));
+
+		// 已观看完成课件数量
+		map.put("subjectLectureDoCount",openSubjectDetail.get("subjectLectureDoCount"));
+		
+		map.put("subjectInfo", subjectInfo);
+		
+		if(openSubjectDetail.get("subjectLectureCount") == null || progress == null || progress.get(qProgress.progressPercent) == null) {
+			subjectInfo.put("progressPercent", 0);
+		}else {
+			subjectInfo.put("progressPercent", progress.get(qProgress.progressPercent).floatValue()/(Long)openSubjectDetail.get("subjectLectureCount"));
+		}
+		subjectInfo.put("progressValue", progress == null?0:progress.get(qProgress.progressValue));
+
+		return map;
+	}
+
+	@Override
+	public Map<String, Object> mySubjectInfo(String subjectId, String classId) {
+		QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
+		QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+		// 课程
+		Tuple tuple = this.getQueryFactory()
+				.select(qMySubjectV.id.subjectId, qMySubjectV.subjectName, qMySubjectV.term, qMySubjectV.schoolYear,qMySubjectV.origSubjectId,
+						qMySubjectV.percent,qMySubjectV.coverPageUrl, qMySubjectV.progressValue)
+				.from(qMySubjectV)
+				.where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(ClientUtils.getUserId()))
+						.and(qMySubjectV.id.subjectId.eq(subjectId)))
+				.fetchOne();
+
+		Subject objSubject = this.read(subjectId);
+
+		Map<String, Object> subject = new HashMap<String, Object>(5);
+		subject.put("name", objSubject.getName());
+		subject.put("subjectId", subjectId);
+		subject.put("origSubjectId", objSubject.getOrigSubjectId());
+		subject.put("schoolYear", objSubject.getSchoolYear());
+		subject.put("term", objSubject.getTerm());
+		subject.put("coverPageUrl", objSubject.getCoverPageUrl());
+		subject.put("content", this.readSubjectContent(subjectId));
+		subject.put("teacherName", objSubject.getTeacherName());
+		if(tuple == null) {
+			subject.put("progressPercent", 0);
+			subject.put("progressValue", 0);
+		}else {
+			subject.put("progressPercent", tuple.get(qMySubjectV.percent));
+			subject.put("progressValue", tuple.get(qMySubjectV.progressValue));
+		}
+
+		String origSubjectId = objSubject.getOrigSubjectId();
+
+		// 考试统计
+		long examsCount = this.examService.listStudentExamCount("", new String[] {classId}, origSubjectId, null);
+
+		// 作业统计
+		long homeworksCount = exerciseInfoService.queryStuExerciseListCount("", null, ClientUtils.getUserId(), origSubjectId, null);
+
+		// 课件统计
+		Tuple tupleLecture = this.getQueryFactory().select(qMyLectureV.count(),
+				new CaseBuilder().when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).// 大于95%算完成
+				from(qMyLectureV)
+				.where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
+						.and(qMyLectureV.subjectId.eq(subjectId)))
+				.groupBy(qMyLectureV.subjectId).fetchOne();
+
+		long mediaVideoLivesCount = this.mediaLiveService.listCount("", new String[] {classId}, origSubjectId, null);
+
+		return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
+				"homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
+				tupleLecture == null?0:tupleLecture.get(0, Long.class),
+				"completeLectureCount", tupleLecture == null?0:tupleLecture.get(1,Integer.class));
+	}
+
+	/**
+	 * 公开课列表
+	 * 
+	 * @param pageNum
+	 * @param pageSize
+	 * @param keyword
+	 * @return
+	 */
+	public Map<String,Object> openSubjectList(Integer pageNum, Integer pageSize, String keyword){
+		QOpenSubjectV qOpenSubjectV = QOpenSubjectV.openSubjectV;
+		
+		JPAQuery<OpenSubjectV> query = this.getQueryFactory().selectFrom(qOpenSubjectV).where(qOpenSubjectV.subjectName.like("%" + keyword + "%"));
+
+		long count = query.fetchCount();
+
+		List<Map<String, Object>> listData = query.orderBy(qOpenSubjectV.mediaVideoCount.desc(),
+				qOpenSubjectV.learnerCount.desc(), qOpenSubjectV.createTime.desc()).limit(pageSize).offset(pageNum)
+				.fetch().stream().map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(8);
+
+					map.put("name", tuple.getSubjectName());
+					map.put("subjectId", tuple.getSubjectId());
+					map.put("schoolYear", tuple.getSchoolYear());
+					map.put("term", tuple.getTerm());
+					map.put("coverPageUrl", tuple.getCoverPageUrl());
+					map.put("mediaVideoCount", tuple.getMediaVideoCount());
+					map.put("learnerCount", tuple.getLearnerCount());
+					map.put("createTime", tuple.getCreateTime());
+
+					return map;
+				}).collect(Collectors.toList());
+		
+		return CollectionUtils.newObjectMap("count", count, "listData", listData);
+	}
+	
+	/**
+	 * 班级学员课件总体进度
+	 * 
+	 * @param subjectId
+	 * @param classId
+	 * @return
+	 */
+	@Override
+    public List<Map<String, Object>> studentSubjectLectureProgress(String subjectId, String classId) {
+    	QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+		return this.getQueryFactory()
+				.select(qMyLectureV.lectureName, qMyLectureV.id.lectureId, qMyLectureV.lectureType,
+						qMyLectureV.chapterId, qMyLectureV.subjectId, qMyLectureV.lectureCreateTime,
+						qMyLectureV.percent.avg().as(qMyLectureV.percent))
+				.from(qMyLectureV).where(qMyLectureV.classId.eq(classId).and(qMyLectureV.subjectId.eq(subjectId)))
+				.groupBy(qMyLectureV.id.lectureId).orderBy(qMyLectureV.lectureCreateTime.desc()).fetch().stream()
+				.map(tuple -> {
+					Map<String, Object> map = new HashMap<String, Object>(6);
+					map.put("lectureName", tuple.get(qMyLectureV.lectureName));
+					map.put("lectureId", tuple.get(qMyLectureV.id.lectureId));
+					map.put("lectureType", tuple.get(qMyLectureV.lectureType));
+					map.put("chapterId", tuple.get(qMyLectureV.chapterId));
+					map.put("subjectId", tuple.get(qMyLectureV.subjectId));
+					map.put("progressPercent", tuple.get(qMyLectureV.percent));
+					map.put("createTime", tuple.get(qMyLectureV.lectureCreateTime));
+					return map;
+				}).collect(Collectors.toList());
+    }
+	
+	/**
+	 * 学员课程作业进度
+	 * 
+	 * @param classId
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String, Object> studentSubjectHomeworkProgress(String classId, String subjectId, String studentId){
+		QExerciseResultV qHomeworkScoreV = QExerciseResultV.exerciseResultV;
+
+		StuStudent student = read(StuStudent.class, studentId);
+		Subject subject = read(Subject.class, subjectId);
+
+		Tuple tuple = this.getQueryFactory()
+				.select(qHomeworkScoreV.subjectId, qHomeworkScoreV.count(),
+						new CaseBuilder()
+								.when(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
+										.or(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
+								.then(qHomeworkScoreV.studentScore).otherwise(BigDecimal.ZERO).sum(),
+						new CaseBuilder()
+								.when(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
+										.or(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
+								.then(1).otherwise(0).sum())
+				.from(qHomeworkScoreV)
+				.where(qHomeworkScoreV.subjectId.eq(subject.getOrigSubjectId())
+						.and(qHomeworkScoreV.userId.eq(student.getUserId()))
+						.and(qHomeworkScoreV.exerciseStatus.eq(ExerciseInfo.EXERCISE_STATUS_PUBLISHED)))
+				.groupBy(qHomeworkScoreV.userId).fetchOne();
+			
+		Map<String,Object> map = new HashMap<String,Object>(4);
+		if(tuple == null) {
+			map.put("subjectId", subjectId);
+			map.put("homeworkCount",  0);
+			map.put("avgScore",  "0");
+			map.put("commitHomeworkCount",  0);
+    	}else {
+    		int commitHomeworkCount = tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class);
+    		map.put("subjectId", subjectId);
+    		map.put("homeworkCount",  tuple.get(1, Integer.class) == null?0:tuple.get(1, Integer.class));
+    		map.put("avgScore",  String.valueOf(commitHomeworkCount == 0 || tuple.get(2, BigDecimal.class) == null?BigDecimal.ZERO:tuple.get(2, BigDecimal.class).divide(BigDecimal.valueOf(commitHomeworkCount), 2, BigDecimal.ROUND_HALF_UP)));
+    		map.put("commitHomeworkCount", commitHomeworkCount);
+    	}
+    	
+    	return map;
+	}
+	
+	/**
+	 * 学员考试作业进度
+	 * 
+	 * @param classId
+	 * @param subjectId
+	 * @return
+	 */
+	public Map<String, Object> studentSubjectExamProgress(String classId, String subjectId, String studentId){
+		QExamResultV qExamScoreV = QExamResultV.examResultV;
+
+		StuStudent student = read(StuStudent.class, studentId);
+		Subject subject = read(Subject.class, subjectId);
+		
+		Tuple tuple = this.getQueryFactory().select(qExamScoreV.subjectId, qExamScoreV.count(), new CaseBuilder()
+			    .when(qExamScoreV.status.eq("0")).then(BigDecimal.ZERO).otherwise(qExamScoreV.score).sum(), new CaseBuilder()
+			    .when(qExamScoreV.status.eq("0")).then(0).otherwise(1).sum()).
+				from(qExamScoreV).
+				where(qExamScoreV.subjectId.eq(subject.getOrigSubjectId()).and(qExamScoreV.userId.eq(student.getUserId())).and(qExamScoreV.examStatus.eq(ExerciseInfo.EXERCISE_STATUS_PUBLISHED))).
+				groupBy(qExamScoreV.userId).fetchOne();
+    	Map<String,Object> map = new HashMap<String,Object>(4);
+    	map.put("subjectId", subjectId);
+    	if(tuple == null) {
+    		map.put("examCount",  0);
+        	map.put("avgScore",  "0");
+        	map.put("commitExamCount",  0);
+    	}else {
+    		int commitExamCount = tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class);
+    		
+    		map.put("examCount",  tuple.get(1, Integer.class) == null?0:tuple.get(1, Integer.class));
+        	map.put("avgScore",  String.valueOf(commitExamCount == 0 || tuple.get(2, BigDecimal.class) == null?BigDecimal.ZERO:tuple.get(2, BigDecimal.class).divide(new BigDecimal(commitExamCount), 2, BigDecimal.ROUND_HALF_UP)));
+        	map.put("commitExamCount",  tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class));
+    	}
+    	
+		return map;
+	}
+	
+	/**
+	 * 我的课件情况
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	private List<Map<String, Object>> myLectureList(String classId){
+		QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+		return this.getQueryFactory().select(qMyLectureV.subjectId,
+				qMyLectureV.count(),
+				new CaseBuilder()
+			    .when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).//大于95%算完成
+				from(qMyLectureV).
+				where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))).
+				groupBy(qMyLectureV.subjectId).fetch().stream()
+			    .map(tuple -> {
+			    	Map<String,Object> map = new HashMap<String,Object>(3);
+			    	map.put("subjectId", tuple.get(0, String.class));
+			    	map.put("lectureCount",  tuple.get(1, Integer.class));
+			    	map.put("completeLectureCount", tuple.get(2, String.class));
+			    	return map;
+			    }).collect(Collectors.toList());
+	}
+	
+	/**
+	 * 我的课程,按时间排序
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public List<Map<String,Object>> mySubjectList(String classId, Pager pager) {
+		//课程
+		List<Map<String,Object>> clsSubjectlist = this.myClsSubjectlist(classId, ClientUtils.getUserId(), pager);
+		//课件统计
+		List<Map<String,Object>> lectures = this.myLectureList(classId);
+		for(Map<String,Object> clsSubject : clsSubjectlist) {
+			String origSubjectId = (String)clsSubject.get("origSubjectId");
+			clsSubject.put("exam", CollectionUtils.newObjectMap("examCount", this.examService.listStudentExamCount("", new String[] {classId}, origSubjectId, null)));
+			clsSubject.put("homework", CollectionUtils.newObjectMap("homeworkCount", exerciseInfoService.queryStuExerciseListCount("", null, ClientUtils.getUserId(), origSubjectId, null)));
+			clsSubject.put("lecture", CollectionUtils.newObjectMap("lectureCount", 0, "completeLectureCount", 0));
+			clsSubject.put("mediaVideoLive", CollectionUtils.newObjectMap("mediaVideoLiveCount", this.mediaLiveService.listCount("", new String[] {classId}, origSubjectId, null)));
+			
+			this.setSubjectStatistics("lecture", clsSubject, lectures);
+		}
+		
+		return clsSubjectlist;
+	}
+	
+	/**
+	 * 统计课程的数据
+	 * 
+	 * @param type 类型
+	 * @param clsSubject 课程
+	 * @param lstStatistics 统计信息
+	 */
+	private void setSubjectStatistics(String type, Map<String,Object> clsSubject,  List<Map<String,Object>> lstStatistics) {
+		if(lstStatistics != null && !lstStatistics.isEmpty()) {
+			for(Map<String,Object> statistics : lstStatistics) {
+				if(clsSubject.get("origSubjectId").equals(statistics.get("subjectId")) || clsSubject.get("subjectId").equals(statistics.get("subjectId"))) {
+					clsSubject.put(type, statistics);
+				}
+			}
+		}
+		
+	}
+	
+	/**
+	 * 我的课程详情
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	public Map<String,Object> mySubjectInfo(String subjectId, String classId,HttpServletRequest request) {
+		
+		QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
+		QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+		Object userId = request.getSession().getAttribute("userId");
+		// 课程
+		Tuple tuple = this.getQueryFactory()
+				.select(qMySubjectV.id.subjectId, qMySubjectV.subjectName, qMySubjectV.term, qMySubjectV.schoolYear,qMySubjectV.origSubjectId,
+						qMySubjectV.percent,qMySubjectV.coverPageUrl, qMySubjectV.progressValue)
+				.from(qMySubjectV)
+				.where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(ClientUtils.getUserId()))
+						.and(qMySubjectV.id.subjectId.eq(subjectId)))
+				.fetchOne();
+		
+		Subject objSubject = this.read(subjectId);
+
+		Map<String, Object> subject = new HashMap<String, Object>(5);
+		subject.put("name", objSubject.getName());
+		subject.put("subjectId", subjectId);
+		subject.put("origSubjectId", objSubject.getOrigSubjectId());
+		subject.put("schoolYear", objSubject.getSchoolYear());
+		subject.put("term", objSubject.getTerm());
+		subject.put("coverPageUrl", objSubject.getCoverPageUrl());
+		subject.put("content", this.readSubjectContent(subjectId));
+		subject.put("teacherName", objSubject.getTeacherName());
+		if(tuple == null) {
+			subject.put("progressPercent", 0);
+			subject.put("progressValue", 0);
+		}else {
+			subject.put("progressPercent", tuple.get(qMySubjectV.percent));
+			subject.put("progressValue", tuple.get(qMySubjectV.progressValue));
+		}
+
+		String origSubjectId = objSubject.getOrigSubjectId();
+		
+		// 考试统计
+		long examsCount = this.examService.listStudentExamCount("", new String[] {classId}, origSubjectId, null);
+
+		// 作业统计
+		long homeworksCount = exerciseInfoService.queryStuExerciseListCount("", null, ClientUtils.getUserId(), origSubjectId, null);
+
+		// 课件统计
+		Tuple tupleLecture = this.getQueryFactory().select(qMyLectureV.count(),
+				new CaseBuilder().when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).// 大于95%算完成
+				from(qMyLectureV)
+				.where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
+						.and(qMyLectureV.subjectId.eq(subjectId)))
+				.groupBy(qMyLectureV.subjectId).fetchOne();
+
+		long mediaVideoLivesCount = this.mediaLiveService.listCount("", new String[] {classId}, origSubjectId, null);
+
+		return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
+				"homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
+				tupleLecture == null?0:tupleLecture.get(0, Long.class), 
+						"completeLectureCount", tupleLecture == null?0:tupleLecture.get(1,Integer.class));
+	}
+	
+	/**
+	 * 我的课程按学期分类
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	@Override
+	public List<Map<String,Object>> myTermSubjectList(String classId) {
+		//课程
+		List<Map<String,Object>> clsSubjectlist = this.mySubjectList(classId, new Pager());
+		System.out.println("clsSubjectlistaaaaaa"+clsSubjectlist);
+		return this.termSubjectList(classId, clsSubjectlist);
+	}
+
+
+
+
+	/**
+	 * 课程按学期分类
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	@Override
+	public List<Map<String,Object>> termSubjectList(String classId, List<Map<String,Object>> clsSubjectlist) {
+		//学期
+		List<Map<String,Object>> termList = this.termList(classId);
+		
+		if(termList != null && !termList.isEmpty()) {
+			for(Map<String,Object> term : termList) {
+				if(termList != null && !termList.isEmpty()) {
+					List<Map<String,Object>> subjectList = new ArrayList<>();
+					for(Map<String,Object> clsSubject : clsSubjectlist) {
+						if(term.get("schoolYear").equals(clsSubject.get("schoolYear")) &&
+								term.get("term").equals(clsSubject.get("term"))) {
+							subjectList.add(clsSubject);
+						}
+						term.put("subjectList", subjectList);
+					}
+				}
+			}
+		}
+		return termList;
+	}
+	
+	
+	/**
+	 * 查询课程关联的班级课程信息
+	 * 
+	 * @param classId
+	 * @return
+	 */
+	@Override
+	public List<Map<String,Object>> querySubjectReClassInfos(String origSubjectId) {
+		String hql = "select s.subjectId as subjectId ,s.teacherId as teacherId,s.teacherName as teacherName,"
+		  		+ " s.schoolYear as schoolYear,s.term as term,c.classId as classId,c.name as className"
+		  		+ " from Subject s ,ClsClassReSubject r ,ClsClass c where s.subjectId = r.subjectId "
+		  		+ " and r.classId = c.classId and s.origSubjectId =:origSubjectId and s.deleteFlag is false";
+		
+		return this.findListWithMapByHql(hql,CollectionUtils.newObjectMap("origSubjectId",origSubjectId)); 
+	}	
+	
+};
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java b/src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java
new file mode 100644
index 0000000..b2e9257
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java
@@ -0,0 +1,87 @@
+/******************************************************************************
+ * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
+ * All Rights Reserved.
+ * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
+ * 不得使用、复制、修改或发布本软件.
+ *****************************************************************************/
+
+package com.qxueyou.scc.user.dao;
+
+import java.text.ParseException;
+import java.util.List;
+
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.transform.Transformers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.user.model.ExportUserRegistration;
+import com.qxueyou.scc.user.model.UserRegistration;
+
+
+@Repository(value="registrationDAO")
+/**
+ * 自动注入sessionFactory 报名信息
+ *
+ * @author ody.yuan
+ * @since JDK1.6
+ * @history 2015-04-23
+ */
+public class RegistrationDAO extends HibernateDaoSupport {
+	
+	/**
+     * 注入sessionFactory
+     *
+     * @param sessionFactory
+     */
+    @Autowired(required = false)
+    public void setSessionfactory(SessionFactory sessionFactory) {
+        this.setSessionFactory(sessionFactory);
+    }
+    
+    /**
+	 * 查询报名信息
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+    @SuppressWarnings("unchecked")
+	public List<UserRegistration> queryRegistrationList(String sql,List<Object> args) {
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(UserRegistration.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	List<UserRegistration> lstItems = query.list();
+    	
+		return lstItems;
+	}
+    
+    /**
+	 * 导出报名信息
+	 * @param sql
+	 * @param args
+	 * @return
+     * @throws ParseException 
+	 */
+    @SuppressWarnings("unchecked")
+	public List<ExportUserRegistration> queryExportRegList(String sql,List<Object> args) {
+    	// 查询结果
+    	Session session = this.getSessionFactory().getCurrentSession();
+    	SQLQuery query = session.createSQLQuery(sql);
+    	query.setResultTransformer(Transformers.aliasToBean(ExportUserRegistration.class));
+    	for(int i = 0;args !=null && i < args.size() ;  i++ ){
+    		query.setParameter(i, args.get(i));
+    	}
+    	List<ExportUserRegistration> lstItems = query.list();
+    	
+		return lstItems;
+	}
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java b/src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java
new file mode 100644
index 0000000..719ba89
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java
@@ -0,0 +1,160 @@
+package com.qxueyou.scc.user.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import com.qxueyou.scc.base.dao.BaseDAO;
+import com.qxueyou.scc.base.model.Pager;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysPrivilege;
+import com.qxueyou.scc.user.model.UserReRoleUser;
+import com.qxueyou.scc.user.model.UserRole;
+
+@Repository
+public class UserRoleDAO extends BaseDAO {
+
+	/**
+	 * 获取角色列表
+	 */
+	public List<UserRole> getUserRoleLst(String keyword) {
+		return find("from UserRole where deleteFlag is false and name like ? and topOrgId=?",
+				CollectionUtils.newList("%" + keyword + "%",ClientUtils.getOrgId()), UserRole.class);
+	}
+
+	/**
+	 * 获取人员列表
+	 */
+	public List<Map<String, Object>> getUserLstByRoleId(String roleId, Integer pageSize, Integer pageNum,
+			String keyword) {
+		return findListWithMapByHql(
+				"select u.name as name ,u.userId  as userId ,u.account  as account,u.mobilePhone as mobilePhone ,u.password as password from User u , UserReRoleUser r where u .deleteFlag is false "
+						+ "and r.deleteFlag is false and u.userId = r.userId and r.roleId =:roleId and u.name like :keyword and u.organizationId=:orgId",
+				CollectionUtils.newObjectMap("roleId", roleId, "keyword", "%" + keyword + "%","orgId",ClientUtils.getOrgId()),
+				new Pager(pageSize, pageNum));
+
+	}
+
+	/**
+	 * 获取人员列表总条数
+	 */
+	public int getUserCount(String roleId, String keyword) {
+		return findCountByComplexHql("select count(1) from User u , UserReRoleUser r where u .deleteFlag is false "
+				+ "and r.deleteFlag is false and u.userId = r.userId and r.roleId =:roleId and u.name like :keyword and u.organizationId=:orgId ",
+				CollectionUtils.newObjectMap("roleId", roleId, "keyword", "%" + keyword + "%","orgId",ClientUtils.getOrgId()));
+	}
+
+	/**
+	 * 删除人员
+	 */
+	public boolean delete(String userId) {
+		String[] userIds = userId.split(",");
+		String deleteUserByhql = " update User set deleteFlag = true where deleteFlag is false and userId = ?";
+		String deleteUserReByHql = "update UserReRoleUser  set deleteFlag =true where deleteFlag is false and userId = ?";
+
+		Result deleteUserResult = bulkUpdateInLoop(deleteUserByhql, userIds);
+		Result deleteUserReResult = bulkUpdateInLoop(deleteUserReByHql, userIds);
+
+		if (deleteUserResult.isSuccess() && deleteUserReResult.isSuccess()) {
+			return true;
+		}
+		return false;
+
+	}
+
+	/**
+	 * 获取角色信息
+	 */
+	public List<Map<String, Object>> findMenuLstById(String roleId) {
+		String hql = "select m.name as name ,m.menuId as menuId ,'1' as type from UserRole u ,SysPrivilege p ,SysMenu m where u.roleId = p.roleId and "
+				+ "p.menuId = m.menuId  and u.roleId =:roleId and u.deleteFlag is false and p.deleteFlag is false ";
+
+		return findListWithMapByHql(hql, CollectionUtils.newObjectMap("roleId", roleId));
+	}
+
+	/**
+	 * 修改角色信息
+	 * 
+	 * @param roleId
+	 * @param menuId
+	 */
+	public Result updateRole(String roleId, String menuIds, String name) {
+		UserRole userRole = read(UserRole.class, roleId);
+		userRole.setName(name);
+		TraceUtils.setCreateTrace(userRole);
+		save(userRole);
+
+		bulkUpdate("update SysPrivilege set deleteFlag = true where roleId = ?", new Object[] { roleId });
+
+		String[] menuIdArr = menuIds.split(",");
+
+		SysPrivilege sysPrivilege = null;
+		for (String menuId : menuIdArr) {
+			sysPrivilege = new SysPrivilege();
+			sysPrivilege.setMenuId(menuId);
+			sysPrivilege.setRoleId(roleId);
+			TraceUtils.setCreateTrace(sysPrivilege);
+			save(sysPrivilege);
+		}
+
+		return new Result(true, "success");
+
+	}
+
+	/**
+	 * 删除角色
+	 * 
+	 * @param roleId
+	 * @return
+	 */
+	public Result deleteRole(String roleId) {
+
+		UserRole userRole = read(UserRole.class, roleId);
+		userRole.setDeleteFlag(true);
+		TraceUtils.setCreateTrace(userRole);
+		save(userRole);
+
+		bulkUpdate("update SysPrivilege set deleteFlag = true where deleteFlag is  false and roleId = ?",
+				new Object[] { roleId });
+
+		return new Result(true, "success");
+	}
+
+	/**
+	 * 获取所有菜单的列表
+	 * 
+	 * @return
+	 */
+	public List<Map<String, Object>> findMenuLst() {
+
+		return findListWithMapByHql(
+				"select menuId as menuId, name as name,  '1'  as type from SysMenu where deleteFlag is false ",
+				CollectionUtils.newObjectMap());
+	}
+
+	/**
+	 * 添加教师
+	 * 
+	 * @param teacherIds
+	 * @param roleId
+	 * @return
+	 */
+	public Result addTeachers(String teacherIds, String roleId) {
+		UserReRoleUser userReRoleUser = null;
+
+		String[] teacherIdArr = teacherIds.split(",");
+
+		for (int i = 0; i < teacherIdArr.length; i++) {
+			userReRoleUser = new UserReRoleUser();
+			userReRoleUser.setRoleId(roleId);
+			userReRoleUser.setUserId(teacherIdArr[i]);
+			save(userReRoleUser);
+		}
+
+		return new Result(true);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/ExportUserRegistration.java b/src/main/java/com/qxueyou/scc/user/model/ExportUserRegistration.java
new file mode 100644
index 0000000..0a7ba1b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/ExportUserRegistration.java
@@ -0,0 +1,145 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * ExportUserRegistration
+ * 
+ */
+public class ExportUserRegistration implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private String userName;
+	
+	private String salesCode;
+	
+	private String mobilePhone;
+	
+	private String status;
+	
+	private String installFlag;
+	
+	private String className;
+	
+	private Date activationTime;
+	
+	private Date registrationTime;
+
+	/**
+	 * @return the userName
+	 */
+	public String getUserName() {
+		return userName;
+	}
+
+	/**
+	 * @param userName the userName to set
+	 */
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	/**
+	 * @return the salesCode
+	 */
+	public String getSalesCode() {
+		return salesCode;
+	}
+
+	/**
+	 * @param salesCode the salesCode to set
+	 */
+	public void setSalesCode(String salesCode) {
+		this.salesCode = salesCode;
+	}
+
+	/**
+	 * @return the mobilePhone
+	 */
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	/**
+	 * @param mobilePhone the mobilePhone to set
+	 */
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	/**
+	 * @return the status
+	 */
+	public String getStatus() {
+		return status;
+	}
+
+	/**
+	 * @param status the status to set
+	 */
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	/**
+	 * @return the installFlag
+	 */
+	public String getInstallFlag() {
+		return installFlag;
+	}
+
+	/**
+	 * @param installFlag the installFlag to set
+	 */
+	public void setInstallFlag(String installFlag) {
+		this.installFlag = installFlag;
+	}
+
+	/**
+	 * @return the className
+	 */
+	public String getClassName() {
+		return className;
+	}
+
+	/**
+	 * @param className the className to set
+	 */
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	/**
+	 * @return the activationTime
+	 */
+	public Date getActivationTime() {
+		return activationTime;
+	}
+
+	/**
+	 * @param activationTime the activationTime to set
+	 */
+	public void setActivationTime(Date activationTime) {
+		this.activationTime = activationTime;
+	}
+
+	/**
+	 * @return the registrationTime
+	 */
+	public Date getRegistrationTime() {
+		return registrationTime;
+	}
+
+	/**
+	 * @param registrationTime the registrationTime to set
+	 */
+	public void setRegistrationTime(Date registrationTime) {
+		this.registrationTime = registrationTime;
+	}
+	
+	
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/ExportUserScore.java b/src/main/java/com/qxueyou/scc/user/model/ExportUserScore.java
new file mode 100644
index 0000000..7b24ebd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/ExportUserScore.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * The persistent class for the user database table.
+ * 
+ */
+
+public class ExportUserScore implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	private String mobilePhone;
+
+	private String name;
+	
+	private BigDecimal score;
+	
+	private Date submitTime;
+	
+	private String salesCode;
+	
+	private Date createTime;
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public BigDecimal getScore() {
+		return score;
+	}
+
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+
+	public Date getSubmitTime() {
+		return submitTime;
+	}
+
+	public void setSubmitTime(Date submitTime) {
+		this.submitTime = submitTime;
+	}
+
+	public String getSalesCode() {
+		return salesCode;
+	}
+
+	public void setSalesCode(String salesCode) {
+		this.salesCode = salesCode;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/User.java b/src/main/java/com/qxueyou/scc/user/model/User.java
new file mode 100644
index 0000000..e9dbfd4
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/User.java
@@ -0,0 +1,337 @@
+package com.qxueyou.scc.user.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 用户表 实体
+ *
+ * @author ody.yuan
+ */
+@Entity(name = "User")
+@Table(name = "user")
+@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
+public class User implements Serializable, com.qxueyou.scc.base.model.ITrace {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(generator = "hibernate-uuid")
+    @GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+    @Column(name = "USER_ID", unique = true, nullable = false, length = 32)
+    private String userId;
+
+    /**
+     * 创建者ID
+     */
+    @Column(name = "CREATE_ID", nullable = false, length = 32)
+    @JsonIgnore
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @Column(name = "CREATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonIgnore
+    private Date createTime;
+
+    /**
+     * 创建人
+     */
+    @Column(name = "CREATOR", nullable = false, length = 100)
+    @JsonIgnore
+    private String creator;
+
+    /**
+     * 删除标志
+     */
+    @Column(name = "DELETE_FLAG", nullable = false)
+    @JsonIgnore
+    private boolean deleteFlag;
+
+    /**
+     * 用户头像路径
+     */
+    @Column(name = "IMG_PATH", length = 255)
+    private String imgPath;
+
+    /**
+     * 手机号
+     */
+    @Column(name = "MOBILE_PHONE", length = 15)
+    private String mobilePhone;
+
+    /**
+     * 来源
+     */
+    @Column(name = "SOURCE", length = 16)
+    private String source;
+
+    /**
+     * 邮箱
+     */
+    @Column(name = "E_MAIL", length = 64)
+    private String email;
+
+    /**
+     * 微博号
+     */
+    @Column(name = "AGE")
+    private Integer age;
+
+    /**
+     * 姓名
+     */
+    @Column(name = "NAME", length = 150)
+    private String name;
+
+    /**
+     * 登录账号
+     */
+    @Column(name = "ACCOUNT", length = 64)
+    private String account;
+
+    /**
+     * 密码
+     */
+    @Column(name = "PASSWORD", length = 255)
+    private String password;
+
+    /**
+     * 修改人ID
+     */
+    @Column(name = "UPDATE_ID", length = 32)
+    @JsonIgnore
+    private String updateId;
+
+    /**
+     * 修改时间
+     */
+    @Column(name = "UPDATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonIgnore
+    private Date updateTime;
+
+    /**
+     * 修改人
+     */
+    @Column(name = "UPDATOR", length = 100)
+    @JsonIgnore
+    private String updator;
+
+
+    /**
+     * 性别
+     */
+    @Column(name = "SEX")
+    private boolean sex;
+
+
+    /**
+     * 绑定账号ID
+     */
+    @Column(name = "IMEI", length = 255)
+    private String imei;
+
+    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
+    @JsonIgnore
+    private List<UserRole> roles;
+
+    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
+    @JsonIgnore
+    private List<UserReRoleUser> userRoleRes;
+
+    @Column(name = "ORGANIZATION_ID", length = 32)
+    private String organizationId;
+
+    public List<UserRole> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<UserRole> roles) {
+        this.roles = roles;
+    }
+
+    public String getAccount() {
+        return account;
+    }
+
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    public String getOrganizationId() {
+        return organizationId;
+    }
+
+    public void setOrganizationId(String organizationId) {
+        this.organizationId = organizationId;
+    }
+
+    public boolean getSex() {
+        return sex;
+    }
+
+    public void setSex(boolean sex) {
+        this.sex = sex;
+    }
+
+    public String getUserId() {
+        return this.userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getCreateId() {
+        return this.createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public Date getCreateTime() {
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreator() {
+        return this.creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public boolean getDeleteFlag() {
+        return this.deleteFlag;
+    }
+
+    public void setDeleteFlag(boolean deleteFlag) {
+        this.deleteFlag = deleteFlag;
+    }
+
+    public String getImgPath() {
+        return this.imgPath;
+    }
+
+    public void setImgPath(String imgPath) {
+        this.imgPath = imgPath;
+    }
+
+    public String getMobilePhone() {
+        return this.mobilePhone;
+    }
+
+    public void setMobilePhone(String mobilePhone) {
+        this.mobilePhone = mobilePhone;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPassword() {
+        return this.password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getUpdateId() {
+        return this.updateId;
+    }
+
+    public void setUpdateId(String updateId) {
+        this.updateId = updateId;
+    }
+
+    public Date getUpdateTime() {
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdator() {
+        return this.updator;
+    }
+
+    public void setUpdator(String updator) {
+        this.updator = updator;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    public String getImei() {
+        return imei;
+    }
+
+    public void setImei(String imei) {
+        this.imei = imei;
+    }
+
+    public List<UserReRoleUser> getUserRoleRes() {
+        return userRoleRes;
+    }
+
+    public void setUserRoleRes(List<UserReRoleUser> userRoleRes) {
+        this.userRoleRes = userRoleRes;
+    }
+
+
+    @Override
+    public String toString() {
+        return "User [userId=" + userId + ", createId=" + createId + ", createTime=" + createTime + ", creator="
+                + creator + ", deleteFlag=" + deleteFlag + ", imgPath=" + imgPath + ", mobilePhone=" + mobilePhone
+                + ", source=" + source + ", email=" + email + ", age=" + age + ", name=" + name + ", account="
+                + account + ", password=" + password + ", updateId=" + updateId + ", updateTime=" + updateTime
+                + ", updator=" + updator + ", sex=" + sex
+                + ", imei=" + imei + ", roles=" + roles + ", userRoleRes=" + userRoleRes + "]";
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java b/src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java
new file mode 100644
index 0000000..256e7d5
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java
@@ -0,0 +1,209 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * AuthorizationRecord generated by hbm2java
+ */
+@Entity
+@Table(name = "user_authorize_trace")
+@NamedQuery(name="UserAuthorizeTrace.findAll", query="SELECT u FROM UserAuthorizeTrace u")
+public class UserAuthorizeTrace implements Serializable ,ITrace{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	/** type类型(0,user表;其他类型参考organization表type);0用于记录UserAuthorizeTrace中的用户记录 */
+	
+	public static final short CUSTOMER_TYPE_USER = 0;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "AUTHORIZE_TRACE_ID", unique = true, nullable = false, length = 32)
+	private String authorizationTraceId;
+	
+	@Column(name = "ACCOUNT_ID", nullable = false, length = 32)
+	private String accountId;
+	
+	@Column(name = "AUTHORITY_ID", nullable = false, length = 32)
+	private String authorityId;
+	
+	@Column(name="AUTHORITY_NAME", length=150)
+	private String authorityName;
+	
+	@Column(name="AUTHORITY_TYPE")
+	private short authorityType;
+	
+	@Column(name = "AUTHORIZED_ID", length = 32)
+	private String authorizedId;
+	
+	@Column(name="AUTHORIZED_NAME", length=150)
+	private String authorizedName;
+	
+	@Column(name="AUTHORIZED_TYPE")
+	private short authorizedType;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "CREATE_TIME", nullable = false, length = 19)
+	private Date createTime;
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "UPDATE_TIME", nullable = false, length = 19)
+	private Date updateTime;
+	
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+	
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	private String createId;
+	
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+	
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+	
+	public UserAuthorizeTrace() {
+	}
+
+	public String getAuthorizationTraceId() {
+		return authorizationTraceId;
+	}
+
+	public void setAuthorizationTraceId(String authorizationTraceId) {
+		this.authorizationTraceId = authorizationTraceId;
+	}
+
+	public String getAccountId() {
+		return accountId;
+	}
+
+	public void setAccountId(String accountId) {
+		this.accountId = accountId;
+	}
+
+	public String getAuthorityId() {
+		return authorityId;
+	}
+
+	public void setAuthorityId(String authorityId) {
+		this.authorityId = authorityId;
+	}
+
+	public String getAuthorityName() {
+		return authorityName;
+	}
+
+	public void setAuthorityName(String authorityName) {
+		this.authorityName = authorityName;
+	}
+
+	public short getAuthorityType() {
+		return authorityType;
+	}
+
+	public void setAuthorityType(short authorityType) {
+		this.authorityType = authorityType;
+	}
+
+	public String getAuthorizedId() {
+		return authorizedId;
+	}
+
+	public void setAuthorizedId(String authorizedId) {
+		this.authorizedId = authorizedId;
+	}
+
+	public String getAuthorizedName() {
+		return authorizedName;
+	}
+
+	public void setAuthorizedName(String authorizedName) {
+		this.authorizedName = authorizedName;
+	}
+
+	public short getAuthorizedType() {
+		return authorizedType;
+	}
+
+	public void setAuthorizedType(short authorizedType) {
+		this.authorizedType = authorizedType;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserExtend.java b/src/main/java/com/qxueyou/scc/user/model/UserExtend.java
new file mode 100644
index 0000000..bf6a348
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserExtend.java
@@ -0,0 +1,323 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.base.model.ITrace;
+
+@Entity
+@Table(name="user_extend")
+public class UserExtend implements Serializable,ITrace{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "USER_EXTEND_ID", unique = true, nullable = false, length = 32)
+	private String userExtendId;
+	
+	@Column(name = "USER_ID", length = 32)
+	private String userId;
+	
+	@Column(name = "NICK_NAME", length = 255)
+	private String nickName;
+	
+	@Column(name = "REAL_NAME", length = 255)
+	private String realName;
+	
+	@Column(name = "SIGNATURE", length = 255)
+	private String signature;
+	
+	@Column(name = "MAJOR", length = 255)
+	private String major;
+	
+	/**  省份  */
+	@Column(name = "PROVINCE", length = 255)
+	private String province;
+	
+	/**  城市  */
+	@Column(name = "CITY", length = 255)
+	private String city;
+
+	/**  区域  */
+	@Column(name = "REGION", length = 255)
+	private String region;
+	
+	/**  身份证号  */
+	@Column(name = "ID_NUMBER", length = 32)
+	private String idNumber;
+	
+	/**  学员照片  */
+	@Column(name = "USER_PHOTO", length = 255)
+	private String userPhoto;
+	
+	/**  生日  */
+	@Column(name = "BIRTHDAY", length = 32)
+	private String birthday;
+	
+	/**  公司  */
+	@Column(name = "COMPANY", length = 255)
+	private String company;
+	
+	/**  是否索要发票  */
+	@Column(name = "MAIL_FLAG")
+	private boolean mailFlag;
+	
+	/**  邮寄地址  */
+	@Column(name = "MAIL_ADDRESS", length = 255)
+	private String mailAddress;
+	
+	/**  QQ  */
+	@Column(name="QQ", length=16)
+	private String qq;
+	
+	/**  微信  */
+	@Column(name="WEIXIN", length=64)
+	private String weixin;
+	
+	/**  微博  */
+	@Column(name="WEIBO_SINA", length=64)
+	private String weiboSina;
+	
+	@Column(name = "CREATE_ID", length = 32)
+	@JsonIgnore
+	private String createId;
+
+	@Column(name = "CREATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date createTime;
+
+	@Column(name = "CREATOR", length = 100)
+	@JsonIgnore
+	private String creator;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	@JsonIgnore
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	@JsonIgnore
+	private String updator;
+
+	@Column(name = "DELETE_FLAG")
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	public String getUserExtendId() {
+		return userExtendId;
+	}
+
+	public void setUserExtendId(String userExtendId) {
+		this.userExtendId = userExtendId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getNickName() {
+		return nickName;
+	}
+
+	public void setNickName(String nickName) {
+		this.nickName = nickName;
+	}
+
+	public String getRealName() {
+		return realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
+	public String getSignature() {
+		return signature;
+	}
+
+	public void setSignature(String signature) {
+		this.signature = signature;
+	}
+
+	public String getMajor() {
+		return major;
+	}
+
+	public void setMajor(String major) {
+		this.major = major;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+	
+	public String getRegion() {
+		return region;
+	}
+
+	public void setRegion(String region) {
+		this.region = region;
+	}
+
+	public String getIdNumber() {
+		return idNumber;
+	}
+
+	public void setIdNumber(String idNumber) {
+		this.idNumber = idNumber;
+	}
+
+	public String getBirthday() {
+		return birthday;
+	}
+
+	public void setBirthday(String birthday) {
+		this.birthday = birthday;
+	}
+
+	public String getCompany() {
+		return company;
+	}
+
+	public void setCompany(String company) {
+		this.company = company;
+	}
+
+	public String getMailAddress() {
+		return mailAddress;
+	}
+
+	public void setMailAddress(String mailAddress) {
+		this.mailAddress = mailAddress;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUserPhoto() {
+		return userPhoto;
+	}
+
+	public void setUserPhoto(String userPhoto) {
+		this.userPhoto = userPhoto;
+	}
+
+	public boolean getMailFlag() {
+		return mailFlag;
+	}
+
+	public void setMailFlag(boolean mailFlag) {
+		this.mailFlag = mailFlag;
+	}
+
+	public String getQq() {
+		return qq;
+	}
+
+	public void setQq(String qq) {
+		this.qq = qq;
+	}
+
+	public String getWeixin() {
+		return weixin;
+	}
+
+	public void setWeixin(String weixin) {
+		this.weixin = weixin;
+	}
+
+	public String getWeiboSina() {
+		return weiboSina;
+	}
+
+	public void setWeiboSina(String weiboSina) {
+		this.weiboSina = weiboSina;
+	}
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserOperate.java b/src/main/java/com/qxueyou/scc/user/model/UserOperate.java
new file mode 100644
index 0000000..0d7b1f3
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserOperate.java
@@ -0,0 +1,334 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the user database table.
+ * 
+ */
+@Entity(name="UserOperate")
+@Table(name="user_operate")
+@NamedQuery(name="UserOperate.findAll", query="SELECT u FROM UserOperate u")
+public class UserOperate implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="OPERATE_ID", unique=true, nullable=false, length=32)
+	private String operateId;
+	
+	@Column(name="USER_ID", nullable=false, length=32)
+	private String userId;
+	
+	@Column(name="ACCOUNT", length=64)
+	private String account;
+	
+	@Column(name="USER_NAME", length=150)
+	private String userName;
+	
+	@Column(name="CHANNEL_ID", length=32)
+	private String channelId;
+	
+	@Column(name="APP_VERSION",length=16)
+	private String appVersion;
+	
+	@Column(name="PLATFORM", length=64)
+	private String platform;
+	
+	@Column(name="LBS", length=255)
+	private String lbs;
+	
+	@Column(name="FIRST_LOGIN_TIME", nullable = true, length = 19)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date firstLoginTime;
+	
+	@Column(name="LAST_LOGIN_TIME", nullable = true, length = 19)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date lastLoginTime;
+	
+	@Column(name="FIRST_LOGIN_IP", length=64)
+	private String firstLoginIp;
+	
+	@Column(name="LAST_LOGIN_IP", length=64)
+	private String lastLoginTIp;
+	
+	@Column(name="LAST_LONGITUDE_X", length=100)
+	private String lastLatitudeX;
+	
+	@Column(name="LAST_LATITUDE_Y", length=100)
+	private String lastLatitudeY;
+	
+	@Column(name="LOGIN_DAYS")
+	private Integer loginDays;
+	
+	@Column(name="LOGIN_TIMES")
+	private Integer loginTimes;
+	
+	@Column(name="SUM_LOGIN_DAYS")
+	private Integer sumLoginDays;
+	
+	@Column(name="SUM_LOGIN_TIMES")
+	private Integer sumLoginTimes;
+	
+	@Column(name="ANDROID_LOGIN_TIMES")
+	private Integer androidLoginTimes;
+	
+	@Column(name="IOS_LOGIN_TIMES")
+	private Integer iosLoginTimes;
+
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+	
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	
+	@Column(name="CREATOR",nullable=false, length=100)
+	private String creator;
+	
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	private String createId;
+	
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	@Column(name="UPDATOR",length=100)
+	private String updator;
+	
+	public String getOperateId() {
+		return operateId;
+	}
+
+	public void setOperateId(String operateId) {
+		this.operateId = operateId;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getAccount() {
+		return account;
+	}
+
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getChannelId() {
+		return channelId;
+	}
+
+	public void setChannelId(String channelId) {
+		this.channelId = channelId;
+	}
+
+	public String getAppVersion() {
+		return appVersion;
+	}
+
+	public void setAppVersion(String appVersion) {
+		this.appVersion = appVersion;
+	}
+
+	public String getPlatform() {
+		return platform;
+	}
+
+	public void setPlatform(String platform) {
+		this.platform = platform;
+	}
+
+	public String getLbs() {
+		return lbs;
+	}
+
+	public void setLbs(String lbs) {
+		this.lbs = lbs;
+	}
+
+	public Date getFirstLoginTime() {
+		return firstLoginTime;
+	}
+
+	public void setFirstLoginTime(Date firstLoginTime) {
+		this.firstLoginTime = firstLoginTime;
+	}
+
+	public Date getLastLoginTime() {
+		return lastLoginTime;
+	}
+
+	public void setLastLoginTime(Date lastLoginTime) {
+		this.lastLoginTime = lastLoginTime;
+	}
+
+	public String getFirstLoginIp() {
+		return firstLoginIp;
+	}
+
+	public void setFirstLoginIp(String firstLoginIp) {
+		this.firstLoginIp = firstLoginIp;
+	}
+
+	public String getLastLoginTIp() {
+		return lastLoginTIp;
+	}
+
+	public void setLastLoginTIp(String lastLoginTIp) {
+		this.lastLoginTIp = lastLoginTIp;
+	}
+
+	public Integer getLoginDays() {
+		return loginDays;
+	}
+
+	public void setLoginDays(Integer loginDays) {
+		this.loginDays = loginDays;
+	}
+
+	public Integer getLoginTimes() {
+		return loginTimes;
+	}
+
+	public void setLoginTimes(Integer loginTimes) {
+		this.loginTimes = loginTimes;
+	}
+
+	public Integer getSumLoginDays() {
+		return sumLoginDays;
+	}
+
+	public void setSumLoginDays(Integer sumLoginDays) {
+		this.sumLoginDays = sumLoginDays;
+	}
+
+	public Integer getSumLoginTimes() {
+		return sumLoginTimes;
+	}
+
+	public void setSumLoginTimes(Integer sumLoginTimes) {
+		this.sumLoginTimes = sumLoginTimes;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCreateId() {
+		return createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public String getUpdateId() {
+		return updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public String getUpdator() {
+		return updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public Integer getAndroidLoginTimes() {
+		return androidLoginTimes;
+	}
+
+	public void setAndroidLoginTimes(Integer androidLoginTimes) {
+		this.androidLoginTimes = androidLoginTimes;
+	}
+
+	public Integer getIosLoginTimes() {
+		return iosLoginTimes;
+	}
+
+	public void setIosLoginTimes(Integer iosLoginTimes) {
+		this.iosLoginTimes = iosLoginTimes;
+	}
+
+	public String getLastLatitudeX() {
+		return lastLatitudeX;
+	}
+
+	public void setLastLatitudeX(String lastLatitudeX) {
+		this.lastLatitudeX = lastLatitudeX;
+	}
+
+	public String getLastLatitudeY() {
+		return lastLatitudeY;
+	}
+
+	public void setLastLatitudeY(String lastLatitudeY) {
+		this.lastLatitudeY = lastLatitudeY;
+	}
+
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserReRoleUser.java b/src/main/java/com/qxueyou/scc/user/model/UserReRoleUser.java
new file mode 100644
index 0000000..ad4de1e
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserReRoleUser.java
@@ -0,0 +1,131 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+/**
+ * The persistent class for the user_re_role_user database table.
+ * 
+ */
+@Entity
+@Table(name="user_re_role_user")
+@NamedQuery(name="UserReRoleUser.findAll", query="SELECT u FROM UserReRoleUser u")
+public class UserReRoleUser implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="RE_ID", unique=true, nullable=false, length=32)
+	private String reId;
+
+	@Column(name="ROLE_ID", nullable=false, length=32)
+	private String roleId;
+
+	@Column(name="USER_ID", nullable=false, length=32)
+	private String userId;
+	
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+	
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+	
+	@Column(name="REMARK",length=1024)
+	private String remark;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private User user;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "ROLE_ID",referencedColumnName="ROLE_ID",insertable=false,updatable=false)
+	@JsonIgnore
+	private UserRole userRole;
+
+	public UserReRoleUser() {
+	}
+
+	public String getReId() {
+		return this.reId;
+	}
+
+	public void setReId(String reId) {
+		this.reId = reId;
+	}
+
+	public String getRoleId() {
+		return this.roleId;
+	}
+
+	public void setRoleId(String roleId) {
+		this.roleId = roleId;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public boolean getDeleteFlag() {
+		return deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public UserRole getUserRole() {
+		return userRole;
+	}
+
+	public void setUserRole(UserRole userRole) {
+		this.userRole = userRole;
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserRegistration.java b/src/main/java/com/qxueyou/scc/user/model/UserRegistration.java
new file mode 100644
index 0000000..5bd6f5f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserRegistration.java
@@ -0,0 +1,363 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.ITrace;
+
+
+
+/**
+ * 学员注册表 实体
+ * @author ody.yuan
+ *
+ */
+@Entity(name="UserRegistration")
+@Table(name="user_registration")
+@NamedQuery(name="UserRegistration.findAll", query="SELECT u FROM UserRegistration u")
+public class UserRegistration implements Serializable,ITrace {
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="REGISTRATION_ID", unique=true, nullable=false, length=32)
+	private String registrationId;
+
+	/**  班级ID  */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/**  科目ID   */
+	@Column(name="COLLEGE_COURSE_ID", length=32)
+	private String collegeCourseId;
+
+	/**  创建人ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	@JsonIgnore
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**  创建者  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	@JsonIgnore
+	private String creator;
+
+	/**  删除标志  */
+	@Column(name="DELETE_FLAG", nullable=false)
+	@JsonIgnore
+	private boolean deleteFlag;
+
+	/**  手机号  */
+	@Column(name="MOBILE_PHONE", length=32)
+	private String mobilePhone;
+
+	/**  其他联系方式  */
+	@Column(name="OTHER_CONTACT_METHOD", length=32)
+	private String otherContactMethod;
+
+	/**  销售码  */
+	@Column(name="SALES_CODE", length=32)
+	private String salesCode;
+
+	/**  状态:激活or未激活  */
+	@Column(name="STATUS")
+	private Short status;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	@JsonIgnore
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonIgnore
+	private Date updateTime;
+
+	/**  修改者  */
+	@Column(name="UPDATOR", length=100)
+	@JsonIgnore
+	private String updator;
+
+	/**  用户ID  */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	/**  用户名称  */
+	@Column(name="USER_NAME", length=150)
+	private String userName;
+	
+	/**  激活时间  */
+	@Column(name="ACTIVATION_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date activationTime;
+	
+	/**  报名时间  */
+	@Column(name="REGISTRATION_TIME")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date registrationTime;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "CLASS_ID",referencedColumnName="CLASS_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private ClsClass orgClass;
+	
+	@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
+    @JoinColumn(name = "USER_ID",referencedColumnName="USER_ID",updatable=false,insertable=false)
+	@JsonIgnore
+	private User user; 
+	
+	/*
+	 * 状态:激活
+	 */
+	public static final short STATUS_ACTIVE=1;
+	
+	/*
+	 * 状态:未激活
+	 */
+	public static final short STATUS_DEACTIVE=0;
+	
+	@Transient
+	private boolean sex;
+	
+	@Transient
+	private String installFlag;
+	
+	@Transient
+	private String className;
+	
+	@Transient
+	private String orgName;
+	
+	@Transient
+	private String orgShortName;
+	
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public UserRegistration() {
+	}
+	
+	public ClsClass getOrgClass() {
+		return orgClass;
+	}
+
+	public void setOrgClass(ClsClass orgClass) {
+		this.orgClass = orgClass;
+	}
+
+	public String getRegistrationId() {
+		return this.registrationId;
+	}
+
+	public void setRegistrationId(String registrationId) {
+		this.registrationId = registrationId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+
+
+	public String getCollegeCourseId() {
+		return collegeCourseId;
+	}
+
+	public void setCollegeCourseId(String collegeCourseId) {
+		this.collegeCourseId = collegeCourseId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getMobilePhone() {
+		return this.mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getOtherContactMethod() {
+		return this.otherContactMethod;
+	}
+
+	public void setOtherContactMethod(String otherContactMethod) {
+		this.otherContactMethod = otherContactMethod;
+	}
+
+	public String getSalesCode() {
+		return this.salesCode;
+	}
+
+	public void setSalesCode(String salesCode) {
+		this.salesCode = salesCode;
+	}
+
+	public short getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(short status) {
+		this.status = status;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+	
+	public boolean getSex() {
+		return sex;
+	}
+
+	public void setSex(boolean sex) {
+		this.sex = sex;
+	}
+
+	public String getInstallFlag() {
+		return installFlag;
+	}
+
+	public void setInstallFlag(String installFlag) {
+		this.installFlag = installFlag;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getOrgShortName() {
+		return orgShortName;
+	}
+
+	public void setOrgShortName(String orgShortName) {
+		this.orgShortName = orgShortName;
+	}
+
+	public Date getActivationTime() {
+		return activationTime;
+	}
+
+	public void setActivationTime(Date activationTime) {
+		this.activationTime = activationTime;
+	}
+
+	public Date getRegistrationTime() {
+		return registrationTime;
+	}
+
+	public void setRegistrationTime(Date registrationTime) {
+		this.registrationTime = registrationTime;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserRegistrationCustom.java b/src/main/java/com/qxueyou/scc/user/model/UserRegistrationCustom.java
new file mode 100644
index 0000000..988bff6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserRegistrationCustom.java
@@ -0,0 +1,198 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+
+/**
+ * The persistent class for the user_registration_custom database table.
+ * 
+ */
+@Entity
+@Table(name="user_registration_custom")
+@NamedQuery(name="UserRegistrationCustom.findAll", query="SELECT u FROM UserRegistrationCustom u")
+public class UserRegistrationCustom implements Serializable, ITrace {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="reg_custom_id")
+	private String regCustomId;
+
+	@Column(name="class_id")
+	private String classId;
+
+	@Column(name="CREATE_ID")
+	private String createId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="CREATE_TIME")
+	private Date createTime;
+
+	private String creator;
+
+	@Column(name="custom_id")
+	private String customId;
+
+	@Column(name="custom_name")
+	private String customName;
+
+	@Column(name="custom_value")
+	private String customValue;
+
+	@Column(name="DELETE_FLAG")
+	private boolean deleteFlag;
+
+	@Column(name="REGISTRATION_ID")
+	private String registrationId;
+
+	@Column(name="UPDATE_ID")
+	private String updateId;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@Column(name="UPDATE_TIME")
+	private Date updateTime;
+
+	private String updator;
+
+	@Column(name="user_id")
+	private String userId;
+	
+	@Transient
+	private String mobilePhone;
+
+	public String getMobilePhone() {
+		return mobilePhone;
+	}
+
+	public void setMobilePhone(String mobilePhone) {
+		this.mobilePhone = mobilePhone;
+	}
+
+	public String getRegCustomId() {
+		return this.regCustomId;
+	}
+
+	public void setRegCustomId(String regCustomId) {
+		this.regCustomId = regCustomId;
+	}
+
+	public String getClassId() {
+		return this.classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public String getCustomId() {
+		return this.customId;
+	}
+
+	public void setCustomId(String customId) {
+		this.customId = customId;
+	}
+
+	public String getCustomName() {
+		return this.customName;
+	}
+
+	public void setCustomName(String customName) {
+		this.customName = customName;
+	}
+
+	public String getCustomValue() {
+		return this.customValue;
+	}
+
+	public void setCustomValue(String customValue) {
+		this.customValue = customValue;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getRegistrationId() {
+		return this.registrationId;
+	}
+
+	public void setRegistrationId(String registrationId) {
+		this.registrationId = registrationId;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserRole.java b/src/main/java/com/qxueyou/scc/user/model/UserRole.java
new file mode 100644
index 0000000..dda8895
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserRole.java
@@ -0,0 +1,253 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.qxueyou.scc.sys.model.SysMenu;
+import com.qxueyou.scc.sys.model.SysPrivilege;
+
+/**
+ * The persistent class for the user_role database table.
+ * 
+ */
+@Entity
+@Table(name = "user_role")
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
+@NamedQuery(name = "UserRole.findAll", query = "SELECT u FROM UserRole u")
+public class UserRole implements Serializable, com.qxueyou.scc.base.model.ITrace {
+
+	/**
+	 * UID
+	 */
+	private static final long serialVersionUID = 2698140980142511930L;
+
+	public static Integer ROLE_TYPE_ADMIN = 1;
+	
+	public static String ROLE_TEACHER_ID = "2";
+	
+	public static String ROLE_ADMIN_ID = "3";
+	
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name = "ROLE_ID", unique = true, nullable = false, length = 32)
+	private String roleId;
+
+	@Column(name = "CREATE_ID", nullable = false, length = 32)
+	private String createId;
+
+	@Column(name = "CREATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@Column(name = "CREATOR", nullable = false, length = 100)
+	private String creator;
+
+	@Column(name = "DELETE_FLAG", nullable = false)
+	private boolean deleteFlag;
+
+	@Column(name = "NAME", length = 150)
+	private String name;
+	
+	@Column(name = "TOP_ORG_ID", length = 150)
+	private String topOrgId;
+
+	@Column(name = "UPDATE_ID", length = 32)
+	private String updateId;
+
+	@Column(name = "UPDATE_TIME", nullable = false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	@Column(name = "UPDATOR", length = 100)
+	private String updator;
+
+//	@Column(name = "ENAME", length = 100)
+//	private String ename;
+
+	@Column(name = "type", length = 2)
+	private String type;
+
+	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinTable(name = "USER_RE_ROLE_USER", joinColumns = { @JoinColumn(name = "ROLE_ID") }, inverseJoinColumns = {
+			@JoinColumn(name = "USER_ID") })
+	@GeneratedValue(generator = "hibernate-uuid1")
+	@GenericGenerator(name = "hibernate-uuid1", strategy = "uuid")
+	@CollectionId(columns = @Column(name = "RE_ID"), type = @Type(type = "string"), generator = "hibernate-uuid1")
+	@JsonIgnore
+	private List<User> users;
+
+	@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
+	private List<SysMenu> menus;
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "userRole")
+	@JsonIgnore
+	private List<SysPrivilege> sysPrivileges;
+
+	@OneToMany(mappedBy = "userRole", fetch = FetchType.LAZY)
+	@JsonIgnore
+	private List<UserReRoleUser> res;
+	
+	@Transient
+	private boolean isMe;
+
+	public List<SysMenu> getMenus() {
+		return menus;
+	}
+
+	public void setMenus(List<SysMenu> menus) {
+		this.menus = menus;
+	}
+
+	public List<User> getUsers() {
+		return users;
+	}
+
+	public void setUsers(List<User> users) {
+		this.users = users;
+	}
+
+	public String getRoleId() {
+		return this.roleId;
+	}
+
+	public void setRoleId(String roleId) {
+		this.roleId = roleId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public List<SysPrivilege> getSysPrivileges() {
+		return sysPrivileges;
+	}
+
+	public void setSysPrivileges(List<SysPrivilege> sysPrivileges) {
+		this.sysPrivileges = sysPrivileges;
+	}
+
+	public List<UserReRoleUser> getRes() {
+		return res;
+	}
+
+	public void setRes(List<UserReRoleUser> res) {
+		this.res = res;
+	}
+
+	public boolean getMe() {
+		return isMe;
+	}
+
+	public void setMe(boolean isMe) {
+		this.isMe = isMe;
+	}
+
+//	public String getEname() {
+//		return ename;
+//	}
+//
+//	public void setEname(String ename) {
+//		this.ename = ename;
+//	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getTopOrgId() {
+		return topOrgId;
+	}
+
+	public void setTopOrgId(String topOrgId) {
+		this.topOrgId = topOrgId;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserSign.java b/src/main/java/com/qxueyou/scc/user/model/UserSign.java
new file mode 100644
index 0000000..cd2a7bc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserSign.java
@@ -0,0 +1,413 @@
+package com.qxueyou.scc.user.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 用户表 实体
+ *
+ * @author ody.yuan
+ */
+@Entity(name = "UserSign")
+@Table(name = "user_sign")
+public class UserSign implements Serializable, com.qxueyou.scc.base.model.ITrace {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 创建者ID
+     */
+    @Column(name = "CREATE_ID", nullable = false, length = 32)
+    @JsonIgnore
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    @Column(name = "CREATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonIgnore
+    private Date createTime;
+
+    /**
+     * 创建人
+     */
+    @Column(name = "CREATOR", nullable = false, length = 100)
+    @JsonIgnore
+    private String creator;
+
+    /**
+     * 删除标志
+     */
+    @Column(name = "DELETE_FLAG", nullable = false)
+    @JsonIgnore
+    private boolean deleteFlag;
+
+
+    /**
+     * 修改人ID
+     */
+    @Column(name = "UPDATE_ID", length = 32)
+    @JsonIgnore
+    private String updateId;
+
+    /**
+     * 修改时间
+     */
+    @Column(name = "UPDATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonIgnore
+    private Date updateTime;
+
+    /**
+     * 修改人
+     */
+    @Column(name = "UPDATOR", length = 100)
+    @JsonIgnore
+    private String updator;
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(generator = "hibernate-uuid")
+    @GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+    @Column(name = "USER_SIGN_ID", unique = true, nullable = false, length = 32)
+    private String userSignId;
+
+    /**
+     * 用户免冠登记照
+     */
+    @Column(name = "IMG_PATH", length = 255)
+    private String imgPath;
+
+    /**
+     * 考试id
+     */
+    @Column(name = "EXAM_ID", length = 255)
+    private String examId;
+
+    /**
+     * 手机号
+     */
+    @Column(name = "MOBILE_PHONE", length = 15)
+    private String mobilePhone;
+
+
+    /**
+     * 年龄
+     */
+    @Column(name = "AGE")
+    private Integer age;
+
+    /**
+     * 姓名
+     */
+    @Column(name = "NAME", length = 150)
+    private String name;
+
+    /**
+     * 性别
+     */
+    @Column(name = "SEX")
+    private boolean sex;
+
+    /**
+     * 身份证
+     */
+    @Column(name = "IDNO", length = 255)
+    private String idno;
+
+     /**
+     * 文化程度
+     */
+    @Column(name = "EDUCATION", length = 255)
+    private String education;
+
+    /**
+     * 民族
+     */
+    @Column(name = "NATION", length = 255)
+    private String nation;
+
+
+    /**
+     * 取得资格认证名称
+     */
+    @Column(name = "ACCREDITATION_NAME", length = 255)
+    private String accreditationName;
+
+    /**
+     * 技能等级
+     */
+    @Column(name = "SKILL_LEVEL", length = 255)
+    private String skillLevel;
+
+    /**
+     * 推荐单位名称
+     */
+    @Column(name = "RECOMMEND_NAME", length = 255)
+    private String recommendName;
+
+    /**
+     * 推荐单位联系人
+     */
+    @Column(name = "RECOMMEND_PERSON", length = 255)
+    private String recommendPerson;
+
+    /**
+     * 个人身份证
+     */
+    @Column(name = "IDNO_PATH", length = 255)
+    private String idnoPath;
+
+    /**
+     * 报名表
+     */
+    @Column(name = "SIGNT_PATH", length = 255)
+    private String signtPath;
+
+    /**
+     * 承诺书
+     */
+    @Column(name = "PROMISE_PATH", length = 255)
+    private String promisePath;
+
+    /**
+     * 及相关证书的电子件
+     */
+    @Column(name = "CERT_PATH", length = 255)
+    private String certPath;
+
+    /**
+     * 审核状态
+     */
+    @Column(name = "STATUS", length = 255)
+    private String status;
+
+//    public boolean isDeleteFlag() {
+//        return deleteFlag;
+//    }
+
+    public String getUserSignId() {
+        return userSignId;
+    }
+
+    public void setUserSignId(String userSignId) {
+        this.userSignId = userSignId;
+    }
+
+    public String getImgPath() {
+        return imgPath;
+    }
+
+    public void setImgPath(String imgPath) {
+        this.imgPath = imgPath;
+    }
+
+    public String getExamId() {
+        return examId;
+    }
+
+    public void setExamId(String examId) {
+        this.examId = examId;
+    }
+
+    public String getMobilePhone() {
+        return mobilePhone;
+    }
+
+    public void setMobilePhone(String mobilePhone) {
+        this.mobilePhone = mobilePhone;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public boolean isSex() {
+        return sex;
+    }
+
+    public void setSex(boolean sex) {
+        this.sex = sex;
+    }
+
+    public String getIdno() {
+        return idno;
+    }
+
+    public void setIdno(String idno) {
+        this.idno = idno;
+    }
+
+    public String getEducation() {
+        return education;
+    }
+
+    public void setEducation(String education) {
+        this.education = education;
+    }
+
+    public String getNation() {
+        return nation;
+    }
+
+    public void setNation(String nation) {
+        this.nation = nation;
+    }
+
+    public String getAccreditationName() {
+        return accreditationName;
+    }
+
+    public void setAccreditationName(String accreditationName) {
+        this.accreditationName = accreditationName;
+    }
+
+    public String getSkillLevel() {
+        return skillLevel;
+    }
+
+    public void setSkillLevel(String skillLevel) {
+        this.skillLevel = skillLevel;
+    }
+
+    public String getRecommendName() {
+        return recommendName;
+    }
+
+    public void setRecommendName(String recommendName) {
+        this.recommendName = recommendName;
+    }
+
+    public String getRecommendPerson() {
+        return recommendPerson;
+    }
+
+    public void setRecommendPerson(String recommendPerson) {
+        this.recommendPerson = recommendPerson;
+    }
+
+    public String getIdnoPath() {
+        return idnoPath;
+    }
+
+    public void setIdnoPath(String idnoPath) {
+        this.idnoPath = idnoPath;
+    }
+
+    public String getSigntPath() {
+        return signtPath;
+    }
+
+    public void setSigntPath(String signtPath) {
+        this.signtPath = signtPath;
+    }
+
+    public String getPromisePath() {
+        return promisePath;
+    }
+
+    public void setPromisePath(String promisePath) {
+        this.promisePath = promisePath;
+    }
+
+    public String getCertPath() {
+        return certPath;
+    }
+
+    public void setCertPath(String certPath) {
+        this.certPath = certPath;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+
+
+
+    public String getCreateId() {
+        return this.createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public Date getCreateTime() {
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreator() {
+        return this.creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    @Override
+    public boolean getDeleteFlag() {
+        return this.deleteFlag;
+    }
+
+    @Override
+    public void setDeleteFlag(boolean deleteFlag) {
+        this.deleteFlag=deleteFlag;
+    }
+
+
+    public String getUpdateId() {
+        return this.updateId;
+    }
+
+    public void setUpdateId(String updateId) {
+        this.updateId = updateId;
+    }
+
+    public Date getUpdateTime() {
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdator() {
+        return this.updator;
+    }
+
+    public void setUpdator(String updator) {
+        this.updator = updator;
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserStudent.java b/src/main/java/com/qxueyou/scc/user/model/UserStudent.java
new file mode 100644
index 0000000..558ab70
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserStudent.java
@@ -0,0 +1,193 @@
+package com.qxueyou.scc.user.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.qxueyou.scc.base.model.ITrace;
+
+/**
+ * 学员表  实体
+ * @author ody.yuan
+ *
+ */
+@Entity
+@Table(name="user_student")
+@NamedQuery(name="UserStudent.findAll", query="SELECT u FROM UserStudent u")
+public class UserStudent implements Serializable,ITrace {
+	
+	private static final long serialVersionUID = 1L;
+
+	/**  主键  */
+	@Id
+	@GeneratedValue(generator = "hibernate-uuid")
+	@GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+	@Column(name="STUDENT_ID", unique=true, nullable=false, length=32)
+	private String studentId;
+
+	/**  用户ID */
+	@Column(name="USER_ID", length=32)
+	private String userId;
+
+	/**  机构ID  */
+	@Column(name="ORG_ID", length=32)
+	private String orgId;
+
+	/**  班级ID  */
+	@Column(name="CLASS_ID", length=32)
+	private String classId;
+
+	/**  创建者ID  */
+	@Column(name="CREATE_ID", nullable=false, length=32)
+	private String createId;
+
+	/**  创建时间  */
+	@Column(name="CREATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	/**  创建人  */
+	@Column(name="CREATOR", nullable=false, length=100)
+	private String creator;
+
+	/**  删除标志 */
+	@Column(name="DELETE_FLAG", nullable=false)
+	private boolean deleteFlag;
+
+	/**  修改人ID  */
+	@Column(name="UPDATE_ID", length=32)
+	private String updateId;
+
+	/**  修改时间  */
+	@Column(name="UPDATE_TIME", nullable=false)
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**  修改人  */
+	@Column(name="UPDATOR", length=100)
+	private String updator;
+	
+	/**  修改人  */
+	@Column(name="SCHOOL", length=128)
+	private String school;
+	
+	/**  专业 */
+	@Column(name="SUBJECT", length=128)
+	private String subject;
+
+	public UserStudent() {
+	}
+	
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getOrgId() {
+		return orgId;
+	}
+
+	public void setOrgId(String orgId) {
+		this.orgId = orgId;
+	}
+
+	public String getClassId() {
+		return classId;
+	}
+
+	public void setClassId(String classId) {
+		this.classId = classId;
+	}
+
+	public String getStudentId() {
+		return this.studentId;
+	}
+
+	public void setStudentId(String studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getCreateId() {
+		return this.createId;
+	}
+
+	public void setCreateId(String createId) {
+		this.createId = createId;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreator() {
+		return this.creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean getDeleteFlag() {
+		return this.deleteFlag;
+	}
+
+	public void setDeleteFlag(boolean deleteFlag) {
+		this.deleteFlag = deleteFlag;
+	}
+
+	public String getUpdateId() {
+		return this.updateId;
+	}
+
+	public void setUpdateId(String updateId) {
+		this.updateId = updateId;
+	}
+
+	public Date getUpdateTime() {
+		return this.updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdator() {
+		return this.updator;
+	}
+
+	public void setUpdator(String updator) {
+		this.updator = updator;
+	}
+
+	public String getSchool() {
+		return school;
+	}
+
+	public void setSchool(String school) {
+		this.school = school;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/model/UserTeacher.java b/src/main/java/com/qxueyou/scc/user/model/UserTeacher.java
new file mode 100644
index 0000000..ca8ade6
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/model/UserTeacher.java
@@ -0,0 +1,174 @@
+package com.qxueyou.scc.user.model;
+
+import com.qxueyou.scc.base.model.ITrace;
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * The persistent class for the org_teacher database table.
+ */
+@Entity
+@Table(name = "user_teacher")
+public class UserTeacher implements Serializable, ITrace {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 4126007756731220172L;
+
+	@Id
+    @GeneratedValue(generator = "hibernate-uuid")
+    @GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
+    @Column(name = "TEACHER_ID", unique = true, nullable = false, length = 32)
+    private String teacherId;
+
+    @Column(name = "CREATE_ID", nullable = false, length = 32)
+    private String createId;
+
+    @Column(name = "CREATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @Column(name = "CREATOR", nullable = false, length = 100)
+    private String creator;
+
+    @Column(name = "DELETE_FLAG", nullable = false)
+    private boolean deleteFlag;
+
+    @Column(name = "UPDATE_ID", length = 32)
+    private String updateId;
+
+    @Column(name = "UPDATE_TIME", nullable = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @Column(name = "UPDATOR", length = 100)
+    private String updator;
+
+    @Column(name = "USER_ID", length = 32)
+    private String userId;
+
+    @Column(name = "NAME", length = 32)
+    private String name;
+
+    @Column(name = "MOBILE_PHONE", length = 11)
+    private String mobilePhone;
+
+    @Column(name = "TEACHER_NO", length = 11)
+    private String teacherNo;
+
+    @Column(name = "ORGANIZATION_ID", length = 32)
+    private String organizationId;
+
+
+    public UserTeacher() {
+    }
+
+    public String getOrganizationId() {
+        return organizationId;
+    }
+
+    public void setOrganizationId(String organizationId) {
+        this.organizationId = organizationId;
+    }
+
+    public String getTeacherId() {
+        return this.teacherId;
+    }
+
+    public void setTeacherId(String teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getCreateId() {
+        return this.createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public Date getCreateTime() {
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreator() {
+        return this.creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public boolean getDeleteFlag() {
+        return this.deleteFlag;
+    }
+
+    public void setDeleteFlag(boolean deleteFlag) {
+        this.deleteFlag = deleteFlag;
+    }
+
+    public String getUpdateId() {
+        return this.updateId;
+    }
+
+    public void setUpdateId(String updateId) {
+        this.updateId = updateId;
+    }
+
+    public Date getUpdateTime() {
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUpdator() {
+        return this.updator;
+    }
+
+    public void setUpdator(String updator) {
+        this.updator = updator;
+    }
+
+    public String getUserId() {
+        return this.userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getMobilePhone() {
+        return mobilePhone;
+    }
+
+    public void setMobilePhone(String mobilePhone) {
+        this.mobilePhone = mobilePhone;
+    }
+
+    public String getTeacherNo() {
+        return teacherNo;
+    }
+
+    public void setTeacherNo(String teacherNo) {
+        this.teacherNo = teacherNo;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java b/src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java
new file mode 100644
index 0000000..56b7568
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java
@@ -0,0 +1,22 @@
+package com.qxueyou.scc.user.service;
+
+/**
+ * 用户操作接口
+ * @author ody.yuan
+ *
+ */
+public interface IUserOperateService {
+
+	/**
+	 * 插入或者更新user_operate,更新用户登录状态
+	 * 
+	 * @param userId
+	 * @param userName
+	 * @param account
+	 * @param ip
+	 * @param userAgent
+	 * @return
+	 */
+	boolean saveUserOperate(String userId,String userName,String account, String ip,String version,String platform) ;
+}
+
diff --git a/src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java b/src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java
new file mode 100644
index 0000000..70064ab
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java
@@ -0,0 +1,223 @@
+package com.qxueyou.scc.user.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.user.model.ExportUserRegistration;
+import com.qxueyou.scc.user.model.UserRegistration;
+
+
+
+public interface IUserRegistrationService {
+	
+	/**
+	 * 学员信息操作记录
+	 * @param operator
+	 * @param regId
+	 * @param moduleName
+	 * @param mobile
+	 * @return
+	 */
+	Result doInsertRegLog(String operator,String regId,String mobile) ;
+	
+	/**
+	 * 更新班级报名数量
+	 * @param classId
+	 * @param updateCount
+	 * @param updateType
+	 * @return
+	 */
+	Result updateStudentCount(String classId, int updateCount, int updateType);
+	
+	/**
+	 * 新增报名
+	 * @param reg
+	 * @return
+	 */
+	Result insertRegistration(UserRegistration reg, String source );
+	
+	/**
+	 * 新增报名
+	 * @param reg
+	 * @param companyName
+	 * @return
+	 */
+	Result insertRegistration(UserRegistration reg,String companyName, String source );
+	
+	/**
+	 * 新增报名
+	 *  @param role:角色(添加用户的角色,没有可以传null), type:(操作类型:后台、微信、APP....) userMap:参数   mode:具体操作(没有可以传null)
+	 * @return
+	 */
+	Result insertRegistration(UserRegistration reg,boolean male,String source, String signupInfo);
+	
+	/**@version 2.0
+	 * 激活
+	 * @param role:角色(添加用户的角色,没有可以传null), type:(操作类型:后台、微信、APP....) userMap:参数   mode:具体操作(没有可以传null)
+	 * @return
+	 */
+	Result executeActivation(String role, String type,String mode, Map<String, Object> userMap,boolean smsFlag,Map<String,String> passwordMap);
+	
+	/**@version 2.0
+	 * 报名
+	 * @param role:角色(添加用户的角色,没有可以传null), type:(操作类型:后台、微信、APP....) userMap:参数   mode:具体操作(没有可以传null)
+	 * @return
+	 */
+	Result executeSignup(String role, String type, String mode,Map<String, Object> userMap);
+	
+	/**@version 2.0
+	 * 注册
+	 * @param reg
+	 * @param male
+	 * @return
+	 */
+	Result executeRegist(String role, String type,String mode,Map<String, Object> userMap);
+	
+	
+	/**
+	 * 删除报名
+	 * @param regIds 注册id
+	 * @return
+	 */
+	Result deleteRegistrations(String[] regIds);
+	
+	/**
+	 * 激活报名
+	 * @param regIds 注册id
+	 * @return
+	 */
+	Result doActiveRegistrations(String[] regIds,boolean smsFlag,Map<String,String> passwordMap);
+	
+	
+	/**
+	 * 冻结报名
+	 * @param regIds 注册id
+	 * @return
+	 */
+	Result doDeActiveRegistrations(String[] regIds);
+	
+	/**
+	 * 用户选课报名
+	 * @param classId
+	 * @param courseId
+	 * @return
+	 */
+	Result doRegClass(String classId, String courseId);
+	
+	/**
+	 * 游客选课报名
+	 * @param userMap
+	 * @return
+	 */
+	Result doVisitorRegClass(Map<String,Object> userMap);
+	
+	/**
+	 * 导入学员报名信息
+	 * @param file
+	 * @return
+	 */
+	Result doImportRegistration(String fullPath,String module , String classId);
+	
+	/**
+	 * 机构学员列表
+	 * @param orgId
+	 * @return
+	 */
+	public List<Map<String,Object>> queryOrgRegistrationList(String orgId);
+	/**
+	 * 学员注册列表 - 班级
+	 * @return
+	 */
+	List<Map<String,Object>> queryClassRegistrationList(String classId);
+	
+	/**
+	 * 导出得到注册信息
+	 * @return
+	 */
+	List<ExportUserRegistration> queryExportRegList(boolean orgFlag);
+	
+	/**
+	 * 判断是否报名
+	 * @param userId
+	 * @param classId
+	 * @return
+	 */
+	boolean hasRegistration(String userId,String classId);
+	
+	/**
+	 * 获取Q学友最新的账号号码
+	 * @return
+	 */
+	String doGetNewQxyAccount();
+	
+	
+	/**
+	 * 消息处理激活学员后续操作
+	 * @param userId
+	 * @param password
+	 * @param classId
+	 * @param regId
+	 * @return
+	 */
+	Result doOnsRegActive(String userId,String password,String classId,String regId);
+	
+	/**
+	 * 消息处理删除、冻结学员后续操作
+	 * @param userId
+	 * @param password
+	 * @param classId
+	 * @param regId
+	 * @return
+	 */
+	Result doOnsRegDeActive(String userIds,String classId);
+	
+	/**
+	 * 加入游客班级,不需要消耗账号
+	 */
+	Result insertClassVisitor(Map<String,Object> userMap);
+	
+	/**
+	 * 注册新用户信息准备
+	 * @return
+	 */
+	HashMap<String, Object> prepareUserInfoMap(String openId, String userId, String source, String wxSource);
+	
+	/**
+	 * 已存在用户 仅仅加入机构体验班
+	 * @param userMap
+	 * @return
+	 */
+	Result insertOnlyWXOrgVisitorCls(Map<String,Object> userMap);
+
+	/**
+	 * 给学员发送短信
+	 */
+	Result doSendSmsToUser(String regIds);
+	
+	/**
+	 * 异步处理学员激活所需要的操作
+	 * @return
+	 */
+	Result doOnsRegActive2(String userId,String password,String classId,String regId);
+	
+	/**
+	 * 保存自定义信息
+	 * @param data
+	 */
+	Result doSaveCustom(String data, String classId);
+	
+	/**
+	 * 获取自定义学员信息
+	 * @param data
+	 */
+//	List<OrgClassUserCustom> doInitCustomLst(String classId, String pageType, boolean isApp);
+	
+	/**
+	 * 学员转班
+	 * @param data
+	 */
+	Result doSaveTurn(List<String> regIds,String classId);
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java b/src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java
new file mode 100644
index 0000000..16d9c4a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java
@@ -0,0 +1,99 @@
+package com.qxueyou.scc.user.service;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.user.model.UserRole;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色接口
+ * 
+ * @author ody.yuan
+ *
+ */
+public interface IUserRoleService {
+
+	/**
+	 * 得到菜单
+	 * 
+	 * @return
+	 */
+	public Result queryMenus(String roleId);
+
+	/**
+	 * 取得当前角色是否编辑过 按钮权限
+	 * 
+	 * @return
+	 */
+	public boolean getButtonPrivilegeFlag(String orgId, String topOrgId, String roleId);
+
+	/**
+	 * 根据角色编码获取角色信息
+	 * 
+	 * @param roleCode
+	 * @return
+	 */
+	public UserRole queryRoleByCode(String roleCode);
+
+	/**
+	 * 获取角色列表
+	 */
+	public List<UserRole> getUserRoleLst(String keyword);
+
+	/**
+	 * 获取人员列表
+	 */
+	public Result getUserLstByRoleId(String roleId, Integer pageSize, Integer pageNum,String keyword);
+
+	/**
+	 * 删除人员
+	 */
+	public Result delete(String userId);
+
+	/**
+	 * 显示角色信息
+	 */
+	Result queryRoleDetail(String roleId);
+
+	/**
+	 * 修改角色信息
+	 * 
+	 * @param roleId
+	 * @param menuId
+	 */
+	Result updateRole(String roleId, String menuIds,String name);
+
+	/**
+	 * 删除角色
+	 * 
+	 * @param roleId
+	 * @return
+	 */
+	Result deleteRole(String roleId);
+
+	/**
+	 * 获取所有菜单列表
+	 * 
+	 * @return
+	 */
+	List<Map<String, Object>> findMenuLst();
+
+	/**
+	 * 新增角色
+	 * 
+	 * @param name
+	 * @param menuIds
+	 * @return
+	 */
+	Result addRole(String name,String roleType);
+
+	/**
+	 * 添加教师
+	 * 
+	 * @param teacherIds
+	 * @param roleId
+	 * @return
+	 */
+	Result addTeachers(String teacherIds, String roleId);
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/IUserService.java b/src/main/java/com/qxueyou/scc/user/service/IUserService.java
new file mode 100644
index 0000000..d80b6c0
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/IUserService.java
@@ -0,0 +1,120 @@
+package com.qxueyou.scc.user.service;
+
+import java.util.List;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.sys.model.CacheParamters;
+import com.qxueyou.scc.user.model.User;
+
+/**
+ * 用户接口
+ *
+ * @author 夏德虎
+ */
+public interface IUserService {
+
+    /**
+     * 初始化用户信息
+     *
+     * @param userId    用户ID
+     * @param needMenus 是否需要查询当前用户的菜单
+     * @return
+     */
+    UserInfoWrapper initUserInfoWrapper(CacheParamters param, boolean needMenus);
+
+    /**
+     * 新增用户
+     *
+     * @param name          姓名
+     * @param studentNumber 学号
+     * @param mobilePhone   手机号
+     * @return
+     */
+    User insertUser(String name, String account, String mobilePhone, String password, Boolean sex, String orgId);
+
+    /**
+     * 根据账户获取用户
+     *
+     * @param account 账号
+     * @return
+     */
+    User getUserByAccount(String account, String orgId);
+
+    /**
+     * 为用户添加角色
+     *
+     * @param userId 用户ID
+     * @param roleId 角色ID
+     * @return
+     */
+    Result addRole(String userId, String roleId);
+
+    /**
+     * 用户设置
+     *
+     * @param userId      用户id
+     * @param oldPassword 旧密码
+     * @param newPasswd   新密码
+     * @param imgPaths    头像图片路径
+     * @return
+     */
+    Result updatePassword(String userId, String oldPassword, String newPasswd);
+    
+    /**
+     * 用户设置头像
+     * 
+     * @param headPath
+     * @return
+     */
+    Result updateUserHead(String userId, String headPath);
+    
+    /**
+     * 用户设置头像
+     * 
+     * @param headPath
+     * @return
+     */
+    Result updateUserInfo(String userId, String mobilePhone);
+
+    /**
+     * 用户修改密码
+     *
+     * @param password 原密码
+     */
+    Result updatePassword(String userId, String password);
+
+    /**
+     * 判断用户是否为管理员
+     *
+     * @return
+     */
+    boolean isAdmin();
+
+    /**
+     * 判断用户是否为教师
+     *
+     * @return
+     */
+    boolean isTeacher();
+
+    /**
+     * 批量保存用户信息
+     *
+     * @param lstUser
+     * @return
+     */
+    boolean doBatchUpdateUser(List<User> lstUser);
+
+    /**
+     * 用户的更新
+     */
+    Result updateUser(String userId, String name, String account, String mobilePhone, String password, Boolean sex);
+
+    /**
+     * 判断用户是否存在
+     *
+     * @param userId
+     */
+    boolean exists(String account);
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/IUserSignService.java b/src/main/java/com/qxueyou/scc/user/service/IUserSignService.java
new file mode 100644
index 0000000..1978a36
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/IUserSignService.java
@@ -0,0 +1,29 @@
+package com.qxueyou.scc.user.service;
+
+import com.qxueyou.scc.user.model.UserSign;
+
+import java.util.List;
+
+/**
+ * @author luodong
+ * @version 1.0
+ * @date 2020/8/20 17:47
+ */
+public interface IUserSignService {
+
+	/**
+	 * 根据申请状态获取
+	 */
+	List<UserSign> findByStatus(int status);
+
+	/**
+	 * 添加申请
+	 */
+	void addSign(UserSign userSign);
+
+	/**
+	 * 修改状态
+	 * @param
+	 */
+	void updateStatus(UserSign userSign);
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java b/src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java
new file mode 100644
index 0000000..e33c6cb
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java
@@ -0,0 +1,133 @@
+package com.qxueyou.scc.user.service.impl;
+
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.user.model.UserOperate;
+import com.qxueyou.scc.user.service.IUserOperateService;
+
+/**
+ * 用户操作服务
+ * @author ody.yuan
+ *
+ */
+@Service
+public class UserOperateService extends CommonAppService implements IUserOperateService {
+	
+	ObjectMapper mapper = new ObjectMapper();
+	
+	
+	/**
+	 * 插入或者更新user_operate,更新用户登录状态
+	 * 
+	 * @param userId
+	 * @param userName
+	 * @param account
+	 * @param ip
+	 * @param userAgent
+	 * @return
+	 */
+	public boolean saveUserOperate(String userId,String userName,String account, String ip,String version,String platform) {
+		
+		boolean firstFlag = false;
+		String hql = "from UserOperate where deleteFlag is false and userId = ? ";
+		// 查询用户信息
+		UserOperate objOperate = this.findUnique(hql, CollectionUtils.newList(userId), UserOperate.class);
+
+		if (null == objOperate) {
+			
+			objOperate =initNewUserOperate(userName, userId, ip, account, version, platform);
+			firstFlag = true;
+			
+		} else {
+			
+			initUpdateUserOperate(objOperate, version, platform);
+		}
+
+		// 修改信息
+		Date now = new Date(System.currentTimeMillis());
+		objOperate.setUpdateTime(now);
+		objOperate.setLastLoginTime(now);
+		objOperate.setLastLoginTIp(ip);
+		
+		// 执行update
+		this.save(objOperate);
+
+		return firstFlag;
+	}
+	
+	private UserOperate initNewUserOperate(String userName,String userId,String ip, String account, String version, String platform ){
+		
+		UserOperate objOperate = new UserOperate();
+		Date now = new Date(System.currentTimeMillis());
+		
+		TraceUtils.setCreateActiveTrace(objOperate);
+		objOperate.setFirstLoginTime(now);
+		objOperate.setFirstLoginIp(ip);
+		objOperate.setUserId(userId);
+		objOperate.setUserName(userName);
+		objOperate.setAccount(account);
+		
+		// 次数
+		objOperate.setLoginDays(1);
+		objOperate.setLoginTimes(1);
+		objOperate.setSumLoginDays(1);
+		objOperate.setSumLoginTimes(1);
+		
+		//新增平台版本
+		objOperate.setAppVersion(StringUtils.isNotBlank(version) ? version : null );
+		if(StringUtils.isNotBlank(platform)){
+			objOperate.setPlatform(platform);
+			objOperate.setAndroidLoginTimes( "Android".equalsIgnoreCase(platform) ? 1 : 0 );
+			objOperate.setIosLoginTimes("iOS".equalsIgnoreCase(platform) ? 1 : 0);
+		}
+		
+		return objOperate ;
+	}
+	
+	private void initUpdateUserOperate(UserOperate objOperate, String version, String platform){
+		
+		Date now = new Date(System.currentTimeMillis());
+		
+		objOperate.setSumLoginTimes(objOperate.getSumLoginTimes() + 1);
+		initUserOperateLoinInfo(objOperate, now);
+		
+		//修改最后一次平台版本
+		objOperate.setAppVersion(StringUtils.isNotBlank(version) ? version : objOperate.getAppVersion() );
+		if(StringUtils.isNotBlank(platform)){
+			objOperate.setPlatform(platform);
+			objOperate.setAndroidLoginTimes( "Android".equalsIgnoreCase(platform) ? ( 1 + objOperate.getAndroidLoginTimes()) : objOperate.getAndroidLoginTimes() );
+			objOperate.setIosLoginTimes("iOS".equalsIgnoreCase(platform) ? ( 1 + objOperate.getIosLoginTimes()): objOperate.getIosLoginTimes());
+		}
+		
+	}
+	
+	private void initUserOperateLoinInfo(UserOperate objOperate,Date now){
+		
+		Date firstLoginTime = objOperate.getFirstLoginTime();
+		Date lastLoginTime = objOperate.getLastLoginTime();
+		boolean flag = (now.getTime() - firstLoginTime.getTime()) / 86400000 <= 30;
+		
+		if (null != firstLoginTime && flag) {
+			// 新增30天登录次数
+			objOperate.setLoginTimes(objOperate.getLoginTimes() + 1);
+			flag = (now.getTime() - lastLoginTime.getTime()) / 86400000 > 0;
+			if (null != lastLoginTime && flag) {
+				// 新增30天登录天数
+				objOperate.setLoginDays(objOperate.getLoginDays() + 1);
+			}
+		}
+		// 总登录天数
+		flag = (now.getTime() - lastLoginTime.getTime()) / 86400000 > 0;
+		if (null != lastLoginTime && flag) {
+			objOperate.setSumLoginDays(objOperate.getSumLoginDays() + 1);
+		}
+		
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/impl/UserRegistrationService.java b/src/main/java/com/qxueyou/scc/user/service/impl/UserRegistrationService.java
new file mode 100644
index 0000000..49779fc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/impl/UserRegistrationService.java
@@ -0,0 +1,2944 @@
+package com.qxueyou.scc.user.service.impl;
+
+import java.io.File;
+//import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+//import org.hibernate.exception.ConstraintViolationException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+//import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Constants;
+import com.qxueyou.scc.base.model.FilePathConstants;
+//import com.qxueyou.scc.base.model.ONSMsg;
+import com.qxueyou.scc.base.model.Result;
+//import com.qxueyou.scc.base.service.ICacheService;
+import com.qxueyou.scc.base.service.IFileUploadService;
+//import com.qxueyou.scc.base.service.IWeixinService;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+//import com.qxueyou.scc.base.service.impl.CommonONSProducer;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.NumRandomUtils;
+import com.qxueyou.scc.base.util.RSAUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.base.util.UUIDUtils;
+import com.qxueyou.scc.config.SccConfig;
+//import com.qxueyou.scc.financial.service.ITransFlowService;
+import com.qxueyou.scc.msg.model.MsgFriend;
+import com.qxueyou.scc.msg.model.MsgGroup;
+import com.qxueyou.scc.msg.model.MsgGroupUserRe;
+import com.qxueyou.scc.msg.model.MsgUser;
+//import com.qxueyou.scc.msg.service.IMessageSettingService;
+//import com.qxueyou.scc.msg.service.IMsgVenderService;
+import com.qxueyou.scc.notice.model.Notice;
+import com.qxueyou.scc.org.model.OrgClassUserCustom;
+import com.qxueyou.scc.org.model.OrgStudent;
+import com.qxueyou.scc.school.model.SchRank;
+//import com.qxueyou.scc.school.service.IScheduleService;
+import com.qxueyou.scc.sms.model.SmsConfig;
+import com.qxueyou.scc.sms.model.SmsContants;
+//import com.qxueyou.scc.sms.service.ISMSService;
+import com.qxueyou.scc.sms.utils.SmsUtils;
+import com.qxueyou.scc.sys.model.ResponseResult;
+import com.qxueyou.scc.sys.model.SysConfig;
+import com.qxueyou.scc.sys.model.SysFileUploadTrace;
+import com.qxueyou.scc.sys.model.SysLog;
+import com.qxueyou.scc.sys.service.ISysLogService;
+import com.qxueyou.scc.user.dao.RegistrationDAO;
+import com.qxueyou.scc.user.model.ExportUserRegistration;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserExtend;
+import com.qxueyou.scc.user.model.UserRegistration;
+import com.qxueyou.scc.user.model.UserRegistrationCustom;
+import com.qxueyou.scc.user.model.UserStudent;
+import com.qxueyou.scc.user.service.IUserRegistrationService;
+import com.qxueyou.scc.user.service.IUserService;
+import com.qxueyou.scc.user.util.ExcelReader;
+
+@Service
+@EnableConfigurationProperties(SccConfig.class)
+public class UserRegistrationService extends CommonAppService implements IUserRegistrationService {
+
+	private static final String SOURCE = "source";
+
+	private static final String ADD_REG_CLASS_IDS = "addRegClassIds";
+
+	private static final String IMG_PATH = "imgPath";
+
+	private static final String USER_NAME = "userName";
+
+	private static final String MOBILE_PHONE = "mobilePhone";
+
+	private static final String PASSWORD = "password";
+
+	private static final String USER_ID = "userId";
+
+	private static final String CLASS_ID = "classId";
+	
+	private static final String REG_ID = "regId";
+	
+
+	@Autowired
+	SccConfig sccConfig;
+	
+	@Autowired
+	IUserService userService;
+	
+	@Autowired
+	private ISysLogService sysLogService;
+	
+	
+	@Autowired
+	IFileUploadService fileUploadService;
+	
+	private final Logger log = LogManager.getLogger("UserRegistrationService");
+
+	private RegistrationDAO registrationDAO;
+	
+	public RegistrationDAO getRegistrationDAO() {
+		return registrationDAO;
+	}
+	
+	/**
+	 * 依赖注入
+	 *
+	 * @param registrationDAO
+	 */
+	@Autowired(required = false)
+	public void setRegistrationDAO(@Qualifier("registrationDAO") RegistrationDAO registrationDAO) {
+		this.registrationDAO = registrationDAO;
+	}
+
+
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.user.service.IUserRegistrationService#addRegistration(javax.servlet.Registration)
+	 */
+	@Override
+	public Result insertRegistration(UserRegistration reg,String source) {
+
+		return insertRegistration(reg, true, source, null);
+	}
+	
+	/**
+	 * 新增报名
+	 * 
+	 * @param reg
+	 * @param companyName
+	 * @return
+	 */
+	public Result insertRegistration(UserRegistration reg, String companyName, String source ) {
+		// 创建用户
+		User user = getUser(reg, true, companyName, source);
+		// 更新user_name
+		user.setName(reg.getUserName());
+		
+//		userService.saveUserTrace(user, false, null);
+		
+		
+		// 创建注册信息
+		TraceUtils.setCreateTrace(reg);
+		reg.setDeleteFlag(false);
+		reg.setStatus(UserRegistration.STATUS_DEACTIVE);
+		reg.setUserId(user.getUserId());
+		reg.setUserName(user.getName());
+		reg.setRegistrationTime(new Date());
+
+		// 设置科目信息
+		ClsClass cls = read(ClsClass.class, reg.getClassId());
+		cls.setStudentCount(cls.getStudentCount()+1);
+		TraceUtils.setUpdateTrace(cls);
+		save(cls);
+		
+		reg.setCollegeCourseId(cls.getCollegeCourseId());
+
+		return save(reg);
+	}
+
+	private User getUser(UserRegistration reg, boolean male, String companyName, String source ) {
+
+		// 检查用户表此用户是否存在
+		String hql = "from User where deleteFlag is false and mobilePhone = ? ";
+
+		List<User> lstUser = this.find(hql, CollectionUtils.newList(reg.getMobilePhone()), User.class);
+
+		if (!lstUser.isEmpty()) {
+			return lstUser.get(0);
+		}
+
+		User u = new User();
+
+		TraceUtils.setCreateTrace(u);
+		u.setDeleteFlag(false);
+
+		u.setAccount(this.doGetNewQxyAccount());
+		u.setImgPath(FilePathConstants.getUserDefaultImg());
+		u.setMobilePhone(reg.getMobilePhone());
+		u.setName(reg.getUserName());
+		u.setPassword(RSAUtils.encrypt(NumRandomUtils.randomSixNum()));
+
+		return u;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.user.service.IUserRegistrationService#addRegistration(javax.servlet.Registration)
+	 */
+	@Override
+	public Result insertRegistration(UserRegistration reg, boolean male, String source, String signupInfo) {
+
+		// 创建用户
+		User user = getUser(reg, male, null,source);
+		// 更新user_name
+		user.setName(reg.getUserName());
+//		userService.saveUserTrace(user, false, null);
+		
+		// 创建注册信息
+		TraceUtils.setCreateTrace(reg);
+		reg.setDeleteFlag(false);
+		reg.setStatus(UserRegistration.STATUS_DEACTIVE);
+		reg.setUserId(user.getUserId());
+		reg.setUserName(user.getName());
+		reg.setRegistrationTime(new Date());
+		// 更新班级成员
+		this.updateStudentCount(reg.getClassId(), 1, 1);
+		
+		// 设置科目信息 
+		ClsClass cls = read(ClsClass.class, reg.getClassId());
+		reg.setCollegeCourseId(cls.getCollegeCourseId());
+		
+		save(reg);
+		
+		//自定义信息
+		insertCustomInfo(reg.getRegistrationId(), user.getUserId(), cls.getClassId(), signupInfo);
+		// 保存学员的操作记录
+		this.doInsertRegLog("新增学员", reg.getRegistrationId(), reg.getMobilePhone() );
+		
+		return new Result(true, reg.getRegistrationId());
+	}
+	
+	public Result doInsertRegLog(String operator,String regId,String mobile  ){
+		
+		SysLog lg = new SysLog();
+
+		TraceUtils.setCreateActiveTrace(lg);
+		lg.setDeleteFlag(false);
+		lg.setContent(operator + ":" + regId );
+		lg.setDesp(mobile);
+		lg.setModule("USER-REGISTRATION");
+		lg.setType(SysLog.LOG_TYPE_BUSINESS);
+		
+		
+		if( null != ClientUtils.getUserInfo()){
+			lg.setUserId(ClientUtils.getUserId());
+			lg.setUserName(ClientUtils.getUserName());
+		}else{
+			lg.setUserId("admin");
+			lg.setUserName("admin");
+		}
+		
+		save(lg);
+		
+		return new Result(true);
+		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.user.service.IUserRegistrationService#deleteRegistrations(java.lang.String[])
+	 */
+	@Override
+	public Result deleteRegistrations(String[] regIds) {
+
+		String firstRegId = null ;
+		
+		String arrId[] = new String[regIds.length];
+		StringBuffer strArrId = new StringBuffer(150);
+		int index = 0 ;
+		for (String regId : regIds) {
+			firstRegId = regId ;
+			Result result = deleteRegistration(regId);
+			
+			arrId[index] = result.getMsg() ;
+			strArrId.append(arrId[index]).append('|');
+			index++;
+			
+		}
+		
+		
+		UserRegistration ur = this.read(UserRegistration.class, firstRegId);
+		this.updateStudentCount(ur.getClassId(), regIds.length, 2);
+
+		bulkUpdateInLoop("update OrgStudent set deleteFlag = true where classId ='" + ur.getClassId() + "' and userId = ? ", arrId);
+		
+		//同步环信操作
+		Map<String,String> params = new HashMap<String,String>();
+		params.put("userIds", strArrId.toString());
+		params.put(CLASS_ID, ur.getClassId());
+		sendMsgActiveMsg(params,2);
+		
+		return new Result(true);
+
+	}
+	/**
+	 * 删除注册信息
+	 * 
+	 * @param regId
+	 * @return
+	 */
+	public Result deleteRegistration(String regId) {
+
+		UserRegistration reg = read(UserRegistration.class, regId);
+
+		reg.setDeleteFlag(true);
+
+		save(reg);
+		
+		//记录学员操作记录
+		this.doInsertRegLog("删除学员", reg.getRegistrationId(), reg.getMobilePhone() );
+
+		return new Result(true,reg.getUserId());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.user.service.IUserRegistrationService#doActiveRegistrations(java.lang.String[])
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Result doActiveRegistrations(String[] regIds,boolean smsFlag,Map<String,String> passwordMap) {
+		
+		List<Map<String,String>> lst = new ArrayList<Map<String,String>>(regIds.length);
+
+		// 清除缓存
+		clearCache();
+		
+		for (String regId : regIds) {
+			Result objResult = doActiveRegistration(regId,smsFlag,passwordMap.get(regId));
+			if (!objResult.isSuccess()) {
+				return objResult;
+			}
+			
+			if(null != objResult.getData("regActMap")){
+				lst.add((Map<String,String>)objResult.getData("regActMap"));
+			}
+			
+		}
+		
+		// 放在事务最末尾
+		for(Map<String,String> map : lst ){
+			sendMsgActiveMsg(map,1);
+		}
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 激活注册用户信息
+	 * 
+	 * @param regId
+	 * @return
+	 */
+	private Result doActiveRegistration(String regId,boolean smsFlag,String password) {
+
+		UserRegistration reg = read(UserRegistration.class, regId);
+		if(reg==null||reg.getStatus()==UserRegistration.STATUS_ACTIVE){
+			return new Result(true);
+		}
+		
+		//判断账号 是否可以激活
+		Result objResult = doAccountSwitchCheck(reg);
+		if (!objResult.isSuccess()) {
+			return objResult;
+		}
+		
+		reg.setStatus(UserRegistration.STATUS_ACTIVE);
+		if(null == reg.getActivationTime()){
+			reg.setActivationTime(new Date());
+		}
+		// 添加 MsgUser
+		MsgUser msgUser = addMsgUser(reg);
+
+		// 添加 Student
+		Result result = addStudent(reg);
+
+		// 添加org_student
+		addOrgStudent(reg, result.getData("studentId").toString());
+		
+		// 添加好友: 班级通知,学校通知
+		addFridends(msgUser);
+		
+		// 激活签到表的是否班级成员状态
+		bulkUpdateInLoop("update SchSignStatistics set registeFlag = true where userId = ?", new Object[] { reg.getUserId() });
+
+		// 添加 排名记录
+		addRank(reg);
+		
+		//发送短信
+		doSendRegActivityMsg(smsFlag,reg,password);
+		
+		// 保存学员的操作记录
+		doInsertRegLog("激活学员", reg.getRegistrationId().concat(objResult.getMsg()),  reg.getMobilePhone() );
+		
+		// 异步处理激活学员所需要的操作
+		result = new Result(true);
+		result.addData("regActMap", CollectionUtils.newStringMap(
+				USER_ID,msgUser.getUserId(),
+				PASSWORD,msgUser.getPassword(),
+				CLASS_ID,reg.getClassId(),
+				REG_ID,reg.getRegistrationId()
+				));
+		
+		return result;
+
+	}
+	
+	/**
+	 * 激活发送短信
+	 * @param smsFlag
+	 * @param reg
+	 */
+	@SuppressWarnings("unused")
+	private void doSendRegActivityMsg(boolean smsFlag,UserRegistration reg,String password){
+		
+		if(ClientUtils.getUserInfo()==null){
+			return;
+		}
+		
+		if(smsFlag){
+			//最近90天内是否登入过系统,如果登入过则不发送密码
+			String isLoginHql = "select count(1) from UserOperate o where o.userId = ? and (to_days(sysdate()) - to_days(o.lastLoginTime)) <= 90";
+			int isLogin = this.findCount(isLoginHql, CollectionUtils.newList(reg.getUserId()));
+			String hql = " from SmsConfig where topOrgId = ? and module = ?";
+			SmsConfig config = findUnique(hql, CollectionUtils.newList(ClientUtils.getTopOrgId(),SmsConfig.REG_ACTIVITY_MODULE), SmsConfig.class);
+			String className = reg.getOrgClass().getName().replaceAll("【", "[").replaceAll("】", "]");
+			String userName = reg.getUserName().replaceAll("【", "[").replaceAll("】", "]");
+		}
+	}
+	
+	/**
+	 * 检测是否能激活学员,查看班级是否付费放在单个激活方法里面,防止外部传入不同班级
+	 * @param reg
+	 * @return
+	 */
+	private Result doAccountSwitchCheck(UserRegistration reg){
+		return null;
+	}
+	
+
+
+	
+
+	
+
+	/**
+	 * 添加排名记录
+	 * 
+	 * @param reg
+	 */
+	private void addRank(UserRegistration reg) {
+
+		String hql = "from SchRank r where r.userId=? and r.rankType=?";
+
+		List<SchRank> rankLst = find(hql, CollectionUtils.newList(reg.getUserId(), SchRank.RANK_TYPE_SCORE), SchRank.class);
+
+		boolean rankCls = false;
+		boolean rankQXueyou = false;
+
+		for (SchRank rank : rankLst) {
+			if (SchRank.SCOPE_TYPE_QXUEYOU.equals(rank.getScopeType())) {
+				rankQXueyou = true;
+			}
+			if (reg.getClassId().equals(rank.getScopeId())) {
+				rankCls = true;
+			}
+		}
+
+		if (!rankCls) {
+
+			SchRank rankNew = newSchRank(reg);
+			rankNew.setScopeId(reg.getClassId());
+			rankNew.setScopeType(SchRank.SCOPE_TYPE_CLASS);
+
+			save(rankNew);
+		}
+
+		if (!rankQXueyou) {
+
+			SchRank rankNew = newSchRank(reg);
+			rankNew.setScopeId("null");
+			rankNew.setScopeType(SchRank.SCOPE_TYPE_QXUEYOU);
+
+			save(rankNew);
+		}
+	}
+
+	/**
+	 * 新建排名记录
+	 * 
+	 * @param reg
+	 * @return
+	 */
+	private SchRank newSchRank(UserRegistration reg) {
+		SchRank rankNew = new SchRank();
+
+		TraceUtils.setCreateTrace(rankNew);
+		rankNew.setDeleteFlag(false);
+
+		rankNew.setRankType(SchRank.RANK_TYPE_SCORE);
+		rankNew.setUserId(reg.getUserId());
+		rankNew.setValue(BigDecimal.valueOf(0l));
+		return rankNew;
+	}
+
+	/**
+	 * 新增群成员
+	 * 
+	 * @param reg
+	 */
+	@SuppressWarnings({ "unused", "null" })
+	private void insertGroupMember(UserRegistration reg, MsgUser msgUser) {
+		
+		MsgGroup group = read(MsgGroup.class, reg.getClassId());
+		if (group == null) {
+			
+			group = insertNewGroup(reg,msgUser);
+			
+		}else if(StringUtils.isBlank(group.getEasmobGroupId())){
+			
+//			Result result = easeMobService.addGroup(group.getName(), group.getDescription(), 500000, msgUser.getUserId());
+			Result result = null;
+			
+			String easemobGroupId = result.getMsg() ;
+			if(result.isSuccess() && StringUtils.isNotBlank(easemobGroupId)){
+				group.setEasmobGroupId(easemobGroupId);
+				TraceUtils.setUpdateTrace(group);
+				save(group);
+			}
+		}
+
+		int existNoticeClass = findCount("from MsgGroupUserRe where deleteFlag is false and userId = ? and groupId = ?", CollectionUtils.newList(reg.getUserId(), group.getGroupId()));
+
+		if (existNoticeClass == 0) {
+			MsgGroupUserRe member = new MsgGroupUserRe();
+			TraceUtils.setCreateTrace(member);
+			member.setUserId(msgUser.getUserId());
+			member.setGroupId(group.getGroupId());
+			member.setDeleteFlag(false);
+			save(member);
+		}
+		
+		// 加环信群
+		if( null != group && StringUtils.isNotBlank(group.getEasmobGroupId()) ){
+			// 添加环信成员
+//			Result result = easeMobService.addGroupMember(group.getEasmobGroupId() , msgUser.getUserId() );
+		}
+
+	}
+
+	/**
+	 * 新增 群+ 环信群
+	 * 
+	 * @param reg
+	 */
+	@SuppressWarnings("null")
+	private MsgGroup insertNewGroup(UserRegistration reg, MsgUser msgUser) {
+		
+		ClsClass orgClass = reg.getOrgClass();
+		
+		//新增环信群
+//		Result result = easeMobService.addGroup(orgClass.getName(), orgClass.getName() + "群 交流", 500000, msgUser.getUserId());
+		Result result = null;
+		MsgGroup group = new MsgGroup();
+
+		TraceUtils.setCreateTrace(group);
+		group.setDeleteFlag(false);
+
+		group.setDescription(orgClass.getName() + "群 交流");
+		group.setName(orgClass.getName());
+		group.setGroupId(reg.getClassId());
+		
+		if(result.isSuccess()){
+			group.setEasmobGroupId(result.getMsg());
+		}
+
+		save(group);
+		
+		return group;
+	}
+
+	/**
+	 * 添加好友信息 + 环信好友信息
+	 * 
+	 * @param reg
+	 * @param msgUser
+	 */
+	private void addFridends(MsgUser msgUser) {
+
+		int existNoticeClass = findCount("from MsgFriend where deleteFlag is false and userIdTo = ? and userIdFrom = ?", CollectionUtils.newList(Notice.NOTICE_CLASS_MSG_USER_ID, msgUser.getUserId()));
+
+		int existNoticeOrg = findCount("from MsgFriend where deleteFlag is false and userIdTo = ? and userIdFrom = ?", CollectionUtils.newList(Notice.NOTICE_ORG_MSG_USER_ID, msgUser.getUserId()));
+
+		if (existNoticeClass == 0) {
+			MsgFriend friend = new MsgFriend();
+			TraceUtils.setCreateTrace(friend);
+			friend.setUserIdFrom(msgUser.getUserId());
+			friend.setUserIdTo(Notice.NOTICE_CLASS_MSG_USER_ID);
+			save(friend);
+		}
+
+		if (existNoticeOrg == 0) {
+			MsgFriend friend = new MsgFriend();
+			TraceUtils.setCreateTrace(friend);
+			friend.setUserIdFrom(msgUser.getUserId());
+			friend.setUserIdTo(Notice.NOTICE_ORG_MSG_USER_ID);
+			save(friend);
+		}
+		
+	}
+
+	/**
+	 * 注册时增加学员信息
+	 * 
+	 * @param reg
+	 */
+	private Result addStudent(UserRegistration reg) {
+		String hql = "from UserStudent u where u.deleteFlag is false and u.userId = ? ";
+		
+		Result result = new Result(true);
+
+		List<UserStudent> studentsLst = find(hql, CollectionUtils.newList(reg.getUserId()), UserStudent.class);
+
+		if (studentsLst.isEmpty()) {
+			User user = reg.getUser();
+			UserStudent student = new UserStudent();
+
+			TraceUtils.setCreateTrace(student);
+			student.setDeleteFlag(false);
+
+			student.setClassId(reg.getClassId());
+			student.setUserId(user.getUserId());
+			save(student);
+
+			
+			result.addData("studentId", student.getStudentId());
+			return result;
+		}
+		
+		result.addData("studentId",studentsLst.get(0).getStudentId());
+		return result;
+	}
+
+	private void addOrgStudent(UserRegistration reg, String studentId) {
+		String hql = " from OrgStudent where userId=? and deleteFlag is false and classId=?";
+
+		OrgStudent student = findUnique(hql, CollectionUtils.newList(reg.getUserId(), reg.getClassId()), OrgStudent.class);
+
+		if (student == null) {
+			OrgStudent os = new OrgStudent();
+			TraceUtils.setCreateTrace(os);
+			
+			os.setClassId(reg.getClassId());
+			os.setDeleteFlag(false);
+			os.setStudentId(studentId);
+			os.setUserId(reg.getUserId());
+			
+			save(os);
+		}
+	}
+
+	/**
+	 * 注册时增加消息用户
+	 * 
+	 * @param reg
+	 */
+	private MsgUser addMsgUser(UserRegistration reg) {
+
+		MsgUser msgUser = read(MsgUser.class, reg.getUserId());
+
+		if (msgUser == null) {
+			User user = reg.getUser();
+			MsgUser u = new MsgUser();
+
+			TraceUtils.setCreateTrace(u);
+			u.setDeleteFlag(false);
+
+			u.setAccount(user.getAccount());
+			u.setAlias(user.getName());
+			u.setPassword(user.getPassword());
+			u.setPortrait(user.getImgPath());
+			u.setRealName(user.getName());
+			u.setUserId(user.getUserId());
+//			u.setSex(user.getSex());
+			insert(u);
+			
+			return u;
+		}
+
+		return msgUser;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.qxueyou.scc.user.service.IUserRegistrationService#doDeActiveRegistrations(java.lang.String[])
+	 */
+	@Override
+	public Result doDeActiveRegistrations(String[] regIds) {
+		return changeStateBulk(regIds, UserRegistration.STATUS_DEACTIVE);
+	}
+
+	/**
+	 * 通过简单循环, 修改报名状态
+	 * 
+	 * @param regIds
+	 *            报名信息id数组
+	 * @param state
+	 *            要修改的状态
+	 * @return
+	 */
+	private Result changeStateBulk(String[] regIds, short state) {
+		String hql = "update UserRegistration set status = " + state + " where registrationId=?";
+		Result obj = bulkUpdateInLoop(hql, regIds);
+		
+		// 更新是否班级成员
+		String arrId[] = null ;
+		String classId = null ;
+		StringBuffer strArrId = new StringBuffer(150);
+		
+		if (regIds != null) {
+			arrId = new String[regIds.length];
+			for (int i = 0; i < regIds.length; i++) {
+				UserRegistration ur = read(UserRegistration.class, regIds[i]);
+				if (null != ur) {
+					arrId[i] = ur.getUserId();
+					strArrId.append(arrId[i]).append('|') ;
+					classId = ur.getClassId();
+					
+					// 保存学员的操作记录
+					this.doInsertRegLog("冻结学员", ur.getRegistrationId(),  ur.getMobilePhone() );
+					
+				}
+			}
+		}
+		
+		if (arrId != null && StringUtils.isNotBlank(classId)) {
+			
+			obj = bulkUpdateInLoop("update OrgStudent set deleteFlag = true where classId ='" + classId + "' and userId = ? ", arrId);
+			
+			obj = bulkUpdateInLoop("update SchSignStatistics set registeFlag = false where userId = ?", arrId);
+			
+			//同步环信操作
+			Map<String,String> params = new HashMap<String,String>();
+			params.put("userIds", strArrId.toString());
+			params.put(CLASS_ID, classId);
+			sendMsgActiveMsg(params,2);
+			
+		}
+
+		return obj;
+	}
+
+	/**
+	 * @version 2.0 同步生成用户以及用户注册信息
+	 * @param mobilePhone
+	 * @param password
+	 * @param salesCode
+	 * @return
+	 *//*
+	@SuppressWarnings("unused")
+	@Override
+	public ResponseResult doGenerateUserRegRecord(Map<String, Object> userMap,boolean flag) {
+		String mobilePhone = String.valueOf(userMap.get(MOBILE_PHONE));
+		String userName = String.valueOf(userMap.get(USER_NAME));
+		UserExtend userEx = (UserExtend) userMap.get("userEx");
+		String signupInfo = (String) userMap.get("signupInfo");
+		
+		User user = null;
+		if(null != userMap.get("openId") && null != userMap.get("verifyCode") && !"".equals(userMap.get("verifyCode"))){ // 微信端报名(为自己报名未绑定状态)
+			UserReWeixin weixin =  null;
+//			UserReWeixin weixin = weixinCommonService.queryUserReWxByOpenId(String.valueOf(userMap.get("openId")));
+			
+			String hql = "from User where deleteFlag is false and mobilePhone = ?";
+			user = findUnique(hql, CollectionUtils.newList(mobilePhone), User.class);
+			
+			if(null == user && null != weixin){ // 验证报名的手机号是否为Q学友用户(是:取手机号用户,否:去openId关联的用户)
+				   
+				user = read(User.class, weixin.getUserId());
+				if(user != null){
+					TraceUtils.setUpdateTrace(user);
+					user.setMobilePhone(mobilePhone);
+					user.setName(userName);
+				}
+			}
+		}
+		
+		if(user == null){
+			user = generateUser(mobilePhone);
+		}
+		
+		insertUser(user,userMap); // 插入User
+//		insertUserStringExtend(userMap,user); // 插入userStringextend
+		doUserExtend(user.getUserId(), userEx,false); // 插入自定义用户信息
+		
+		// 三个体验班级
+//		SysConfig sc = cacheService.get(ADD_REG_CLASS_IDS, SysConfig.class);
+		SysConfig sc  = null;
+		if(null==sc){
+			String hql = " from SysConfig where configKey=?";
+			sc = findUnique(hql, CollectionUtils.newList(ADD_REG_CLASS_IDS), SysConfig.class);
+			//加入缓存
+//			cacheService.set(ADD_REG_CLASS_IDS, 24*60*60, sc);
+		}
+		
+		String scValue = userMap.get(CLASS_ID).toString();
+		
+		if(null!=sc){
+			scValue = sc.getValue()+","+userMap.get(CLASS_ID);
+		}
+		
+		String classIds []= scValue.split(",");
+		
+		List<OrgClass> lstClass = new ArrayList<OrgClass>();
+		Map<String,String> classReg = new HashMap<String, String>();
+		//加入额外三个班级
+		String regId = insertDefaultClass(classIds,userMap,lstClass,user,classReg);
+		
+		//自定义信息
+		insertCustomInfo(regId, user.getUserId(), userMap.get(CLASS_ID).toString(), signupInfo);
+		// 返回用户id
+		ResponseResult result = new ResponseResult(true);
+		result.setUserId(user.getUserId());
+		result.setRegId(regId);
+		
+		//生成订单
+		doGenerateOrder(flag,lstClass,userMap,user,classReg,result);
+	
+		return result;
+	}*/
+	
+	/**
+	 * 保存自定义信息
+	 * 
+	 * @param regId 注册id
+	 * @param userId 用户id
+	 * @param classId 班级id
+	 * @param signupInfo 学员填写信息
+	 */
+	private void insertCustomInfo(String regId, String userId, String classId, String signupInfo){
+		if(StringUtils.isEmpty(signupInfo) || "null".equals(signupInfo)){
+			return;
+		}
+		
+		List<UserRegistrationCustom> customInfos = JSONArray.parseArray(signupInfo, UserRegistrationCustom.class);
+		List<UserRegistrationCustom> newCustomInfos = new ArrayList<UserRegistrationCustom>();
+		if(customInfos != null && !customInfos.isEmpty()){
+			for(UserRegistrationCustom customInfo: customInfos){
+				if(StringUtils.isEmpty(customInfo.getRegCustomId())){
+					customInfo.setClassId(classId);
+					customInfo.setUserId(userId);
+					customInfo.setRegistrationId(regId);
+					customInfo.setDeleteFlag(false);
+					TraceUtils.setCreateTrace(customInfo);
+					
+					newCustomInfos.add(customInfo);
+				}else{
+					UserRegistrationCustom oldUserCustom = this.read(UserRegistrationCustom.class, customInfo.getRegCustomId());
+					oldUserCustom.setDeleteFlag(false);
+					oldUserCustom.setCustomValue(customInfo.getCustomValue());
+					TraceUtils.setUpdateTrace(oldUserCustom);
+					
+					newCustomInfos.add(oldUserCustom);
+				}
+			}
+			
+			this.saveOrUpdateAll(newCustomInfos);
+		}
+	}
+	
+	/**
+	 * 插入user
+	 * @param user
+	 * @param userMap
+	 */
+	private void insertUser(User user,Map<String, Object> userMap){
+		if (StringUtils.isBlank(user.getUserId())) {
+			TraceUtils.setCreateTrace(user);
+
+			if (null!=userMap.get(MOBILE_PHONE)) {
+				user.setMobilePhone(String.valueOf(userMap.get(MOBILE_PHONE)));
+			}
+			if (null!=userMap.get(PASSWORD)) {
+				user.setPassword(RSAUtils.encrypt(String.valueOf(userMap.get(PASSWORD))));
+			} else {
+				user.setPassword(RSAUtils.encrypt("hello"));
+			}
+			if (StringUtils.isBlank(user.getUserId()) && userMap.get(USER_NAME) != null) {
+				user.setName(String.valueOf(userMap.get(USER_NAME)));
+			}
+			if (StringUtils.isBlank(user.getUserId()) && userMap.get("name") != null) {
+				user.setName(String.valueOf(userMap.get("name")));
+			}
+			if (userMap.get("account") != null) {
+				user.setAccount(String.valueOf(userMap.get("account")));
+			} else if (StringUtils.isBlank(user.getAccount())) {
+				user.setAccount(this.doGetNewQxyAccount());
+			}
+			if (userMap.get(IMG_PATH) != null) {
+				user.setImgPath(String.valueOf(userMap.get(IMG_PATH)));
+			} else {
+				user.setImgPath(FilePathConstants.getUserDefaultImg());
+			}
+			
+			user.setDeleteFlag(false);
+
+		
+		}
+	}
+	
+	
+	
+	
+	
+	/**
+	 * @version 选课报名生成用户
+	 * @param mobilePhone
+	 * @param password
+	 * @param salesCode
+	 * @return
+	 */
+	
+	public ResponseResult doChooseClassReg(Map<String, Object> userMap,boolean flag) {
+		return null;
+//		return doGenerateUserRegRecord(userMap, flag);
+	}
+
+	/**
+	 * 数据库USER表: 后台先导入手机号码(此号码不在user表中),不激活或者删除该用户,然后app登录,会造成两条user记录 不直接新增,增加判断
+	 * 
+	 * @param mobilePhone
+	 * @return
+	 */
+	private User generateUser(String mobilePhone) {
+
+		if (StringUtils.isBlank(mobilePhone)) {
+			
+			return new User();
+		}
+
+		String hql = "from User u where u.deleteFlag is false and u.mobilePhone = ? ";
+		User u = this.findUnique(hql, CollectionUtils.newList(mobilePhone), User.class);
+
+		return null == u ? new User() : u;
+	}
+
+	/**
+	 * @version 2.0 此公共方法,部分函数调用前没有判断user_registration是否在表中有记录,eg:选课报名;增加判断
+	 * 
+	 * @param mobilePhone
+	 * @param classId
+	 * @return
+	 */
+	private UserRegistration generateUserReg(String mobilePhone, String classId) {
+		if (StringUtils.isBlank(mobilePhone) || StringUtils.isBlank(classId)) {
+			return new UserRegistration();
+		}
+
+		String hql = "from UserRegistration r where r.deleteFlag is false and r.mobilePhone = ? and r.classId = ? ";
+		UserRegistration ur = this.findUnique(hql, CollectionUtils.newList(mobilePhone, classId), UserRegistration.class);
+
+		return null == ur ? new UserRegistration() : ur;
+	}
+	
+	/**
+	 * @version 2.0 此公共方法,部分函数调用前没有判断user_registration是否在表中有记录,eg:选课报名;增加判断
+	 * 
+	 * @param mobilePhone
+	 * @param classId
+	 * @return
+	 */
+	private UserRegistration generateUserRegByUser(String userId, String classId) {
+		if (StringUtils.isBlank(userId) || StringUtils.isBlank(classId)) {
+			return new UserRegistration();
+		}
+
+		String hql = "from UserRegistration r where r.deleteFlag is false and r.userId = ? and r.classId = ? ";
+		UserRegistration ur = this.findUnique(hql, CollectionUtils.newList(userId, classId), UserRegistration.class);
+
+		return null == ur ? new UserRegistration() : ur;
+	}
+
+	@Override
+	public Result doRegClass(String classId, String courseId) {
+		// 获取客户端信息
+
+		// 用户注册表新增记录
+		UserRegistration regUser = new UserRegistration();
+		regUser.setClassId(classId);
+		regUser.setCollegeCourseId(courseId);
+		regUser.setUserId(ClientUtils.getUserId());
+		regUser.setUserName(ClientUtils.getUserName());
+		regUser.setMobilePhone(ClientUtils.getUserMobilePhone());
+		regUser.setStatus(UserRegistration.STATUS_DEACTIVE);
+		regUser.setSalesCode(Constants.USER_SALES_CODE);
+		regUser.setDeleteFlag(false);
+		regUser.setRegistrationTime(new Date());
+		TraceUtils.setCreateTrace(regUser);
+		save(regUser);
+
+		
+		// 报名新增班级报名数
+		ClsClass orgClass = read(ClsClass.class, classId);
+		orgClass.setStudentCount(orgClass.getStudentCount()+1);
+		TraceUtils.setUpdateTrace(orgClass);
+		save(orgClass);
+	
+		return new Result(true);
+	}
+
+	/**
+	 * 游客提交报名
+	 */
+	@Override
+	public Result doVisitorRegClass(Map<String, Object> userMap) {
+		String name = userMap.get(USER_NAME)==null?String.valueOf(userMap.get("name")):String.valueOf(userMap.get(USER_NAME));
+		UserRegistration regUser = new UserRegistration();
+		regUser.setClassId(String.valueOf(userMap.get(CLASS_ID)));
+		regUser.setCollegeCourseId(String.valueOf(userMap.get("courseId")));
+		regUser.setUserId(String.valueOf(userMap.get(USER_ID)));
+		regUser.setUserName(name);
+		regUser.setMobilePhone(String.valueOf(userMap.get(MOBILE_PHONE)));
+		regUser.setStatus(UserRegistration.STATUS_DEACTIVE);
+		regUser.setSalesCode(String.valueOf(userMap.get("salesCode")));
+		regUser.setDeleteFlag(false);
+		TraceUtils.setCreateTrace(regUser);
+		regUser.setRegistrationTime(new Date());
+		save(regUser);
+
+		return  new Result(true);
+	}
+
+	/**
+	 * 导入学员报名信息//手机号码存在,则不插入user表,更新user表的name字段,直插入UserRegistration
+	 * 
+	 * @param file
+	 * @param classId
+	 * @return
+	 */
+	public Result doImportRegistration(String fullPath,String module ,  String classId) {
+		
+		Result objResult = new Result(true);
+		// 目前检测重复方式:1.excel中有重复,是会导致重复插入;2.一次性检测excel中的手机号时候再数据库中user有记录;3.没有检测一个用户是否重复报名了一个班级
+		// 2015-04-27 修改重复校验
+		// 1.excel中有重复的手机号,直插入第一条记录
+		// 2.当前班级已有该手机号,不插入记录
+		// 2015-06-08
+		// 1.修改同步至msg_user real_name 字段
+		
+		// 下载到应用服务器本地
+		String filePart[] = fullPath.split("\\.");
+		String fileType = filePart[filePart.length -1];
+		String uuid =  UUIDUtils.generateUUID();
+		String filePath = UserRegistrationService.class.getClassLoader().getResource("../uploads").getPath().concat("userregistration/"+ uuid + "/" + uuid + "."+fileType);
+		File file = fileUploadService.doGetOssFile(fullPath, filePath, module,ClientUtils.getUserId());
+		
+		if(null == file){
+			return new Result(false,"文档未找到");
+		}
+		
+		try {
+			// excel中总的报名信息数
+			List<UserRegistration> lstUserRegistration = new ArrayList<UserRegistration>();
+			List<UserRegistration> lstErrorUserRegistration = new ArrayList<UserRegistration>();
+			Map<String,UserExtend> mapUserExtend = new HashMap<String,UserExtend>();
+			
+			parseFile(file, classId, lstUserRegistration, lstErrorUserRegistration,mapUserExtend);
+			if (lstUserRegistration != null && !lstUserRegistration.isEmpty()) {
+
+				// 查询手机号是否存在user表,不存在的话需要插入user表
+				List<User> lstExistsUser = getUserList(lstUserRegistration);
+				Map<String, User> mapEexistsUser = new HashMap<String, User>();
+				for (User user : lstExistsUser) {
+					mapEexistsUser.put(user.getAccount(), user);
+				}
+
+				// 组装userRegistration及user对象
+				List<UserRegistration> lstInsertUserRegistration = generateUserRegistration(lstUserRegistration, mapEexistsUser, mapUserExtend,null);
+
+				// 插入所有注册信息
+				saveOrUpdateAll(lstInsertUserRegistration);
+				
+				//自定义信息插入
+//				this.insertUserCustom(lstUserRegistration, mapUserExtend);
+				
+				for(UserRegistration currUr : lstInsertUserRegistration){
+					this.doInsertRegLog("导入学员", currUr.getRegistrationId(), currUr.getMobilePhone());
+				}
+
+				// 组装所有的msg_user 信息
+				List<MsgUser> lstMu = getMsgUserAllList(lstInsertUserRegistration);
+				saveOrUpdateAll(lstMu);
+				
+				// 更新班级成员
+				this.updateStudentCount(classId, lstInsertUserRegistration.size(), 1);
+
+				String msg = "成功导入" + lstInsertUserRegistration.size() + "条记录,自动忽略" + lstErrorUserRegistration.size() + "条不规范记录。";
+				objResult.setMsg(msg);
+				objResult.setData(lstErrorUserRegistration);
+			} else {
+				objResult = new Result(false, "数据全部导入失败,可能数据重复导入或数据格式错误");
+			}
+			
+		} catch (RuntimeException e) {
+			log.error(e, e);
+			objResult = new Result(false, "系统异常,导入失败");
+		}
+
+		// 删除下载到应用服务器的文档
+		fileUploadService.doDeleteTempOssFile(file.getParentFile(), module,ClientUtils.getUserId());
+		
+		//更新上传文件使用轨迹
+		fileUploadService.updateUploadTrace(fullPath, module, SysFileUploadTrace.FILE_USE, classId);
+		return objResult;
+	}
+	
+	/**
+	 * 更新班级报名数量
+	 * @param classId
+	 * @param updateCount
+	 * @param updateType
+	 * @return
+	 */
+	public Result updateStudentCount(String classId , int updateCount , int updateType){
+		
+		if(1 == updateType){
+			
+			bulkUpdateInLoop( "update ClsClass set studentCount = ( studentCount + " + updateCount + " ) where classId =  ? ", new Object[] { classId });
+			
+		}else{
+			
+			bulkUpdateInLoop( "update ClsClass set studentCount = ( studentCount - " + updateCount+ " ) where classId =  ? ", new Object[] { classId });
+			
+		}
+		
+		return new Result(true);
+	}
+
+	/**
+	 * 检验手机号是否在user表中已有记录
+	 * 
+	 * @param lstUserRegistration
+	 * @return
+	 */
+	private List<User> getUserList(List<UserRegistration> lstUserRegistration) {
+
+		List<User> lstExistsUser = null;
+		if (lstUserRegistration != null && !lstUserRegistration.isEmpty()) {
+			List<Object> lstAllUser = new ArrayList<Object>();
+			for (UserRegistration ur : lstUserRegistration) {
+				lstAllUser.add(ur.getMobilePhone());
+			}
+
+			StringBuffer hql = new StringBuffer(150);
+			hql.append("from User where deleteFlag is false and account in  ( ");
+			for (int i = 0; lstAllUser != null && i < lstAllUser.size(); i++) {
+				int size = lstAllUser.size() - 1;
+				if (i==size) {
+					hql.append(" ?  ");
+				} else {
+					hql.append("? , ");
+				}
+			}
+			hql.append(" ) ");
+			lstExistsUser = this.find(hql.toString(), lstAllUser, User.class);
+		}
+
+		return lstExistsUser;
+	}
+
+	/**
+	 * 组装userRegistration及插入user对象
+	 * 
+	 * @param lstUserRegistration
+	 * @param mapEexistsUser
+	 * @return
+	 */
+	private List<UserRegistration> generateUserRegistration(List<UserRegistration> lstUserRegistration, Map<String, User> mapEexistsUser,Map<String,UserExtend> mapUserExtend,String source) {
+		List<UserRegistration> lstInsertUserRegistration = new ArrayList<UserRegistration>();
+		for (UserRegistration ur : lstUserRegistration) {
+			// user表没有有这个手机号对应的记录,需要插入user,否则使用从数据库查询出来的user,并且更新name字段
+			if (!mapEexistsUser.containsKey(ur.getMobilePhone())) {
+				User user = getUser(ur, ur.getSex(), null, source);
+//				userService.saveUserTrace(user, false, null);
+				// lstInsertUser.add(newUser(ur,ur.getSex()));
+				// 创建注册信息
+				TraceUtils.setCreateTrace(ur);
+				ur.setDeleteFlag(false);
+				ur.setStatus(UserRegistration.STATUS_DEACTIVE);
+				ur.setUserId(user.getUserId());
+				//ur.setUserName(user.getName());
+
+				// 设置科目信息
+				ClsClass cls = read(ClsClass.class, ur.getClassId());
+				// ur.setCourseId(cls.getCourseId());
+				ur.setCollegeCourseId(cls.getCollegeCourseId());
+				lstInsertUserRegistration.add(ur);
+				doUserExtend(user.getUserId(), mapUserExtend.get(ur.getMobilePhone()),false);
+			} else {
+				// 更新name字段
+				User user = mapEexistsUser.get(ur.getMobilePhone());
+				user.setName(ur.getUserName());
+//				userService.saveUser(user);
+				
+				// 创建注册信息
+				TraceUtils.setCreateTrace(ur);
+				ur.setDeleteFlag(false);
+				ur.setStatus(UserRegistration.STATUS_DEACTIVE);
+
+				ur.setUserId(user.getUserId());
+				ur.setUserName(user.getName());
+
+				// 设置科目信息
+				ClsClass cls = read(ClsClass.class, ur.getClassId());
+				// ur.setCourseId(cls.getCourseId());
+				ur.setCollegeCourseId(cls.getCollegeCourseId());
+				lstInsertUserRegistration.add(ur);
+				doUserExtend(user.getUserId(), mapUserExtend.get(ur.getMobilePhone()),false);
+			}
+			
+		}
+		return lstInsertUserRegistration;
+	}
+
+	/**
+	 * 解析Excel为注册对象的list(同时校验去除重复)
+	 * 
+	 * @param file
+	 *            Excel文件绝对路径
+	 * @return
+	 * @throws RuntimeException
+	 */
+	private void parseFile(File file, String classId, List<UserRegistration> lstUserRegis,
+			List<UserRegistration> lstErrorUserRegistration,Map<String,UserExtend> mapUserExtend) throws RuntimeException {
+		
+		ExcelReader excelReader = new ExcelReader(file);
+		
+		// 获取excel所有行的内容
+		List<String[]> allLineRegistration = excelReader.getAllData(0);
+
+		if (allLineRegistration != null && allLineRegistration.size() > 1) {
+			
+			generateSingles(allLineRegistration, lstUserRegis, lstErrorUserRegistration, mapUserExtend, classId);
+		}
+	}
+	
+	private void generateSingles(List<String[]> allLineRegistration, List<UserRegistration> lstUserRegis,
+			List<UserRegistration> lstErrorUserRegistration,Map<String,UserExtend> mapUserExtend, String classId){
+		
+		// 校验数据库中,该班级是否已存在该手机号
+		String hql = "select mobilePhone from UserRegistration where deleteFlag is false and classId = ? ";
+		// 存在的mobile 
+		List<String> lstExistsMobile = this.find(hql, CollectionUtils.newList(classId), String.class);
+
+		// 需要导入的手机号码,用于校验excel中是否有重复手机号,有重复的,只插入第一条记录
+		List<String> lstInsertMobile = new ArrayList<String>();
+		
+		Map<String,Integer> value = setCustomValue(allLineRegistration.get(0));
+		
+		for (int i = 1; i < allLineRegistration.size(); i++) {
+			String[] singleLineRegistration = allLineRegistration.get(i);
+			// 如果是按照模板导入
+			if (singleLineRegistration != null) {
+				
+				String strMobile = value.get("手机号") != null ? singleLineRegistration[value.get("手机号")] : null;// 手机号码符合规则
+				UserRegistration tmpUserRegistration = tmpUserRegistration(value, singleLineRegistration, classId);
+				
+				if (StringUtils.isNotBlank(strMobile) && SmsUtils.formatMobilePhone(strMobile)) {
+					// 校验手机号是否在excel中重复、是否在数据库中重复
+					if (!lstInsertMobile.contains(strMobile) && checkMobileFromDB(lstExistsMobile, strMobile)) {
+						
+						lstUserRegis.add(tmpUserRegistration);
+						UserExtend userExtend = tmpUserExtend(value, singleLineRegistration);
+//						userExtend.setUserCustom(this.getUserCustom(value, singleLineRegistration, strMobile));
+						mapUserExtend.put(strMobile, userExtend);
+						
+					} else {
+						tmpUserRegistration.setStatus(UserRegistration.STATUS_DEACTIVE);
+						lstErrorUserRegistration.add(tmpUserRegistration);
+						log.info("导入报名信息手机号重复:" + strMobile);
+					}
+					lstInsertMobile.add(strMobile);
+				}else{
+					tmpUserRegistration.setStatus(UserRegistration.STATUS_DEACTIVE);
+					lstErrorUserRegistration.add(tmpUserRegistration);
+				}
+			}
+		}
+	}
+	
+
+	
+	private UserRegistration tmpUserRegistration(Map<String,Integer> value,String[] singleLineRegistration,String classId){
+		
+		boolean sex = value.get("性别") != null && getSex(singleLineRegistration[value.get("性别")]);
+		String strMobile = value.get("手机号") != null ? singleLineRegistration[value.get("手机号")] : null;// 手机号码符合规则
+		UserRegistration tmpUserRegistration = new UserRegistration();
+		tmpUserRegistration.setUserName(value.get("姓名") != null ? singleLineRegistration[value.get("姓名")] : null);
+		tmpUserRegistration.setSex(sex);// 性别user需要用,
+		tmpUserRegistration.setSalesCode(value.get("报名码") != null ? singleLineRegistration[value.get("报名码")] : null);
+		tmpUserRegistration.setMobilePhone(strMobile.replaceAll(" ", ""));
+		tmpUserRegistration.setClassId(classId);
+		tmpUserRegistration.setRegistrationTime(new Date());
+		tmpUserRegistration.setOtherContactMethod(value.get(OrgClassUserCustom.OBJECT_NAME_ORDERPHONE) != null ? singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_ORDERPHONE)] : null);
+		
+		return tmpUserRegistration;
+	}
+	
+	private UserExtend tmpUserExtend(Map<String,Integer> value,String[] singleLineRegistration){
+		
+		UserExtend userExtend = new UserExtend();
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_BIRTHDAY) != null){
+			userExtend.setBirthday(singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_BIRTHDAY)]);
+		}
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_COMPANY) != null){
+			userExtend.setCompany(singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_COMPANY)]);
+		}
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_IDNUMBER) != null){
+			userExtend.setIdNumber(singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_IDNUMBER)]);
+		}
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_MAILADDRESS) != null){
+			userExtend.setMailAddress(singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_MAILADDRESS)]);
+		}
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_QQ) != null){
+			userExtend.setQq(singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_QQ)]);
+		}
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_WEIXIN) != null){
+			userExtend.setWeixin(singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_WEIXIN)]);
+		}
+		if(value.get(OrgClassUserCustom.OBJECT_NAME_ADDRESS) != null){
+			String[] address = singleLineRegistration[value.get(OrgClassUserCustom.OBJECT_NAME_ADDRESS)].split("-");
+			if(address.length > 2){
+				userExtend.setProvince(address[0]);
+				userExtend.setCity(address[1]);
+				userExtend.setRegion(address[2]);
+			}
+		}
+		userExtend.setMailFlag(value.get(OrgClassUserCustom.OBJECT_NAME_MAILADDRESS) != null ? true : false);
+		
+		return userExtend;
+	}
+	
+	/**
+	 * 格式化   -  "(必填)"
+	 * @param singleHead
+	 * @return
+	 */
+	private Map<String,Integer> setCustomValue(String[] singleHead){
+		
+		Map<String,Integer> map = new HashMap<String,Integer>();
+		for (int i = 0; i < singleHead.length; i++) {
+			map.put(singleHead[i].replace("(必填)", ""), i);
+		}
+		return map;
+	}
+
+	/**
+	 * 校验数据库中,该手机号是否已经在当前班级中
+	 * 
+	 * @param lstExistsMobile
+	 * @param strMobile
+	 * @return
+	 */
+	private boolean checkMobileFromDB(List<String> lstExistsMobile, String strMobile) {
+		return !(lstExistsMobile != null && StringUtils.isNotBlank(strMobile) && lstExistsMobile.contains(strMobile));
+	}
+
+	/**
+	 * 
+	 * @param strSex
+	 * @return
+	 */
+	private boolean getSex(String strSex) {
+		return "男".equals(strSex.trim()) ? true : false;
+	}
+
+	/**
+	 * 学员注册列表 - 班级
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Map<String,Object>> queryClassRegistrationList(String classId) {
+		classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId;
+		String sql = "select r.user_id,r.registration_id,r.user_name,r.sales_code,r.registration_time,r.activation_time,"
+				+ "r.mobile_phone,r.status,case when o.operate_id is null then '0' else '1' end installFlag,"
+				+ "r.other_contact_method,e.id_number,e.user_photo,birthday,company,e.qq,e.weixin,e.province,e.city,e.region,e.mail_address "
+				+ "from user_registration r left join user_operate o  on r.user_id = o.user_id left join user_extend e on e.user_id = r.user_id "
+				+ "where ifnull(o.delete_flag,0) = 0  and r.delete_flag = 0 and r.class_id = ? order by r.create_time desc";
+		
+		List<Object[]> objLst = findBySql(sql, CollectionUtils.newList(classId));
+		
+		//自定义字段
+		List<UserRegistrationCustom> lstCustom = this.find("from UserRegistrationCustom c where c.deleteFlag is false and c.classId = ?"
+				+ " and EXISTS (select 1 from OrgClassUserCustom t where t.deleteFlag is false and t.customId = c.customId)",
+				CollectionUtils.newList(classId), UserRegistrationCustom.class);
+		
+		
+		List<Map<String,Object>> resultMap = new ArrayList<Map<String,Object>>(objLst.size());
+		Map<String,Object> map = null;
+		for (Object[] obj : objLst) {
+			User user = read(User.class, String.valueOf(obj[0]));
+			if(user != null){
+				map = new HashMap<String,Object>();
+				map.put("userId", obj[0]);
+//				map.put("sex", user.getSex());
+				map.put("registrationId", obj[1]);
+				map.put("userName", obj[2]);
+				map.put("salesCode", obj[3]);
+				map.put("registrationTime", obj[4]);
+				map.put("activationTime", obj[5]);
+				map.put("mobilePhone", obj[6]);
+				map.put("status", obj[7]);
+				map.put("installFlag", obj[8]);
+				map.put("orderPhone", obj[9]);
+				
+				map.put("idNumber", obj[10]);
+				map.put("userPhoto", obj[11]);
+				map.put("IMG_PATH", user.getImgPath());
+				map.put("birthday", obj[12]);
+				map.put("company", obj[13]);
+				map.put("QQ", obj[14]);
+				map.put("weixin", obj[15]);
+				
+				String address = "";
+				if(StringUtils.isNotBlank(String.valueOf(obj[16])) && !"null".equals(String.valueOf(obj[16]))){
+					address = String.valueOf(obj[16]) + "-" + String.valueOf(obj[17]) + "-" + String.valueOf(obj[18]);
+				}
+				map.put("address", address);
+				map.put("mailAddress", obj[19]);
+				List<UserRegistrationCustom> userCustom = new ArrayList<UserRegistrationCustom>();
+				if(lstCustom != null && !lstCustom.isEmpty()){
+					for(UserRegistrationCustom objCustom : lstCustom){
+						if(objCustom.getRegistrationId().equals(obj[1])){
+							userCustom.add(objCustom);
+						}
+					}
+				}
+				map.put("userCustom", userCustom);
+				resultMap.add(map);
+			}
+		}
+		
+		return resultMap;
+	}
+	
+	/**
+	 * 机构学员列表
+	 * @param orgId
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public List<Map<String,Object>> queryOrgRegistrationList(String orgId){
+		List<Map<String,Object>> classes = this.findListWithMapByHql("select s.classId as classId, s.name as name from ClsClass s where s.deleteFlag is false and s.orgId = :orgId",
+				CollectionUtils.newObjectMap("orgId", orgId));
+		String sql = "select r.user_id,r.registration_id,r.user_name,r.sales_code,r.registration_time,r.activation_time,"
+				+ "r.mobile_phone,r.status,case when o.operate_id is null then '0' else '1' end installFlag,"
+				+ "r.other_contact_method,e.id_number,e.user_photo,birthday,company,e.qq,e.weixin,e.province,e.city,e.region,e.mail_address,r.class_id,u.sex,u.img_path "
+				+ "from user_registration r left join user_operate o  on r.user_id = o.user_id left join user_extend e on e.user_id = r.user_id left join user u on u.user_id = r.user_id "
+				+ "where ifnull(o.delete_flag,0) = 0  and r.delete_flag = 0 and r.class_id "
+				+ "in(select s.class_Id from org_class s where s.delete_Flag is false and s.org_Id = ?) order by r.class_id, r.create_time desc";
+		List<Object[]> objLst = this.findBySql(sql.toString(), CollectionUtils.newList(orgId));
+    		
+		//自定义字段
+		List<Map<String, Object>> lstCustom = this.findListWithMapByHql("select c.registrationId as registrationId, c.classId as classId,"
+				+ " c.customId as customId, t.objectName as customName, c.customValue as customValue, c.regCustomId as regCustomId "
+				+ "  from UserRegistrationCustom c, OrgClassUserCustom t where c.deleteFlag is false and t.deleteFlag is false and t.customId = c.customId"
+				+ " and c.classId in(select s.classId from ClsClass s where s.deleteFlag is false and s.orgId = :orgId) ",
+				CollectionUtils.newObjectMap("orgId", orgId));
+		
+		
+		List<Map<String,Object>> resultMap = new ArrayList<Map<String,Object>>(objLst.size());
+		Map<String,Object> map = null;
+		for (Object[] obj : objLst) {
+			map = new HashMap<String,Object>();
+			map.put("userId", obj[0]);
+			map.put("sex", obj[21]);
+			map.put("registrationId", obj[1]);
+			map.put("userName", obj[2]);
+			map.put("salesCode", obj[3]);
+			map.put("registrationTime", obj[4]);
+			map.put("activationTime", obj[5]);
+			map.put("mobilePhone", obj[6]);
+			map.put("status", obj[7]);
+			map.put("installFlag", obj[8]);
+			for(Map<String,Object> name : classes){
+				if(name.get("classId").equals(obj[20])){
+					map.put("className", name.get("name"));
+					break;
+				}
+			}
+			
+			List<Map<String,Object>> userCustom = new ArrayList<Map<String,Object>>();
+			if(lstCustom != null && !lstCustom.isEmpty()){
+				for(Map<String, Object> objCustom : lstCustom){
+					if(objCustom.get("registrationId").equals(obj[1]) && StringUtils.isNoneBlank((String)objCustom.get("customValue"))){
+						userCustom.add(objCustom);
+						continue;
+					}
+				}
+			}
+			map.put("userCustom", userCustom);
+			resultMap.add(map);
+		}
+		
+		return resultMap;
+	}
+	
+
+	/**
+	 * 新增编辑注册信息(检测重复) 改动1:可以编辑修改,修改时,手机号码不能修改(20150608) 改动2:班级里检查重复(20150608) 改动3:修改msg_user:real_name(20150608)
+	 */
+	public Result updateRegistration(UserRegistration reg,UserExtend userEx,boolean male, String signupInfo) {
+
+		Result objResult = new Result(false);
+		objResult.setMsg("保存失败");
+		
+		if (null != reg && StringUtils.isNotBlank(reg.getRegistrationId())) {
+			UserRegistration ug = read(UserRegistration.class, reg.getRegistrationId());
+			User user = read(User.class, ug.getUserId());
+			// 手机号码不可修改
+			if (null != user && null != ug && StringUtils.isNotBlank(reg.getUserName())) {
+				String strUserName = reg.getUserName();
+				user.setName(reg.getUserName());
+//				user.setSex(male);
+//				userService.saveUser(user);
+
+				ug.setUserName(strUserName);
+				ug.setOtherContactMethod(reg.getOtherContactMethod());
+				ug.setSalesCode(reg.getSalesCode());
+				save(ug);
+
+				// 修改msg_user的user_name
+				List<MsgUser> lstMu = getMsgUserList(user.getUserId());
+				updateMsgUserList(lstMu, strUserName);
+				saveOrUpdateAll(lstMu);
+				objResult = new Result(true, ug.getRegistrationId());
+				// 学员操作记录
+				this.doInsertRegLog("编辑学员", ug.getRegistrationId(),  ug.getMobilePhone());
+				doUserExtend(user.getUserId(), userEx,true);
+				
+				//自定义信息
+				insertCustomInfo(reg.getRegistrationId(), user.getUserId(), ug.getClassId(), signupInfo);
+			}
+		} else {
+			// (需要过滤当前班级是否有该学员)
+			if (!checkMobileExists(reg.getMobilePhone())) {
+				// 创建用户
+				User user = getUser(reg, male, null, null);
+				// 更新user_name,更新性别
+				user.setName(reg.getUserName());
+//				user.setSex(male);
+//				userService.saveUserTrace(user, false, null);
+				// 创建注册信息
+				TraceUtils.setCreateTrace(reg);
+				reg.setDeleteFlag(false);
+				reg.setStatus(UserRegistration.STATUS_DEACTIVE);
+				reg.setUserId(user.getUserId());
+				reg.setUserName(user.getName());
+				reg.setRegistrationId(null);
+				reg.setRegistrationTime(new Date());
+				// 更新班级成员
+				this.updateStudentCount(reg.getClassId(), 1, 1);
+				
+				// 设置科目信息          reg.setCourseId(cls.getCourseId());
+				ClsClass cls = read(ClsClass.class, reg.getClassId());
+				reg.setCollegeCourseId(cls.getCollegeCourseId());
+				
+				save(reg);
+				objResult = new Result(true, reg.getRegistrationId());
+				// 学员操作记录
+				this.doInsertRegLog("新增学员", reg.getRegistrationId(), reg.getMobilePhone());
+				doUserExtend(user.getUserId(), userEx, true);
+				
+				//自定义信息
+				insertCustomInfo(reg.getRegistrationId(), user.getUserId(), reg.getClassId(), signupInfo);
+			} else {
+				objResult.setMsg("已经存在该用户");
+			}
+		}
+		return objResult;
+	}
+	
+	/**
+	 * 插入自定义用户信息
+	 * @param userId
+	 * @param userEx
+	 */
+	private void doUserExtend(String userId,UserExtend userEx,Boolean editFlag){
+		if(StringUtils.isNotBlank(userId) && null != userEx){
+			String hql = "from UserExtend where deleteFlag is false and userId = ?";
+			UserExtend user = this.findUnique(hql, CollectionUtils.newList(userId), UserExtend.class);
+			if(null == user){
+				userEx.setUserId(userId);
+				userEx.setDeleteFlag(false);
+				TraceUtils.setCreateTrace(userEx);
+				save(userEx);
+			}else{
+				if(editFlag){
+					user.setProvince(userEx.getProvince());
+					user.setCity(userEx.getCity());
+					user.setRegion(userEx.getRegion());
+					user.setIdNumber(userEx.getIdNumber());
+					user.setUserPhoto(userEx.getUserPhoto());
+					user.setBirthday(userEx.getBirthday());
+					user.setCompany(userEx.getCompany());
+					user.setMailFlag(userEx.getMailFlag());
+					user.setMailAddress(userEx.getMailAddress());
+					user.setQq(userEx.getQq());
+					user.setWeixin(userEx.getWeixin());
+					user.setWeiboSina(userEx.getWeiboSina());
+					TraceUtils.setUpdateTrace(user);
+					save(user);
+				}else{
+					updateUserExtend(user, userEx);
+				}
+			}
+		}
+	}
+
+	/**
+	 * 更新UserExtend
+	 * @param user
+	 * @param userEx
+	 */
+	private void updateUserExtend(UserExtend user,UserExtend userEx){
+		
+		String strN = "null";
+		if(StringUtils.isBlank(user.getProvince()) || strN.equals(user.getProvince())){
+			user.setProvince(userEx.getProvince());
+			user.setCity(userEx.getCity());
+			user.setRegion(userEx.getRegion());
+		}
+		
+		if(StringUtils.isBlank(user.getIdNumber()) || strN.equals(user.getIdNumber())){
+			user.setIdNumber(userEx.getIdNumber());
+		}
+		if(StringUtils.isBlank(user.getUserPhoto()) || strN.equals(user.getUserPhoto())){
+			user.setUserPhoto(userEx.getUserPhoto());
+		}
+		if(StringUtils.isBlank(user.getBirthday()) || strN.equals(user.getBirthday())){
+			user.setBirthday(userEx.getBirthday());
+		}
+		updateUserExtendN(user, userEx, strN);
+	}
+	
+	/**
+	 * 更新UserExtend
+	 * @param user
+	 * @param userEx
+	 */
+	private void updateUserExtendN(UserExtend user,UserExtend userEx,String strN){
+		
+		if(StringUtils.isBlank(user.getCompany()) || strN.equals(user.getCompany())){
+			user.setCompany(userEx.getCompany());
+		}
+		if(StringUtils.isBlank(user.getMailAddress()) || strN.equals(user.getMailAddress())){
+			user.setMailAddress(userEx.getMailAddress());
+		}
+		if(StringUtils.isBlank(user.getQq()) || strN.equals(user.getQq())){
+			user.setQq(userEx.getQq());
+		}
+		if(StringUtils.isBlank(user.getWeixin()) || strN.equals(user.getWeixin())){
+			user.setWeixin(userEx.getWeixin());
+		}
+		if(StringUtils.isBlank(user.getWeiboSina()) || strN.equals(user.getWeiboSina())){
+			user.setWeiboSina(userEx.getWeiboSina());
+		}
+		
+		TraceUtils.setUpdateTrace(user);
+		save(user);
+	}
+	
+	/**
+	 * 得到MSG_USER
+	 * 
+	 * @param userId
+	 * @return
+	 */
+	private List<MsgUser> getMsgUserList(String userId) {
+		String hql = "from MsgUser where deleteFlag is false and userId  = ? ";
+		// 存在的mobile
+		return this.find(hql, CollectionUtils.newList(userId), MsgUser.class);
+	}
+
+	/**
+	 * 修改Msg——user
+	 * 
+	 * @param lstMu
+	 * @param strUserName
+	 */
+	private void updateMsgUserList(List<MsgUser> lstMu, String strUserName) {
+		for (MsgUser mu : lstMu) {
+			mu.setRealName(strUserName);
+		}
+	}
+
+	/**
+	 * 判断当前班级是否有该手机号码(应该前台校验+后台判断)
+	 * 
+	 * @param strMobilePhone
+	 * @return
+	 */
+	private boolean checkMobileExists(String strMobilePhone) {
+		String hql = "from UserRegistration where deleteFlag is false and classId  = ? and mobilePhone = ?  ";
+		return this.findCount(hql, CollectionUtils.newList(ClientUtils.getClassId(), strMobilePhone)) > 0 ? true : false;
+
+	}
+
+	/**
+	 * 组装导入有关所有的MSG_USER
+	 * 
+	 * @param lstUg
+	 * @return
+	 */
+	private List<MsgUser> getMsgUserAllList(List<UserRegistration> lstUg) {
+		if (lstUg != null && !lstUg.isEmpty()) {
+			StringBuffer hql = new StringBuffer(150);
+			hql.append("from MsgUser where deleteFlag is false and userId  in (  ");
+			Map<String, String> objMap = new HashMap<String, String>();
+			List<Object> lstO = new ArrayList<Object>();
+			for (int i = 0; i < lstUg.size(); i++) {
+				UserRegistration ug = lstUg.get(i);
+				if (i == lstUg.size() - 1) {
+					hql.append(" ? ) ");
+				} else {
+					hql.append(" ? , ");
+				}
+				lstO.add(ug.getUserId());
+				objMap.put(ug.getUserId(), ug.getUserName());
+			}
+			// 存在的mobile
+			List<MsgUser> lstMu = this.find(hql.toString(), lstO, MsgUser.class);
+			for (MsgUser objMu : lstMu) {
+				objMu.setRealName(objMap.get(objMu.getUserId()));
+			}
+			return lstMu;
+		}
+		return null;
+
+	}
+
+	/**
+	 * 得到注册信息
+	 * 
+	 * @return
+	 */
+	public List<ExportUserRegistration> queryExportRegList(boolean orgFlag) {
+		String strSQL = getExportSQL(orgFlag);
+		List<Object> args = null;
+		if (orgFlag) {
+			args = CollectionUtils.newList(ClientUtils.getOrgId());
+		} else {
+			args = CollectionUtils.newList(ClientUtils.getClassId());
+		}
+		return registrationDAO.queryExportRegList(strSQL, args);
+	}
+
+	/**
+	 * 导出SQL
+	 * 
+	 * @param orgFlag
+	 * @return
+	 */
+	private String getExportSQL(boolean orgFlag) {
+		String strSQL = null;
+		if(orgFlag){
+			strSQL = " SELECT UR.userName,UR.salesCode,UR.mobilePhone,UR.status,UR.installFlag,C.NAME AS className, UR.activationTime,UR.registrationTime FROM  "
+				  + " ( SELECT R.USER_NAME AS userName,R.SALES_CODE AS salesCode,R.MOBILE_PHONE AS mobilePhone , R.CLASS_ID AS classId, R.ACTIVATION_TIME As activationTime,"
+				  + " CASE R.STATUS WHEN  0 THEN '未开始' WHEN 1 THEN '上课中' ELSE '结束' END AS  status ,"
+			      + " CASE WHEN O.OPERATE_ID IS NULL THEN '否' ELSE '是' END installFlag,R.REGISTRATION_TIME AS registrationTime "
+			      + " FROM  USER_REGISTRATION R LEFT JOIN USER_OPERATE O  ON R.USER_ID = O.USER_ID "
+			      + " WHERE IFNULL(O.DELETE_FLAG,0) = 0  AND R.DELETE_FLAG = 0 AND R.CLASS_ID IN  "
+				  + " ( SELECT DISTINCT CLS.CLASS_ID FROM ORG_CLASS CLS,ORG_COLLEGE_COURSE COU WHERE COU.ORGANIZATION_ID = ? AND COU.COURSE_ID = CLS.COLLEGE_COURSE_ID "
+				  + " AND COU.DELETE_FLAG = 0 AND CLS.DELETE_FLAG = 0  ) "
+				  + " ) AS UR , ORG_CLASS C WHERE  C.CLASS_ID = UR.classId ORDER BY  UR.classId ASC ";
+		}else{
+			strSQL = " SELECT R.USER_NAME AS userName,R.SALES_CODE AS salesCode,R.MOBILE_PHONE AS mobilePhone,R.ACTIVATION_TIME As activationTime,R.REGISTRATION_TIME AS registrationTime, "
+				  + " CASE R.STATUS WHEN  0 THEN '未开始' WHEN 1 THEN '上课中' ELSE '结束' END AS  status ,"
+			      + " CASE WHEN O.OPERATE_ID IS NULL THEN '否' ELSE '是' END installFlag "
+			      + " FROM  USER_REGISTRATION R LEFT JOIN USER_OPERATE O  ON R.USER_ID = O.USER_ID "
+			      + " WHERE IFNULL(O.DELETE_FLAG,0) = 0  AND R.DELETE_FLAG = 0 AND R.CLASS_ID = ?  ORDER BY R.CREATE_TIME DESC ";
+		}
+		return strSQL;
+	}
+
+	@Override
+	public boolean hasRegistration(String mobilePhone, String classId) {
+
+		String hql = "select count(1) from UserRegistration where deleteFlag is false and mobilePhone=? and classId=?";
+
+		int count = this.findUnique(hql, CollectionUtils.newList(mobilePhone, classId), int.class);
+
+		return count > 0;
+	}
+	
+	/**
+	 * 微信加入游客机构体验班级,不需要消耗账号
+	 * 
+	 */
+	public Result insertWXOrgVisitorClass(Map<String,Object> userMap){
+		// 获取当前公众号机构编码
+		String orgCode = (String) userMap.get("orgCode");
+		
+		// 1、查询该机构是否有体验班级 体验版价格必须=0
+		List<String> lstClass = this.find("select DISTINCT v.classId from OrgClassVisitor v,ClsClass c "
+				+ " where v.classId=c.classId and v.deleteFlag is false and c.deleteFlag is false"
+				+ " and c.disprice <=? and c.org.code=? ", 
+				CollectionUtils.newList(BigDecimal.ZERO, orgCode), String.class);
+		
+		if(lstClass.isEmpty()){// 机构无体验班级
+			
+			// 生成账号
+			User user = generateUser(String.valueOf(userMap.get(MOBILE_PHONE)));
+			Result result = new Result(false, "机构无体验版");
+			//插入user
+			insertUser(user,userMap);
+			//插入Msguser
+			insertMsgUser(user);
+			
+			Map<String,Object> attrs = new HashMap<String,Object>(1);
+			attrs.put(USER_ID, user.getUserId());
+			result.setData(attrs);
+			return result;
+		}
+		
+		// 2、机构有体验班级,用户加入体验班级
+		String[] classIds = new String[lstClass.size()];
+		for(int i=0; i<lstClass.size(); i++){
+			classIds[i] = lstClass.get(i);
+		}
+		
+		return generateClassVisitor(userMap, classIds);
+	}
+	
+	/**
+	 * 加入Q学友游客班级,不需要消耗账号
+	 */
+	public Result insertClassVisitor(Map<String,Object> userMap){
+		// 三个体验班级
+//		SysConfig sc = cacheService.get(ADD_REG_CLASS_IDS, SysConfig.class);
+		SysConfig sc = null;
+		if (null == sc) {
+			String hql = " from SysConfig where configKey=?";
+			sc = findUnique(hql, CollectionUtils.newList(ADD_REG_CLASS_IDS), SysConfig.class);
+			// 加入缓存
+//			cacheService.set(ADD_REG_CLASS_IDS, 24 * 60 * 60, sc);
+		}
+		
+		String scValue = "";
+		if(null!=sc){
+			scValue = sc.getValue();
+		}
+		
+		String classIds []= scValue.split(",");
+		
+		return generateClassVisitor(userMap, classIds);
+	}
+	
+	/**
+	 * 加入游客班级,不需要消耗账号 生成账号并加入体验班级 
+	 */
+	public Result generateClassVisitor(Map<String,Object> userMap,String[] classIds){
+		
+		User user = generateUser(String.valueOf(userMap.get(MOBILE_PHONE)));
+		Result result = new Result(true);
+		//插入user
+		insertUser(user,userMap);
+		//插入Msguser
+		insertMsgUser(user);
+		
+		String regId = "";
+		for (String string : classIds) {
+			if(StringUtils.isBlank(string)){
+				continue;
+			}
+			ClsClass occ = read(ClsClass.class, string);
+			if(occ.getDisprice().compareTo(BigDecimal.ZERO) > 0){//如果当前班级的价格高于0 即为付费班  不添加进来
+				continue;
+			}
+			UserRegistration urg = generateUserRegByUser(String.valueOf(userMap.get("userId")), string);
+			
+			if (null == urg.getRegistrationId()) {
+				urg.setClassId(string);
+
+				urg.setClassName(occ.getName());
+				urg.setCollegeCourseId(occ.getCollegeCourseId());
+				urg.setDeleteFlag(false);
+				if (userMap.get(MOBILE_PHONE) != null) {
+					urg.setMobilePhone(String.valueOf(userMap.get(MOBILE_PHONE)));
+				}
+//				urg.setSex(user.getSex());
+				urg.setStatus(UserRegistration.STATUS_ACTIVE);
+				urg.setUserId(user.getUserId());
+				urg.setUserName(user.getName());
+				urg.setRegistrationTime(new Date());
+				TraceUtils.setCreateTrace(urg);
+				insert(urg);
+				
+				// 报名人数加1
+				occ.setStudentCount(occ.getStudentCount()+1);
+				save(occ);
+			}
+			
+			if(string.equals(Constants.VISITOR_CLASS_ID)){
+				regId = urg.getRegistrationId();
+			}
+			Map<String,String> param = new HashMap<String, String>();
+			param.put(USER_ID, user.getUserId());
+			param.put(PASSWORD, user.getPassword());
+			param.put(CLASS_ID, string);
+			param.put(REG_ID, urg.getRegistrationId());
+			
+			sendMsgActiveMsg(param,1);
+		}
+		
+		Map<String,Object> attrs = new HashMap<String,Object>(2);
+		attrs.put(USER_ID, user.getUserId());
+		
+		result.setMsg(regId);
+		result.setData(attrs);
+		
+		return result;
+	}
+	
+	/**
+	 * 老账户 仅仅加入该机构的体验版 不生成账号
+	 * @param userMap
+	 * @return
+	 */
+	@Override
+	public Result insertOnlyWXOrgVisitorCls(Map<String,Object> userMap){
+		Result result = new Result(false);
+		String userId = (String) userMap.get("userId");
+		
+		User user = this.read(User.class, userId);
+		
+		// 获取当前公众号机构编码
+		String orgCode = (String) userMap.get("orgCode");
+		
+		// 1、查询该机构是否有体验班级 体验版价格必须=0
+		List<String> lstClass = this.find("select DISTINCT v.classId from OrgClassVisitor v,ClsClass c "
+				+ " where v.classId=c.classId and v.deleteFlag is false and c.deleteFlag is false"
+				+ " and c.disprice <=? and c.org.code=? ", 
+				CollectionUtils.newList(BigDecimal.ZERO, orgCode), String.class);
+		
+		if(lstClass.isEmpty()){// 机构无体验班级 即加入Q学友体验班
+			return new Result(false,"机构无班级");
+		}
+		
+		// 2、机构有体验班级,用户加入体验班级
+		Map<String,String> param;
+		for (String classId : lstClass) {
+			if(StringUtils.isBlank(classId)){
+				continue;
+			}
+			
+			UserRegistration urg = generateUserRegByUser(userId, classId);
+			
+			if (null == urg.getRegistrationId()) {
+				urg.setClassId(classId);
+				
+				ClsClass occ = read(ClsClass.class, classId);
+				urg.setClassName(occ.getName());
+				urg.setCollegeCourseId(occ.getCollegeCourseId());
+				urg.setDeleteFlag(false);
+				if (userMap.get(MOBILE_PHONE) != null) {
+					urg.setMobilePhone(String.valueOf(userMap.get(MOBILE_PHONE)));
+				}
+//				urg.setSex(user.getSex());
+				urg.setStatus(UserRegistration.STATUS_ACTIVE);
+				urg.setUserId(user.getUserId());
+				urg.setUserName(user.getName());
+				urg.setRegistrationTime(new Date());
+				TraceUtils.setCreateTrace(urg);
+				insert(urg);
+				
+				// 报名人数加1
+				occ.setStudentCount(occ.getStudentCount()+1);
+				save(occ);
+			}
+			
+			param = new HashMap<String, String>(4);
+			param.put(USER_ID, user.getUserId());
+			param.put(PASSWORD, user.getPassword());
+			param.put(CLASS_ID, classId);
+			param.put(REG_ID, urg.getRegistrationId());
+			sendMsgActiveMsg(param,1);
+		}
+		
+		Map<String, Object> attrs = new HashMap<String, Object>(1);
+		attrs.put("classId", lstClass.get(0));
+		result.setData(attrs);
+		result.setResult(true);
+		return result;
+	}
+	
+	/**
+	 * 插入Msguser
+	 * @param user
+	 * @return
+	 */
+	private MsgUser insertMsgUser(User user){
+		MsgUser msgUser = this.read(MsgUser.class, user.getUserId());
+		if(null == msgUser){
+			msgUser = new MsgUser();
+			TraceUtils.setCreateTrace(msgUser);
+			msgUser.setDeleteFlag(false);
+			
+			msgUser.setAccount(user.getAccount());
+			msgUser.setAlias(user.getName());
+			msgUser.setPassword(user.getPassword());
+			msgUser.setRealName(user.getName());
+			msgUser.setUserId(user.getUserId());
+//			msgUser.setSex(user.getSex());
+			
+			msgUser.setPortrait(user.getImgPath());
+			
+			insert(msgUser);
+		}
+		
+		return msgUser;
+	}
+	
+	/**
+	 * 初始化环信信息
+	 * @param msgUser
+	 * @param classId
+	 * @return
+	 */
+	public Result insertEasemobInfo( MsgUser msgUser ,String classId ,String regId ){
+		
+//		// 1. 环信增加用户
+//		easeMobService.addUser(msgUser);
+//		
+//		// 2. 好友,系统通知,学校通知,班级通知
+//		easeMobService.addFriend(msgUser.getUserId(), Notice.NOTICE_CLASS_MSG_USER_ID);
+//		easeMobService.addFriend(msgUser.getUserId(), Notice.NOTICE_ORG_MSG_USER_ID);
+		
+		// 3. 加群
+		if(StringUtils.isBlank(regId)){
+			return new Result(true);
+		}
+		UserRegistration reg = read(UserRegistration.class,regId);
+		MsgGroup group = read(MsgGroup.class, classId );
+		if( null != group && StringUtils.isNotBlank(group.getEasmobGroupId()) ){
+//			easeMobService.addGroupMember(group.getEasmobGroupId() , msgUser.getUserId() );
+		}else{
+			
+			if (group == null) {
+				
+				group = insertNewGroup(reg,msgUser);
+				
+			}else if(StringUtils.isBlank(group.getEasmobGroupId())){
+				
+//				Result result = easeMobService.addGroup(group.getName(), group.getDescription(), 500000, msgUser.getUserId());
+				Result result = new Result();
+				
+				String easemobGroupId = result.getMsg() ;
+				if(result.isSuccess() && StringUtils.isNotBlank(easemobGroupId)){
+					group.setEasmobGroupId(easemobGroupId);
+					TraceUtils.setUpdateTrace(group);
+					save(group);
+				}
+			}
+			
+			// 将该成员加入群
+//			easeMobService.addGroupMember(group.getEasmobGroupId() , msgUser.getUserId() );
+			
+		}
+		int existNoticeClass = findCount("from MsgGroupUserRe where deleteFlag is false and userId = ? and groupId = ?", CollectionUtils.newList(reg.getUserId(), group.getGroupId()));
+
+		if (existNoticeClass == 0) {
+			MsgGroupUserRe member = new MsgGroupUserRe();
+			TraceUtils.setCreateTrace(member);
+			member.setUserId(msgUser.getUserId());
+			member.setGroupId(group.getGroupId());
+			member.setDeleteFlag(false);
+			save(member);
+		}
+		
+		return new Result(true);
+		
+	}
+	
+	/**
+	 * 加入活动发布者班级,并激活
+	 */
+	public Result insertClassUser(Map<String,Object> userMap){
+		Result result = new Result(true);
+		User user = generateUser(String.valueOf(userMap.get(MOBILE_PHONE)));
+
+		// 插入user
+		insertUser(user, userMap);
+		// 插入Msguser
+		MsgUser msgUser = insertMsgUser(user);
+
+		String classId = (String) userMap.get(CLASS_ID);
+
+		UserRegistration urg = generateUserReg(String.valueOf(userMap.get(MOBILE_PHONE)), classId);
+
+		if (null == urg.getRegistrationId()) {
+			urg.setClassId(classId);
+
+			ClsClass occ = read(ClsClass.class, classId);
+			urg.setClassName(occ.getName());
+			urg.setCollegeCourseId(occ.getCollegeCourseId());
+			urg.setDeleteFlag(false);
+			if (userMap.get(MOBILE_PHONE) != null) {
+				urg.setMobilePhone(String.valueOf(userMap.get(MOBILE_PHONE)));
+			}
+//			urg.setSex(user.getSex());
+			urg.setStatus(UserRegistration.STATUS_ACTIVE);
+			urg.setUserId(user.getUserId());
+			urg.setUserName(user.getName());
+			urg.setRegistrationTime(new Date());
+			TraceUtils.setCreateTrace(urg);
+			insert(urg);
+		}
+
+		String regId = urg.getRegistrationId();
+
+		Map<String, String> param = new HashMap<String, String>();
+		param.put(USER_ID, msgUser.getUserId());
+		param.put(PASSWORD, msgUser.getPassword());
+		param.put(CLASS_ID, classId);
+		param.put(REG_ID, urg.getRegistrationId());
+
+		sendMsgActiveMsg(param, 1);
+
+		Map<String, Object> attrs = new HashMap<String, Object>(2);
+		attrs.put(USER_ID, user.getUserId());
+		/* attrs.put("regId", ur.getRegistrationId()); */
+
+		result.setMsg(regId);
+		result.setData(attrs);
+
+		return result;
+
+	}
+	
+	/**
+	 * IMEI加入班级(全部免费激活,不消耗账号)
+	 */
+	public Result insertClassIMEI(Map<String,Object> userMap){
+		Result result = new Result(true);
+		User user = new User();
+		TraceUtils.setCreateTrace(user);
+		user.setDeleteFlag(false);
+		user.setImgPath(FilePathConstants.getUserDefaultImg());
+		user.setPassword(RSAUtils.encrypt("hello"));
+//		user.setImei(String.valueOf(userMap.get("imei")));
+		user.setAccount(doGetNewQxyAccount());
+//		if(null != userMap.get(SOURCE)){
+//			user.setSource(String.valueOf(userMap.get(SOURCE)));
+//		}
+		user.setName("游客");
+//		userService.saveUserTrace(user, false, null);
+		
+		MsgUser msgUser = read(MsgUser.class, user.getUserId());
+		if (msgUser == null) {
+			msgUser = new MsgUser();
+			TraceUtils.setCreateTrace(msgUser);
+		}
+		
+		msgUser.setDeleteFlag(false);
+
+		msgUser.setAccount(user.getAccount());
+		msgUser.setAlias(user.getName());
+		msgUser.setPassword(user.getPassword());
+		msgUser.setRealName(user.getName());
+		msgUser.setUserId(user.getUserId());
+//		msgUser.setSex(user.getSex());
+		
+		msgUser.setPortrait(user.getImgPath());
+		
+		insert(msgUser);
+		
+		// 加入额外三个班级
+//		SysConfig sc = cacheService.get(ADD_REG_CLASS_IDS, SysConfig.class);
+		SysConfig sc  = null;
+		if(null==sc){
+			String hql = " from SysConfig where configKey=?";
+			sc = findUnique(hql, CollectionUtils.newList(ADD_REG_CLASS_IDS), SysConfig.class);
+			//加入缓存
+//			cacheService.set(ADD_REG_CLASS_IDS, 24*60*60, sc);
+		}
+		String scValue = "";
+		
+		if(null!=sc){
+			scValue = sc.getValue();
+		}
+		//String scValue = sc.getValue();
+		
+		String classIds []= scValue.split(",");
+		String regId="";
+		for (String string : classIds) {
+			UserRegistration urg = null != userMap.get(MOBILE_PHONE) ? 
+					generateUserReg(String.valueOf(userMap.get(MOBILE_PHONE)), string) : 
+						new UserRegistration()  ;
+			
+			if (null == urg.getRegistrationId()) {
+				urg.setClassId(string);
+
+				ClsClass occ = read(ClsClass.class, string);
+				if(null==occ){
+					continue;
+				}
+				urg.setClassName(occ.getName());
+				urg.setCollegeCourseId(occ.getCollegeCourseId());
+				urg.setDeleteFlag(false);
+				if (userMap.get(MOBILE_PHONE) != null) {
+					urg.setMobilePhone(String.valueOf(userMap.get(MOBILE_PHONE)));
+				}
+//				urg.setSex(user.getSex());
+				urg.setStatus(UserRegistration.STATUS_ACTIVE);
+				urg.setUserId(user.getUserId());
+				urg.setUserName(user.getName());
+				urg.setRegistrationTime(new Date());
+				TraceUtils.setCreateTrace(urg);
+				insert(urg);
+			}
+			
+			if(string.equals(Constants.VISITOR_CLASS_ID)){
+				regId = urg.getRegistrationId();
+			}
+			//消息处理初始化环信信息
+			Map<String,String> param = new HashMap<String, String>();
+			param.put(USER_ID, msgUser.getUserId());
+			param.put(PASSWORD, msgUser.getPassword());
+			param.put(CLASS_ID, string);
+			param.put(REG_ID, urg.getRegistrationId());
+			
+			sendMsgActiveMsg(param,1);
+		}
+		
+		Map<String,Object> attrs = new HashMap<String,Object>(2);
+		attrs.put(USER_ID, user.getUserId());
+	/*	attrs.put("regId", ur.getRegistrationId());*/
+		
+		result.setMsg(regId);
+		result.setData(attrs);
+		
+		return result;
+		 
+	}
+	/**
+	 * @version 2.0 注册(新增用户、学员)
+	 * @param role:角色(添加用户的角色,没有可以传null), type:(操作类型:后台、微信、APP....) userMap:参数   mode:具体操作(没有可以传null)
+	 */
+	public Result executeRegist(String role, String type,String mode,Map<String, Object> userMap) {
+		//APP:
+		if (Constants.REG_TYPE_APP.equals(type)) {
+			if(Constants.REG_MODE_IMEI_JOIN.equals(mode)){
+				return insertClassIMEI(userMap);
+			}else{
+				// 申请注册
+				Result result = new Result(true);
+
+//				ResponseResult response = doGenerateUserRegRecord(userMap, false); // 已添加
+				
+				ResponseResult response = null;
+				result.addData("response", response);
+				return result;
+			}
+		}
+		
+		//后台:
+		if (Constants.REG_TYPE_BACKSTAGE.equals(type)&&role == null) {
+			
+			UserRegistration reg = (UserRegistration) userMap.get("reg");
+			UserExtend userEx = (UserExtend) userMap.get("userEx");
+			boolean male =  (Boolean) userMap.get("male");
+			String signupInfo = (String) userMap.get("signupInfo");
+			// 新增报名信息
+			if (Constants.REG_MODE_REGIST.equals(mode)) {
+				
+				return insertRegistration(reg, male,generateSourceFromMap(userMap), signupInfo);  // 已添加
+			}
+			//更新用户信息
+			if (Constants.REG_MODE_EDIT.equals(mode)) {
+				
+				return updateRegistration(reg,userEx,male, signupInfo); // 已添加
+			}
+			
+		}
+		//网页端(选课报名)
+		if (Constants.REG_TYPE_WEB.equals(type)) {
+			doChooseClassReg(userMap,true); // 已添加
+			
+		}
+		//微信
+		if (Constants.REG_TYPE_WEIXIN.equals(type)) {
+//			return executeRegistWx(type, mode, userMap);
+			return null;
+		}
+		//sdk
+		if(Constants.REG_TYPE_SDK.equals(type)){
+			return insertClassUser(userMap);
+		}
+		
+		// 内容分享(讲义、视频)、直播互动、课程分享
+		if(Constants.REG_TYPE_CONTENT_SHARE.equals(type)){
+			
+			return insertUserToShare(userMap);
+		}
+		
+		return null;
+	}
+	
+	private String generateSourceFromMap(Map<String, Object> userMap){
+		
+		return userMap.get(SOURCE) != null ? String.valueOf(userMap.get(SOURCE)) : null ;
+		
+	}
+	
+	
+	/**
+	 * 功能:新增用户 
+	 * 模块: 内容分享(讲义、视频)、分享课程、直播互动   
+	 * 来源:非微信
+	 * 返回:Result(attrs:用户信息)
+	 */
+	public Result insertUserToShare(Map<String,Object> userMap){
+		
+		User user = insertUser(userMap);
+		
+		return returnResult(user, userMap);
+	}
+	
+	private Result returnResult(User user, Map<String,Object> userMap){
+		
+		// 获取msg_user,注册环信用户
+		MsgUser msgUser = doNewMsgUser(user,userMap);
+		
+		// 返回参数
+		Map<String,Object> attrs = new HashMap<String,Object>(2);
+		attrs.put("userId", user.getUserId());
+		attrs.put("name", user.getName());
+		attrs.put("mobilePhone", user.getMobilePhone());
+		attrs.put("alias", msgUser.getAlias());
+		attrs.put("imgUrl", msgUser.getImgUrl());
+		
+		Result result = new Result(true);
+		result.setData(attrs);
+		
+		return result;
+	}
+	
+	/**
+	 * 功能:获取 User逻辑处理
+	 * 模块: 内容分享(讲义、视频)、分享课程、直播互动   
+	 * 来源:非微信
+	 * 返回:user
+	 */
+	public User insertUser(Map<String,Object> userMap){
+		
+		User user = null;
+		
+		String userId = String.valueOf(userMap.get("userId"));
+		
+		if(StringUtils.isNotBlank(userId)){
+			
+			String hql = "from User u where u.deleteFlag is false and u.userId = ? ";
+			user = this.findUnique(hql, CollectionUtils.newList(userId), User.class) ;
+			
+			if(null == user){
+				user = saveAddUser( userMap, null, null );
+			}
+		}else{
+			
+			user = saveAddUser( userMap, null, null);
+		}
+		
+		return user;
+	}
+	
+	/**
+	 * 新增用户
+	 * @param userMap
+	 * @param wxName
+	 * @param wxImgUrl
+	 * @return
+	 */
+	private User saveAddUser(Map<String,Object> userMap,String wxName,String wxImgUrl){
+		
+		String accout = doGetNewQxyAccount();
+		User user = new User();
+		
+		int loop = 0;
+		do {
+
+			try {
+				user.setName(StringUtils.isBlank(wxName) ?  "游客" + accout : wxName);
+				user.setAccount(accout);
+				user.setDeleteFlag(false);
+				user.setPassword(RSAUtils.encrypt(NumRandomUtils.randomSixNum()));
+				user.setImgPath(StringUtils.isBlank(wxImgUrl) ?  FilePathConstants.getUserDefaultImg() : wxImgUrl);
+				
+				TraceUtils.setCreateTrace(user);
+				break;
+
+			} catch (Exception e) {
+				loop++;
+				accout = doGetNewQxyAccount();
+				continue;
+			}
+
+		} while (loop < 100);
+		
+		return user;
+	}
+	
+	/**
+	 * 获取msg_user
+	 * @param user
+	 * @return
+	 */
+	public MsgUser doNewMsgUser(User user,Map<String,Object> userMap) {
+		
+		String hql1 = "from MsgUser u where u.deleteFlag is false and u.userId = ? ";
+		MsgUser msgUser = this.findUnique(hql1, CollectionUtils.newList(user.getUserId()), MsgUser.class) ;
+		
+		if(null == msgUser){
+			msgUser = new MsgUser();
+			msgUser.setCreateId(user.getUserId());
+			msgUser.setCreateTime(new Date(System.currentTimeMillis()));
+			msgUser.setCreator(user.getAccount());
+			msgUser.setUpdateId(user.getUserId());
+			msgUser.setUpdateTime(new Date(System.currentTimeMillis()));
+			msgUser.setUpdator(user.getAccount());
+			msgUser.setDeleteFlag(false);
+			msgUser.setAlias(user.getName());
+			msgUser.setAccount(user.getAccount());
+			msgUser.setPassword(user.getPassword());
+			msgUser.setPortrait(user.getImgPath());
+			msgUser.setRealName(user.getName());
+			msgUser.setUserId(user.getUserId());
+			insert(msgUser);
+			
+			return msgUser;
+		}
+		
+		// 如果Alias为openId、空 则修改Alias值
+		if(String.valueOf(userMap.get("openId")).equals(msgUser.getAlias()) 
+				|| StringUtils.isBlank(msgUser.getAlias())){
+			msgUser.setAlias(user.getName());
+			save(msgUser);
+		}
+		
+		return msgUser;
+	}
+	
+	
+	/**
+	 * 注册新用户信息准备 - 兼容微信端新增用户
+	 * @return
+	 */
+	public HashMap<String, Object> prepareUserInfoMap(String openId, String userId, String source,String wxSource) {
+		HashMap<String,Object> userMap = new HashMap<String,Object>(4);
+		
+		userMap.put("openId", openId);
+		userMap.put("userId", userId);
+		
+		if(StringUtils.isNotBlank(source)){
+			userMap.put(SOURCE, source);
+		}
+		
+		if(StringUtils.isNotBlank(wxSource)){
+			userMap.put("wxSource", wxSource);
+		}
+		
+		return userMap;
+	}
+	
+	/**
+	 * @version 2.0 报名
+	 * @param role:角色(添加用户的角色), type:(操作类型:后台、微信、APP....) userMap:参数
+	 */
+	public Result executeSignup(String role, String type, String mode,Map<String, Object> userMap) {
+		if (Constants.REG_TYPE_APP.equals(type)) {
+
+			// 游客提交
+			if (Constants.REG_ROLE_VISITOR.equals(role)) {
+				
+					doVisitorRegClass(userMap);
+				
+			} else {
+				// 用户提交
+				doRegClass(userMap.get(CLASS_ID).toString(), userMap.get("courseId").toString());
+			}
+		}
+		
+		return null;
+	}
+
+	/**
+	 * @version 2.0 激活
+	 * @param role:角色(添加用户的角色), type:(操作类型:后台、微信、APP....) userMap:参数
+	 */
+	public Result executeActivation(String role, String type,String mode, Map<String, Object> userMap,boolean smsFlag,Map<String,String> passwordMap) {
+		//APP:
+		if (Constants.REG_TYPE_APP.equals(type)) {
+			doActiveRegistrations((String[]) userMap.get("regIds"),smsFlag,passwordMap);
+		}
+		if (Constants.REG_TYPE_BACKSTAGE.equals(type)) {
+			// 激活报名信息
+			if (Constants.REG_MODE_ACTIVATION.equals(mode)) {
+				return doActiveRegistrations((String[]) userMap.get("regIds"),smsFlag,passwordMap);
+			}
+			// 冻结报名信息
+			if (Constants.REG_MODE_FROZEN.equals(mode)) {
+				return doDeActiveRegistrations((String[]) userMap.get("regIds"));
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * 获取Q学友最新的账号号码
+	 * @return
+	 */
+	@Override
+	public String doGetNewQxyAccount() {
+		return String.valueOf(this.findByComplexSql("select nextval('user_account')", null, Integer.class).get(0));
+	}
+	
+	/**
+	 * 激活学员发送消息
+	 * @param map
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private Result sendMsgActiveMsg(Map<String,String> map,int iType) {
+		
+		if(iType == 1 ){
+			// 激活:延时一分钟发送 
+			long deliverTime = System.currentTimeMillis() + 60 * 1000 ;
+//			ONSMsg msg = new ONSMsg(onsProducer.getTopic(),deliverTime);
+//			
+//			msg.put("msgType", "REG_ACTIVE");
+//			msg.put("iType", String.valueOf(iType));
+//			msg.put(USER_ID, map.get(USER_ID));
+//			msg.put(PASSWORD, map.get(PASSWORD));
+//			msg.put(CLASS_ID, map.get(CLASS_ID));
+//			msg.put(REG_ID, map.get("regId"));
+//			
+//			try {
+//				onsProducer.sendMsg(msg);
+//				return new Result(true);
+//			} catch (Exception e) {
+//				log.error("call userRegistrationMsgSendService fail.regId: " + map.get("regId"), e);
+//			}
+		}
+		
+//		if(iType == 2){
+//			
+//			ONSMsg msg = new ONSMsg(onsProducer.getTopic());
+//			
+//			msg.put("msgType", "REG_ACTIVE");
+//			msg.put("iType", String.valueOf(iType));
+//			msg.put("userIds", map.get("userIds"));
+//			msg.put(CLASS_ID, map.get(CLASS_ID));
+//			
+//			try {
+//				onsProducer.sendMsg(msg);
+//				return new Result(true);
+//			} catch (Exception e) {
+//				log.error("call userRegistrationMsgSendService fail.regId: " + map.get("regId"), e);
+//			}
+//			
+//		}
+
+		return new Result(false);
+	}
+
+	/**
+	 * 异步处理学员激活所需要的操作
+	 * @return
+	 */
+	public Result doOnsRegActive(String userId,String password,String classId,String regId){
+		String result = "时间消耗:";
+		long t1 = System.currentTimeMillis();
+		// 1.初始化环信信息
+		doActiveInsertEasemobInfo(userId, classId, regId,password);
+		result = result.concat("1.初始化环信信息:".concat(String.valueOf(System.currentTimeMillis()-t1)));
+		long t2 = System.currentTimeMillis();
+		// 2.初始化用户唯一编码
+		doActiveUpdateUserUniqueCode(userId);
+		result = result.concat("-----2.初始化用户唯一编码:".concat(String.valueOf(System.currentTimeMillis()-t2)));
+		long t3 = System.currentTimeMillis();
+		// 3.初始化用户推送消息设置
+		doActiveInitMessageSettrings(userId);
+		result = result.concat("-----3.初始化用户推送消息设置:".concat(String.valueOf(System.currentTimeMillis()-t3)));
+		long t4 = System.currentTimeMillis();
+		// 4.初始化当前班级已经有的课表对应的学生课表
+		doActiveinsertStudentScheduleByRegActive(userId, classId);
+		result = result.concat("-----4.初始化当前班级已经有的课表对应的学生课表:".concat(String.valueOf(System.currentTimeMillis()-t4)));
+		log.info(result);
+		return new Result(true);
+		
+	}
+	
+	/**
+	 * 异步处理学员激活所需要的操作
+	 * @return
+	 */
+	public Result doOnsRegActive2(String userId,String password,String classId,String regId){
+		String result = "时间消耗:";
+		long t1 = System.currentTimeMillis();
+		// 1.初始化环信信息
+		doActiveInsertEasemobInfo(userId, classId, regId,password);
+		result = result.concat("1.初始化环信信息:".concat(String.valueOf(System.currentTimeMillis()-t1)));
+		long t2 = System.currentTimeMillis();
+		// 2.初始化用户唯一编码
+		doActiveUpdateUserUniqueCode(userId);
+		result = result.concat("-----2.初始化用户唯一编码:".concat(String.valueOf(System.currentTimeMillis()-t2)));
+		long t3 = System.currentTimeMillis();
+		// 3.初始化用户推送消息设置
+		doActiveInitMessageSettrings(userId);
+		result = result.concat("-----3.初始化用户推送消息设置:".concat(String.valueOf(System.currentTimeMillis()-t3)));
+		long t4 = System.currentTimeMillis();
+		// 4.初始化当前班级已经有的课表对应的学生课表
+		doActiveinsertStudentScheduleByRegActive(userId, classId);
+		result = result.concat("-----4.初始化当前班级已经有的课表对应的学生课表:".concat(String.valueOf(System.currentTimeMillis()-t4)));
+		return new Result(true, result);
+		
+	}
+	
+
+	/**
+	 * 初始化当前班级已经有的课表对应的学生课表
+	 * @param userId
+	 * @param classId
+	 */
+	@SuppressWarnings("null")
+	private void doActiveinsertStudentScheduleByRegActive(String userId,
+			String classId) {
+		try{
+//			Result result = scheduleService.insertStudentScheduleByRegActive(userId, classId);
+			Result result = null;
+			insertOnsLog(userId, "初始化用户StudentSchedule成功;class_id:".concat(classId) , "REG_INIT_STUDENT_SCHEDULE", "结果:".concat(result.getMsg()));
+//			sendSysNotice(new String[]{userId}, classId, true);
+		}catch( Exception e ){
+			log.error("初始化当前班级已经有的课表对应的学生课表失败: "+userId , e );
+			insertOnsLog(userId, "初始化用户StudentSchedule成功;class_id:".concat(classId) , "REG_INIT_STUDENT_SCHEDULE", "" );
+		}
+	}
+
+	/**
+	 * 初始化用户推送消息设置
+	 * @param userId
+	 */
+	private void doActiveInitMessageSettrings(String userId) {
+		try{
+//			msgSettingService.doInitMessageSettrings(userId);
+			insertOnsLog(userId, "初始化用户MessageSetting成功" , "REG_INIT_MESSAGE_SETTING", "" );
+		}catch(Exception e){
+			log.error("初始化用户推送设置失败: "+userId , e );
+			insertOnsLog(userId, "初始化用户MessageSetting失败" , "REG_INIT_MESSAGE_SETTING", "");
+		}
+	}
+
+	/**
+	 * 初始化用户唯一编码
+	 * @param userId
+	 */
+	private void doActiveUpdateUserUniqueCode(String userId) {
+		try{
+//			userService.doUpdateUserUniqueCode(userId);
+			insertOnsLog(userId, "初始化用户UniqueCode成功" , "REG_INIT_UNIQUE_CODE", "unique_code:");
+		}catch(Exception e){
+			log.error("初始化用户code失败: "+userId , e );
+			insertOnsLog(userId, "初始化用户UniqueCode失败" , "REG_INIT_UNIQUE_CODE", "");
+		}
+	}
+
+	/**
+	 * 初始化环信信息
+	 * @param userId
+	 * @param classId
+	 * @param regId
+	 * @param password
+	 */
+	private void doActiveInsertEasemobInfo(String userId, String classId,
+			String regId, String password) {
+		try{
+			MsgUser user = new MsgUser();
+			user.setUserId(userId);
+			user.setPassword(password);
+			
+			Result result = insertEasemobInfo(user, classId,regId);
+			insertOnsLog(userId, "初始化用户Easemob未报错:result:".concat(String.valueOf(result.isSuccess())).concat(";regId :").concat(regId) , "REG_INIT_EASEMOB_INFO", "classId: ".concat(classId));
+		}catch(Exception e){
+			log.error("初始化用户Easemob失败: "+userId , e );
+			insertOnsLog(userId, "初始化用户Easemob失败;regId :".concat(regId) , "REG_INIT_EASEMOB_INFO", "classId: ".concat(classId));
+		}
+	}
+	
+	/**
+	 * 消息处理删除、冻结学员后续操作
+	 * @param userId
+	 * @param password
+	 * @param classId
+	 * @param regId
+	 * @return
+	 */
+	public Result doOnsRegDeActive(String userIds,String classId){
+		
+		// 1.删除环信群成员
+		try{
+			MsgGroup group = read(MsgGroup.class, classId );
+			if( null == group ){
+				return new Result(true);
+			}
+		}catch(Exception e){
+			log.error("删除环信群成员失败: " + userIds + "  groupId:" + classId , e );
+		}
+		
+		return new Result(true);
+		
+	}
+	
+	/**
+	 * 插入激活学员异步操作 业务日志
+	 * @param userIds
+	 * @param content
+	 * @param module
+	 * @param desp
+	 * @return
+	 */
+	private Result insertOnsLog(String userId, String content ,String module, String desp ){
+		
+		SysLog log = new SysLog() ;
+		
+		TraceUtils.setCreateTrace(log);
+		log.setUserId(userId);
+		log.setContent(content);
+		log.setModule(module);
+		log.setDesp(desp);
+		log.setDeleteFlag(false);
+		log.setType(SysLog.LOG_TYPE_BUSINESS);
+		
+		sysLogService.insertLog(log);
+		
+		return new Result(true);
+	}
+	
+	/**
+	 * 给学员发送短信
+	 */
+	@Override
+	public Result doSendSmsToUser(String regIds) {
+		
+		String[] strIds = regIds.split(",");
+		Result result = new Result(false);
+		
+		for (int i = 0; i < strIds.length; i++) {
+			UserRegistration ur = read(UserRegistration.class, strIds[i]);
+			
+			int sendCount = this.findCount("from Sms where templateId = ? and deleteFlag is false and mobilePhone = ? and state = ? and date(createTime) = date(sysdate())",
+					CollectionUtils.newList(SmsContants.SMS_REG_ACTIVE_ORG_TEMPLATE_ID, ur.getMobilePhone(), "000000"));
+			
+			if(sendCount >=2){
+				return new Result(false, "发送失败,每个学员每天只能发送两次密码短信");
+			}
+			
+			if (null != ur && ur.getStatus() == UserRegistration.STATUS_ACTIVE) {
+				
+//				result = smsService.doSendMsg(SmsContants.SMS_REG_ACTIVE_ORG_TEMPLATE_ID, ur.getMobilePhone(), false, ur.getUserName(), "“" + ur.getOrgClass().getName() + "”", RSAUtils.decrypt(ur.getUser().getPassword()));
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * 班级修改自定义字段
+	 * 
+	 * @param data
+	 * @param classId
+	 * @return
+	 */
+	private List<OrgClassUserCustom> saveCustom(List<OrgClassUserCustom> customLst, String classId){
+		List<OrgClassUserCustom> newCustomLst = new ArrayList<OrgClassUserCustom>(customLst.size());
+		if(StringUtils.isNotBlank(classId)){//先删除班级的
+			this.bulkUpdate("update OrgClassUserCustom set deleteFlag = 1 where classId = ?", new Object[]{classId});
+		}else{
+			this.bulkUpdate("update OrgClassUserCustom set deleteFlag = 1 where classId is null and orgId = ?", new Object[]{ClientUtils.getOrgId()});
+		}
+		int index = 0;
+		for (OrgClassUserCustom custom : customLst) {
+			if(custom != null){
+				OrgClassUserCustom newCustom = null;
+				if(StringUtils.isNotBlank(custom.getCustomId())){ // 修改
+					
+					newCustom = read(OrgClassUserCustom.class, custom.getCustomId());
+					newCustom.setCheckedFlag(custom.getCheckedFlag());
+					newCustom.setRequiredFlag(custom.getRequiredFlag());
+					newCustom.setObjectName(custom.getObjectName());
+					newCustom.setSignupFillin(custom.isSignupFillin());
+					newCustom.setDeleteFlag(false);
+					newCustom.setObjectOption(custom.getObjectOption());
+					newCustom.setOrderNum(index);
+					TraceUtils.setUpdateTrace(newCustom);
+				}else{ // 新增
+					
+					newCustom = new OrgClassUserCustom();
+					newCustom.setCheckedFlag(custom.getCheckedFlag());
+					newCustom.setRequiredFlag(custom.getRequiredFlag());
+					newCustom.setSignupFillin(custom.isSignupFillin());
+					newCustom.setObjectName(custom.getObjectName());
+					newCustom.setObjectValue(custom.getObjectValue());
+					newCustom.setObjectType(custom.getObjectType());
+					newCustom.setObjectOption(custom.getObjectOption());
+					newCustom.setOrgId(ClientUtils.getOrgId());
+					newCustom.setClassId(classId);
+					newCustom.setDeleteFlag(false);
+					newCustom.setOrderNum(index);
+					TraceUtils.setCreateTrace(newCustom);
+				}
+				index ++;
+				newCustomLst.add(newCustom);
+			}
+		}
+		
+		saveOrUpdateAll(newCustomLst);
+		
+		return newCustomLst;
+	}
+	
+	/**
+	 * 得到注册信息
+	 * 
+	 * @return
+	 */
+	public Result doSaveCustom(String data, String classId) {
+		
+		List<OrgClassUserCustom> customLst = JSONArray.parseArray(data, OrgClassUserCustom.class);
+		
+		if(customLst.isEmpty()){
+			
+			return new Result(false,"提交自定义信息失败");
+		}
+		List<OrgClassUserCustom> lstResult = new ArrayList<OrgClassUserCustom>();
+		//机构
+		if(StringUtils.isEmpty(classId)){
+			lstResult = this.saveCustom(customLst, null);
+		}else{//班级
+			lstResult = this.saveCustom(customLst, classId);
+		}
+		
+		return new Result(true, "", lstResult);
+	}
+	 
+	/**
+	 * 获取自定义字段信息
+	 * 
+	 */
+	public List<OrgClassUserCustom> doInitCustomLst(String classId, String pageType, boolean isApp){
+		
+		//app端访问
+		if(isApp){
+			return new ArrayList<OrgClassUserCustom>();
+		}
+		if(StringUtils.isBlank(classId)){//机构查询
+			//查询机构自定义字段
+			List<OrgClassUserCustom> orgCustomLst = find("from OrgClassUserCustom where deleteFlag is false and orgId = ? and classId is null order by orderNum asc",
+					CollectionUtils.newList(ClientUtils.getOrgId()), OrgClassUserCustom.class);
+			return orgCustomLst;
+		}else{ //班级查询
+			List<OrgClassUserCustom> customLst = null;
+			if("all".equals(pageType)){
+				customLst = find("from OrgClassUserCustom where deleteFlag is false and classId = ? order by orderNum asc",
+						CollectionUtils.newList(classId), OrgClassUserCustom.class);
+			}else{
+				customLst = find("from OrgClassUserCustom where deleteFlag is false and classId = ? and signupFillin is true order by orderNum asc",
+						CollectionUtils.newList(classId), OrgClassUserCustom.class);
+			}
+			return customLst;
+		}
+		
+	}
+	
+	/**
+	 * 学员转班
+	 * 
+	 * @return
+	 */
+	public Result doSaveTurn(List<String> regIds,String classId) {
+		
+		// 要转入的学员
+		String hql = " from UserRegistration where deleteFlag is false and registrationId in (:regIds)";
+		List<UserRegistration> lstReg = findByComplexHql(hql, CollectionUtils.newObjectMap("regIds",regIds), UserRegistration.class);
+		
+		String hql_r = " from UserRegistration where deleteFlag is false and classId = ?";
+		List<UserRegistration> lstRegLst = find(hql_r, CollectionUtils.newList(classId), UserRegistration.class);
+		List<String> lst = new ArrayList<String>(lstRegLst.size());
+		for (UserRegistration userR : lstRegLst) {
+			lst.add(userR.getMobilePhone());
+		}
+		
+		int regCount = 0;
+		List<UserRegistration> userRegs = new ArrayList<UserRegistration>(lstReg.size());
+		for (UserRegistration userReg : lstReg) {
+			if(lst.contains(userReg.getMobilePhone())){
+				regCount++;
+			}else{
+				UserRegistration newUserReg = new UserRegistration();
+				try {
+					BeanUtils.copyProperties(newUserReg, userReg);
+					newUserReg.setClassId(classId);
+					newUserReg.setActivationTime(null);
+					newUserReg.setStatus(UserRegistration.STATUS_DEACTIVE);
+					newUserReg.setRegistrationId(null);
+					userRegs.add(newUserReg);
+					
+					userReg.setDeleteFlag(true);
+					TraceUtils.setUpdateTrace(userReg);
+					save(userReg);
+				} catch (Exception e) {
+					log.error("复制UserRegistration出错", e);
+					regCount++;
+					continue ;
+				}
+			}
+		}
+		if(!userRegs.isEmpty()){
+			saveOrUpdateAll(userRegs);
+		}
+		
+		String msg = regCount > 0 ? "成功转入" + (lstReg.size() - regCount) + "条,忽略" + regCount+ "条" : null;
+		return new Result(true,msg);
+	}
+
+	
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java b/src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
new file mode 100644
index 0000000..27d3b60
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
@@ -0,0 +1,175 @@
+package com.qxueyou.scc.user.service.impl;
+
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.sys.model.SysMenu;
+import com.qxueyou.scc.user.dao.UserRoleDAO;
+import com.qxueyou.scc.user.model.UserRole;
+import com.qxueyou.scc.user.service.IUserRoleService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色
+ * 
+ * @author ody.yuan
+ *
+ */
+@Service
+public class UserRoleService extends CommonAppService implements IUserRoleService {
+	@Autowired
+	UserRoleDAO dao;
+
+	/**
+	 * 得到菜单
+	 * 
+	 * @return
+	 */
+	public Result queryMenus(String roleId) {
+		return this.queryCommonMenus(roleId);
+
+	}
+
+	/**
+	 * 得到菜单
+	 * 
+	 * @return
+	 */
+	private Result queryCommonMenus(String roleId) {
+
+		// 按角色过滤
+
+		Result result = new Result(true);
+
+		List<String> currMenus = new ArrayList<String>();
+
+		if (StringUtils.isNotBlank(roleId)) {
+			String hql0 = "select menuId from SysPrivilege s where s.deleteFlag is false and s.roleId = ? ";
+			currMenus = this.find(hql0, CollectionUtils.newList(), String.class);
+		}
+
+		String hql = "select s from SysMenu s, SysPrivilege p where s.deleteFlag is false and p.deleteFlag is false "
+				+ " and s.menuId = p.menuId and p.roleId = ? ";
+		List<SysMenu> menus = this.find(hql, CollectionUtils.newList(""), SysMenu.class);
+
+		List<Map<String, Object>> lst = new ArrayList<Map<String, Object>>();
+		Map<String, Object> map;
+
+		for (SysMenu menu : menus) {
+
+			map = new HashMap<String, Object>();
+			map.put("id", menu.getMenuId());
+			map.put("pId", menu.getParentMenuId());
+			map.put("name", menu.getName());
+
+			if (currMenus.contains(menu.getMenuId())) {
+				map.put("check", menu.getName());
+			}
+
+			lst.add(map);
+		}
+
+		result.addData("lstMenus", lst);
+		result.addData("currMenus", currMenus);
+
+		return result;
+	}
+
+	/**
+	 * 取得当前角色是否编辑过 按钮权限,有记录就是编辑过
+	 * 
+	 * @return
+	 */
+	public boolean getButtonPrivilegeFlag(String orgId, String topOrgId, String roleId) {
+		return false;
+
+	}
+
+	@Override
+	public UserRole queryRoleByCode(String roleCode) {
+		return this.findUnique("from UserRole u where u.eName=?", CollectionUtils.newList(roleCode), UserRole.class);
+
+	}
+
+	@Override
+	public List<UserRole> getUserRoleLst(String keyword) {
+		String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+		List<UserRole> userRoleLst = dao.getUserRoleLst(keyword_);
+		return userRoleLst;
+	}
+
+	@Override
+	public Result getUserLstByRoleId(String roleId, Integer pageSize, Integer pageNum, String keyword) {
+		String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
+		List<Map<String, Object>> userLst = dao.getUserLstByRoleId(roleId, pageSize, pageNum, keyword_);
+		int userCount = dao.getUserCount(roleId, keyword_);
+		return new Result(true, "success", CollectionUtils.newObjectMap("userLst", userLst, "userCount", userCount));
+
+	}
+
+	@Override
+	public Result delete(String userId) {
+		boolean result = dao.delete(userId);
+		String messge = "移除成功";
+		if (!result) {
+			messge = "移除失败";
+		}
+		return new Result(result, messge);
+	}
+
+	@Override
+	public Result queryRoleDetail(String roleId) {
+		List<Map<String, Object>> findMenuLstById = dao.findMenuLstById(roleId);
+		UserRole userRole = read(UserRole.class, roleId);
+
+		return new Result(true, "success",
+				CollectionUtils.newObjectMap("roleName", userRole.getName(), "menuLst", findMenuLstById));
+	}
+
+	@Override
+	public Result updateRole(String roleId, String menuIds, String name) {
+
+		return dao.updateRole(roleId, menuIds, name);
+
+	}
+
+	@Override
+	public Result deleteRole(String roleId) {
+
+		return dao.deleteRole(roleId);
+	}
+
+	@Override
+	public List<Map<String, Object>> findMenuLst() {
+
+		return dao.findMenuLst();
+	}
+
+	@Override
+	public Result addRole(String name,String roleType) {
+		UserRole userRole = new UserRole();
+		userRole.setName(name);
+		userRole.setTopOrgId(ClientUtils.getOrgId());
+        userRole.setType(roleType);
+		TraceUtils.setCreateTrace(userRole);
+		
+		save(userRole);
+		return new Result(true);
+	}
+
+	@Override
+	public Result addTeachers(String teacherIds, String roleId) {
+
+		return dao.addTeachers(teacherIds, roleId);
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/impl/UserService.java b/src/main/java/com/qxueyou/scc/user/service/impl/UserService.java
new file mode 100644
index 0000000..ccdb50c
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/impl/UserService.java
@@ -0,0 +1,245 @@
+package com.qxueyou.scc.user.service.impl;
+
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.qxueyou.scc.admin.classes.model.ClsClass;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.ClientUtils;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.org.model.Organization;
+import com.qxueyou.scc.org.service.IOrganizationService;
+import com.qxueyou.scc.sys.model.CacheParamters;
+import com.qxueyou.scc.teach.student.model.StuStudent;
+import com.qxueyou.scc.user.model.User;
+import com.qxueyou.scc.user.model.UserReRoleUser;
+import com.qxueyou.scc.user.service.IUserService;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * 用户管理服务
+ *
+ * @author 德虎
+ */
+@Service
+public class UserService extends CommonAppService implements IUserService {
+
+    @Autowired
+    IOrganizationService organizationService;
+
+    /**
+     * 初始化用户wrapper
+     */
+    @Override
+    public UserInfoWrapper initUserInfoWrapper(CacheParamters param, boolean needMenus) {
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        HttpSession session = request.getSession();
+        UserInfoWrapper wrapper = new UserInfoWrapper();
+        User user = read(User.class, param.getUserId());
+//        System.out.println("用户信息"+user);
+        // TODO:这里需要对应的获取组织信息
+        Organization org = read(Organization.class, user.getOrganizationId());
+//        System.out.println("组织信息"+user.getOrganizationId());
+
+        //TODO 设置user,添加UUNUMBER
+        user.setEmail(param.getCustomRoleValue());
+        user.setAge(1);
+        //TODO 设置user,添加UURENUMBER
+        user.setImei(param.getCustomOrgId());
+        //查询班级信息
+//        System.out.println(user.getUserId());
+//        System.out.println(user.getOrganizationId());
+//        System.out.println(StuStudent.STATUS_ACTIVE);
+        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);
+        wrapper.setUser(user);
+        wrapper.setOrg(org);
+        wrapper.setClass(objClsClass);
+        wrapper.setLoginInfo(param.getCacheIpFlag(), param.getIp(), param.getPlatForm());
+        session.setAttribute(UserInfoWrapper.INF_USER_ID,user.getUserId());
+        if(objClsClass!=null){
+            session.setAttribute(UserInfoWrapper.INF_CLASS_ID,objClsClass.getClassId());
+        }
+        return wrapper;
+    }
+
+    @Override
+    public User insertUser(String name, String account, String mobilePhone, String password, Boolean sex, String orgId) {
+        return newUser(name, account, mobilePhone, password, sex, orgId);
+    }
+
+    private User newUser(String name, String account, String mobilePhone, String password, Boolean sex, String orgId) {
+
+        User user = new User();
+        TraceUtils.setCreateTrace(user);
+        user.setAccount(account);
+        user.setName(name);
+        user.setMobilePhone(mobilePhone);
+        user.setPassword(password);
+        user.setSex(sex);
+        user.setOrganizationId(orgId);
+        save(user);
+
+        return user;
+    }
+
+    @Override
+    public User getUserByAccount(String account, String orgId) {
+        String hql = "from User where account=? and deleteFlag is false and organizationId = ?";
+        return findUnique(hql, CollectionUtils.newList(account, orgId), User.class);
+    }
+
+    @Override
+    public Result addRole(String userId, String roleId) {
+
+        String hql = "from UserReRoleUser where userId=? and roleId=? and deleteFlag is false";
+        UserReRoleUser re = findUnique(hql, CollectionUtils.newList(userId, roleId), UserReRoleUser.class);
+
+        if (re == null) {
+            re = new UserReRoleUser();
+            re.setDeleteFlag(false);
+            re.setRoleId(roleId);
+            re.setUserId(userId);
+            save(re);
+        }
+
+        return new Result(true);
+    }
+
+    @Override
+    public Result updatePassword(String userId, String usedPass, String pass) {
+        User user = read(User.class, userId);
+        if (StringUtils.isNotBlank(usedPass) && StringUtils.isNotBlank(pass)) {
+            if (!user.getPassword().equals(usedPass)) {
+                return new Result(false, "输入的旧密码错误");
+            }
+            user.setPassword(pass);
+        }
+        TraceUtils.setUpdateTrace(user);
+        save(user);
+
+        return new Result(true);
+    }
+
+    /**
+     * 用户设置头像
+     *
+     * @param headPath
+     * @return
+     */
+    public Result updateUserHead(String userId, String headPath) {
+    	 if(StringUtils.isEmpty(headPath)) {
+    		 return new Result(false, "头像地址为空");
+    	 }
+    	 User user = read(User.class, userId);
+
+    	 user.setImgPath(headPath);
+    	 TraceUtils.setUpdateTrace(user);
+         save(user);
+
+         return new Result(true);
+    }
+
+    /**
+     * 用户设置手机号
+     *
+     * @param headPath
+     * @return
+     */
+    public Result updateUserInfo(String userId, String mobilePhone) {
+
+    	 User user = read(User.class, userId);
+
+    	 user.setMobilePhone(mobilePhone);
+    	 TraceUtils.setUpdateTrace(user);
+         save(user);
+
+         return new Result(true);
+    }
+
+    @Override
+    public Result updatePassword(String userId, String password) {
+        User user = read(User.class, userId);
+
+        TraceUtils.setUpdateTrace(user);
+        user.setPassword(password);
+
+        save(user);
+
+        return new Result(true);
+    }
+
+    @Override
+    public boolean isAdmin() {
+        String hqlRole = "select min(u.type)   from UserRole u , UserReRoleUser r where u.deleteFlag is false and r.deleteFlag is false and r.userId =:userId and u.roleId =r.roleId";
+        String maxRoleTypeStr = findUniqueByHql(hqlRole,
+                CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()));
+        Integer type = Integer.valueOf(StringUtils.isNotBlank(maxRoleTypeStr) ? maxRoleTypeStr : "0");
+        if (type == 1) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isTeacher() {
+        String hqlRole = "select min(u.type)   from UserRole u , UserReRoleUser r where u.deleteFlag is false and r.deleteFlag is false and r.userId =:userId and u.roleId =r.roleId";
+        String maxRoleTypeStr = findUniqueByHql(hqlRole,
+                CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()));
+        Integer type = Integer.valueOf(StringUtils.isNotBlank(maxRoleTypeStr) ? maxRoleTypeStr : "0");
+        if (type == 2) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean doBatchUpdateUser(List<User> lstUser) {
+        return this.saveOrUpdateAll(lstUser).isSuccess();
+    }
+
+    @Override
+    public Result updateUser(String userId, String name, String account, String mobilePhone, String password,
+                             Boolean sex) {
+
+        User dbUser = read(User.class, userId);
+
+        if (dbUser.getAccount().equals(account)) {
+            dbUser.setName(name);
+            dbUser.setMobilePhone(mobilePhone);
+            dbUser.setPassword(password);
+            TraceUtils.setCreateTrace(dbUser);
+            save(dbUser);
+            return new Result(true, "success");
+        }
+
+        User user = getUserByAccount(account, ClientUtils.getOrgId());
+        if (null != user) {
+            return new Result(false, "用户账号已经存在");
+        }
+        dbUser.setAccount(account);
+        dbUser.setName(name);
+        dbUser.setMobilePhone(mobilePhone);
+        dbUser.setPassword(password);
+        TraceUtils.setCreateTrace(dbUser);
+        save(dbUser);
+        return new Result(true, "success");
+    }
+
+    @Override
+    public boolean exists(String account) {
+        return findCount("from User where account = ?", CollectionUtils.newList(account)) > 0;
+    }
+
+}
diff --git a/src/main/java/com/qxueyou/scc/user/service/impl/UserSignService.java b/src/main/java/com/qxueyou/scc/user/service/impl/UserSignService.java
new file mode 100644
index 0000000..e2c94dd
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/service/impl/UserSignService.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.user.service.impl;
+
+import com.qxueyou.scc.base.service.impl.CommonAppService;
+import com.qxueyou.scc.base.util.CollectionUtils;
+import com.qxueyou.scc.base.util.TraceUtils;
+import com.qxueyou.scc.user.model.UserSign;
+import com.qxueyou.scc.user.service.IUserSignService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author luodong
+ * @version 1.0
+ * @date 2020/8/20 17:58
+ */
+@Service
+public class UserSignService extends CommonAppService implements IUserSignService {
+
+	@Override
+	public List<UserSign> findByStatus(int status) {
+		String hql="select us from UserSign us where us.status=?";
+		List<UserSign> userSigns = this.find(hql, CollectionUtils.newList(status), UserSign.class);
+		return userSigns;
+	}
+
+	@Override
+	public void addSign(UserSign userSign) {
+		UserSign userSign1=new UserSign();
+		TraceUtils.setCreateTrace(userSign1);
+		this.save(userSign);
+	}
+
+	@Override
+	public void updateStatus(UserSign userSign) {
+		UserSign userSign1 = read(UserSign.class, userSign.getUserSignId());
+		if (userSign1!=null) {
+			TraceUtils.setUpdateTrace(userSign1);
+			userSign1.setStatus(userSign.getStatus());
+			save(userSign1);
+		}
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/user/util/ExcelReader.java b/src/main/java/com/qxueyou/scc/user/util/ExcelReader.java
new file mode 100644
index 0000000..c4ad815
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/user/util/ExcelReader.java
@@ -0,0 +1,211 @@
+package com.qxueyou.scc.user.util;
+
+/**
+ * Description:Excel数据读取工具类,POI实现,兼容Excel2003,及Excel2007
+ **/
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+
+public class ExcelReader {
+	Workbook wb;
+	List<String[]> dataList = new ArrayList<String[]>(100);
+
+	public ExcelReader(File file) {
+		try {
+			InputStream inp = new FileInputStream(file);
+			wb = WorkbookFactory.create(inp);
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		} catch (InvalidFormatException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	/**
+	 * 取Excel所有数据,包含header
+	 * 
+	 * @return List<String[]>
+	 */
+	public List<String[]> getAllData(int sheetIndex) {
+		int columnNum = 0;
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		if (sheet.getRow(0) != null) {
+			columnNum = sheet.getRow(0).getLastCellNum()
+					- sheet.getRow(0).getFirstCellNum();
+		}
+		if (columnNum > 0) {
+			for (Row row : sheet) {
+				String[] singleRow = new String[columnNum];
+				int n = 0;
+				for (int i = 0; i < columnNum; i++) {
+					Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
+					switch (cell.getCellType()) {
+					case Cell.CELL_TYPE_BLANK:
+						singleRow[n] = "";
+						break;
+					case Cell.CELL_TYPE_BOOLEAN:
+						singleRow[n] = getHandlerString(Boolean.toString(cell.getBooleanCellValue()));
+						break;
+					// 数值
+					case Cell.CELL_TYPE_NUMERIC:
+						if (DateUtil.isCellDateFormatted(cell)) {
+							singleRow[n] = getHandlerString(String.valueOf(cell.getDateCellValue()));
+						} else {
+							cell.setCellType(Cell.CELL_TYPE_STRING);
+							String temp = getHandlerString(cell.getStringCellValue());
+							// 判断是否包含小数点,如果不含小数点,则以字符串读取,如果含小数点,则转换为Double类型的字符串
+							if (temp.indexOf('.') > -1) {
+								singleRow[n] = String.valueOf(new Double(temp));
+							} else {
+								singleRow[n] = temp;
+							}
+						}
+						break;
+					case Cell.CELL_TYPE_STRING:
+						singleRow[n] = getHandlerString(cell.getStringCellValue());
+						break;
+					case Cell.CELL_TYPE_ERROR:
+						singleRow[n] = "";
+						break;
+					case Cell.CELL_TYPE_FORMULA:
+						cell.setCellType(Cell.CELL_TYPE_STRING);
+						String rowValue = getHandlerString(cell.getStringCellValue());
+						if (rowValue != null) {
+							rowValue = rowValue.replaceAll("#N/A", "");
+						}
+						singleRow[n] = rowValue;
+						break;
+					default:
+						singleRow[n] = "";
+						break;
+					}
+					n++;
+				}
+				if ("".equals(singleRow[0])) {
+					continue;
+				}// 如果第一行为空,跳过
+				dataList.add(singleRow);
+			}
+		}
+		return dataList;
+	}
+	
+	/**
+	 * 处理导入的字符串,包括去除空格等符号
+	 * @param str
+	 * @return
+	 */
+	private String getHandlerString(String str){
+		if(StringUtils.isBlank(str)){
+			return "" ;
+		}
+        return str.trim();     
+	}
+	
+	/**
+	 * 返回Excel最大行index值,实际行数要加1
+	 * 
+	 * @return
+	 */
+	public int getRowNum(int sheetIndex) {
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		return sheet.getLastRowNum();
+	}
+
+	/**
+	 * 返回数据的列数
+	 * 
+	 * @return
+	 */
+	public int getColumnNum(int sheetIndex) {
+		Sheet sheet = wb.getSheetAt(sheetIndex);
+		Row row = sheet.getRow(0);
+		if (row != null && row.getLastCellNum() > 0) {
+			return row.getLastCellNum();
+		}
+		return 0;
+	}
+
+	/**
+	 * 获取某一行数据
+	 * 
+	 * @param rowIndex
+	 *            计数从0开始,rowIndex为0代表header行
+	 * @return
+	 */
+	public String[] getRowData(int sheetIndex, int rowIndex) {
+		String[] dataArray = null;
+		if (rowIndex > this.getColumnNum(sheetIndex)) {
+			return dataArray;
+		} else {
+			dataArray = new String[this.getColumnNum(sheetIndex)];
+			return this.dataList.get(rowIndex);
+		}
+
+	}
+
+	/**
+	 * 获取某一列数据
+	 * 
+	 * @param colIndex
+	 * @return
+	 */
+	public String[] getColumnData(int sheetIndex, int colIndex) {
+		String[] dataArray = null;
+		if (colIndex > this.getColumnNum(sheetIndex)) {
+			return dataArray;
+		} else {
+			if (this.dataList != null && this.dataList.size() > 0) {
+				dataArray = new String[this.getRowNum(sheetIndex) + 1];
+				int index = 0;
+				for (String[] rowData : dataList) {
+					if (rowData != null) {
+						dataArray[index] = rowData[colIndex];
+						index++;
+					}
+				}
+			}
+		}
+		return dataArray;
+	}
+
+	public static void main(String[] args) {
+		// 03
+		File file = new File("d:\\test03.xls");
+		ExcelReader excelReader = new ExcelReader(file);
+		List<String[]> title = excelReader.getAllData(0);
+		for (String[] tTitile : title) {
+			for (String s : tTitile) {
+				System.out.print(s + " ");
+			}
+		}
+
+		// 07
+		file = new File("d:\\test07.xlsx");
+		ExcelReader excelReader1 = new ExcelReader(file);
+		List<String[]> title1 = excelReader1.getAllData(0);
+		for (String[] tTitile : title1) {
+			for (String s : tTitile) {
+				System.out.print(s + " ");
+			}
+		}
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java b/src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java
new file mode 100644
index 0000000..7cde1b9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java
@@ -0,0 +1,180 @@
+package com.qxueyou.scc.web;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.data.redis.core.StringRedisTemplate;
+
+import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.model.Result;
+import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.base.service.ILicenseService;
+import com.qxueyou.scc.config.SccConfig;
+import com.qxueyou.scc.sys.service.IAuthorizeService;
+
+@WebFilter(urlPatterns = "/*", filterName = "authorizeFilter")
+@EnableConfigurationProperties(SccConfig.class)
+public class AuthorizeFilter implements Filter {
+	private final Logger log = LogManager.getLogger("AuthorizeFilter");
+
+	@Autowired
+	private IAuthorizeService authorizeService;
+
+	@Autowired
+	private SccConfig sccConfig;
+	
+	@Autowired
+	ILicenseService licenseService;
+	
+	@Autowired
+	private StringRedisTemplate stringRedisTemplate;
+	
+	private String[] excludeUrls;
+	
+	/**
+	 * 非法请求返回结果
+	 */
+	private String forbidden = JSONObject.toJSONString(new Result(false,Result.CODE_FORBIDDEN));
+	
+	private String forbiddenOfInvalidLicense = JSONObject.toJSONString(new Result(false,Result.CODE_FORBIDDEN,"license invalid"));
+
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		// 从配置文件中获取excludeUrls
+		String excludeUrl = sccConfig.getExcludeUrl();
+
+		if (!StringUtils.isEmpty(excludeUrl)) {
+			excludeUrls = excludeUrl.split(";");
+			String root = filterConfig.getServletContext().getContextPath();
+			for (int i = 0; i < excludeUrls.length; i++) {
+				excludeUrls[i] = excludeUrls[i].replace("\n", "").replace("\t", "").replace(" ", "");
+				excludeUrls[i] = root.concat(excludeUrls[i]);
+			}
+		}
+		
+		log.debug("license info: valid:{0},companyName:{1},productName:{2},expiredDate{3}",
+				licenseService.isValid(),
+				licenseService.getCustomerName(),
+				licenseService.getProductName(),
+				licenseService.getExpiredDate()
+				);
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
+			throws IOException, ServletException {
+
+		HttpServletRequest httpRequest = (HttpServletRequest) request;
+		HttpServletResponse httpResponse = (HttpServletResponse) response;
+
+		String url = httpRequest.getRequestURI();
+		log.debug("request URI:" + url);
+		
+		// 是否略过
+		if (ArrayUtils.isEmpty(excludeUrls) || isExclude(httpRequest)) {
+			filterChain.doFilter(httpRequest, httpResponse);
+			return;
+		}
+		
+		//是否合法
+//		if(!licenseService.isValid()) {
+//			log.debug("license invalid");
+//			forbiddenAsLicense(httpResponse);
+//			return;
+//		}
+
+		if (!addClientInfo(httpRequest)) {
+			log.debug("非法请求:" + httpRequest.getRequestURI());
+			forbidden(httpResponse);
+			return;
+		}
+		filterChain.doFilter(request, response);
+	}
+	
+	private void forbidden(HttpServletResponse httpResponse) {
+		try {
+			httpResponse.getWriter().append(forbidden);
+		} catch (IOException e) {
+			log.error(e,e);
+		}
+		
+	}
+	
+	private void forbiddenAsLicense(HttpServletResponse httpResponse) {
+		try {
+			httpResponse.getWriter().append(forbiddenOfInvalidLicense);
+		} catch (IOException e) {
+			log.error(e,e);
+		}
+		
+	}
+	
+	
+
+	/**
+	 * 绑定客户端信息
+	 * 
+	 * @param httpRequest
+	 * @param cookieKey
+	 * @return
+	 */
+	private boolean addClientInfo(HttpServletRequest httpRequest) {
+		HttpSession session = httpRequest.getSession(true);
+		UserInfoWrapper wrapper = (UserInfoWrapper) session.getAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY);
+	
+		if (wrapper == null) {
+			return false;
+		}
+		
+		//获取用户对应的sessionId是否与保存在redis中的一致,如果不一致,如果不一致则跳转到登录页面
+		//String currOnlineSessinId = (String) stringRedisTemplate.opsForHash().get(UserInfoWrapper.REDIS_USER_ONLINE_MAP_KEY, wrapper.getInfo(UserInfoWrapper.INF_USER_ID));
+
+		//如果不存在,则返回
+//		if(!session.getId().equalsIgnoreCase(currOnlineSessinId)){
+//			session.invalidate();
+//			return false;
+//		}
+		
+		authorizeService.addClientInfo(wrapper);
+		return true;
+	}
+
+	/**
+	 * 是否过滤掉
+	 * 
+	 * @param httpRequest
+	 * @return
+	 */
+	private boolean isExclude(HttpServletRequest httpRequest) {
+		String url = httpRequest.getRequestURI();
+		for (String excludeUrl : excludeUrls) {
+			if (url.startsWith(excludeUrl)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	
+	@Override
+	public void destroy() {
+		System.out.println("destroy authorizeFilter");
+	}
+
+}
diff --git a/src/main/java/com/qxueyou/scc/web/DruidViewServlet.java b/src/main/java/com/qxueyou/scc/web/DruidViewServlet.java
new file mode 100644
index 0000000..d7cfe3b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/DruidViewServlet.java
@@ -0,0 +1,16 @@
+package com.qxueyou.scc.web;
+
+import javax.servlet.annotation.WebServlet;
+
+import com.alibaba.druid.support.http.StatViewServlet;
+
+
+@WebServlet(name = "druidServlet",urlPatterns = "/druid/*" )
+public class DruidViewServlet  extends StatViewServlet {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/src/main/java/com/qxueyou/scc/web/DruidWebFilter.java b/src/main/java/com/qxueyou/scc/web/DruidWebFilter.java
new file mode 100644
index 0000000..9f7ec43
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/DruidWebFilter.java
@@ -0,0 +1,15 @@
+package com.qxueyou.scc.web;
+
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebInitParam;
+
+import com.alibaba.druid.support.http.WebStatFilter;
+
+@WebFilter(filterName = "druidFilter",
+		   urlPatterns = "/*" ,
+		   
+		   initParams={@WebInitParam(name="exclusions",value="*.js ,*.gif ,*.jpg ,*.png ,*.css ,*.ico ,/druid/*")}
+)
+public class DruidWebFilter extends WebStatFilter {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/qxueyou/scc/web/OpenEntityManagerFilter.java b/src/main/java/com/qxueyou/scc/web/OpenEntityManagerFilter.java
new file mode 100644
index 0000000..9dddb7f
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/OpenEntityManagerFilter.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.web;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+
+import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
+
+@WebFilter(filterName="openEntityManagerFilter",urlPatterns="/*")
+public class OpenEntityManagerFilter implements Filter {
+    
+    private final OpenEntityManagerInViewFilter filter;
+
+    public OpenEntityManagerFilter() {
+        filter = new OpenEntityManagerInViewFilter();
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        filter.init(filterConfig);
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        filter.doFilter(request, response, chain);
+    }
+
+    @Override
+    public void destroy() {
+        filter.destroy();
+    }
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/web/OpenSessionFilter.java b/src/main/java/com/qxueyou/scc/web/OpenSessionFilter.java
new file mode 100644
index 0000000..33aabb2
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/OpenSessionFilter.java
@@ -0,0 +1,38 @@
+package com.qxueyou.scc.web;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import org.springframework.orm.hibernate4.support.OpenSessionInViewFilter;
+
+@WebFilter(filterName="openSessionFilter",urlPatterns="/*")
+public class OpenSessionFilter implements Filter {
+    
+    private final OpenSessionInViewFilter filter;
+
+    public OpenSessionFilter() {
+        filter = new OpenSessionInViewFilter();
+        filter.setSessionFactoryBeanName("sessionFactory");
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        filter.init(filterConfig);
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        filter.doFilter(request, response, chain);
+    }
+
+    @Override
+    public void destroy() {
+        filter.destroy();
+    }
+    
+}
diff --git a/src/main/java/com/qxueyou/scc/web/WebListenerTest.java b/src/main/java/com/qxueyou/scc/web/WebListenerTest.java
new file mode 100644
index 0000000..1f481b9
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/WebListenerTest.java
@@ -0,0 +1,19 @@
+package com.qxueyou.scc.web;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.annotation.WebListener;
+
+@WebListener
+public class WebListenerTest implements ServletContextListener  {
+	 @Override
+	    public void contextInitialized(ServletContextEvent servletContextEvent) {
+	        System.out.println("WebListenerTest contextInitialized");
+	    }
+
+	    @Override
+	    public void contextDestroyed(ServletContextEvent servletContextEvent) {
+
+	    }
+}
+
diff --git a/src/main/java/com/qxueyou/scc/web/WebServletTest.java b/src/main/java/com/qxueyou/scc/web/WebServletTest.java
new file mode 100644
index 0000000..10df15b
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/web/WebServletTest.java
@@ -0,0 +1,29 @@
+package com.qxueyou.scc.web;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name = "testServlet",urlPatterns = "/testServlet")
+public class WebServletTest  extends HttpServlet {
+	 /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+	        resp.getWriter().print("test Servlet!!");
+	        resp.getWriter().flush();
+	        resp.getWriter().close();
+	    }
+
+	    @Override
+	    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+	        this.doGet(req, resp);
+	    }
+}
diff --git a/src/main/resources/Transaction.xml b/src/main/resources/Transaction.xml
new file mode 100644
index 0000000..6c63650
--- /dev/null
+++ b/src/main/resources/Transaction.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
+	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
+
+	xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/mvc
+        http://www.springframework.org/schema/mvc/spring-mvc.xsd
+        http://www.springframework.org/schema/jee
+        http://www.springframework.org/schema/jee/spring-jee.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        http://www.springframework.org/schema/aop/spring-aop.xsd
+        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd">
+
+    <!-- 瀹炰綋绠$悊鍣� -->
+    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+        <property name="dataSource" ref="druidDataSource" />
+        <property name="packagesToScan" value="com.qxueyou.scc" />
+        <property name="persistenceProvider">
+            <bean class="org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider" />
+        </property>
+        
+        <property name="jpaVendorAdapter">
+            <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
+            	<property name="generateDdl" value="false" />
+                <property name="database" value="MYSQL" />
+                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
+                <property name="showSql" value="false" />
+        	</bean>
+        </property>
+        
+        <property name="jpaDialect">
+            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
+        </property>
+        
+        <property name="jpaPropertyMap">
+        	<props>
+				<prop key="hibernate.dialect">com.qxueyou.scc.base.handler.QxueyouMysqlDialect</prop>
+				<prop key="hibernate.show_sql">true</prop>
+				<prop key="connection.characterEncoding">GBK</prop>
+				<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
+				<prop key="hibernate.physical_naming_strategy">org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</prop> 
+				<prop key="hibernate.cache.use_second_level_cache">false</prop>
+			</props>
+        </property>
+    </bean>
+    
+    <!-- 閲嶈閰嶇疆锛氬惎鐢ㄦ壂鎻忓苟鑷姩鍒涘缓浠g悊鐨勫姛鑳�  -->
+    <jpa:repositories base-package="com.qxueyou.scc" 
+    	repository-impl-postfix="Impl"
+   	 	transaction-manager-ref="transactionManager" 
+    	entity-manager-factory-ref="entityManagerFactory"/>
+    
+    <!-- 浜嬪姟绠$悊鍣� -->
+    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
+    
+    <!-- 浜嬪姟 -->
+    <tx:advice id="txAdvice" transaction-manager="transactionManager">
+        <tx:attributes>
+            <tx:method name="add*" propagation="REQUIRED" />
+			<tx:method name="insert*" propagation="REQUIRED" />
+			<tx:method name="save*" propagation="REQUIRED" />
+			<tx:method name="update*" propagation="REQUIRED" />
+			<tx:method name="delete*" propagation="REQUIRED" />
+			<tx:method name="do*" propagation="REQUIRED" />
+			<tx:method name="execute*" propagation="REQUIRED" />
+			<tx:method name="logSave*" propagation="REQUIRES_NEW" />
+			<tx:method name="*" read-only="true" />
+        </tx:attributes>
+    </tx:advice> 
+    
+    <!-- 浜嬪姟鍏ュ彛 -->
+    <aop:config>
+        <aop:pointcut id="allServiceMethod" expression="execution(* com.qxueyou.scc..*Service.*(..))" />
+        <aop:advisor  advice-ref="txAdvice" pointcut-ref="allServiceMethod" />
+    </aop:config>
+	
+	
+</beans>
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..d0c6aad
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,81 @@
+server.port=8090
+server.context-path=/scc
+server.context-index=/web/admin/index.html#/login
+server.max-http-header-size=102400
+#server.ssl.key-store=classpath:certificate.p12
+#server.ssl.key-store-password=szped.com
+#server.ssl.keyStoreType=PKCS12
+
+spring.aop.auto=true
+spring.aop.proxy-target-class=true
+spring.mvc.view.suffix=.html
+
+#spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${scc.resRootPath},file:D:/files/code/qcampus/pc-admin/dist,file:D:/files/code/qcampus/pc-student/dist
+spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${scc.resRootPath},file:D:/scc/htmls/web/mobile_student,file:/Users/yansi/penguin/szped/zns-mobile-student/dist
+
+spring.http.multipart.maxFileSize=3000Mb
+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.username=root
+#mysqldb.datasource.username=rs
+#######此组为安装版系统的默认用户名密码端口#############
+#mysqldb.datasource.username=scc                #
+#mysqldb.datasource.password=fwefwefWEFefewf$   #
+# port:3370                                     #
+#################################################
+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
+#mysqldb.datasource.password=fsefWEF23@#!
+mysqldb.datasource.driverClassName= com.mysql.jdbc.Driver
+mysqldb.datasource.initialSize=5
+mysqldb.datasource.minIdle=2
+mysqldb.datasource.maxActive=5
+mysqldb.datasource.maxWait=10000
+mysqldb.datasource.timeBetweenEvictionRunsMillis=10000
+mysqldb.datasource.minEvictableIdleTimeMillis=300000
+mysqldb.datasource.validationQuery=select 'x'
+mysqldb.datasource.testWhileIdle=true
+mysqldb.datasource.testOnBorrow=false
+mysqldb.datasource.testOnReturn=false
+mysqldb.datasource.poolPreparedStatements=true
+mysqldb.datasource.maxOpenPreparedStatements=20
+#\u76D1\u63A7\u7EDF\u8BA1\u7528\u7684filter:stat\u65E5\u5FD7\u7528\u7684filter:log4j\u9632\u5FA1sql\u6CE8\u5165\u7684filter:wall
+mysqldb.datasource.filters=stat
+#If more than one spilt ';'
+mysqldb.datasource.scanPackages=com.qxueyou.scc
+
+#stream
+streamServer=192.168.10.134
+
+#If more than one spilt ';'
+scc.excludeUrl=/login;/web;/index;/sys/login/platformLogin;/sys/login/beforeLogin;/sys/login/getOrgLst;/base/file/upload;/images;/img/;/video/;/doc/;/audio/;/data/;/sys/login/getIosAppVersion;/sys/login/getAndroidAppVersion;/admin/class/app/studentRegister;/sys/login/platformSSOLogin;/stu/homepage/lstSubjectDetail;/stu/homepage/getLastStudied;/stu/homepage/getDataDesc;/stu/homepage/getClassLst;/stu/notice/getCountToView;/stu/subject/getSubjectLst;/exam/exam/student/nowExam;/exam/exam/student/stuMessage;/exam/exam/student/list;/stu/res/getResLst;/exercise/info/student/list;/stu/notice/list;/admin/videoLive/student/list;/stu/topic/getTopicLst;/stu/res/getResLst;/evaluate/stuEvaluateList;/stu/topic/lstCommonTopic;/stu/topic/commentDetail;/stu/topic/getClassForumLst;/stu/subject/getSubjectDetail;        
+#scc.resRootPath=C:/files/code/qcampus/scc/upload/
+scc.resRootPath=/Users/yansi/penguin/qzns/localupload/
+scc.productId=NOS-Study-Platform
+scc.licensePublicKey=4D7302D2317BD648A2DC744FDF917A2FF5F33E86C400328BFA462BD8C9FD1F089D4C4F634BF83F2F48591A2787081FB87982AC33AB1E2EE6D1EAABDAD4363CA4184B9D15578686A45027EC9C2E43CE0DD246593830735655799F4A8992651CF32E12642E218CD0E9EAEA0B32F3F6E7E3CE6E8C9413B7419B76F324A09AC2644CF09908548ACBD0524491684784186AD84B5FACC8CC864B55EAFB1D89150F3C79DD4C442A588AAE306CD2B34CE2777136050BFA7D58876884B01F17749BBDC7577A0FDBD7456137186A06506B99BB36F4331A0ED08C27A31582DAED0D4CEDD7D4C09CF8F46653ACFD10B88E06CA4B9DC56D79A19A3370AE58F6F74C67BB78DF96715568C2927FB02638160133A5C4340342A4FD8BC64A49B6622BF3527AC36E84614321B9D3D9376BF7EC3A4CCD533A3C406E77F64B8F0382E00ABA9A4614F28DD7ABA317F677C5A1DF1EF5C72A4E7D18EEFFDDA2179271F2063DB42106E3EB4B2D4144D8097DEF1EFDBDAA93952C4F7C267AFDCB9128481C248D7CD8492C1FFD06FE942D7F1DF242398AB2806299DFB36924760B02D6A203BBFA019B20D0193D27BA79476DA7D42B1A05FD80558B3B93802677355BAFCC394DE5CEA57E357E0E26D012DE6D0BC7E788F151B0B567FCC377FD27EF123718C5746A54FEF45336799039585CF48C08AC3C23EEDA6AD8E97BBE27A34F963C0854255C5F91B0E379682642EF0335F6276BFB10207465EB93B740E395E5E1B6106FAA18F5930B15C38CB852270C549313E273416CDFBE18D568356548D87BC1B4EC623BA84DA94AB494A4044AD6910D150B98A12D46B9087F217BACDFC468C32684175E8F6B0106A6A301073B9D380317FD8F87761B5102AEED7F4238D37E24FA465CBA09E7F5AAAF12F3F50E5B510FF49D75F0E826401BD9319849D3794F3086A7BC22CF16ADFBD69DD8BC15C7A1FCDB0660149D0C08EB21C978F3C300F5DA97F2BB9D370E34DD44E56ABF61408F17E04365C5B71CE3B9C70C3D69DDDE584184A15658E91BC6BF729EA873B9F77FA9A3668A75107716AA7669AF4B01B63466C5E73223C9F2712E2216
+scc.licensePath=classpath:license.lic
+scc.rtmpService=rtmp://${streamServer}:1935/live/
+scc.hlsService=http://${streamServer}/live/
+#web res(like img,video,doc..) root file directory eg.resRootPath=D:/ots/resource/
+
+#reids config
+spring.redis.database=6
+#spring.redis.host=192.168.10.230
+#spring.redis.port=6379
+#spring.redis.password=Qxy139TryAagain#%&
+spring.redis.host=127.0.0.1
+spring.redis.port=6379
+spring.redis.password=
+spring.redis.pool.max-active=30
+spring.redis.pool.max-wait=10000
+spring.redis.pool.max-idle=20
+spring.redis.pool.min-idle=10
+spring.redis.timeout=3000
+# default DefaultExpiration time : 30 minutes(600 seconds)
+spring.redis.default.ttl=600
+
+logging.config=classpath:log4j2.xml
diff --git a/src/main/resources/hanlp.properties b/src/main/resources/hanlp.properties
new file mode 100644
index 0000000..3f04fd9
--- /dev/null
+++ b/src/main/resources/hanlp.properties
@@ -0,0 +1,27 @@
+#鏈厤缃枃浠朵腑鐨勮矾寰勭殑鏍圭洰褰曪紝鏍圭洰褰�+鍏朵粬璺緞=缁濆璺緞
+#Windows鐢ㄦ埛璇锋敞鎰忥紝璺緞鍒嗛殧绗︾粺涓�浣跨敤/
+#root=D:/JavaProjects/HanLP/
+root=E:/hanlpData
+#鏍稿績璇嶅吀璺緞
+CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt
+#2鍏冭娉曡瘝鍏歌矾寰�
+BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt
+#鍋滅敤璇嶈瘝鍏歌矾寰�
+CoreStopWordDictionaryPath=data/dictionary/stopwords.txt
+#鍚屼箟璇嶈瘝鍏歌矾寰�
+CoreSynonymDictionaryDictionaryPath=data/dictionary/synonym/CoreSynonym.txt
+#浜哄悕璇嶅吀璺緞
+PersonDictionaryPath=data/dictionary/person/nr.txt
+#浜哄悕璇嶅吀杞Щ鐭╅樀璺緞
+PersonDictionaryTrPath=data/dictionary/person/nr.tr.txt
+#绻佺畝璇嶅吀璺緞
+TraditionalChineseDictionaryPath=data/dictionary/tc/TraditionalChinese.txt
+#鑷畾涔夎瘝鍏歌矾寰勶紝鐢�;闅斿紑澶氫釜鑷畾涔夎瘝鍏革紝绌烘牸寮�澶磋〃绀哄湪鍚屼竴涓洰褰曪紝浣跨敤鈥滄枃浠跺悕 璇嶆�р�濆舰寮忓垯琛ㄧず杩欎釜璇嶅吀鐨勮瘝鎬ч粯璁ゆ槸璇ヨ瘝鎬с�備紭鍏堢骇閫掑噺銆�
+#鍙﹀data/dictionary/custom/CustomDictionary.txt鏄釜楂樿川閲忕殑璇嶅簱锛岃涓嶈鍒犻櫎
+CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 鐜颁唬姹夎琛ュ厖璇嶅簱.txt; 鍏ㄥ浗鍦板悕澶у叏.txt ns; 浜哄悕璇嶅吀.txt; 鏈烘瀯鍚嶈瘝鍏�.txt; 涓婃捣鍦板悕.txt ns;data/dictionary/person/nrf.txt nrf
+#CRF鍒嗚瘝妯″瀷璺緞
+CRFSegmentModelPath=data/model/segment/CRFSegmentModel.txt
+#HMM鍒嗚瘝妯″瀷
+HMMSegmentModelPath=data/model/segment/HMMSegmentModel.bin
+#鍒嗚瘝缁撴灉鏄惁灞曠ず璇嶆��
+ShowTermNature=true
\ No newline at end of file
diff --git a/src/main/resources/license.lic b/src/main/resources/license.lic
new file mode 100644
index 0000000..4d59800
--- /dev/null
+++ b/src/main/resources/license.lic
@@ -0,0 +1,26 @@
+# NOS Study Platform License (id: 1524032612871)
+a05a8b8d9b40f46b54d34cd869e0b8c58cb8850793aeadbb100c3cda164f
+6eff59cea631f89926127e62e7c47091db660ba728af1cd2b72df42bf8d5
+9119f3a493fd26d106ff87a53151d376cc703172c30d0d97071075c607cf
+543112f0b144a6899118fc7244e1485cfe65372bfbbd3d7c903595ccb4a1
+deb627c9c84991d8fb713063165f3f22c326f1b4a491b16dcec6d001482e
+bf6b5fb1b31e8f9db597e4ba3df01cff92f8289051aac6bf36cbe9b1ea2c
+a7bef9143a7380502a7689a903f86fbb23d6aa33009edd50e809916dc924
+42d71d89683961a878e0735ef755f78f57b82352614140203b4675322feb
+846862d1958c34b337b366faeab14eae7fe11ead62e9844213906ae2ada6
+eb7843dfc087f424ef0393c020e2174de3f00527923d1b951cffd92647b2
+d498ad96907302ec3ba0b7aa7eefffe2732ac13f03fff38ae93681bbda7b
+94f9a7a004241ba13a76c2ec7b7b8ecf298cd72b55e2074885530a228e20
+583f91b57e7b8337e69aae8cc09e31ffaf2053f1351c2d5485d4fdc431b3
+51a3335efb95142fe5a85bfff96d58a860abc2e11f594dfa839ccbd68f33
+ebd6e56beee922761f38f3d30db71b1e9c262ac577184fe5ee57c8f5ebe8
+69c823d6b8b6c3752798874c2721fb4b4e9ac1a98a93ec2c74056b597700
+d0e391788c0aa29a8647f3c7990206f1a6c4bb9a6aa61387cf64929c3845
+01ae835c86a9aacddb48fcca0d9a5f50f1aba09206d3669a127491c2c79b
+6394ae157765c1db67a1fc56805bc4f8c3523a817c8aa4328de15209fcfd
+7a7c89e6db16bed1ef98deb15ca26f7e58382b4e487a4c5db5cfd40bee4b
+235317fd9f6e37a9c404553b0f5c50d31faecc8fe2a6e10cb4aaaea4e4cb
+e8a81a5a198d32f8d9d1fbf23a30df57fc3b0d44e4675e665ee3d91861ea
+9495c6e3056a3cb518f916270a2727dbda13f195f9dbdd3324add540b0d1
+501572229bf413adb35f33a04a55900453acd621ffc5776da062cf0f3310
+d16d94d67fe4fb25816dba86364ec1a6
\ No newline at end of file
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..0d43191
--- /dev/null
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+	<Appenders>
+		<Console name="Console" target="SYSTEM_OUT">
+			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n" />
+		</Console>
+
+		<RollingRandomAccessFile name="File"
+			fileName="D:/log/qxueyou.log" append="true"
+			filePattern="D:/log/qxueyou-%d{yyyyMMdd}-%i.log">
+			<PatternLayout>
+				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
+			</PatternLayout>
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1"
+					modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingRandomAccessFile>
+		
+		<RollingRandomAccessFile name="error_file"
+			fileName="D:/log/qxueyou_err.log" append="true"
+			filePattern="D:/log/qxueyou_err-%d{yyyyMMdd}-%i.log">
+			<PatternLayout>
+				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
+			</PatternLayout>
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1"
+					modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingRandomAccessFile>
+		
+		<RollingRandomAccessFile name="OnsFile"
+			fileName="D:/logOns/qxueyouOns.log" append="true"
+			filePattern="D:/logOns/qxueyouOns-%d{yyyyMMdd}-%i.log">
+			<PatternLayout>
+				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
+			</PatternLayout>
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1"
+					modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingRandomAccessFile>
+		
+
+	</Appenders>
+	<Loggers>
+	    
+		<Root level="info">
+			<AppenderRef ref="Console" />
+		</Root>
+		
+		<!-- 杈撳嚭 hibernate SQL -->
+		<logger name="org.hibernate" level="error" additivity="false">
+            <AppenderRef ref="File" />
+        </logger>
+		
+		<!-- 杈撳嚭 hibernate SQL -->
+		<logger name="org.hibernate.SQL" level="debug" additivity="false">
+            <AppenderRef ref="File" />
+        </logger>
+        
+		<!-- 杈撳嚭 hibernate SQL 鎵ц鍙傛暟缁戝畾淇℃伅 -->
+	    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace" additivity="false">
+            <AppenderRef ref="File" />
+              <AppenderRef ref="Console" />
+        </logger>
+        
+	    <!-- 瀹夊叏杩囨护鍣ㄦ棩蹇楃骇鍒厤缃� -->
+	    <logger name="AuthorizeFilter" level="debug" additivity="false">
+            <AppenderRef ref="Console" />
+        </logger>
+        
+   	    <logger name="WeixinSdkService" level="debug" additivity="false">
+            <AppenderRef ref="Console" />
+        </logger>
+	    
+   	     <logger name="ONSExceptionLogService" level="error" additivity="false">
+            <AppenderRef ref="OnsFile" />
+        </logger>
+		
+	</Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/src/main/resources/public/index.html b/src/main/resources/public/index.html
new file mode 100644
index 0000000..40cf218
--- /dev/null
+++ b/src/main/resources/public/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+  hello I'm index.html!!! public
+  <img src="./images/1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/public/redirect.html b/src/main/resources/public/redirect.html
new file mode 100644
index 0000000..915b600
--- /dev/null
+++ b/src/main/resources/public/redirect.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+hello I'm redirect.html!!! public
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/static/Transaction.xml b/src/main/resources/static/Transaction.xml
new file mode 100644
index 0000000..bfa5d9d
--- /dev/null
+++ b/src/main/resources/static/Transaction.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
+	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
+
+	xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/mvc
+        http://www.springframework.org/schema/mvc/spring-mvc.xsd
+        http://www.springframework.org/schema/jee
+        http://www.springframework.org/schema/jee/spring-jee.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        http://www.springframework.org/schema/aop/spring-aop.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd">
+
+	<!-- <aop:aspectj-autoproxy proxy-target-class="true" /> -->
+	<bean id="sessionFactory"
+		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
+		<property name="dataSource" ref="druidDataSource" />
+
+		<!-- 閰嶇疆Entity鎵弿鍖呭悕 -->
+		<property name="packagesToScan">
+			<list>
+				<value>com.qxueyou.scc</value>
+			</list>
+		</property>
+
+		<property name="hibernateProperties">
+			<props>
+				<prop key="hibernate.dialect">
+					 com.qxueyou.scc.base.handler.QxueyouMysqlDialect
+				</prop>
+				<prop key="hibernate.show_sql">true</prop>
+				<prop key="connection.characterEncoding">GBK</prop>
+				<!-- <prop key="hibernate.physical_naming_strategy">org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl</prop> -->  
+				<prop key="hibernate.physical_naming_strategy">org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</prop> 
+				
+				 <prop key="hibernate.cache.use_second_level_cache">false</prop>
+				<!-- 
+				<prop key="hibernate.cache.region.factory_class">
+				    com.googlecode.hibernate.memcached.MemcachedRegionFactory
+				</prop>
+				<prop key="hibernate.memcached.keyStrategy">HashCodeKeyStrategy</prop>
+				<prop key="hibernate.memcached.servers">192.168.10.230:11211</prop>
+				缂撳瓨澶辨晥鏃堕棿,鍗曚綅绉�
+				<prop key="hibernate.memcached.cacheTimeSeconds">600</prop>
+				Hibernate灏嗘敹闆嗘湁鍔╀簬鎬ц兘璋冭妭鐨勭粺璁℃暟鎹�
+				<prop key="hibernate.generate_statistics">true</prop>
+				
+				璁剧疆浜岀骇缂撳瓨鐨勫墠缂�鍚嶇О  
+     			<prop key="hibernate.cache.region_prefix">qxueyou_query_cache</prop>
+				鏄惁缂撳瓨鏌ヨ缁撴灉  
+				<prop key="hibernate.cache.use_query_cache">true</prop>
+				鍚︿娇鐢ㄧ粨鏋勫寲鐨勬柟寮忕紦瀛樺璞�   
+     			<prop key="hibernate.cache.use_structured_entries">true</prop>  
+				 -->
+			</props> 
+		</property> 
+	</bean>
+
+	<!-- the transactional advice (what happens; see the <aop:advisor/> bean 
+		below) -->
+	<tx:advice id="txAdvice" transaction-manager="txManager">
+		<tx:attributes>
+		    <tx:method name="add*" propagation="REQUIRED" />
+			<tx:method name="insert*" propagation="REQUIRED" />
+			<tx:method name="save*" propagation="REQUIRED" />
+			<tx:method name="update*" propagation="REQUIRED" />
+			<tx:method name="delete*" propagation="REQUIRED" />
+			<tx:method name="do*" propagation="REQUIRED" />
+			<tx:method name="execute*" propagation="REQUIRED" />
+			<tx:method name="logSave*" propagation="REQUIRES_NEW" />
+			<tx:method name="*" read-only="true" />
+		</tx:attributes>
+	</tx:advice>
+
+	<aop:config>
+		<aop:pointcut id="allManagerMethod"
+			expression="execution(* com.qxueyou.scc..*Service.*(..))" />
+		<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
+	</aop:config>
+
+	<bean id="txManager"
+		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
+		<property name="sessionFactory" ref="sessionFactory" />
+	</bean>
+	
+	
+</beans>
\ No newline at end of file
diff --git a/src/main/resources/static/images/1.jpg b/src/main/resources/static/images/1.jpg
new file mode 100644
index 0000000..ac0d7bd
--- /dev/null
+++ b/src/main/resources/static/images/1.jpg
Binary files differ
diff --git a/src/main/resources/static/images/ca.jpg b/src/main/resources/static/images/ca.jpg
new file mode 100644
index 0000000..98d2c32
--- /dev/null
+++ b/src/main/resources/static/images/ca.jpg
Binary files differ
diff --git a/src/main/resources/static/images/ca1.jpg b/src/main/resources/static/images/ca1.jpg
new file mode 100644
index 0000000..6ab39ca
--- /dev/null
+++ b/src/main/resources/static/images/ca1.jpg
Binary files differ
diff --git a/src/main/resources/static/images/camera.png b/src/main/resources/static/images/camera.png
new file mode 100644
index 0000000..5d44bfc
--- /dev/null
+++ b/src/main/resources/static/images/camera.png
Binary files differ
diff --git a/src/main/resources/static/images/camera1.png b/src/main/resources/static/images/camera1.png
new file mode 100644
index 0000000..0f40247
--- /dev/null
+++ b/src/main/resources/static/images/camera1.png
Binary files differ
diff --git a/src/main/resources/static/images/cb.jpg b/src/main/resources/static/images/cb.jpg
new file mode 100644
index 0000000..40f87ee
--- /dev/null
+++ b/src/main/resources/static/images/cb.jpg
Binary files differ
diff --git a/src/main/resources/static/images/cc.jpg b/src/main/resources/static/images/cc.jpg
new file mode 100644
index 0000000..f0ae61d
--- /dev/null
+++ b/src/main/resources/static/images/cc.jpg
Binary files differ
diff --git a/src/main/resources/static/images/class.png b/src/main/resources/static/images/class.png
new file mode 100644
index 0000000..ea1d1f1
--- /dev/null
+++ b/src/main/resources/static/images/class.png
Binary files differ
diff --git a/src/main/resources/static/images/class2.png b/src/main/resources/static/images/class2.png
new file mode 100644
index 0000000..8f3fb22
--- /dev/null
+++ b/src/main/resources/static/images/class2.png
Binary files differ
diff --git a/src/main/resources/static/images/eval.png b/src/main/resources/static/images/eval.png
new file mode 100644
index 0000000..94ec13e
--- /dev/null
+++ b/src/main/resources/static/images/eval.png
Binary files differ
diff --git a/src/main/resources/static/images/eval1.png b/src/main/resources/static/images/eval1.png
new file mode 100644
index 0000000..5feff20
--- /dev/null
+++ b/src/main/resources/static/images/eval1.png
Binary files differ
diff --git a/src/main/resources/static/images/exam.png b/src/main/resources/static/images/exam.png
new file mode 100644
index 0000000..bf2e046
--- /dev/null
+++ b/src/main/resources/static/images/exam.png
Binary files differ
diff --git a/src/main/resources/static/images/exam1.png b/src/main/resources/static/images/exam1.png
new file mode 100644
index 0000000..a3663cf
--- /dev/null
+++ b/src/main/resources/static/images/exam1.png
Binary files differ
diff --git a/src/main/resources/static/images/exerciselib.png b/src/main/resources/static/images/exerciselib.png
new file mode 100644
index 0000000..1cbbd48
--- /dev/null
+++ b/src/main/resources/static/images/exerciselib.png
Binary files differ
diff --git a/src/main/resources/static/images/exerciselib1.png b/src/main/resources/static/images/exerciselib1.png
new file mode 100644
index 0000000..e894935
--- /dev/null
+++ b/src/main/resources/static/images/exerciselib1.png
Binary files differ
diff --git a/src/main/resources/static/images/homeword.png b/src/main/resources/static/images/homeword.png
new file mode 100644
index 0000000..965f9ad
--- /dev/null
+++ b/src/main/resources/static/images/homeword.png
Binary files differ
diff --git a/src/main/resources/static/images/homeword1.png b/src/main/resources/static/images/homeword1.png
new file mode 100644
index 0000000..a7c1c82
--- /dev/null
+++ b/src/main/resources/static/images/homeword1.png
Binary files differ
diff --git a/src/main/resources/static/images/live.png b/src/main/resources/static/images/live.png
new file mode 100644
index 0000000..ab30f60
--- /dev/null
+++ b/src/main/resources/static/images/live.png
Binary files differ
diff --git a/src/main/resources/static/images/live1.png b/src/main/resources/static/images/live1.png
new file mode 100644
index 0000000..cfd0433
--- /dev/null
+++ b/src/main/resources/static/images/live1.png
Binary files differ
diff --git a/src/main/resources/static/images/org.png b/src/main/resources/static/images/org.png
new file mode 100644
index 0000000..adc624a
--- /dev/null
+++ b/src/main/resources/static/images/org.png
Binary files differ
diff --git a/src/main/resources/static/images/org1.png b/src/main/resources/static/images/org1.png
new file mode 100644
index 0000000..d4ec606
--- /dev/null
+++ b/src/main/resources/static/images/org1.png
Binary files differ
diff --git a/src/main/resources/static/images/paper.png b/src/main/resources/static/images/paper.png
new file mode 100644
index 0000000..243e4f8
--- /dev/null
+++ b/src/main/resources/static/images/paper.png
Binary files differ
diff --git a/src/main/resources/static/images/paper1.png b/src/main/resources/static/images/paper1.png
new file mode 100644
index 0000000..50bae87
--- /dev/null
+++ b/src/main/resources/static/images/paper1.png
Binary files differ
diff --git a/src/main/resources/static/images/res.png b/src/main/resources/static/images/res.png
new file mode 100644
index 0000000..1b548cb
--- /dev/null
+++ b/src/main/resources/static/images/res.png
Binary files differ
diff --git a/src/main/resources/static/images/res1.png b/src/main/resources/static/images/res1.png
new file mode 100644
index 0000000..1f4dc3d
--- /dev/null
+++ b/src/main/resources/static/images/res1.png
Binary files differ
diff --git a/src/main/resources/static/images/role.png b/src/main/resources/static/images/role.png
new file mode 100644
index 0000000..dba4011
--- /dev/null
+++ b/src/main/resources/static/images/role.png
Binary files differ
diff --git a/src/main/resources/static/images/role1.png b/src/main/resources/static/images/role1.png
new file mode 100644
index 0000000..e721f96
--- /dev/null
+++ b/src/main/resources/static/images/role1.png
Binary files differ
diff --git a/src/main/resources/static/images/room.png b/src/main/resources/static/images/room.png
new file mode 100644
index 0000000..e724d45
--- /dev/null
+++ b/src/main/resources/static/images/room.png
Binary files differ
diff --git a/src/main/resources/static/images/room1.png b/src/main/resources/static/images/room1.png
new file mode 100644
index 0000000..3044368
--- /dev/null
+++ b/src/main/resources/static/images/room1.png
Binary files differ
diff --git a/src/main/resources/static/images/schedule.png b/src/main/resources/static/images/schedule.png
new file mode 100644
index 0000000..6c7f3a9
--- /dev/null
+++ b/src/main/resources/static/images/schedule.png
Binary files differ
diff --git a/src/main/resources/static/images/schedule1.png b/src/main/resources/static/images/schedule1.png
new file mode 100644
index 0000000..e635a61
--- /dev/null
+++ b/src/main/resources/static/images/schedule1.png
Binary files differ
diff --git a/src/main/resources/static/images/score.png b/src/main/resources/static/images/score.png
new file mode 100644
index 0000000..66b22c4
--- /dev/null
+++ b/src/main/resources/static/images/score.png
Binary files differ
diff --git a/src/main/resources/static/images/score1.png b/src/main/resources/static/images/score1.png
new file mode 100644
index 0000000..757953d
--- /dev/null
+++ b/src/main/resources/static/images/score1.png
Binary files differ
diff --git a/src/main/resources/static/images/study.png b/src/main/resources/static/images/study.png
new file mode 100644
index 0000000..58b9968
--- /dev/null
+++ b/src/main/resources/static/images/study.png
Binary files differ
diff --git a/src/main/resources/static/images/study1.png b/src/main/resources/static/images/study1.png
new file mode 100644
index 0000000..39c3d1d
--- /dev/null
+++ b/src/main/resources/static/images/study1.png
Binary files differ
diff --git a/src/main/resources/static/images/subject.png b/src/main/resources/static/images/subject.png
new file mode 100644
index 0000000..93a5a00
--- /dev/null
+++ b/src/main/resources/static/images/subject.png
Binary files differ
diff --git a/src/main/resources/static/images/subject1.png b/src/main/resources/static/images/subject1.png
new file mode 100644
index 0000000..e045efa
--- /dev/null
+++ b/src/main/resources/static/images/subject1.png
Binary files differ
diff --git a/src/main/resources/static/images/teacher.png b/src/main/resources/static/images/teacher.png
new file mode 100644
index 0000000..2f671a5
--- /dev/null
+++ b/src/main/resources/static/images/teacher.png
Binary files differ
diff --git a/src/main/resources/static/images/teacher1.png b/src/main/resources/static/images/teacher1.png
new file mode 100644
index 0000000..7a2c04e
--- /dev/null
+++ b/src/main/resources/static/images/teacher1.png
Binary files differ
diff --git a/src/main/resources/static/images/topic.png b/src/main/resources/static/images/topic.png
new file mode 100644
index 0000000..6fd6248
--- /dev/null
+++ b/src/main/resources/static/images/topic.png
Binary files differ
diff --git a/src/main/resources/static/images/topic1.png b/src/main/resources/static/images/topic1.png
new file mode 100644
index 0000000..a7c5b64
--- /dev/null
+++ b/src/main/resources/static/images/topic1.png
Binary files differ
diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html
new file mode 100644
index 0000000..4d3ca4e
--- /dev/null
+++ b/src/main/resources/static/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+  hello I'm index.html!!! static
+  <img src="/static/images/1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/static/redirect.html b/src/main/resources/static/redirect.html
new file mode 100644
index 0000000..cc890ec
--- /dev/null
+++ b/src/main/resources/static/redirect.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+hello I'm redirect.html!!! static
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
new file mode 100644
index 0000000..62d3be8
--- /dev/null
+++ b/src/main/resources/templates/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+  hello I'm index.html!!!template
+  <img src="/static/images/1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/redirect.html b/src/main/resources/templates/redirect.html
new file mode 100644
index 0000000..79734b3
--- /dev/null
+++ b/src/main/resources/templates/redirect.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+hello I'm redirect.html!!! template
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/java/com/qxueyou/scc/SccApplicationTests.java b/src/test/java/com/qxueyou/scc/SccApplicationTests.java
new file mode 100644
index 0000000..e33bc27
--- /dev/null
+++ b/src/test/java/com/qxueyou/scc/SccApplicationTests.java
@@ -0,0 +1,16 @@
+package com.qxueyou.scc;
+
+//import org.junit.Test;
+//import org.junit.runner.RunWith;
+//import org.springframework.boot.test.context.SpringBootTest;
+//import org.springframework.test.context.junit4.SpringRunner;
+//
+//@RunWith(SpringRunner.class)
+//@SpringBootTest
+//public class SccApplicationTests {
+//
+//	@Test
+//	public void contextLoads() {
+//	}
+//
+//}
diff --git a/target/classes/META-INF/spring-configuration-metadata.json b/target/classes/META-INF/spring-configuration-metadata.json
new file mode 100644
index 0000000..7a6e855
--- /dev/null
+++ b/target/classes/META-INF/spring-configuration-metadata.json
@@ -0,0 +1,214 @@
+{
+  "hints": [],
+  "groups": [
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOnsConfig",
+      "name": "ali.ons",
+      "type": "com.qxueyou.scc.config.AliOnsConfig"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOssConfig",
+      "name": "ali.oss",
+      "type": "com.qxueyou.scc.config.AliOssConfig"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource",
+      "type": "com.qxueyou.scc.config.MySqlDataSourceConfig"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc",
+      "type": "com.qxueyou.scc.config.SccConfig"
+    }
+  ],
+  "properties": [
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOnsConfig",
+      "name": "ali.ons.common-topic",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOnsConfig",
+      "name": "ali.ons.docdeal-receive-urls",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOssConfig",
+      "name": "ali.oss.domain",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOssConfig",
+      "name": "ali.oss.domain-name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOssConfig",
+      "name": "ali.oss.video-orig-url",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOssConfig",
+      "name": "ali.oss.video-oss-address",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.AliOssConfig",
+      "name": "ali.oss.video-oss-domain",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.driver-class-name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.filters",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 10,
+      "name": "mysqldb.datasource.initial-size",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.max-active",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.max-idle",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.max-open-prepared-statements",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.max-wait",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.min-evictable-idle-time-millis",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.min-idle",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.password",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": false,
+      "name": "mysqldb.datasource.pool-prepared-statements",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.scan-packages",
+      "type": "java.lang.String[]"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": false,
+      "name": "mysqldb.datasource.test-on-borrow",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": false,
+      "name": "mysqldb.datasource.test-on-return",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": false,
+      "name": "mysqldb.datasource.test-while-idle",
+      "type": "java.lang.Boolean"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "defaultValue": 0,
+      "name": "mysqldb.datasource.time-between-eviction-runs-millis",
+      "type": "java.lang.Integer"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.url",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.username",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.MySqlDataSourceConfig",
+      "name": "mysqldb.datasource.validation-query",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.domain",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.exclude-url",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.hls-service",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.license-path",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.license-public-key",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.product-id",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.res-root-path",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.rtmp-service",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.qxueyou.scc.config.SccConfig",
+      "name": "scc.src-live-path",
+      "type": "java.lang.String"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/target/classes/Transaction.xml b/target/classes/Transaction.xml
new file mode 100644
index 0000000..6c63650
--- /dev/null
+++ b/target/classes/Transaction.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
+	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
+
+	xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/mvc
+        http://www.springframework.org/schema/mvc/spring-mvc.xsd
+        http://www.springframework.org/schema/jee
+        http://www.springframework.org/schema/jee/spring-jee.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        http://www.springframework.org/schema/aop/spring-aop.xsd
+        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd">
+
+    <!-- 瀹炰綋绠$悊鍣� -->
+    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+        <property name="dataSource" ref="druidDataSource" />
+        <property name="packagesToScan" value="com.qxueyou.scc" />
+        <property name="persistenceProvider">
+            <bean class="org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider" />
+        </property>
+        
+        <property name="jpaVendorAdapter">
+            <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
+            	<property name="generateDdl" value="false" />
+                <property name="database" value="MYSQL" />
+                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
+                <property name="showSql" value="false" />
+        	</bean>
+        </property>
+        
+        <property name="jpaDialect">
+            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
+        </property>
+        
+        <property name="jpaPropertyMap">
+        	<props>
+				<prop key="hibernate.dialect">com.qxueyou.scc.base.handler.QxueyouMysqlDialect</prop>
+				<prop key="hibernate.show_sql">true</prop>
+				<prop key="connection.characterEncoding">GBK</prop>
+				<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
+				<prop key="hibernate.physical_naming_strategy">org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</prop> 
+				<prop key="hibernate.cache.use_second_level_cache">false</prop>
+			</props>
+        </property>
+    </bean>
+    
+    <!-- 閲嶈閰嶇疆锛氬惎鐢ㄦ壂鎻忓苟鑷姩鍒涘缓浠g悊鐨勫姛鑳�  -->
+    <jpa:repositories base-package="com.qxueyou.scc" 
+    	repository-impl-postfix="Impl"
+   	 	transaction-manager-ref="transactionManager" 
+    	entity-manager-factory-ref="entityManagerFactory"/>
+    
+    <!-- 浜嬪姟绠$悊鍣� -->
+    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
+    
+    <!-- 浜嬪姟 -->
+    <tx:advice id="txAdvice" transaction-manager="transactionManager">
+        <tx:attributes>
+            <tx:method name="add*" propagation="REQUIRED" />
+			<tx:method name="insert*" propagation="REQUIRED" />
+			<tx:method name="save*" propagation="REQUIRED" />
+			<tx:method name="update*" propagation="REQUIRED" />
+			<tx:method name="delete*" propagation="REQUIRED" />
+			<tx:method name="do*" propagation="REQUIRED" />
+			<tx:method name="execute*" propagation="REQUIRED" />
+			<tx:method name="logSave*" propagation="REQUIRES_NEW" />
+			<tx:method name="*" read-only="true" />
+        </tx:attributes>
+    </tx:advice> 
+    
+    <!-- 浜嬪姟鍏ュ彛 -->
+    <aop:config>
+        <aop:pointcut id="allServiceMethod" expression="execution(* com.qxueyou.scc..*Service.*(..))" />
+        <aop:advisor  advice-ref="txAdvice" pointcut-ref="allServiceMethod" />
+    </aop:config>
+	
+	
+</beans>
\ No newline at end of file
diff --git a/target/classes/application.properties b/target/classes/application.properties
new file mode 100644
index 0000000..d0c6aad
--- /dev/null
+++ b/target/classes/application.properties
@@ -0,0 +1,81 @@
+server.port=8090
+server.context-path=/scc
+server.context-index=/web/admin/index.html#/login
+server.max-http-header-size=102400
+#server.ssl.key-store=classpath:certificate.p12
+#server.ssl.key-store-password=szped.com
+#server.ssl.keyStoreType=PKCS12
+
+spring.aop.auto=true
+spring.aop.proxy-target-class=true
+spring.mvc.view.suffix=.html
+
+#spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${scc.resRootPath},file:D:/files/code/qcampus/pc-admin/dist,file:D:/files/code/qcampus/pc-student/dist
+spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${scc.resRootPath},file:D:/scc/htmls/web/mobile_student,file:/Users/yansi/penguin/szped/zns-mobile-student/dist
+
+spring.http.multipart.maxFileSize=3000Mb
+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.username=root
+#mysqldb.datasource.username=rs
+#######此组为安装版系统的默认用户名密码端口#############
+#mysqldb.datasource.username=scc                #
+#mysqldb.datasource.password=fwefwefWEFefewf$   #
+# port:3370                                     #
+#################################################
+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
+#mysqldb.datasource.password=fsefWEF23@#!
+mysqldb.datasource.driverClassName= com.mysql.jdbc.Driver
+mysqldb.datasource.initialSize=5
+mysqldb.datasource.minIdle=2
+mysqldb.datasource.maxActive=5
+mysqldb.datasource.maxWait=10000
+mysqldb.datasource.timeBetweenEvictionRunsMillis=10000
+mysqldb.datasource.minEvictableIdleTimeMillis=300000
+mysqldb.datasource.validationQuery=select 'x'
+mysqldb.datasource.testWhileIdle=true
+mysqldb.datasource.testOnBorrow=false
+mysqldb.datasource.testOnReturn=false
+mysqldb.datasource.poolPreparedStatements=true
+mysqldb.datasource.maxOpenPreparedStatements=20
+#\u76D1\u63A7\u7EDF\u8BA1\u7528\u7684filter:stat\u65E5\u5FD7\u7528\u7684filter:log4j\u9632\u5FA1sql\u6CE8\u5165\u7684filter:wall
+mysqldb.datasource.filters=stat
+#If more than one spilt ';'
+mysqldb.datasource.scanPackages=com.qxueyou.scc
+
+#stream
+streamServer=192.168.10.134
+
+#If more than one spilt ';'
+scc.excludeUrl=/login;/web;/index;/sys/login/platformLogin;/sys/login/beforeLogin;/sys/login/getOrgLst;/base/file/upload;/images;/img/;/video/;/doc/;/audio/;/data/;/sys/login/getIosAppVersion;/sys/login/getAndroidAppVersion;/admin/class/app/studentRegister;/sys/login/platformSSOLogin;/stu/homepage/lstSubjectDetail;/stu/homepage/getLastStudied;/stu/homepage/getDataDesc;/stu/homepage/getClassLst;/stu/notice/getCountToView;/stu/subject/getSubjectLst;/exam/exam/student/nowExam;/exam/exam/student/stuMessage;/exam/exam/student/list;/stu/res/getResLst;/exercise/info/student/list;/stu/notice/list;/admin/videoLive/student/list;/stu/topic/getTopicLst;/stu/res/getResLst;/evaluate/stuEvaluateList;/stu/topic/lstCommonTopic;/stu/topic/commentDetail;/stu/topic/getClassForumLst;/stu/subject/getSubjectDetail;        
+#scc.resRootPath=C:/files/code/qcampus/scc/upload/
+scc.resRootPath=/Users/yansi/penguin/qzns/localupload/
+scc.productId=NOS-Study-Platform
+scc.licensePublicKey=4D7302D2317BD648A2DC744FDF917A2FF5F33E86C400328BFA462BD8C9FD1F089D4C4F634BF83F2F48591A2787081FB87982AC33AB1E2EE6D1EAABDAD4363CA4184B9D15578686A45027EC9C2E43CE0DD246593830735655799F4A8992651CF32E12642E218CD0E9EAEA0B32F3F6E7E3CE6E8C9413B7419B76F324A09AC2644CF09908548ACBD0524491684784186AD84B5FACC8CC864B55EAFB1D89150F3C79DD4C442A588AAE306CD2B34CE2777136050BFA7D58876884B01F17749BBDC7577A0FDBD7456137186A06506B99BB36F4331A0ED08C27A31582DAED0D4CEDD7D4C09CF8F46653ACFD10B88E06CA4B9DC56D79A19A3370AE58F6F74C67BB78DF96715568C2927FB02638160133A5C4340342A4FD8BC64A49B6622BF3527AC36E84614321B9D3D9376BF7EC3A4CCD533A3C406E77F64B8F0382E00ABA9A4614F28DD7ABA317F677C5A1DF1EF5C72A4E7D18EEFFDDA2179271F2063DB42106E3EB4B2D4144D8097DEF1EFDBDAA93952C4F7C267AFDCB9128481C248D7CD8492C1FFD06FE942D7F1DF242398AB2806299DFB36924760B02D6A203BBFA019B20D0193D27BA79476DA7D42B1A05FD80558B3B93802677355BAFCC394DE5CEA57E357E0E26D012DE6D0BC7E788F151B0B567FCC377FD27EF123718C5746A54FEF45336799039585CF48C08AC3C23EEDA6AD8E97BBE27A34F963C0854255C5F91B0E379682642EF0335F6276BFB10207465EB93B740E395E5E1B6106FAA18F5930B15C38CB852270C549313E273416CDFBE18D568356548D87BC1B4EC623BA84DA94AB494A4044AD6910D150B98A12D46B9087F217BACDFC468C32684175E8F6B0106A6A301073B9D380317FD8F87761B5102AEED7F4238D37E24FA465CBA09E7F5AAAF12F3F50E5B510FF49D75F0E826401BD9319849D3794F3086A7BC22CF16ADFBD69DD8BC15C7A1FCDB0660149D0C08EB21C978F3C300F5DA97F2BB9D370E34DD44E56ABF61408F17E04365C5B71CE3B9C70C3D69DDDE584184A15658E91BC6BF729EA873B9F77FA9A3668A75107716AA7669AF4B01B63466C5E73223C9F2712E2216
+scc.licensePath=classpath:license.lic
+scc.rtmpService=rtmp://${streamServer}:1935/live/
+scc.hlsService=http://${streamServer}/live/
+#web res(like img,video,doc..) root file directory eg.resRootPath=D:/ots/resource/
+
+#reids config
+spring.redis.database=6
+#spring.redis.host=192.168.10.230
+#spring.redis.port=6379
+#spring.redis.password=Qxy139TryAagain#%&
+spring.redis.host=127.0.0.1
+spring.redis.port=6379
+spring.redis.password=
+spring.redis.pool.max-active=30
+spring.redis.pool.max-wait=10000
+spring.redis.pool.max-idle=20
+spring.redis.pool.min-idle=10
+spring.redis.timeout=3000
+# default DefaultExpiration time : 30 minutes(600 seconds)
+spring.redis.default.ttl=600
+
+logging.config=classpath:log4j2.xml
diff --git a/target/classes/hanlp.properties b/target/classes/hanlp.properties
new file mode 100644
index 0000000..3f04fd9
--- /dev/null
+++ b/target/classes/hanlp.properties
@@ -0,0 +1,27 @@
+#鏈厤缃枃浠朵腑鐨勮矾寰勭殑鏍圭洰褰曪紝鏍圭洰褰�+鍏朵粬璺緞=缁濆璺緞
+#Windows鐢ㄦ埛璇锋敞鎰忥紝璺緞鍒嗛殧绗︾粺涓�浣跨敤/
+#root=D:/JavaProjects/HanLP/
+root=E:/hanlpData
+#鏍稿績璇嶅吀璺緞
+CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt
+#2鍏冭娉曡瘝鍏歌矾寰�
+BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt
+#鍋滅敤璇嶈瘝鍏歌矾寰�
+CoreStopWordDictionaryPath=data/dictionary/stopwords.txt
+#鍚屼箟璇嶈瘝鍏歌矾寰�
+CoreSynonymDictionaryDictionaryPath=data/dictionary/synonym/CoreSynonym.txt
+#浜哄悕璇嶅吀璺緞
+PersonDictionaryPath=data/dictionary/person/nr.txt
+#浜哄悕璇嶅吀杞Щ鐭╅樀璺緞
+PersonDictionaryTrPath=data/dictionary/person/nr.tr.txt
+#绻佺畝璇嶅吀璺緞
+TraditionalChineseDictionaryPath=data/dictionary/tc/TraditionalChinese.txt
+#鑷畾涔夎瘝鍏歌矾寰勶紝鐢�;闅斿紑澶氫釜鑷畾涔夎瘝鍏革紝绌烘牸寮�澶磋〃绀哄湪鍚屼竴涓洰褰曪紝浣跨敤鈥滄枃浠跺悕 璇嶆�р�濆舰寮忓垯琛ㄧず杩欎釜璇嶅吀鐨勮瘝鎬ч粯璁ゆ槸璇ヨ瘝鎬с�備紭鍏堢骇閫掑噺銆�
+#鍙﹀data/dictionary/custom/CustomDictionary.txt鏄釜楂樿川閲忕殑璇嶅簱锛岃涓嶈鍒犻櫎
+CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 鐜颁唬姹夎琛ュ厖璇嶅簱.txt; 鍏ㄥ浗鍦板悕澶у叏.txt ns; 浜哄悕璇嶅吀.txt; 鏈烘瀯鍚嶈瘝鍏�.txt; 涓婃捣鍦板悕.txt ns;data/dictionary/person/nrf.txt nrf
+#CRF鍒嗚瘝妯″瀷璺緞
+CRFSegmentModelPath=data/model/segment/CRFSegmentModel.txt
+#HMM鍒嗚瘝妯″瀷
+HMMSegmentModelPath=data/model/segment/HMMSegmentModel.bin
+#鍒嗚瘝缁撴灉鏄惁灞曠ず璇嶆��
+ShowTermNature=true
\ No newline at end of file
diff --git a/target/classes/license.lic b/target/classes/license.lic
new file mode 100644
index 0000000..4d59800
--- /dev/null
+++ b/target/classes/license.lic
@@ -0,0 +1,26 @@
+# NOS Study Platform License (id: 1524032612871)
+a05a8b8d9b40f46b54d34cd869e0b8c58cb8850793aeadbb100c3cda164f
+6eff59cea631f89926127e62e7c47091db660ba728af1cd2b72df42bf8d5
+9119f3a493fd26d106ff87a53151d376cc703172c30d0d97071075c607cf
+543112f0b144a6899118fc7244e1485cfe65372bfbbd3d7c903595ccb4a1
+deb627c9c84991d8fb713063165f3f22c326f1b4a491b16dcec6d001482e
+bf6b5fb1b31e8f9db597e4ba3df01cff92f8289051aac6bf36cbe9b1ea2c
+a7bef9143a7380502a7689a903f86fbb23d6aa33009edd50e809916dc924
+42d71d89683961a878e0735ef755f78f57b82352614140203b4675322feb
+846862d1958c34b337b366faeab14eae7fe11ead62e9844213906ae2ada6
+eb7843dfc087f424ef0393c020e2174de3f00527923d1b951cffd92647b2
+d498ad96907302ec3ba0b7aa7eefffe2732ac13f03fff38ae93681bbda7b
+94f9a7a004241ba13a76c2ec7b7b8ecf298cd72b55e2074885530a228e20
+583f91b57e7b8337e69aae8cc09e31ffaf2053f1351c2d5485d4fdc431b3
+51a3335efb95142fe5a85bfff96d58a860abc2e11f594dfa839ccbd68f33
+ebd6e56beee922761f38f3d30db71b1e9c262ac577184fe5ee57c8f5ebe8
+69c823d6b8b6c3752798874c2721fb4b4e9ac1a98a93ec2c74056b597700
+d0e391788c0aa29a8647f3c7990206f1a6c4bb9a6aa61387cf64929c3845
+01ae835c86a9aacddb48fcca0d9a5f50f1aba09206d3669a127491c2c79b
+6394ae157765c1db67a1fc56805bc4f8c3523a817c8aa4328de15209fcfd
+7a7c89e6db16bed1ef98deb15ca26f7e58382b4e487a4c5db5cfd40bee4b
+235317fd9f6e37a9c404553b0f5c50d31faecc8fe2a6e10cb4aaaea4e4cb
+e8a81a5a198d32f8d9d1fbf23a30df57fc3b0d44e4675e665ee3d91861ea
+9495c6e3056a3cb518f916270a2727dbda13f195f9dbdd3324add540b0d1
+501572229bf413adb35f33a04a55900453acd621ffc5776da062cf0f3310
+d16d94d67fe4fb25816dba86364ec1a6
\ No newline at end of file
diff --git a/target/classes/log4j2.xml b/target/classes/log4j2.xml
new file mode 100644
index 0000000..0d43191
--- /dev/null
+++ b/target/classes/log4j2.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+	<Appenders>
+		<Console name="Console" target="SYSTEM_OUT">
+			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n" />
+		</Console>
+
+		<RollingRandomAccessFile name="File"
+			fileName="D:/log/qxueyou.log" append="true"
+			filePattern="D:/log/qxueyou-%d{yyyyMMdd}-%i.log">
+			<PatternLayout>
+				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
+			</PatternLayout>
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1"
+					modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingRandomAccessFile>
+		
+		<RollingRandomAccessFile name="error_file"
+			fileName="D:/log/qxueyou_err.log" append="true"
+			filePattern="D:/log/qxueyou_err-%d{yyyyMMdd}-%i.log">
+			<PatternLayout>
+				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
+			</PatternLayout>
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1"
+					modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingRandomAccessFile>
+		
+		<RollingRandomAccessFile name="OnsFile"
+			fileName="D:/logOns/qxueyouOns.log" append="true"
+			filePattern="D:/logOns/qxueyouOns-%d{yyyyMMdd}-%i.log">
+			<PatternLayout>
+				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
+			</PatternLayout>
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1"
+					modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingRandomAccessFile>
+		
+
+	</Appenders>
+	<Loggers>
+	    
+		<Root level="info">
+			<AppenderRef ref="Console" />
+		</Root>
+		
+		<!-- 杈撳嚭 hibernate SQL -->
+		<logger name="org.hibernate" level="error" additivity="false">
+            <AppenderRef ref="File" />
+        </logger>
+		
+		<!-- 杈撳嚭 hibernate SQL -->
+		<logger name="org.hibernate.SQL" level="debug" additivity="false">
+            <AppenderRef ref="File" />
+        </logger>
+        
+		<!-- 杈撳嚭 hibernate SQL 鎵ц鍙傛暟缁戝畾淇℃伅 -->
+	    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace" additivity="false">
+            <AppenderRef ref="File" />
+              <AppenderRef ref="Console" />
+        </logger>
+        
+	    <!-- 瀹夊叏杩囨护鍣ㄦ棩蹇楃骇鍒厤缃� -->
+	    <logger name="AuthorizeFilter" level="debug" additivity="false">
+            <AppenderRef ref="Console" />
+        </logger>
+        
+   	    <logger name="WeixinSdkService" level="debug" additivity="false">
+            <AppenderRef ref="Console" />
+        </logger>
+	    
+   	     <logger name="ONSExceptionLogService" level="error" additivity="false">
+            <AppenderRef ref="OnsFile" />
+        </logger>
+		
+	</Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/target/classes/public/index.html b/target/classes/public/index.html
new file mode 100644
index 0000000..40cf218
--- /dev/null
+++ b/target/classes/public/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+  hello I'm index.html!!! public
+  <img src="./images/1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/target/classes/public/redirect.html b/target/classes/public/redirect.html
new file mode 100644
index 0000000..915b600
--- /dev/null
+++ b/target/classes/public/redirect.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+hello I'm redirect.html!!! public
+</body>
+</html>
\ No newline at end of file
diff --git a/target/classes/static/Transaction.xml b/target/classes/static/Transaction.xml
new file mode 100644
index 0000000..bfa5d9d
--- /dev/null
+++ b/target/classes/static/Transaction.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
+	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
+
+	xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/mvc
+        http://www.springframework.org/schema/mvc/spring-mvc.xsd
+        http://www.springframework.org/schema/jee
+        http://www.springframework.org/schema/jee/spring-jee.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        http://www.springframework.org/schema/aop/spring-aop.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd">
+
+	<!-- <aop:aspectj-autoproxy proxy-target-class="true" /> -->
+	<bean id="sessionFactory"
+		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
+		<property name="dataSource" ref="druidDataSource" />
+
+		<!-- 閰嶇疆Entity鎵弿鍖呭悕 -->
+		<property name="packagesToScan">
+			<list>
+				<value>com.qxueyou.scc</value>
+			</list>
+		</property>
+
+		<property name="hibernateProperties">
+			<props>
+				<prop key="hibernate.dialect">
+					 com.qxueyou.scc.base.handler.QxueyouMysqlDialect
+				</prop>
+				<prop key="hibernate.show_sql">true</prop>
+				<prop key="connection.characterEncoding">GBK</prop>
+				<!-- <prop key="hibernate.physical_naming_strategy">org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl</prop> -->  
+				<prop key="hibernate.physical_naming_strategy">org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</prop> 
+				
+				 <prop key="hibernate.cache.use_second_level_cache">false</prop>
+				<!-- 
+				<prop key="hibernate.cache.region.factory_class">
+				    com.googlecode.hibernate.memcached.MemcachedRegionFactory
+				</prop>
+				<prop key="hibernate.memcached.keyStrategy">HashCodeKeyStrategy</prop>
+				<prop key="hibernate.memcached.servers">192.168.10.230:11211</prop>
+				缂撳瓨澶辨晥鏃堕棿,鍗曚綅绉�
+				<prop key="hibernate.memcached.cacheTimeSeconds">600</prop>
+				Hibernate灏嗘敹闆嗘湁鍔╀簬鎬ц兘璋冭妭鐨勭粺璁℃暟鎹�
+				<prop key="hibernate.generate_statistics">true</prop>
+				
+				璁剧疆浜岀骇缂撳瓨鐨勫墠缂�鍚嶇О  
+     			<prop key="hibernate.cache.region_prefix">qxueyou_query_cache</prop>
+				鏄惁缂撳瓨鏌ヨ缁撴灉  
+				<prop key="hibernate.cache.use_query_cache">true</prop>
+				鍚︿娇鐢ㄧ粨鏋勫寲鐨勬柟寮忕紦瀛樺璞�   
+     			<prop key="hibernate.cache.use_structured_entries">true</prop>  
+				 -->
+			</props> 
+		</property> 
+	</bean>
+
+	<!-- the transactional advice (what happens; see the <aop:advisor/> bean 
+		below) -->
+	<tx:advice id="txAdvice" transaction-manager="txManager">
+		<tx:attributes>
+		    <tx:method name="add*" propagation="REQUIRED" />
+			<tx:method name="insert*" propagation="REQUIRED" />
+			<tx:method name="save*" propagation="REQUIRED" />
+			<tx:method name="update*" propagation="REQUIRED" />
+			<tx:method name="delete*" propagation="REQUIRED" />
+			<tx:method name="do*" propagation="REQUIRED" />
+			<tx:method name="execute*" propagation="REQUIRED" />
+			<tx:method name="logSave*" propagation="REQUIRES_NEW" />
+			<tx:method name="*" read-only="true" />
+		</tx:attributes>
+	</tx:advice>
+
+	<aop:config>
+		<aop:pointcut id="allManagerMethod"
+			expression="execution(* com.qxueyou.scc..*Service.*(..))" />
+		<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
+	</aop:config>
+
+	<bean id="txManager"
+		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
+		<property name="sessionFactory" ref="sessionFactory" />
+	</bean>
+	
+	
+</beans>
\ No newline at end of file
diff --git a/target/classes/static/images/1.jpg b/target/classes/static/images/1.jpg
new file mode 100644
index 0000000..ac0d7bd
--- /dev/null
+++ b/target/classes/static/images/1.jpg
Binary files differ
diff --git a/target/classes/static/images/ca.jpg b/target/classes/static/images/ca.jpg
new file mode 100644
index 0000000..98d2c32
--- /dev/null
+++ b/target/classes/static/images/ca.jpg
Binary files differ
diff --git a/target/classes/static/images/ca1.jpg b/target/classes/static/images/ca1.jpg
new file mode 100644
index 0000000..6ab39ca
--- /dev/null
+++ b/target/classes/static/images/ca1.jpg
Binary files differ
diff --git a/target/classes/static/images/camera.png b/target/classes/static/images/camera.png
new file mode 100644
index 0000000..5d44bfc
--- /dev/null
+++ b/target/classes/static/images/camera.png
Binary files differ
diff --git a/target/classes/static/images/camera1.png b/target/classes/static/images/camera1.png
new file mode 100644
index 0000000..0f40247
--- /dev/null
+++ b/target/classes/static/images/camera1.png
Binary files differ
diff --git a/target/classes/static/images/cb.jpg b/target/classes/static/images/cb.jpg
new file mode 100644
index 0000000..40f87ee
--- /dev/null
+++ b/target/classes/static/images/cb.jpg
Binary files differ
diff --git a/target/classes/static/images/cc.jpg b/target/classes/static/images/cc.jpg
new file mode 100644
index 0000000..f0ae61d
--- /dev/null
+++ b/target/classes/static/images/cc.jpg
Binary files differ
diff --git a/target/classes/static/images/class.png b/target/classes/static/images/class.png
new file mode 100644
index 0000000..ea1d1f1
--- /dev/null
+++ b/target/classes/static/images/class.png
Binary files differ
diff --git a/target/classes/static/images/class2.png b/target/classes/static/images/class2.png
new file mode 100644
index 0000000..8f3fb22
--- /dev/null
+++ b/target/classes/static/images/class2.png
Binary files differ
diff --git a/target/classes/static/images/eval.png b/target/classes/static/images/eval.png
new file mode 100644
index 0000000..94ec13e
--- /dev/null
+++ b/target/classes/static/images/eval.png
Binary files differ
diff --git a/target/classes/static/images/eval1.png b/target/classes/static/images/eval1.png
new file mode 100644
index 0000000..5feff20
--- /dev/null
+++ b/target/classes/static/images/eval1.png
Binary files differ
diff --git a/target/classes/static/images/exam.png b/target/classes/static/images/exam.png
new file mode 100644
index 0000000..bf2e046
--- /dev/null
+++ b/target/classes/static/images/exam.png
Binary files differ
diff --git a/target/classes/static/images/exam1.png b/target/classes/static/images/exam1.png
new file mode 100644
index 0000000..a3663cf
--- /dev/null
+++ b/target/classes/static/images/exam1.png
Binary files differ
diff --git a/target/classes/static/images/exerciselib.png b/target/classes/static/images/exerciselib.png
new file mode 100644
index 0000000..1cbbd48
--- /dev/null
+++ b/target/classes/static/images/exerciselib.png
Binary files differ
diff --git a/target/classes/static/images/exerciselib1.png b/target/classes/static/images/exerciselib1.png
new file mode 100644
index 0000000..e894935
--- /dev/null
+++ b/target/classes/static/images/exerciselib1.png
Binary files differ
diff --git a/target/classes/static/images/homeword.png b/target/classes/static/images/homeword.png
new file mode 100644
index 0000000..965f9ad
--- /dev/null
+++ b/target/classes/static/images/homeword.png
Binary files differ
diff --git a/target/classes/static/images/homeword1.png b/target/classes/static/images/homeword1.png
new file mode 100644
index 0000000..a7c1c82
--- /dev/null
+++ b/target/classes/static/images/homeword1.png
Binary files differ
diff --git a/target/classes/static/images/live.png b/target/classes/static/images/live.png
new file mode 100644
index 0000000..ab30f60
--- /dev/null
+++ b/target/classes/static/images/live.png
Binary files differ
diff --git a/target/classes/static/images/live1.png b/target/classes/static/images/live1.png
new file mode 100644
index 0000000..cfd0433
--- /dev/null
+++ b/target/classes/static/images/live1.png
Binary files differ
diff --git a/target/classes/static/images/org.png b/target/classes/static/images/org.png
new file mode 100644
index 0000000..adc624a
--- /dev/null
+++ b/target/classes/static/images/org.png
Binary files differ
diff --git a/target/classes/static/images/org1.png b/target/classes/static/images/org1.png
new file mode 100644
index 0000000..d4ec606
--- /dev/null
+++ b/target/classes/static/images/org1.png
Binary files differ
diff --git a/target/classes/static/images/paper.png b/target/classes/static/images/paper.png
new file mode 100644
index 0000000..243e4f8
--- /dev/null
+++ b/target/classes/static/images/paper.png
Binary files differ
diff --git a/target/classes/static/images/paper1.png b/target/classes/static/images/paper1.png
new file mode 100644
index 0000000..50bae87
--- /dev/null
+++ b/target/classes/static/images/paper1.png
Binary files differ
diff --git a/target/classes/static/images/res.png b/target/classes/static/images/res.png
new file mode 100644
index 0000000..1b548cb
--- /dev/null
+++ b/target/classes/static/images/res.png
Binary files differ
diff --git a/target/classes/static/images/res1.png b/target/classes/static/images/res1.png
new file mode 100644
index 0000000..1f4dc3d
--- /dev/null
+++ b/target/classes/static/images/res1.png
Binary files differ
diff --git a/target/classes/static/images/role.png b/target/classes/static/images/role.png
new file mode 100644
index 0000000..dba4011
--- /dev/null
+++ b/target/classes/static/images/role.png
Binary files differ
diff --git a/target/classes/static/images/role1.png b/target/classes/static/images/role1.png
new file mode 100644
index 0000000..e721f96
--- /dev/null
+++ b/target/classes/static/images/role1.png
Binary files differ
diff --git a/target/classes/static/images/room.png b/target/classes/static/images/room.png
new file mode 100644
index 0000000..e724d45
--- /dev/null
+++ b/target/classes/static/images/room.png
Binary files differ
diff --git a/target/classes/static/images/room1.png b/target/classes/static/images/room1.png
new file mode 100644
index 0000000..3044368
--- /dev/null
+++ b/target/classes/static/images/room1.png
Binary files differ
diff --git a/target/classes/static/images/schedule.png b/target/classes/static/images/schedule.png
new file mode 100644
index 0000000..6c7f3a9
--- /dev/null
+++ b/target/classes/static/images/schedule.png
Binary files differ
diff --git a/target/classes/static/images/schedule1.png b/target/classes/static/images/schedule1.png
new file mode 100644
index 0000000..e635a61
--- /dev/null
+++ b/target/classes/static/images/schedule1.png
Binary files differ
diff --git a/target/classes/static/images/score.png b/target/classes/static/images/score.png
new file mode 100644
index 0000000..66b22c4
--- /dev/null
+++ b/target/classes/static/images/score.png
Binary files differ
diff --git a/target/classes/static/images/score1.png b/target/classes/static/images/score1.png
new file mode 100644
index 0000000..757953d
--- /dev/null
+++ b/target/classes/static/images/score1.png
Binary files differ
diff --git a/target/classes/static/images/study.png b/target/classes/static/images/study.png
new file mode 100644
index 0000000..58b9968
--- /dev/null
+++ b/target/classes/static/images/study.png
Binary files differ
diff --git a/target/classes/static/images/study1.png b/target/classes/static/images/study1.png
new file mode 100644
index 0000000..39c3d1d
--- /dev/null
+++ b/target/classes/static/images/study1.png
Binary files differ
diff --git a/target/classes/static/images/subject.png b/target/classes/static/images/subject.png
new file mode 100644
index 0000000..93a5a00
--- /dev/null
+++ b/target/classes/static/images/subject.png
Binary files differ
diff --git a/target/classes/static/images/subject1.png b/target/classes/static/images/subject1.png
new file mode 100644
index 0000000..e045efa
--- /dev/null
+++ b/target/classes/static/images/subject1.png
Binary files differ
diff --git a/target/classes/static/images/teacher.png b/target/classes/static/images/teacher.png
new file mode 100644
index 0000000..2f671a5
--- /dev/null
+++ b/target/classes/static/images/teacher.png
Binary files differ
diff --git a/target/classes/static/images/teacher1.png b/target/classes/static/images/teacher1.png
new file mode 100644
index 0000000..7a2c04e
--- /dev/null
+++ b/target/classes/static/images/teacher1.png
Binary files differ
diff --git a/target/classes/static/images/topic.png b/target/classes/static/images/topic.png
new file mode 100644
index 0000000..6fd6248
--- /dev/null
+++ b/target/classes/static/images/topic.png
Binary files differ
diff --git a/target/classes/static/images/topic1.png b/target/classes/static/images/topic1.png
new file mode 100644
index 0000000..a7c5b64
--- /dev/null
+++ b/target/classes/static/images/topic1.png
Binary files differ
diff --git a/target/classes/static/index.html b/target/classes/static/index.html
new file mode 100644
index 0000000..4d3ca4e
--- /dev/null
+++ b/target/classes/static/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+  hello I'm index.html!!! static
+  <img src="/static/images/1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/target/classes/static/redirect.html b/target/classes/static/redirect.html
new file mode 100644
index 0000000..cc890ec
--- /dev/null
+++ b/target/classes/static/redirect.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+hello I'm redirect.html!!! static
+</body>
+</html>
\ No newline at end of file
diff --git a/target/classes/templates/index.html b/target/classes/templates/index.html
new file mode 100644
index 0000000..62d3be8
--- /dev/null
+++ b/target/classes/templates/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+  hello I'm index.html!!!template
+  <img src="/static/images/1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/target/classes/templates/redirect.html b/target/classes/templates/redirect.html
new file mode 100644
index 0000000..79734b3
--- /dev/null
+++ b/target/classes/templates/redirect.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+</head>
+<body>
+hello I'm redirect.html!!! template
+</body>
+</html>
\ No newline at end of file
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClass.java b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClass.java
new file mode 100644
index 0000000..d7c64e0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClass.java
@@ -0,0 +1,158 @@
+package com.qxueyou.scc.admin.classes.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QClsClass is a Querydsl query type for ClsClass
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QClsClass extends EntityPathBase<ClsClass> {
+
+    private static final long serialVersionUID = -771528408L;
+
+    public static final QClsClass clsClass = new QClsClass("clsClass");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath addressId = createString("addressId");
+
+    public final StringPath advantage = createString("advantage");
+
+    public final StringPath arrangement = createString("arrangement");
+
+    public final BooleanPath canMultiExer = createBoolean("canMultiExer");
+
+    public final StringPath city = createString("city");
+
+    public final StringPath classCharger = createString("classCharger");
+
+    public final StringPath classChargerId = createString("classChargerId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classNumber = createString("classNumber");
+
+    public final StringPath classTypes = createString("classTypes");
+
+    public final NumberPath<java.math.BigDecimal> clickNum = createNumber("clickNum", java.math.BigDecimal.class);
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath collegeCourseName = createString("collegeCourseName");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigDecimal> discount = createNumber("discount", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> disprice = createNumber("disprice", java.math.BigDecimal.class);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final BooleanPath extended = createBoolean("extended");
+
+    public final StringPath fullText = createString("fullText");
+
+    public final StringPath goodId = createString("goodId");
+
+    public final NumberPath<Integer> haveAward = createNumber("haveAward", Integer.class);
+
+    public final NumberPath<Integer> haveHandout = createNumber("haveHandout", Integer.class);
+
+    public final NumberPath<Integer> haveLive = createNumber("haveLive", Integer.class);
+
+    public final NumberPath<Integer> haveVideo = createNumber("haveVideo", Integer.class);
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath latitudeY = createString("latitudeY");
+
+    public final StringPath logitudeX = createString("logitudeX");
+
+    public final StringPath mode = createString("mode");
+
+    public final StringPath name = createString("name");
+
+    public final BooleanPath needForum = createBoolean("needForum");
+
+    public final BooleanPath needJoinAudit = createBoolean("needJoinAudit");
+
+    public final BooleanPath needQuitAudit = createBoolean("needQuitAudit");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<java.math.BigInteger> paymentNum = createNumber("paymentNum", java.math.BigInteger.class);
+
+    public final StringPath pointer = createString("pointer");
+
+    public final NumberPath<java.math.BigDecimal> price = createNumber("price", java.math.BigDecimal.class);
+
+    public final StringPath productId = createString("productId");
+
+    public final StringPath progress = createString("progress");
+
+    public final StringPath province = createString("province");
+
+    public final BooleanPath recommend = createBoolean("recommend");
+
+    public final StringPath region = createString("region");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final BooleanPath showAnalysisAfterExer = createBoolean("showAnalysisAfterExer");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigInteger> stuAllCount = createNumber("stuAllCount", java.math.BigInteger.class);
+
+    public final NumberPath<Integer> studentCount = createNumber("studentCount", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> studyTime = createNumber("studyTime", java.math.BigDecimal.class);
+
+    public final ListPath<com.qxueyou.scc.teach.subject.model.Subject, com.qxueyou.scc.teach.subject.model.QSubject> subjects = this.<com.qxueyou.scc.teach.subject.model.Subject, com.qxueyou.scc.teach.subject.model.QSubject>createList("subjects", com.qxueyou.scc.teach.subject.model.Subject.class, com.qxueyou.scc.teach.subject.model.QSubject.class, PathInits.DIRECT2);
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final BooleanPath topFlag = createBoolean("topFlag");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final ListPath<com.qxueyou.scc.teach.live.model.MediaVideoLive, com.qxueyou.scc.teach.live.model.QMediaVideoLive> videoLives = this.<com.qxueyou.scc.teach.live.model.MediaVideoLive, com.qxueyou.scc.teach.live.model.QMediaVideoLive>createList("videoLives", com.qxueyou.scc.teach.live.model.MediaVideoLive.class, com.qxueyou.scc.teach.live.model.QMediaVideoLive.class, PathInits.DIRECT2);
+
+    public QClsClass(String variable) {
+        super(ClsClass.class, forVariable(variable));
+    }
+
+    public QClsClass(Path<? extends ClsClass> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QClsClass(PathMetadata metadata) {
+        super(ClsClass.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClassReSubject.java b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClassReSubject.java
new file mode 100644
index 0000000..a7ea57d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsClassReSubject.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.admin.classes.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QClsClassReSubject is a Querydsl query type for ClsClassReSubject
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QClsClassReSubject extends EntityPathBase<ClsClassReSubject> {
+
+    private static final long serialVersionUID = 2044826417L;
+
+    public static final QClsClassReSubject clsClassReSubject = new QClsClassReSubject("clsClassReSubject");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath clsReSubjectId = createString("clsReSubjectId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QClsClassReSubject(String variable) {
+        super(ClsClassReSubject.class, forVariable(variable));
+    }
+
+    public QClsClassReSubject(Path<? extends ClsClassReSubject> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QClsClassReSubject(PathMetadata metadata) {
+        super(ClsClassReSubject.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectChapter.java b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectChapter.java
new file mode 100644
index 0000000..4fb7936
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectChapter.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.admin.classes.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QClsSubjectChapter is a Querydsl query type for ClsSubjectChapter
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QClsSubjectChapter extends EntityPathBase<ClsSubjectChapter> {
+
+    private static final long serialVersionUID = -199509039L;
+
+    public static final QClsSubjectChapter clsSubjectChapter = new QClsSubjectChapter("clsSubjectChapter");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath parentChapterId = createString("parentChapterId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QClsSubjectChapter(String variable) {
+        super(ClsSubjectChapter.class, forVariable(variable));
+    }
+
+    public QClsSubjectChapter(Path<? extends ClsSubjectChapter> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QClsSubjectChapter(PathMetadata metadata) {
+        super(ClsSubjectChapter.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectLecture.java b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectLecture.java
new file mode 100644
index 0000000..9f37919
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/classes/model/QClsSubjectLecture.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.admin.classes.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QClsSubjectLecture is a Querydsl query type for ClsSubjectLecture
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QClsSubjectLecture extends EntityPathBase<ClsSubjectLecture> {
+
+    private static final long serialVersionUID = -885830398L;
+
+    public static final QClsSubjectLecture clsSubjectLecture = new QClsSubjectLecture("clsSubjectLecture");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath lectureId = createString("lectureId");
+
+    public final StringPath lectureType = createString("lectureType");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath resItemId = createString("resItemId");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QClsSubjectLecture(String variable) {
+        super(ClsSubjectLecture.class, forVariable(variable));
+    }
+
+    public QClsSubjectLecture(Path<? extends ClsSubjectLecture> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QClsSubjectLecture(PathMetadata metadata) {
+        super(ClsSubjectLecture.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/classroom/model/QClassRoom.java b/target/generated-sources/java/com/qxueyou/scc/admin/classroom/model/QClassRoom.java
new file mode 100644
index 0000000..78678d1
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/classroom/model/QClassRoom.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.admin.classroom.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QClassRoom is a Querydsl query type for ClassRoom
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QClassRoom extends EntityPathBase<ClassRoom> {
+
+    private static final long serialVersionUID = 918847078L;
+
+    public static final QClassRoom classRoom = new QClassRoom("classRoom");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath roomId = createString("roomId");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QClassRoom(String variable) {
+        super(ClassRoom.class, forVariable(variable));
+    }
+
+    public QClassRoom(Path<? extends ClassRoom> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QClassRoom(PathMetadata metadata) {
+        super(ClassRoom.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseSchedule.java b/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseSchedule.java
new file mode 100644
index 0000000..01966d8
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseSchedule.java
@@ -0,0 +1,110 @@
+package com.qxueyou.scc.admin.course.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QCourseSchedule is a Querydsl query type for CourseSchedule
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QCourseSchedule extends EntityPathBase<CourseSchedule> {
+
+    private static final long serialVersionUID = 800149181L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QCourseSchedule courseSchedule = new QCourseSchedule("courseSchedule");
+
+    public final DateTimePath<java.util.Date> beginTime = createDateTime("beginTime", java.util.Date.class);
+
+    public final ListPath<com.qxueyou.scc.admin.classes.model.ClsClass, com.qxueyou.scc.admin.classes.model.QClsClass> classes = this.<com.qxueyou.scc.admin.classes.model.ClsClass, com.qxueyou.scc.admin.classes.model.QClsClass>createList("classes", com.qxueyou.scc.admin.classes.model.ClsClass.class, com.qxueyou.scc.admin.classes.model.QClsClass.class, PathInits.DIRECT2);
+
+    public final com.qxueyou.scc.admin.classroom.model.QClassRoom classRoom;
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final ListPath<CourseScheduleDetail, QCourseScheduleDetail> details = this.<CourseScheduleDetail, QCourseScheduleDetail>createList("details", CourseScheduleDetail.class, QCourseScheduleDetail.class, PathInits.DIRECT2);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath friTime = createString("friTime");
+
+    public final StringPath mark = createString("mark");
+
+    public final StringPath monTime = createString("monTime");
+
+    public final NumberPath<Short> openFlag = createNumber("openFlag", Short.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final ListPath<CourseScheduleReCls, QCourseScheduleReCls> reClasses = this.<CourseScheduleReCls, QCourseScheduleReCls>createList("reClasses", CourseScheduleReCls.class, QCourseScheduleReCls.class, PathInits.DIRECT2);
+
+    public final StringPath roomId = createString("roomId");
+
+    public final StringPath satTime = createString("satTime");
+
+    public final StringPath scheduleId = createString("scheduleId");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath sumTime = createString("sumTime");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final StringPath thuTime = createString("thuTime");
+
+    public final StringPath tueTime = createString("tueTime");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath wedTime = createString("wedTime");
+
+    public QCourseSchedule(String variable) {
+        this(CourseSchedule.class, forVariable(variable), INITS);
+    }
+
+    public QCourseSchedule(Path<? extends CourseSchedule> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QCourseSchedule(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QCourseSchedule(PathMetadata metadata, PathInits inits) {
+        this(CourseSchedule.class, metadata, inits);
+    }
+
+    public QCourseSchedule(Class<? extends CourseSchedule> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.classRoom = inits.isInitialized("classRoom") ? new com.qxueyou.scc.admin.classroom.model.QClassRoom(forProperty("classRoom")) : null;
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleDetail.java b/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleDetail.java
new file mode 100644
index 0000000..00b4ded
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleDetail.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.admin.course.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QCourseScheduleDetail is a Querydsl query type for CourseScheduleDetail
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QCourseScheduleDetail extends EntityPathBase<CourseScheduleDetail> {
+
+    private static final long serialVersionUID = -1798860434L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QCourseScheduleDetail courseScheduleDetail = new QCourseScheduleDetail("courseScheduleDetail");
+
+    public final DateTimePath<java.util.Date> beginTime = createDateTime("beginTime", java.util.Date.class);
+
+    public final QCourseSchedule courseSchedule;
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath detailId = createString("detailId");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath scheduleId = createString("scheduleId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QCourseScheduleDetail(String variable) {
+        this(CourseScheduleDetail.class, forVariable(variable), INITS);
+    }
+
+    public QCourseScheduleDetail(Path<? extends CourseScheduleDetail> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QCourseScheduleDetail(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QCourseScheduleDetail(PathMetadata metadata, PathInits inits) {
+        this(CourseScheduleDetail.class, metadata, inits);
+    }
+
+    public QCourseScheduleDetail(Class<? extends CourseScheduleDetail> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.courseSchedule = inits.isInitialized("courseSchedule") ? new QCourseSchedule(forProperty("courseSchedule"), inits.get("courseSchedule")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleReCls.java b/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleReCls.java
new file mode 100644
index 0000000..9e0265c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/course/model/QCourseScheduleReCls.java
@@ -0,0 +1,72 @@
+package com.qxueyou.scc.admin.course.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QCourseScheduleReCls is a Querydsl query type for CourseScheduleReCls
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QCourseScheduleReCls extends EntityPathBase<CourseScheduleReCls> {
+
+    private static final long serialVersionUID = 1478875450L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QCourseScheduleReCls courseScheduleReCls = new QCourseScheduleReCls("courseScheduleReCls");
+
+    public final StringPath classId = createString("classId");
+
+    public final com.qxueyou.scc.admin.classes.model.QClsClass clsClass;
+
+    public final QCourseSchedule courseSchedule;
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath reId = createString("reId");
+
+    public final StringPath scheduleId = createString("scheduleId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QCourseScheduleReCls(String variable) {
+        this(CourseScheduleReCls.class, forVariable(variable), INITS);
+    }
+
+    public QCourseScheduleReCls(Path<? extends CourseScheduleReCls> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QCourseScheduleReCls(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QCourseScheduleReCls(PathMetadata metadata, PathInits inits) {
+        this(CourseScheduleReCls.class, metadata, inits);
+    }
+
+    public QCourseScheduleReCls(Class<? extends CourseScheduleReCls> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.clsClass = inits.isInitialized("clsClass") ? new com.qxueyou.scc.admin.classes.model.QClsClass(forProperty("clsClass")) : null;
+        this.courseSchedule = inits.isInitialized("courseSchedule") ? new QCourseSchedule(forProperty("courseSchedule"), inits.get("courseSchedule")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/examroom/model/QExamRoom.java b/target/generated-sources/java/com/qxueyou/scc/admin/examroom/model/QExamRoom.java
new file mode 100644
index 0000000..557067e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/examroom/model/QExamRoom.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.admin.examroom.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExamRoom is a Querydsl query type for ExamRoom
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamRoom extends EntityPathBase<ExamRoom> {
+
+    private static final long serialVersionUID = -1323861818L;
+
+    public static final QExamRoom examRoom = new QExamRoom("examRoom");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examroomId = createString("examroomId");
+
+    public final StringPath examroomName = createString("examroomName");
+
+    public final StringPath roomId = createString("roomId");
+
+    public final StringPath roomName = createString("roomName");
+
+    public final NumberPath<Integer> seatsNum = createNumber("seatsNum", Integer.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamRoom(String variable) {
+        super(ExamRoom.class, forVariable(variable));
+    }
+
+    public QExamRoom(Path<? extends ExamRoom> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExamRoom(PathMetadata metadata) {
+        super(ExamRoom.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QProgress.java b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QProgress.java
new file mode 100644
index 0000000..4d18a69
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QProgress.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.admin.progress.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QProgress is a Querydsl query type for Progress
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QProgress extends EntityPathBase<Progress> {
+
+    private static final long serialVersionUID = 737028166L;
+
+    public static final QProgress progress = new QProgress("progress");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath learnerId = createString("learnerId");
+
+    public final StringPath learnerName = createString("learnerName");
+
+    public final StringPath progressId = createString("progressId");
+
+    public final NumberPath<Double> progressPercent = createNumber("progressPercent", Double.class);
+
+    public final StringPath progressUnit = createString("progressUnit");
+
+    public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
+
+    public final StringPath targetId = createString("targetId");
+
+    public final StringPath targetName = createString("targetName");
+
+    public final StringPath targetType = createString("targetType");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QProgress(String variable) {
+        super(Progress.class, forVariable(variable));
+    }
+
+    public QProgress(Path<? extends Progress> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QProgress(PathMetadata metadata) {
+        super(Progress.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QSubjectLectureProgressDetail.java b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QSubjectLectureProgressDetail.java
new file mode 100644
index 0000000..c648739
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/QSubjectLectureProgressDetail.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.admin.progress.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSubjectLectureProgressDetail is a Querydsl query type for SubjectLectureProgressDetail
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSubjectLectureProgressDetail extends EntityPathBase<SubjectLectureProgressDetail> {
+
+    private static final long serialVersionUID = 1771414473L;
+
+    public static final QSubjectLectureProgressDetail subjectLectureProgressDetail = new QSubjectLectureProgressDetail("subjectLectureProgressDetail");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath detailId = createString("detailId");
+
+    public final NumberPath<Integer> end = createNumber("end", Integer.class);
+
+    public final StringPath learnerId = createString("learnerId");
+
+    public final StringPath progressId = createString("progressId");
+
+    public final NumberPath<Integer> start = createNumber("start", Integer.class);
+
+    public final StringPath targetId = createString("targetId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSubjectLectureProgressDetail(String variable) {
+        super(SubjectLectureProgressDetail.class, forVariable(variable));
+    }
+
+    public QSubjectLectureProgressDetail(Path<? extends SubjectLectureProgressDetail> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSubjectLectureProgressDetail(PathMetadata metadata) {
+        super(SubjectLectureProgressDetail.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeV.java b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeV.java
new file mode 100644
index 0000000..0a9ef78
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeV.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.admin.progress.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSubjectProgressTreeV is a Querydsl query type for SubjectProgressTreeV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSubjectProgressTreeV extends EntityPathBase<SubjectProgressTreeV> {
+
+    private static final long serialVersionUID = 84210543L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSubjectProgressTreeV subjectProgressTreeV = new QSubjectProgressTreeV("subjectProgressTreeV");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final QSubjectProgressTreeVId id;
+
+    public final StringPath nodeName = createString("nodeName");
+
+    public final StringPath nodeType = createString("nodeType");
+
+    public final StringPath parentId = createString("parentId");
+
+    public final NumberPath<Double> percent = createNumber("percent", Double.class);
+
+    public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
+
+    public QSubjectProgressTreeV(String variable) {
+        this(SubjectProgressTreeV.class, forVariable(variable), INITS);
+    }
+
+    public QSubjectProgressTreeV(Path<? extends SubjectProgressTreeV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSubjectProgressTreeV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSubjectProgressTreeV(PathMetadata metadata, PathInits inits) {
+        this(SubjectProgressTreeV.class, metadata, inits);
+    }
+
+    public QSubjectProgressTreeV(Class<? extends SubjectProgressTreeV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QSubjectProgressTreeVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeVId.java b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeVId.java
new file mode 100644
index 0000000..e910d8c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/progress/model/view/QSubjectProgressTreeVId.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.admin.progress.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSubjectProgressTreeVId is a Querydsl query type for SubjectProgressTreeVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QSubjectProgressTreeVId extends BeanPath<SubjectProgressTreeVId> {
+
+    private static final long serialVersionUID = -678044438L;
+
+    public static final QSubjectProgressTreeVId subjectProgressTreeVId = new QSubjectProgressTreeVId("subjectProgressTreeVId");
+
+    public final StringPath nodeId = createString("nodeId");
+
+    public final StringPath userId = createString("userId");
+
+    public QSubjectProgressTreeVId(String variable) {
+        super(SubjectProgressTreeVId.class, forVariable(variable));
+    }
+
+    public QSubjectProgressTreeVId(Path<? extends SubjectProgressTreeVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSubjectProgressTreeVId(PathMetadata metadata) {
+        super(SubjectProgressTreeVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/score/model/QScore.java b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/QScore.java
new file mode 100644
index 0000000..0a479b8
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/QScore.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.admin.score.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QScore is a Querydsl query type for Score
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QScore extends EntityPathBase<Score> {
+
+    private static final long serialVersionUID = -1074493628L;
+
+    public static final QScore score = new QScore("score");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath learnerId = createString("learnerId");
+
+    public final StringPath learnerName = createString("learnerName");
+
+    public final StringPath progressUnit = createString("progressUnit");
+
+    public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
+
+    public final StringPath scoreId = createString("scoreId");
+
+    public final StringPath targetId = createString("targetId");
+
+    public final StringPath targetName = createString("targetName");
+
+    public final StringPath targetType = createString("targetType");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QScore(String variable) {
+        super(Score.class, forVariable(variable));
+    }
+
+    public QScore(Path<? extends Score> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QScore(PathMetadata metadata) {
+        super(Score.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreV.java b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreV.java
new file mode 100644
index 0000000..da9b768
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreV.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.admin.score.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamScoreV is a Querydsl query type for ExamScoreV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamScoreV extends EntityPathBase<ExamScoreV> {
+
+    private static final long serialVersionUID = -1075620258L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamScoreV examScoreV = new QExamScoreV("examScoreV");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath examName = createString("examName");
+
+    public final QExamScoreVId id;
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final StringPath userName = createString("userName");
+
+    public QExamScoreV(String variable) {
+        this(ExamScoreV.class, forVariable(variable), INITS);
+    }
+
+    public QExamScoreV(Path<? extends ExamScoreV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamScoreV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamScoreV(PathMetadata metadata, PathInits inits) {
+        this(ExamScoreV.class, metadata, inits);
+    }
+
+    public QExamScoreV(Class<? extends ExamScoreV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QExamScoreVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreVId.java b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreVId.java
new file mode 100644
index 0000000..c3896de
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QExamScoreVId.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.admin.score.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExamScoreVId is a Querydsl query type for ExamScoreVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QExamScoreVId extends BeanPath<ExamScoreVId> {
+
+    private static final long serialVersionUID = 1416052761L;
+
+    public static final QExamScoreVId examScoreVId = new QExamScoreVId("examScoreVId");
+
+    public final StringPath examId = createString("examId");
+
+    public final StringPath userId = createString("userId");
+
+    public QExamScoreVId(String variable) {
+        super(ExamScoreVId.class, forVariable(variable));
+    }
+
+    public QExamScoreVId(Path<? extends ExamScoreVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExamScoreVId(PathMetadata metadata) {
+        super(ExamScoreVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreV.java b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreV.java
new file mode 100644
index 0000000..4b80147
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreV.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.admin.score.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QHomeworkScoreV is a Querydsl query type for HomeworkScoreV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QHomeworkScoreV extends EntityPathBase<HomeworkScoreV> {
+
+    private static final long serialVersionUID = -994677649L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QHomeworkScoreV homeworkScoreV = new QHomeworkScoreV("homeworkScoreV");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath completeStatus = createString("completeStatus");
+
+    public final StringPath homeworkName = createString("homeworkName");
+
+    public final QHomeworkScoreVId id;
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath userName = createString("userName");
+
+    public QHomeworkScoreV(String variable) {
+        this(HomeworkScoreV.class, forVariable(variable), INITS);
+    }
+
+    public QHomeworkScoreV(Path<? extends HomeworkScoreV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QHomeworkScoreV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QHomeworkScoreV(PathMetadata metadata, PathInits inits) {
+        this(HomeworkScoreV.class, metadata, inits);
+    }
+
+    public QHomeworkScoreV(Class<? extends HomeworkScoreV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QHomeworkScoreVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreVId.java b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreVId.java
new file mode 100644
index 0000000..2471835
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/admin/score/model/view/QHomeworkScoreVId.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.admin.score.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QHomeworkScoreVId is a Querydsl query type for HomeworkScoreVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QHomeworkScoreVId extends BeanPath<HomeworkScoreVId> {
+
+    private static final long serialVersionUID = 1892488682L;
+
+    public static final QHomeworkScoreVId homeworkScoreVId = new QHomeworkScoreVId("homeworkScoreVId");
+
+    public final StringPath homeworkId = createString("homeworkId");
+
+    public final StringPath userId = createString("userId");
+
+    public QHomeworkScoreVId(String variable) {
+        super(HomeworkScoreVId.class, forVariable(variable));
+    }
+
+    public QHomeworkScoreVId(Path<? extends HomeworkScoreVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QHomeworkScoreVId(PathMetadata metadata) {
+        super(HomeworkScoreVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/base/model/QUserCipher.java b/target/generated-sources/java/com/qxueyou/scc/base/model/QUserCipher.java
new file mode 100644
index 0000000..3574960
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/base/model/QUserCipher.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.base.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserCipher is a Querydsl query type for UserCipher
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserCipher extends EntityPathBase<UserCipher> {
+
+    private static final long serialVersionUID = 1049953738L;
+
+    public static final QUserCipher userCipher = new QUserCipher("userCipher");
+
+    public final StringPath aesKey = createString("aesKey");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath modulus = createString("modulus");
+
+    public final StringPath privateExponent = createString("privateExponent");
+
+    public final StringPath publicExponent = createString("publicExponent");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QUserCipher(String variable) {
+        super(UserCipher.class, forVariable(variable));
+    }
+
+    public QUserCipher(Path<? extends UserCipher> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserCipher(PathMetadata metadata) {
+        super(UserCipher.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/base/model/QWbCacheKey.java b/target/generated-sources/java/com/qxueyou/scc/base/model/QWbCacheKey.java
new file mode 100644
index 0000000..d475970
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/base/model/QWbCacheKey.java
@@ -0,0 +1,49 @@
+package com.qxueyou.scc.base.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QWbCacheKey is a Querydsl query type for WbCacheKey
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QWbCacheKey extends EntityPathBase<WbCacheKey> {
+
+    private static final long serialVersionUID = 905065340L;
+
+    public static final QWbCacheKey wbCacheKey = new QWbCacheKey("wbCacheKey");
+
+    public final StringPath cacheKey = createString("cacheKey");
+
+    public final StringPath cacheKeyId = createString("cacheKeyId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final NumberPath<Integer> objectType = createNumber("objectType", Integer.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public QWbCacheKey(String variable) {
+        super(WbCacheKey.class, forVariable(variable));
+    }
+
+    public QWbCacheKey(Path<? extends WbCacheKey> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QWbCacheKey(PathMetadata metadata) {
+        super(WbCacheKey.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchClassRe.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchClassRe.java
new file mode 100644
index 0000000..bd751b3
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchClassRe.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamBatchClassRe is a Querydsl query type for ExamBatchClassRe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamBatchClassRe extends EntityPathBase<ExamBatchClassRe> {
+
+    private static final long serialVersionUID = -685966602L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamBatchClassRe examBatchClassRe = new QExamBatchClassRe("examBatchClassRe");
+
+    public final com.qxueyou.scc.admin.classes.model.QClsClass classes;
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath className = createString("className");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examBatchId = createString("examBatchId");
+
+    public final QExamBatchInfo examBatchInfo;
+
+    public final StringPath examClassReId = createString("examClassReId");
+
+    public final StringPath examId = createString("examId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamBatchClassRe(String variable) {
+        this(ExamBatchClassRe.class, forVariable(variable), INITS);
+    }
+
+    public QExamBatchClassRe(Path<? extends ExamBatchClassRe> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamBatchClassRe(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamBatchClassRe(PathMetadata metadata, PathInits inits) {
+        this(ExamBatchClassRe.class, metadata, inits);
+    }
+
+    public QExamBatchClassRe(Class<? extends ExamBatchClassRe> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.classes = inits.isInitialized("classes") ? new com.qxueyou.scc.admin.classes.model.QClsClass(forProperty("classes")) : null;
+        this.examBatchInfo = inits.isInitialized("examBatchInfo") ? new QExamBatchInfo(forProperty("examBatchInfo"), inits.get("examBatchInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchInfo.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchInfo.java
new file mode 100644
index 0000000..a5de8e7
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamBatchInfo.java
@@ -0,0 +1,83 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamBatchInfo is a Querydsl query type for ExamBatchInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamBatchInfo extends EntityPathBase<ExamBatchInfo> {
+
+    private static final long serialVersionUID = 1793632099L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamBatchInfo examBatchInfo = new QExamBatchInfo("examBatchInfo");
+
+    public final NumberPath<Short> batchStatus = createNumber("batchStatus", Short.class);
+
+    public final StringPath classRoomID = createString("classRoomID");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath examBatchId = createString("examBatchId");
+
+    public final NumberPath<Short> examBatchNo = createNumber("examBatchNo", Short.class);
+
+    public final StringPath examId = createString("examId");
+
+    public final QExamInfo examInfo;
+
+    public final StringPath examRoomID = createString("examRoomID");
+
+    public final StringPath examRoomName = createString("examRoomName");
+
+    public final ListPath<ExamBatchClassRe, QExamBatchClassRe> reClasses = this.<ExamBatchClassRe, QExamBatchClassRe>createList("reClasses", ExamBatchClassRe.class, QExamBatchClassRe.class, PathInits.DIRECT2);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamBatchInfo(String variable) {
+        this(ExamBatchInfo.class, forVariable(variable), INITS);
+    }
+
+    public QExamBatchInfo(Path<? extends ExamBatchInfo> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamBatchInfo(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamBatchInfo(PathMetadata metadata, PathInits inits) {
+        this(ExamBatchInfo.class, metadata, inits);
+    }
+
+    public QExamBatchInfo(Class<? extends ExamBatchInfo> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.examInfo = inits.isInitialized("examInfo") ? new QExamInfo(forProperty("examInfo"), inits.get("examInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamInfo.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamInfo.java
new file mode 100644
index 0000000..24943a5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamInfo.java
@@ -0,0 +1,99 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamInfo is a Querydsl query type for ExamInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamInfo extends EntityPathBase<ExamInfo> {
+
+    private static final long serialVersionUID = -1126714509L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamInfo examInfo = new QExamInfo("examInfo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> durationMin = createNumber("durationMin", Short.class);
+
+    public final ListPath<ExamBatchInfo, QExamBatchInfo> examBatchInfos = this.<ExamBatchInfo, QExamBatchInfo>createList("examBatchInfos", ExamBatchInfo.class, QExamBatchInfo.class, PathInits.DIRECT2);
+
+    public final StringPath examId = createString("examId");
+
+    public final StringPath examName = createString("examName");
+
+    public final NumberPath<Short> examStatus = createNumber("examStatus", Short.class);
+
+    public final NumberPath<Short> examType = createNumber("examType", Short.class);
+
+    public final ListPath<com.qxueyou.scc.exercise.model.ExerciseItemSet, com.qxueyou.scc.exercise.model.QExerciseItemSet> exerciseItemSets = this.<com.qxueyou.scc.exercise.model.ExerciseItemSet, com.qxueyou.scc.exercise.model.QExerciseItemSet>createList("exerciseItemSets", com.qxueyou.scc.exercise.model.ExerciseItemSet.class, com.qxueyou.scc.exercise.model.QExerciseItemSet.class, PathInits.DIRECT2);
+
+    public final NumberPath<Short> maxLateMin = createNumber("maxLateMin", Short.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<Float> passingScore = createNumber("passingScore", Float.class);
+
+    public final ListPath<ExamReExamPaper, QExamReExamPaper> reExamPapers = this.<ExamReExamPaper, QExamReExamPaper>createList("reExamPapers", ExamReExamPaper.class, QExamReExamPaper.class, PathInits.DIRECT2);
+
+    public final NumberPath<Short> showAnalyse = createNumber("showAnalyse", Short.class);
+
+    public final NumberPath<Short> showCorrectAnswer = createNumber("showCorrectAnswer", Short.class);
+
+    public final NumberPath<Short> showScore = createNumber("showScore", Short.class);
+
+    public final NumberPath<Integer> showScoreTime = createNumber("showScoreTime", Integer.class);
+
+    public final NumberPath<Short> showType = createNumber("showType", Short.class);
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final NumberPath<Float> totalScore = createNumber("totalScore", Float.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamInfo(String variable) {
+        this(ExamInfo.class, forVariable(variable), INITS);
+    }
+
+    public QExamInfo(Path<? extends ExamInfo> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamInfo(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamInfo(PathMetadata metadata, PathInits inits) {
+        this(ExamInfo.class, metadata, inits);
+    }
+
+    public QExamInfo(Class<? extends ExamInfo> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemV.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemV.java
new file mode 100644
index 0000000..61c04ab
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemV.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamItemV is a Querydsl query type for ExamItemV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamItemV extends EntityPathBase<ExamItemV> {
+
+    private static final long serialVersionUID = -568233602L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamItemV examItemV = new QExamItemV("examItemV");
+
+    public final StringPath groupName = createString("groupName");
+
+    public final QExamItemVId id;
+
+    public final StringPath itemAnswer = createString("itemAnswer");
+
+    public final StringPath itemOrder = createString("itemOrder");
+
+    public final NumberPath<Float> itemScore = createNumber("itemScore", Float.class);
+
+    public final NumberPath<Short> itemType = createNumber("itemType", Short.class);
+
+    public QExamItemV(String variable) {
+        this(ExamItemV.class, forVariable(variable), INITS);
+    }
+
+    public QExamItemV(Path<? extends ExamItemV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamItemV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamItemV(PathMetadata metadata, PathInits inits) {
+        this(ExamItemV.class, metadata, inits);
+    }
+
+    public QExamItemV(Class<? extends ExamItemV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QExamItemVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemVId.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemVId.java
new file mode 100644
index 0000000..ff56065
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamItemVId.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExamItemVId is a Querydsl query type for ExamItemVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QExamItemVId extends BeanPath<ExamItemVId> {
+
+    private static final long serialVersionUID = -611642567L;
+
+    public static final QExamItemVId examItemVId = new QExamItemVId("examItemVId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath groupId = createString("groupId");
+
+    public QExamItemVId(String variable) {
+        super(ExamItemVId.class, forVariable(variable));
+    }
+
+    public QExamItemVId(Path<? extends ExamItemVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExamItemVId(PathMetadata metadata) {
+        super(ExamItemVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperInfo.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperInfo.java
new file mode 100644
index 0000000..4257579
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperInfo.java
@@ -0,0 +1,68 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamPaperInfo is a Querydsl query type for ExamPaperInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamPaperInfo extends EntityPathBase<ExamPaperInfo> {
+
+    private static final long serialVersionUID = -1224447819L;
+
+    public static final QExamPaperInfo examPaperInfo = new QExamPaperInfo("examPaperInfo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> difficultLevel = createNumber("difficultLevel", Short.class);
+
+    public final StringPath examPaperId = createString("examPaperId");
+
+    public final StringPath examPaperName = createString("examPaperName");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<Short> paperStatus = createNumber("paperStatus", Short.class);
+
+    public final ListPath<ExamReExamPaper, QExamReExamPaper> reExamPapers = this.<ExamReExamPaper, QExamReExamPaper>createList("reExamPapers", ExamReExamPaper.class, QExamReExamPaper.class, PathInits.DIRECT2);
+
+    public final ListPath<ExamPaperSectionInfo, QExamPaperSectionInfo> sectionInfos = this.<ExamPaperSectionInfo, QExamPaperSectionInfo>createList("sectionInfos", ExamPaperSectionInfo.class, QExamPaperSectionInfo.class, PathInits.DIRECT2);
+
+    public final NumberPath<Short> totalScore = createNumber("totalScore", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamPaperInfo(String variable) {
+        super(ExamPaperInfo.class, forVariable(variable));
+    }
+
+    public QExamPaperInfo(Path<? extends ExamPaperInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExamPaperInfo(PathMetadata metadata) {
+        super(ExamPaperInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperSectionInfo.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperSectionInfo.java
new file mode 100644
index 0000000..84d3035
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamPaperSectionInfo.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamPaperSectionInfo is a Querydsl query type for ExamPaperSectionInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamPaperSectionInfo extends EntityPathBase<ExamPaperSectionInfo> {
+
+    private static final long serialVersionUID = 65475404L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamPaperSectionInfo examPaperSectionInfo = new QExamPaperSectionInfo("examPaperSectionInfo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examPaperId = createString("examPaperId");
+
+    public final QExamPaperInfo examPaperInfo;
+
+    public final StringPath groupId = createString("groupId");
+
+    public final NumberPath<Short> itemEndOrder = createNumber("itemEndOrder", Short.class);
+
+    public final NumberPath<Short> itemStartOrder = createNumber("itemStartOrder", Short.class);
+
+    public final StringPath sectionDesc = createString("sectionDesc");
+
+    public final StringPath sectionId = createString("sectionId");
+
+    public final StringPath sectionName = createString("sectionName");
+
+    public final NumberPath<Integer> sectionOrder = createNumber("sectionOrder", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamPaperSectionInfo(String variable) {
+        this(ExamPaperSectionInfo.class, forVariable(variable), INITS);
+    }
+
+    public QExamPaperSectionInfo(Path<? extends ExamPaperSectionInfo> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamPaperSectionInfo(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamPaperSectionInfo(PathMetadata metadata, PathInits inits) {
+        this(ExamPaperSectionInfo.class, metadata, inits);
+    }
+
+    public QExamPaperSectionInfo(Class<? extends ExamPaperSectionInfo> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.examPaperInfo = inits.isInitialized("examPaperInfo") ? new QExamPaperInfo(forProperty("examPaperInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamReExamPaper.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamReExamPaper.java
new file mode 100644
index 0000000..57fa728
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamReExamPaper.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamReExamPaper is a Querydsl query type for ExamReExamPaper
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamReExamPaper extends EntityPathBase<ExamReExamPaper> {
+
+    private static final long serialVersionUID = -1993377451L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamReExamPaper examReExamPaper = new QExamReExamPaper("examReExamPaper");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examId = createString("examId");
+
+    public final QExamInfo examInfo;
+
+    public final StringPath examPaperId = createString("examPaperId");
+
+    public final QExamPaperInfo examPaperInfo;
+
+    public final StringPath examPaperName = createString("examPaperName");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath relationPaperCode = createString("relationPaperCode");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExamReExamPaper(String variable) {
+        this(ExamReExamPaper.class, forVariable(variable), INITS);
+    }
+
+    public QExamReExamPaper(Path<? extends ExamReExamPaper> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamReExamPaper(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamReExamPaper(PathMetadata metadata, PathInits inits) {
+        this(ExamReExamPaper.class, metadata, inits);
+    }
+
+    public QExamReExamPaper(Class<? extends ExamReExamPaper> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.examInfo = inits.isInitialized("examInfo") ? new QExamInfo(forProperty("examInfo"), inits.get("examInfo")) : null;
+        this.examPaperInfo = inits.isInitialized("examPaperInfo") ? new QExamPaperInfo(forProperty("examPaperInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultV.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultV.java
new file mode 100644
index 0000000..65f63b0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultV.java
@@ -0,0 +1,101 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExamResultV is a Querydsl query type for ExamResultV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExamResultV extends EntityPathBase<ExamResultV> {
+
+    private static final long serialVersionUID = -1630291212L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExamResultV examResultV = new QExamResultV("examResultV");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final StringPath className = createString("className");
+
+    public final NumberPath<java.math.BigDecimal> completionRate = createNumber("completionRate", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final NumberPath<Short> examBatchNo = createNumber("examBatchNo", Short.class);
+
+    public final StringPath examId = createString("examId");
+
+    public final StringPath examName = createString("examName");
+
+    public final NumberPath<Short> examStatus = createNumber("examStatus", Short.class);
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final QExamResultVId id;
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath paperCode = createString("paperCode");
+
+    public final StringPath paperName = createString("paperName");
+
+    public final NumberPath<java.math.BigDecimal> passingScore = createNumber("passingScore", java.math.BigDecimal.class);
+
+    public final StringPath recordId = createString("recordId");
+
+    public final NumberPath<Integer> remainingSeconds = createNumber("remainingSeconds", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final NumberPath<Short> sex = createNumber("sex", Short.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath studentName = createString("studentName");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final NumberPath<Float> totalScore = createNumber("totalScore", Float.class);
+
+    public final StringPath userId = createString("userId");
+
+    public QExamResultV(String variable) {
+        this(ExamResultV.class, forVariable(variable), INITS);
+    }
+
+    public QExamResultV(Path<? extends ExamResultV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExamResultV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExamResultV(PathMetadata metadata, PathInits inits) {
+        this(ExamResultV.class, metadata, inits);
+    }
+
+    public QExamResultV(Class<? extends ExamResultV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QExamResultVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultVId.java b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultVId.java
new file mode 100644
index 0000000..475ee53
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exam/model/QExamResultVId.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.exam.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExamResultVId is a Querydsl query type for ExamResultVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QExamResultVId extends BeanPath<ExamResultVId> {
+
+    private static final long serialVersionUID = 953210671L;
+
+    public static final QExamResultVId examResultVId = new QExamResultVId("examResultVId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath examBatchId = createString("examBatchId");
+
+    public final StringPath studentNo = createString("studentNo");
+
+    public QExamResultVId(String variable) {
+        super(ExamResultVId.class, forVariable(variable));
+    }
+
+    public QExamResultVId(Path<? extends ExamResultVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExamResultVId(PathMetadata metadata) {
+        super(ExamResultVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseChapter.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseChapter.java
new file mode 100644
index 0000000..8bb74cb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseChapter.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseChapter is a Querydsl query type for ExerciseChapter
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseChapter extends EntityPathBase<ExerciseChapter> {
+
+    private static final long serialVersionUID = 2062062728L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseChapter exerciseChapter = new QExerciseChapter("exerciseChapter");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final com.qxueyou.scc.school.model.QSchClassSchedule classSchedules;
+
+    public final StringPath classSubjectId = createString("classSubjectId");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final ListPath<ExerciseItem, QExerciseItem> exerciseItems = this.<ExerciseItem, QExerciseItem>createList("exerciseItems", ExerciseItem.class, QExerciseItem.class, PathInits.DIRECT2);
+
+    public final StringPath parentChapterId = createString("parentChapterId");
+
+    public final StringPath title = createString("title");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseChapter(String variable) {
+        this(ExerciseChapter.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseChapter(Path<? extends ExerciseChapter> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseChapter(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseChapter(PathMetadata metadata, PathInits inits) {
+        this(ExerciseChapter.class, metadata, inits);
+    }
+
+    public QExerciseChapter(Class<? extends ExerciseChapter> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.classSchedules = inits.isInitialized("classSchedules") ? new com.qxueyou.scc.school.model.QSchClassSchedule(forProperty("classSchedules"), inits.get("classSchedules")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCompleteInfo.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCompleteInfo.java
new file mode 100644
index 0000000..450b937
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCompleteInfo.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseCompleteInfo is a Querydsl query type for ExerciseCompleteInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseCompleteInfo extends EntityPathBase<ExerciseCompleteInfo> {
+
+    private static final long serialVersionUID = -617899476L;
+
+    public static final QExerciseCompleteInfo exerciseCompleteInfo = new QExerciseCompleteInfo("exerciseCompleteInfo");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath className = createString("className");
+
+    public final NumberPath<Short> completeStatus = createNumber("completeStatus", Short.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseCompleteId = createString("exerciseCompleteId");
+
+    public final StringPath exerciseInfoId = createString("exerciseInfoId");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath filePath = createString("filePath");
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath studentNo = createString("studentNo");
+
+    public final NumberPath<java.math.BigDecimal> studentScore = createNumber("studentScore", java.math.BigDecimal.class);
+
+    public final StringPath studentUserId = createString("studentUserId");
+
+    public final StringPath studentUserName = createString("studentUserName");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final StringPath targetObjectId = createString("targetObjectId");
+
+    public final StringPath teacherComment = createString("teacherComment");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath uploadDesc = createString("uploadDesc");
+
+    public QExerciseCompleteInfo(String variable) {
+        super(ExerciseCompleteInfo.class, forVariable(variable));
+    }
+
+    public QExerciseCompleteInfo(Path<? extends ExerciseCompleteInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseCompleteInfo(PathMetadata metadata) {
+        super(ExerciseCompleteInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrection.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrection.java
new file mode 100644
index 0000000..95857df
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrection.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseCorrection is a Querydsl query type for ExerciseCorrection
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseCorrection extends EntityPathBase<ExerciseCorrection> {
+
+    private static final long serialVersionUID = 1133107523L;
+
+    public static final QExerciseCorrection exerciseCorrection = new QExerciseCorrection("exerciseCorrection");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final NumberPath<Short> dealStatus = createNumber("dealStatus", Short.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath errorTypeId = createString("errorTypeId");
+
+    public final StringPath errorTypeName = createString("errorTypeName");
+
+    public final StringPath exerciseCorrectionId = createString("exerciseCorrectionId");
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final StringPath exerciseGroupName = createString("exerciseGroupName");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath exerciseItemOrder = createString("exerciseItemOrder");
+
+    public final StringPath remark = createString("remark");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final StringPath submitUserId = createString("submitUserId");
+
+    public final StringPath submitUserName = createString("submitUserName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseCorrection(String variable) {
+        super(ExerciseCorrection.class, forVariable(variable));
+    }
+
+    public QExerciseCorrection(Path<? extends ExerciseCorrection> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseCorrection(PathMetadata metadata) {
+        super(ExerciseCorrection.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrectionImg.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrectionImg.java
new file mode 100644
index 0000000..38957ee
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseCorrectionImg.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseCorrectionImg is a Querydsl query type for ExerciseCorrectionImg
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseCorrectionImg extends EntityPathBase<ExerciseCorrectionImg> {
+
+    private static final long serialVersionUID = -2036655232L;
+
+    public static final QExerciseCorrectionImg exerciseCorrectionImg = new QExerciseCorrectionImg("exerciseCorrectionImg");
+
+    public final StringPath correctionImgId = createString("correctionImgId");
+
+    public final StringPath exercisecorrectionId = createString("exercisecorrectionId");
+
+    public final StringPath imgOrper = createString("imgOrper");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public QExerciseCorrectionImg(String variable) {
+        super(ExerciseCorrectionImg.class, forVariable(variable));
+    }
+
+    public QExerciseCorrectionImg(Path<? extends ExerciseCorrectionImg> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseCorrectionImg(PathMetadata metadata) {
+        super(ExerciseCorrectionImg.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDataSubmitLog.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDataSubmitLog.java
new file mode 100644
index 0000000..dc7df1f
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDataSubmitLog.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseDataSubmitLog is a Querydsl query type for ExerciseDataSubmitLog
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseDataSubmitLog extends EntityPathBase<ExerciseDataSubmitLog> {
+
+    private static final long serialVersionUID = 698794877L;
+
+    public static final QExerciseDataSubmitLog exerciseDataSubmitLog = new QExerciseDataSubmitLog("exerciseDataSubmitLog");
+
+    public final StringPath data = createString("data");
+
+    public final StringPath exerciseBussinessId = createString("exerciseBussinessId");
+
+    public final StringPath exerciseDataLogId = createString("exerciseDataLogId");
+
+    public final NumberPath<Integer> status = createNumber("status", Integer.class);
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QExerciseDataSubmitLog(String variable) {
+        super(ExerciseDataSubmitLog.class, forVariable(variable));
+    }
+
+    public QExerciseDataSubmitLog(Path<? extends ExerciseDataSubmitLog> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseDataSubmitLog(PathMetadata metadata) {
+        super(ExerciseDataSubmitLog.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDeepAnalysis.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDeepAnalysis.java
new file mode 100644
index 0000000..4a2d688
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseDeepAnalysis.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseDeepAnalysis is a Querydsl query type for ExerciseDeepAnalysis
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseDeepAnalysis extends EntityPathBase<ExerciseDeepAnalysis> {
+
+    private static final long serialVersionUID = -1191920499L;
+
+    public static final QExerciseDeepAnalysis exerciseDeepAnalysis = new QExerciseDeepAnalysis("exerciseDeepAnalysis");
+
+    public final StringPath chargerId = createString("chargerId");
+
+    public final StringPath chargerName = createString("chargerName");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath className = createString("className");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath deepAnalysisId = createString("deepAnalysisId");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath docPath = createString("docPath");
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final StringPath exerciseGroupName = createString("exerciseGroupName");
+
+    public final DateTimePath<java.util.Date> handleTime = createDateTime("handleTime", java.util.Date.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgName = createString("orgName");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userAccount = createString("userAccount");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseDeepAnalysis(String variable) {
+        super(ExerciseDeepAnalysis.class, forVariable(variable));
+    }
+
+    public QExerciseDeepAnalysis(Path<? extends ExerciseDeepAnalysis> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseDeepAnalysis(PathMetadata metadata) {
+        super(ExerciseDeepAnalysis.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamItemType.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamItemType.java
new file mode 100644
index 0000000..a7432af
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamItemType.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseExamItemType is a Querydsl query type for ExerciseExamItemType
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseExamItemType extends EntityPathBase<ExerciseExamItemType> {
+
+    private static final long serialVersionUID = -1024713007L;
+
+    public static final QExerciseExamItemType exerciseExamItemType = new QExerciseExamItemType("exerciseExamItemType");
+
+    public final NumberPath<Double> blankScore = createNumber("blankScore", Double.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examId = createString("examId");
+
+    public final NumberPath<Double> halfRightScore = createNumber("halfRightScore", Double.class);
+
+    public final NumberPath<Integer> itemCount = createNumber("itemCount", Integer.class);
+
+    public final NumberPath<Short> itemType = createNumber("itemType", Short.class);
+
+    public final NumberPath<Double> rightScore = createNumber("rightScore", Double.class);
+
+    public final StringPath typeId = createString("typeId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<Double> wrongScore = createNumber("wrongScore", Double.class);
+
+    public QExerciseExamItemType(String variable) {
+        super(ExerciseExamItemType.class, forVariable(variable));
+    }
+
+    public QExerciseExamItemType(Path<? extends ExerciseExamItemType> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseExamItemType(PathMetadata metadata) {
+        super(ExerciseExamItemType.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReClass.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReClass.java
new file mode 100644
index 0000000..3c17263
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReClass.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseExamReClass is a Querydsl query type for ExerciseExamReClass
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseExamReClass extends EntityPathBase<ExerciseExamReClass> {
+
+    private static final long serialVersionUID = 566256801L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseExamReClass exerciseExamReClass = new QExerciseExamReClass("exerciseExamReClass");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examId = createString("examId");
+
+    public final QExerciseInfo exerciseInfo;
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath reId = createString("reId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseExamReClass(String variable) {
+        this(ExerciseExamReClass.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseExamReClass(Path<? extends ExerciseExamReClass> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseExamReClass(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseExamReClass(PathMetadata metadata, PathInits inits) {
+        this(ExerciseExamReClass.class, metadata, inits);
+    }
+
+    public QExerciseExamReClass(Class<? extends ExerciseExamReClass> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseInfo = inits.isInitialized("exerciseInfo") ? new QExerciseInfo(forProperty("exerciseInfo"), inits.get("exerciseInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReGroup.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReGroup.java
new file mode 100644
index 0000000..1b13716
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseExamReGroup.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseExamReGroup is a Querydsl query type for ExerciseExamReGroup
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseExamReGroup extends EntityPathBase<ExerciseExamReGroup> {
+
+    private static final long serialVersionUID = 570143144L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseExamReGroup exerciseExamReGroup = new QExerciseExamReGroup("exerciseExamReGroup");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath examId = createString("examId");
+
+    public final StringPath examType = createString("examType");
+
+    public final QExerciseInfo exerciseInfo;
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath reId = createString("reId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseExamReGroup(String variable) {
+        this(ExerciseExamReGroup.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseExamReGroup(Path<? extends ExerciseExamReGroup> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseExamReGroup(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseExamReGroup(PathMetadata metadata, PathInits inits) {
+        this(ExerciseExamReGroup.class, metadata, inits);
+    }
+
+    public QExerciseExamReGroup(Class<? extends ExerciseExamReGroup> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseInfo = inits.isInitialized("exerciseInfo") ? new QExerciseInfo(forProperty("exerciseInfo"), inits.get("exerciseInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFault.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFault.java
new file mode 100644
index 0000000..0d21787
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFault.java
@@ -0,0 +1,80 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFault is a Querydsl query type for ExerciseFault
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFault extends EntityPathBase<ExerciseFault> {
+
+    private static final long serialVersionUID = 599139613L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseFault exerciseFault = new QExerciseFault("exerciseFault");
+
+    public final StringPath answer = createString("answer");
+
+    public final NumberPath<Byte> correct = createNumber("correct", Byte.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseFaultId = createString("exerciseFaultId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final QExerciseFaultBook faultBook;
+
+    public final QExerciseFaultRecord faultRecord;
+
+    public final StringPath faultRecordId = createString("faultRecordId");
+
+    public final NumberPath<Byte> repeatFlag = createNumber("repeatFlag", Byte.class);
+
+    public final StringPath resumeBookId = createString("resumeBookId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseFault(String variable) {
+        this(ExerciseFault.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseFault(Path<? extends ExerciseFault> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseFault(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseFault(PathMetadata metadata, PathInits inits) {
+        this(ExerciseFault.class, metadata, inits);
+    }
+
+    public QExerciseFault(Class<? extends ExerciseFault> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.faultBook = inits.isInitialized("faultBook") ? new QExerciseFaultBook(forProperty("faultBook")) : null;
+        this.faultRecord = inits.isInitialized("faultRecord") ? new QExerciseFaultRecord(forProperty("faultRecord"), inits.get("faultRecord")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultBook.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultBook.java
new file mode 100644
index 0000000..687ab30
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultBook.java
@@ -0,0 +1,88 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFaultBook is a Querydsl query type for ExerciseFaultBook
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFaultBook extends EntityPathBase<ExerciseFaultBook> {
+
+    private static final long serialVersionUID = 1674837414L;
+
+    public static final QExerciseFaultBook exerciseFaultBook = new QExerciseFaultBook("exerciseFaultBook");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> allCount = createNumber("allCount", java.math.BigInteger.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final NumberPath<java.math.BigDecimal> completionRate = createNumber("completionRate", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final ListPath<ExerciseFaultHis, QExerciseFaultHis> faultHis = this.<ExerciseFaultHis, QExerciseFaultHis>createList("faultHis", ExerciseFaultHis.class, QExerciseFaultHis.class, PathInits.DIRECT2);
+
+    public final ListPath<ExerciseFaultRecord, QExerciseFaultRecord> faultRecords = this.<ExerciseFaultRecord, QExerciseFaultRecord>createList("faultRecords", ExerciseFaultRecord.class, QExerciseFaultRecord.class, PathInits.DIRECT2);
+
+    public final ListPath<ExerciseFault, QExerciseFault> faults = this.<ExerciseFault, QExerciseFault>createList("faults", ExerciseFault.class, QExerciseFault.class, PathInits.DIRECT2);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath parentId = createString("parentId");
+
+    public final StringPath resumeBookId = createString("resumeBookId");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath titleMaxNumber = createString("titleMaxNumber");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseFaultBook(String variable) {
+        super(ExerciseFaultBook.class, forVariable(variable));
+    }
+
+    public QExerciseFaultBook(Path<? extends ExerciseFaultBook> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseFaultBook(PathMetadata metadata) {
+        super(ExerciseFaultBook.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultHis.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultHis.java
new file mode 100644
index 0000000..25a4cb5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultHis.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFaultHis is a Querydsl query type for ExerciseFaultHis
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFaultHis extends EntityPathBase<ExerciseFaultHis> {
+
+    private static final long serialVersionUID = -915798731L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseFaultHis exerciseFaultHis = new QExerciseFaultHis("exerciseFaultHis");
+
+    public final StringPath answer = createString("answer");
+
+    public final NumberPath<Byte> correct = createNumber("correct", Byte.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseFaultHisId = createString("exerciseFaultHisId");
+
+    public final StringPath exerciseFaultId = createString("exerciseFaultId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final QExerciseFaultBook faultBook;
+
+    public final StringPath faultRecordId = createString("faultRecordId");
+
+    public final StringPath resumeBookId = createString("resumeBookId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseFaultHis(String variable) {
+        this(ExerciseFaultHis.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseFaultHis(Path<? extends ExerciseFaultHis> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseFaultHis(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseFaultHis(PathMetadata metadata, PathInits inits) {
+        this(ExerciseFaultHis.class, metadata, inits);
+    }
+
+    public QExerciseFaultHis(Class<? extends ExerciseFaultHis> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.faultBook = inits.isInitialized("faultBook") ? new QExerciseFaultBook(forProperty("faultBook")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultRecord.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultRecord.java
new file mode 100644
index 0000000..2ac1337
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultRecord.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFaultRecord is a Querydsl query type for ExerciseFaultRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFaultRecord extends EntityPathBase<ExerciseFaultRecord> {
+
+    private static final long serialVersionUID = -645499954L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseFaultRecord exerciseFaultRecord = new QExerciseFaultRecord("exerciseFaultRecord");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> allCount = createNumber("allCount", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> answerUpdateTime = createDateTime("answerUpdateTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigDecimal> completionRate = createNumber("completionRate", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final NumberPath<Short> exerciseGroupType = createNumber("exerciseGroupType", Short.class);
+
+    public final QExerciseFaultBook faultBook;
+
+    public final StringPath faultRecordId = createString("faultRecordId");
+
+    public final ListPath<ExerciseFault, QExerciseFault> faults = this.<ExerciseFault, QExerciseFault>createList("faults", ExerciseFault.class, QExerciseFault.class, PathInits.DIRECT2);
+
+    public final StringPath resumeBookId = createString("resumeBookId");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath titleMaxNumber = createString("titleMaxNumber");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseFaultRecord(String variable) {
+        this(ExerciseFaultRecord.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseFaultRecord(Path<? extends ExerciseFaultRecord> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseFaultRecord(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseFaultRecord(PathMetadata metadata, PathInits inits) {
+        this(ExerciseFaultRecord.class, metadata, inits);
+    }
+
+    public QExerciseFaultRecord(Class<? extends ExerciseFaultRecord> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.faultBook = inits.isInitialized("faultBook") ? new QExerciseFaultBook(forProperty("faultBook")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultStatistics.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultStatistics.java
new file mode 100644
index 0000000..8fc0d0c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFaultStatistics.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseFaultStatistics is a Querydsl query type for ExerciseFaultStatistics
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFaultStatistics extends EntityPathBase<ExerciseFaultStatistics> {
+
+    private static final long serialVersionUID = -719146464L;
+
+    public static final QExerciseFaultStatistics exerciseFaultStatistics = new QExerciseFaultStatistics("exerciseFaultStatistics");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> exerciseTime = createDateTime("exerciseTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigInteger> faultCount = createNumber("faultCount", java.math.BigInteger.class);
+
+    public final NumberPath<java.math.BigDecimal> faultRate = createNumber("faultRate", java.math.BigDecimal.class);
+
+    public final StringPath faultStatisticsId = createString("faultStatisticsId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseFaultStatistics(String variable) {
+        super(ExerciseFaultStatistics.class, forVariable(variable));
+    }
+
+    public QExerciseFaultStatistics(Path<? extends ExerciseFaultStatistics> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseFaultStatistics(PathMetadata metadata) {
+        super(ExerciseFaultStatistics.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavorite.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavorite.java
new file mode 100644
index 0000000..e59cd33
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavorite.java
@@ -0,0 +1,78 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFavorite is a Querydsl query type for ExerciseFavorite
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFavorite extends EntityPathBase<ExerciseFavorite> {
+
+    private static final long serialVersionUID = -884426559L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseFavorite exerciseFavorite = new QExerciseFavorite("exerciseFavorite");
+
+    public final StringPath answer = createString("answer");
+
+    public final NumberPath<Byte> correct = createNumber("correct", Byte.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseFavoriteId = createString("exerciseFavoriteId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final QExerciseFavoriteBook favorBook;
+
+    public final StringPath favoriteBookId = createString("favoriteBookId");
+
+    public final StringPath favoriteRecordId = createString("favoriteRecordId");
+
+    public final QExerciseFavoriteRecord favorRecord;
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseFavorite(String variable) {
+        this(ExerciseFavorite.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseFavorite(Path<? extends ExerciseFavorite> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseFavorite(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseFavorite(PathMetadata metadata, PathInits inits) {
+        this(ExerciseFavorite.class, metadata, inits);
+    }
+
+    public QExerciseFavorite(Class<? extends ExerciseFavorite> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.favorBook = inits.isInitialized("favorBook") ? new QExerciseFavoriteBook(forProperty("favorBook")) : null;
+        this.favorRecord = inits.isInitialized("favorRecord") ? new QExerciseFavoriteRecord(forProperty("favorRecord"), inits.get("favorRecord")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteBook.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteBook.java
new file mode 100644
index 0000000..4317acb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteBook.java
@@ -0,0 +1,88 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFavoriteBook is a Querydsl query type for ExerciseFavoriteBook
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFavoriteBook extends EntityPathBase<ExerciseFavoriteBook> {
+
+    private static final long serialVersionUID = 317464394L;
+
+    public static final QExerciseFavoriteBook exerciseFavoriteBook = new QExerciseFavoriteBook("exerciseFavoriteBook");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> allCount = createNumber("allCount", java.math.BigInteger.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final NumberPath<java.math.BigDecimal> completionRate = createNumber("completionRate", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final ListPath<ExerciseFavoriteHis, QExerciseFavoriteHis> favorHis = this.<ExerciseFavoriteHis, QExerciseFavoriteHis>createList("favorHis", ExerciseFavoriteHis.class, QExerciseFavoriteHis.class, PathInits.DIRECT2);
+
+    public final StringPath favoriteBookId = createString("favoriteBookId");
+
+    public final ListPath<ExerciseFavoriteRecord, QExerciseFavoriteRecord> favorRecords = this.<ExerciseFavoriteRecord, QExerciseFavoriteRecord>createList("favorRecords", ExerciseFavoriteRecord.class, QExerciseFavoriteRecord.class, PathInits.DIRECT2);
+
+    public final ListPath<ExerciseFavorite, QExerciseFavorite> favors = this.<ExerciseFavorite, QExerciseFavorite>createList("favors", ExerciseFavorite.class, QExerciseFavorite.class, PathInits.DIRECT2);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath parentId = createString("parentId");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath titleMaxNumber = createString("titleMaxNumber");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseFavoriteBook(String variable) {
+        super(ExerciseFavoriteBook.class, forVariable(variable));
+    }
+
+    public QExerciseFavoriteBook(Path<? extends ExerciseFavoriteBook> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseFavoriteBook(PathMetadata metadata) {
+        super(ExerciseFavoriteBook.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteHis.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteHis.java
new file mode 100644
index 0000000..a5ab810
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteHis.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFavoriteHis is a Querydsl query type for ExerciseFavoriteHis
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFavoriteHis extends EntityPathBase<ExerciseFavoriteHis> {
+
+    private static final long serialVersionUID = 1672814353L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseFavoriteHis exerciseFavoriteHis = new QExerciseFavoriteHis("exerciseFavoriteHis");
+
+    public final StringPath answer = createString("answer");
+
+    public final NumberPath<Byte> correct = createNumber("correct", Byte.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseFavoriteHisId = createString("exerciseFavoriteHisId");
+
+    public final StringPath exerciseFavoriteId = createString("exerciseFavoriteId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final QExerciseFavoriteBook favorBook;
+
+    public final StringPath favoriteBookId = createString("favoriteBookId");
+
+    public final StringPath favoriteRecordId = createString("favoriteRecordId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseFavoriteHis(String variable) {
+        this(ExerciseFavoriteHis.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseFavoriteHis(Path<? extends ExerciseFavoriteHis> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseFavoriteHis(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseFavoriteHis(PathMetadata metadata, PathInits inits) {
+        this(ExerciseFavoriteHis.class, metadata, inits);
+    }
+
+    public QExerciseFavoriteHis(Class<? extends ExerciseFavoriteHis> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.favorBook = inits.isInitialized("favorBook") ? new QExerciseFavoriteBook(forProperty("favorBook")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteRecord.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteRecord.java
new file mode 100644
index 0000000..53e2289
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseFavoriteRecord.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseFavoriteRecord is a Querydsl query type for ExerciseFavoriteRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseFavoriteRecord extends EntityPathBase<ExerciseFavoriteRecord> {
+
+    private static final long serialVersionUID = 589085810L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseFavoriteRecord exerciseFavoriteRecord = new QExerciseFavoriteRecord("exerciseFavoriteRecord");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> allCount = createNumber("allCount", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> answerUpdateTime = createDateTime("answerUpdateTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigDecimal> completionRate = createNumber("completionRate", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final NumberPath<Short> exerciseGroupType = createNumber("exerciseGroupType", Short.class);
+
+    public final QExerciseFavoriteBook favorBook;
+
+    public final StringPath favoriteBookId = createString("favoriteBookId");
+
+    public final StringPath favoriteRecordId = createString("favoriteRecordId");
+
+    public final ListPath<ExerciseFavorite, QExerciseFavorite> favors = this.<ExerciseFavorite, QExerciseFavorite>createList("favors", ExerciseFavorite.class, QExerciseFavorite.class, PathInits.DIRECT2);
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath titleMaxNumber = createString("titleMaxNumber");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseFavoriteRecord(String variable) {
+        this(ExerciseFavoriteRecord.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseFavoriteRecord(Path<? extends ExerciseFavoriteRecord> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseFavoriteRecord(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseFavoriteRecord(PathMetadata metadata, PathInits inits) {
+        this(ExerciseFavoriteRecord.class, metadata, inits);
+    }
+
+    public QExerciseFavoriteRecord(Class<? extends ExerciseFavoriteRecord> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.favorBook = inits.isInitialized("favorBook") ? new QExerciseFavoriteBook(forProperty("favorBook")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroup.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroup.java
new file mode 100644
index 0000000..92af64e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroup.java
@@ -0,0 +1,94 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseGroup is a Querydsl query type for ExerciseGroup
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseGroup extends EntityPathBase<ExerciseGroup> {
+
+    private static final long serialVersionUID = 600564090L;
+
+    public static final QExerciseGroup exerciseGroup = new QExerciseGroup("exerciseGroup");
+
+    public final NumberPath<java.math.BigInteger> allCount = createNumber("allCount", java.math.BigInteger.class);
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final NumberPath<Integer> chapterOrder = createNumber("chapterOrder", Integer.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> difficultLevel = createNumber("difficultLevel", Short.class);
+
+    public final StringPath groupId = createString("groupId");
+
+    public final NumberPath<Short> groupRange = createNumber("groupRange", Short.class);
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<java.math.BigInteger> orderNum = createNumber("orderNum", java.math.BigInteger.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath originExerciseId = createString("originExerciseId");
+
+    public final NumberPath<Integer> partOrder = createNumber("partOrder", Integer.class);
+
+    public final ListPath<ExerciseRecord, QExerciseRecord> records = this.<ExerciseRecord, QExerciseRecord>createList("records", ExerciseRecord.class, QExerciseRecord.class, PathInits.DIRECT2);
+
+    public final StringPath sourceUserId = createString("sourceUserId");
+
+    public final StringPath sourceUserName = createString("sourceUserName");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final NumberPath<Integer> subjectOrder = createNumber("subjectOrder", Integer.class);
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseGroup(String variable) {
+        super(ExerciseGroup.class, forVariable(variable));
+    }
+
+    public QExerciseGroup(Path<? extends ExerciseGroup> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseGroup(PathMetadata metadata) {
+        super(ExerciseGroup.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupExtend.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupExtend.java
new file mode 100644
index 0000000..fdfa49e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupExtend.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseGroupExtend is a Querydsl query type for ExerciseGroupExtend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseGroupExtend extends EntityPathBase<ExerciseGroupExtend> {
+
+    private static final long serialVersionUID = -337180364L;
+
+    public static final QExerciseGroupExtend exerciseGroupExtend = new QExerciseGroupExtend("exerciseGroupExtend");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final NumberPath<java.math.BigDecimal> classAccuracy = createNumber("classAccuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final StringPath exerciseMode = createString("exerciseMode");
+
+    public final StringPath exerciseSource = createString("exerciseSource");
+
+    public final StringPath exerciseStrategy = createString("exerciseStrategy");
+
+    public final StringPath exerciseTime = createString("exerciseTime");
+
+    public final StringPath groupExtendId = createString("groupExtendId");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final BooleanPath repeatFlag = createBoolean("repeatFlag");
+
+    public final NumberPath<java.math.BigInteger> submitNumber = createNumber("submitNumber", java.math.BigInteger.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseGroupExtend(String variable) {
+        super(ExerciseGroupExtend.class, forVariable(variable));
+    }
+
+    public QExerciseGroupExtend(Path<? extends ExerciseGroupExtend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseGroupExtend(PathMetadata metadata) {
+        super(ExerciseGroupExtend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupItemRe.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupItemRe.java
new file mode 100644
index 0000000..8eead3d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupItemRe.java
@@ -0,0 +1,47 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseGroupItemRe is a Querydsl query type for ExerciseGroupItemRe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseGroupItemRe extends EntityPathBase<ExerciseGroupItemRe> {
+
+    private static final long serialVersionUID = -226797888L;
+
+    public static final QExerciseGroupItemRe exerciseGroupItemRe = new QExerciseGroupItemRe("exerciseGroupItemRe");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> docOrder = createNumber("docOrder", Integer.class);
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final NumberPath<Integer> itemOrder = createNumber("itemOrder", Integer.class);
+
+    public final StringPath relationId = createString("relationId");
+
+    public QExerciseGroupItemRe(String variable) {
+        super(ExerciseGroupItemRe.class, forVariable(variable));
+    }
+
+    public QExerciseGroupItemRe(Path<? extends ExerciseGroupItemRe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseGroupItemRe(PathMetadata metadata) {
+        super(ExerciseGroupItemRe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupShareInfo.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupShareInfo.java
new file mode 100644
index 0000000..d817fc2
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseGroupShareInfo.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseGroupShareInfo is a Querydsl query type for ExerciseGroupShareInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseGroupShareInfo extends EntityPathBase<ExerciseGroupShareInfo> {
+
+    private static final long serialVersionUID = 19032275L;
+
+    public static final QExerciseGroupShareInfo exerciseGroupShareInfo = new QExerciseGroupShareInfo("exerciseGroupShareInfo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath groupShareId = createString("groupShareId");
+
+    public final StringPath sharedTeacherId = createString("sharedTeacherId");
+
+    public final StringPath sharedTeacherName = createString("sharedTeacherName");
+
+    public final NumberPath<Short> shareStatus = createNumber("shareStatus", Short.class);
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseGroupShareInfo(String variable) {
+        super(ExerciseGroupShareInfo.class, forVariable(variable));
+    }
+
+    public QExerciseGroupShareInfo(Path<? extends ExerciseGroupShareInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseGroupShareInfo(PathMetadata metadata) {
+        super(ExerciseGroupShareInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseInfo.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseInfo.java
new file mode 100644
index 0000000..7e32cdb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseInfo.java
@@ -0,0 +1,97 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseInfo is a Querydsl query type for ExerciseInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseInfo extends EntityPathBase<ExerciseInfo> {
+
+    private static final long serialVersionUID = -1643139501L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseInfo exerciseInfo = new QExerciseInfo("exerciseInfo");
+
+    public final NumberPath<Integer> classCount = createNumber("classCount", Integer.class);
+
+    public final NumberPath<Short> commitUploadType = createNumber("commitUploadType", Short.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final DateTimePath<java.util.Date> date = createDateTime("date", java.util.Date.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath exerciseInfoId = createString("exerciseInfoId");
+
+    public final ListPath<ExerciseItemSet, QExerciseItemSet> exerciseItemSets = this.<ExerciseItemSet, QExerciseItemSet>createList("exerciseItemSets", ExerciseItemSet.class, QExerciseItemSet.class, PathInits.DIRECT2);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<java.math.BigDecimal> passingScore = createNumber("passingScore", java.math.BigDecimal.class);
+
+    public final ListPath<ExerciseExamReClass, QExerciseExamReClass> reClasses = this.<ExerciseExamReClass, QExerciseExamReClass>createList("reClasses", ExerciseExamReClass.class, QExerciseExamReClass.class, PathInits.DIRECT2);
+
+    public final ListPath<ExerciseExamReGroup, QExerciseExamReGroup> reGroups = this.<ExerciseExamReGroup, QExerciseExamReGroup>createList("reGroups", ExerciseExamReGroup.class, QExerciseExamReGroup.class, PathInits.DIRECT2);
+
+    public final StringPath remind = createString("remind");
+
+    public final NumberPath<Double> score = createNumber("score", Double.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseInfo(String variable) {
+        this(ExerciseInfo.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseInfo(Path<? extends ExerciseInfo> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseInfo(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseInfo(PathMetadata metadata, PathInits inits) {
+        this(ExerciseInfo.class, metadata, inits);
+    }
+
+    public QExerciseInfo(Class<? extends ExerciseInfo> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItem.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItem.java
new file mode 100644
index 0000000..214a4b6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItem.java
@@ -0,0 +1,83 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseItem is a Querydsl query type for ExerciseItem
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItem extends EntityPathBase<ExerciseItem> {
+
+    private static final long serialVersionUID = -1643133768L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseItem exerciseItem = new QExerciseItem("exerciseItem");
+
+    public final StringPath answer = createString("answer");
+
+    public final QExerciseChapter chapter;
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseId = createString("exerciseId");
+
+    public final BooleanPath mustAnswer = createBoolean("mustAnswer");
+
+    public final ListPath<ExerciseItemOption, QExerciseItemOption> options = this.<ExerciseItemOption, QExerciseItemOption>createList("options", ExerciseItemOption.class, QExerciseItemOption.class, PathInits.DIRECT2);
+
+    public final StringPath orgiExerciseId = createString("orgiExerciseId");
+
+    public final ListPath<ExerciseItemScore, QExerciseItemScore> scores = this.<ExerciseItemScore, QExerciseItemScore>createList("scores", ExerciseItemScore.class, QExerciseItemScore.class, PathInits.DIRECT2);
+
+    public final StringPath title = createString("title");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseItem(String variable) {
+        this(ExerciseItem.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseItem(Path<? extends ExerciseItem> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseItem(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseItem(PathMetadata metadata, PathInits inits) {
+        this(ExerciseItem.class, metadata, inits);
+    }
+
+    public QExerciseItem(Class<? extends ExerciseItem> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.chapter = inits.isInitialized("chapter") ? new QExerciseChapter(forProperty("chapter"), inits.get("chapter")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisi.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisi.java
new file mode 100644
index 0000000..308d0a9
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisi.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseItemAnalisi is a Querydsl query type for ExerciseItemAnalisi
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemAnalisi extends EntityPathBase<ExerciseItemAnalisi> {
+
+    private static final long serialVersionUID = -2097695601L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseItemAnalisi exerciseItemAnalisi = new QExerciseItemAnalisi("exerciseItemAnalisi");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final StringPath analysis = createString("analysis");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseAnalisisId = createString("exerciseAnalisisId");
+
+    public final QExerciseItem exerciseItem;
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final NumberPath<java.math.BigInteger> submitCorrectNumber = createNumber("submitCorrectNumber", java.math.BigInteger.class);
+
+    public final NumberPath<java.math.BigInteger> submitNumber = createNumber("submitNumber", java.math.BigInteger.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath usualFaultAnswers = createString("usualFaultAnswers");
+
+    public QExerciseItemAnalisi(String variable) {
+        this(ExerciseItemAnalisi.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseItemAnalisi(Path<? extends ExerciseItemAnalisi> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseItemAnalisi(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseItemAnalisi(PathMetadata metadata, PathInits inits) {
+        this(ExerciseItemAnalisi.class, metadata, inits);
+    }
+
+    public QExerciseItemAnalisi(Class<? extends ExerciseItemAnalisi> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseItem = inits.isInitialized("exerciseItem") ? new QExerciseItem(forProperty("exerciseItem"), inits.get("exerciseItem")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisiU.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisiU.java
new file mode 100644
index 0000000..afa5681
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnalisiU.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseItemAnalisiU is a Querydsl query type for ExerciseItemAnalisiU
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemAnalisiU extends EntityPathBase<ExerciseItemAnalisiU> {
+
+    private static final long serialVersionUID = -604054106L;
+
+    public static final QExerciseItemAnalisiU exerciseItemAnalisiU = new QExerciseItemAnalisiU("exerciseItemAnalisiU");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseAnalisisUId = createString("exerciseAnalisisUId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final NumberPath<java.math.BigInteger> submitCorrectNumber = createNumber("submitCorrectNumber", java.math.BigInteger.class);
+
+    public final NumberPath<java.math.BigInteger> submitNumber = createNumber("submitNumber", java.math.BigInteger.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseItemAnalisiU(String variable) {
+        super(ExerciseItemAnalisiU.class, forVariable(variable));
+    }
+
+    public QExerciseItemAnalisiU(Path<? extends ExerciseItemAnalisiU> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseItemAnalisiU(PathMetadata metadata) {
+        super(ExerciseItemAnalisiU.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswer.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswer.java
new file mode 100644
index 0000000..212476c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswer.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseItemAnswer is a Querydsl query type for ExerciseItemAnswer
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemAnswer extends EntityPathBase<ExerciseItemAnswer> {
+
+    private static final long serialVersionUID = 1456899734L;
+
+    public static final QExerciseItemAnswer exerciseItemAnswer = new QExerciseItemAnswer("exerciseItemAnswer");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseAnswerId = createString("exerciseAnswerId");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseItemAnswer(String variable) {
+        super(ExerciseItemAnswer.class, forVariable(variable));
+    }
+
+    public QExerciseItemAnswer(Path<? extends ExerciseItemAnswer> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseItemAnswer(PathMetadata metadata) {
+        super(ExerciseItemAnswer.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswerU.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswerU.java
new file mode 100644
index 0000000..1b3ff4b
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemAnswerU.java
@@ -0,0 +1,80 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseItemAnswerU is a Querydsl query type for ExerciseItemAnswerU
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemAnswerU extends EntityPathBase<ExerciseItemAnswerU> {
+
+    private static final long serialVersionUID = -2080748417L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseItemAnswerU exerciseItemAnswerU = new QExerciseItemAnswerU("exerciseItemAnswerU");
+
+    public final StringPath answer = createString("answer");
+
+    public final StringPath answerUId = createString("answerUId");
+
+    public final NumberPath<Byte> correct = createNumber("correct", Byte.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final QExerciseItem exerciseItem;
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final QExerciseRecord exerciseRecord;
+
+    public final StringPath exerciseRecordId = createString("exerciseRecordId");
+
+    public final StringPath teacherScore = createString("teacherScore");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseItemAnswerU(String variable) {
+        this(ExerciseItemAnswerU.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseItemAnswerU(Path<? extends ExerciseItemAnswerU> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseItemAnswerU(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseItemAnswerU(PathMetadata metadata, PathInits inits) {
+        this(ExerciseItemAnswerU.class, metadata, inits);
+    }
+
+    public QExerciseItemAnswerU(Class<? extends ExerciseItemAnswerU> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseItem = inits.isInitialized("exerciseItem") ? new QExerciseItem(forProperty("exerciseItem"), inits.get("exerciseItem")) : null;
+        this.exerciseRecord = inits.isInitialized("exerciseRecord") ? new QExerciseRecord(forProperty("exerciseRecord"), inits.get("exerciseRecord")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemOption.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemOption.java
new file mode 100644
index 0000000..1f067b7
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemOption.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseItemOption is a Querydsl query type for ExerciseItemOption
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemOption extends EntityPathBase<ExerciseItemOption> {
+
+    private static final long serialVersionUID = 1859571533L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseItemOption exerciseItemOption = new QExerciseItemOption("exerciseItemOption");
+
+    public final BooleanPath checked = createBoolean("checked");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final QExerciseItem exerciseItem;
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath optionId = createString("optionId");
+
+    public final StringPath optionOrder = createString("optionOrder");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseItemOption(String variable) {
+        this(ExerciseItemOption.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseItemOption(Path<? extends ExerciseItemOption> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseItemOption(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseItemOption(PathMetadata metadata, PathInits inits) {
+        this(ExerciseItemOption.class, metadata, inits);
+    }
+
+    public QExerciseItemOption(Class<? extends ExerciseItemOption> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseItem = inits.isInitialized("exerciseItem") ? new QExerciseItem(forProperty("exerciseItem"), inits.get("exerciseItem")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemScore.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemScore.java
new file mode 100644
index 0000000..884331e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemScore.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseItemScore is a Querydsl query type for ExerciseItemScore
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemScore extends EntityPathBase<ExerciseItemScore> {
+
+    private static final long serialVersionUID = -2014921542L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseItemScore exerciseItemScore = new QExerciseItemScore("exerciseItemScore");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final QExerciseItem exerciseItem;
+
+    public final StringPath exerciseItemAnswer = createString("exerciseItemAnswer");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath exerciseItemScoreId = createString("exerciseItemScoreId");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath score = createString("score");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseItemScore(String variable) {
+        this(ExerciseItemScore.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseItemScore(Path<? extends ExerciseItemScore> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseItemScore(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseItemScore(PathMetadata metadata, PathInits inits) {
+        this(ExerciseItemScore.class, metadata, inits);
+    }
+
+    public QExerciseItemScore(Class<? extends ExerciseItemScore> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseItem = inits.isInitialized("exerciseItem") ? new QExerciseItem(forProperty("exerciseItem"), inits.get("exerciseItem")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemSet.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemSet.java
new file mode 100644
index 0000000..11004aa
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemSet.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseItemSet is a Querydsl query type for ExerciseItemSet
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemSet extends EntityPathBase<ExerciseItemSet> {
+
+    private static final long serialVersionUID = -855726966L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseItemSet exerciseItemSet = new QExerciseItemSet("exerciseItemSet");
+
+    public final NumberPath<Double> blankScore = createNumber("blankScore", Double.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final QExerciseInfo exerciseInfo;
+
+    public final StringPath exerciseInfoId = createString("exerciseInfoId");
+
+    public final NumberPath<Double> halfRightScore = createNumber("halfRightScore", Double.class);
+
+    public final NumberPath<Integer> itemCount = createNumber("itemCount", Integer.class);
+
+    public final NumberPath<Short> itemType = createNumber("itemType", Short.class);
+
+    public final NumberPath<Double> rightScore = createNumber("rightScore", Double.class);
+
+    public final StringPath setId = createString("setId");
+
+    public final StringPath sourceGroupId = createString("sourceGroupId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<Double> wrongScore = createNumber("wrongScore", Double.class);
+
+    public QExerciseItemSet(String variable) {
+        this(ExerciseItemSet.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseItemSet(Path<? extends ExerciseItemSet> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseItemSet(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseItemSet(PathMetadata metadata, PathInits inits) {
+        this(ExerciseItemSet.class, metadata, inits);
+    }
+
+    public QExerciseItemSet(Class<? extends ExerciseItemSet> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.exerciseInfo = inits.isInitialized("exerciseInfo") ? new QExerciseInfo(forProperty("exerciseInfo"), inits.get("exerciseInfo")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemStatistics.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemStatistics.java
new file mode 100644
index 0000000..deb9452
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseItemStatistics.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseItemStatistics is a Querydsl query type for ExerciseItemStatistics
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseItemStatistics extends EntityPathBase<ExerciseItemStatistics> {
+
+    private static final long serialVersionUID = 632933371L;
+
+    public static final QExerciseItemStatistics exerciseItemStatistics = new QExerciseItemStatistics("exerciseItemStatistics");
+
+    public final NumberPath<java.math.BigDecimal> classAccuracy = createNumber("classAccuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> classCorrectNum = createNumber("classCorrectNum", java.math.BigInteger.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<java.math.BigInteger> classTotalNum = createNumber("classTotalNum", java.math.BigInteger.class);
+
+    public final StringPath correctAnswer = createString("correctAnswer");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath exerciseItemTitel = createString("exerciseItemTitel");
+
+    public final NumberPath<Short> exerciseItemType = createNumber("exerciseItemType", Short.class);
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath itemStatisticsId = createString("itemStatisticsId");
+
+    public final NumberPath<java.math.BigDecimal> orgAccuracy = createNumber("orgAccuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> orgCorrectNum = createNumber("orgCorrectNum", java.math.BigInteger.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<java.math.BigInteger> orgTotalNum = createNumber("orgTotalNum", java.math.BigInteger.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath usualFaultAnswers = createString("usualFaultAnswers");
+
+    public QExerciseItemStatistics(String variable) {
+        super(ExerciseItemStatistics.class, forVariable(variable));
+    }
+
+    public QExerciseItemStatistics(Path<? extends ExerciseItemStatistics> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseItemStatistics(PathMetadata metadata) {
+        super(ExerciseItemStatistics.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseObjectImg.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseObjectImg.java
new file mode 100644
index 0000000..94dc108
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseObjectImg.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseObjectImg is a Querydsl query type for ExerciseObjectImg
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseObjectImg extends EntityPathBase<ExerciseObjectImg> {
+
+    private static final long serialVersionUID = -1351797377L;
+
+    public static final QExerciseObjectImg exerciseObjectImg = new QExerciseObjectImg("exerciseObjectImg");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseObjectId = createString("exerciseObjectId");
+
+    public final StringPath imgId = createString("imgId");
+
+    public final NumberPath<Integer> imgOrder = createNumber("imgOrder", Integer.class);
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final NumberPath<Integer> objectType = createNumber("objectType", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseObjectImg(String variable) {
+        super(ExerciseObjectImg.class, forVariable(variable));
+    }
+
+    public QExerciseObjectImg(Path<? extends ExerciseObjectImg> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseObjectImg(PathMetadata metadata) {
+        super(ExerciseObjectImg.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseOptionStatistics.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseOptionStatistics.java
new file mode 100644
index 0000000..f3e16a6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseOptionStatistics.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseOptionStatistics is a Querydsl query type for ExerciseOptionStatistics
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseOptionStatistics extends EntityPathBase<ExerciseOptionStatistics> {
+
+    private static final long serialVersionUID = -467615331L;
+
+    public static final QExerciseOptionStatistics exerciseOptionStatistics = new QExerciseOptionStatistics("exerciseOptionStatistics");
+
+    public final BooleanPath checked = createBoolean("checked");
+
+    public final NumberPath<java.math.BigDecimal> classAccuracy = createNumber("classAccuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> classCorrectNum = createNumber("classCorrectNum", java.math.BigInteger.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<java.math.BigInteger> classTotalNum = createNumber("classTotalNum", java.math.BigInteger.class);
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseItemId = createString("exerciseItemId");
+
+    public final StringPath optionId = createString("optionId");
+
+    public final StringPath optionOrder = createString("optionOrder");
+
+    public final StringPath optionStatisticsId = createString("optionStatisticsId");
+
+    public final NumberPath<java.math.BigDecimal> orgAccuracy = createNumber("orgAccuracy", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> orgCorrectNum = createNumber("orgCorrectNum", java.math.BigInteger.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<java.math.BigInteger> orgTotalNum = createNumber("orgTotalNum", java.math.BigInteger.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseOptionStatistics(String variable) {
+        super(ExerciseOptionStatistics.class, forVariable(variable));
+    }
+
+    public QExerciseOptionStatistics(Path<? extends ExerciseOptionStatistics> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseOptionStatistics(PathMetadata metadata) {
+        super(ExerciseOptionStatistics.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseReCourse.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseReCourse.java
new file mode 100644
index 0000000..c3679f1
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseReCourse.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseReCourse is a Querydsl query type for ExerciseReCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseReCourse extends EntityPathBase<ExerciseReCourse> {
+
+    private static final long serialVersionUID = 644486995L;
+
+    public static final QExerciseReCourse exerciseReCourse = new QExerciseReCourse("exerciseReCourse");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseCourseId = createString("exerciseCourseId");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExerciseReCourse(String variable) {
+        super(ExerciseReCourse.class, forVariable(variable));
+    }
+
+    public QExerciseReCourse(Path<? extends ExerciseReCourse> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseReCourse(PathMetadata metadata) {
+        super(ExerciseReCourse.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecentRecord.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecentRecord.java
new file mode 100644
index 0000000..6ff1b4f
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecentRecord.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseRecentRecord is a Querydsl query type for ExerciseRecentRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseRecentRecord extends EntityPathBase<ExerciseRecentRecord> {
+
+    private static final long serialVersionUID = 1125974833L;
+
+    public static final QExerciseRecentRecord exerciseRecentRecord = new QExerciseRecentRecord("exerciseRecentRecord");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final StringPath exerciseRecordId = createString("exerciseRecordId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath recentRecordId = createString("recentRecordId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseRecentRecord(String variable) {
+        super(ExerciseRecentRecord.class, forVariable(variable));
+    }
+
+    public QExerciseRecentRecord(Path<? extends ExerciseRecentRecord> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseRecentRecord(PathMetadata metadata) {
+        super(ExerciseRecentRecord.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecord.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecord.java
new file mode 100644
index 0000000..5c56038
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseRecord.java
@@ -0,0 +1,119 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseRecord is a Querydsl query type for ExerciseRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseRecord extends EntityPathBase<ExerciseRecord> {
+
+    private static final long serialVersionUID = 1740169398L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseRecord exerciseRecord = new QExerciseRecord("exerciseRecord");
+
+    public final NumberPath<java.math.BigDecimal> accuracy = createNumber("accuracy", java.math.BigDecimal.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final NumberPath<java.math.BigDecimal> completionRate = createNumber("completionRate", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigInteger> correctCount = createNumber("correctCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigInteger> doCount = createNumber("doCount", java.math.BigInteger.class);
+
+    public final StringPath examBatchId = createString("examBatchId");
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final ListPath<ExerciseItemAnswerU, QExerciseItemAnswerU> exerciseItemAnswerU = this.<ExerciseItemAnswerU, QExerciseItemAnswerU>createList("exerciseItemAnswerU", ExerciseItemAnswerU.class, QExerciseItemAnswerU.class, PathInits.DIRECT2);
+
+    public final QExerciseGroup group;
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> objItemCount = createNumber("objItemCount", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> objScore = createNumber("objScore", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> objTotalScore = createNumber("objTotalScore", java.math.BigDecimal.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<java.math.BigDecimal> passingScore = createNumber("passingScore", java.math.BigDecimal.class);
+
+    public final StringPath recordId = createString("recordId");
+
+    public final NumberPath<Integer> remainingSeconds = createNumber("remainingSeconds", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath status = createString("status");
+
+    public final NumberPath<Integer> subItemCount = createNumber("subItemCount", Integer.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigDecimal> subScore = createNumber("subScore", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> subTotalScore = createNumber("subTotalScore", java.math.BigDecimal.class);
+
+    public final StringPath titleMaxNumber = createString("titleMaxNumber");
+
+    public final NumberPath<java.math.BigDecimal> totalScore = createNumber("totalScore", java.math.BigDecimal.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QExerciseRecord(String variable) {
+        this(ExerciseRecord.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseRecord(Path<? extends ExerciseRecord> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseRecord(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseRecord(PathMetadata metadata, PathInits inits) {
+        this(ExerciseRecord.class, metadata, inits);
+    }
+
+    public QExerciseRecord(Class<? extends ExerciseRecord> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.group = inits.isInitialized("group") ? new QExerciseGroup(forProperty("group")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultV.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultV.java
new file mode 100644
index 0000000..5cda28a
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultV.java
@@ -0,0 +1,107 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QExerciseResultV is a Querydsl query type for ExerciseResultV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExerciseResultV extends EntityPathBase<ExerciseResultV> {
+
+    private static final long serialVersionUID = -1874373612L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QExerciseResultV exerciseResultV = new QExerciseResultV("exerciseResultV");
+
+    public final StringPath className = createString("className");
+
+    public final NumberPath<Short> completeStatus = createNumber("completeStatus", Short.class);
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath exerciseCompleteId = createString("exerciseCompleteId");
+
+    public final StringPath exerciseName = createString("exerciseName");
+
+    public final NumberPath<Short> exerciseStatus = createNumber("exerciseStatus", Short.class);
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath filePath = createString("filePath");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final QExerciseResultVId id;
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final NumberPath<java.math.BigDecimal> passingScore = createNumber("passingScore", java.math.BigDecimal.class);
+
+    public final StringPath remind = createString("remind");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final NumberPath<Short> sex = createNumber("sex", Short.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath studentName = createString("studentName");
+
+    public final StringPath studentNo = createString("studentNo");
+
+    public final NumberPath<java.math.BigDecimal> studentScore = createNumber("studentScore", java.math.BigDecimal.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final StringPath targetObjectId = createString("targetObjectId");
+
+    public final StringPath teacherComment = createString("teacherComment");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath uploadDesc = createString("uploadDesc");
+
+    public final StringPath userId = createString("userId");
+
+    public QExerciseResultV(String variable) {
+        this(ExerciseResultV.class, forVariable(variable), INITS);
+    }
+
+    public QExerciseResultV(Path<? extends ExerciseResultV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QExerciseResultV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QExerciseResultV(PathMetadata metadata, PathInits inits) {
+        this(ExerciseResultV.class, metadata, inits);
+    }
+
+    public QExerciseResultV(Class<? extends ExerciseResultV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QExerciseResultVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultVId.java b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultVId.java
new file mode 100644
index 0000000..2928116
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/exercise/model/QExerciseResultVId.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.exercise.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExerciseResultVId is a Querydsl query type for ExerciseResultVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QExerciseResultVId extends BeanPath<ExerciseResultVId> {
+
+    private static final long serialVersionUID = -1681741745L;
+
+    public static final QExerciseResultVId exerciseResultVId = new QExerciseResultVId("exerciseResultVId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath exerciseInfoId = createString("exerciseInfoId");
+
+    public final StringPath studentId = createString("studentId");
+
+    public QExerciseResultVId(String variable) {
+        super(ExerciseResultVId.class, forVariable(variable));
+    }
+
+    public QExerciseResultVId(Path<? extends ExerciseResultVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExerciseResultVId(PathMetadata metadata) {
+        super(ExerciseResultVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideo.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideo.java
new file mode 100644
index 0000000..bfa9590
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideo.java
@@ -0,0 +1,137 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideo is a Querydsl query type for MediaVideo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideo extends EntityPathBase<MediaVideo> {
+
+    private static final long serialVersionUID = 998601588L;
+
+    public static final QMediaVideo mediaVideo = new QMediaVideo("mediaVideo");
+
+    public final StringPath androidHD = createString("androidHD");
+
+    public final StringPath androidLD = createString("androidLD");
+
+    public final StringPath androidSD = createString("androidSD");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath format = createString("format");
+
+    public final StringPath iosHD = createString("iosHD");
+
+    public final StringPath iosLD = createString("iosLD");
+
+    public final StringPath iosSD = createString("iosSD");
+
+    public final StringPath m3u8KeyPath = createString("m3u8KeyPath");
+
+    public final StringPath md5 = createString("md5");
+
+    public final StringPath mp4HdMd5 = createString("mp4HdMd5");
+
+    public final StringPath mp4LdMd5 = createString("mp4LdMd5");
+
+    public final StringPath mp4SdMd5 = createString("mp4SdMd5");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath objectHd = createString("objectHd");
+
+    public final StringPath objectLd = createString("objectLd");
+
+    public final StringPath objectSd = createString("objectSd");
+
+    public final StringPath originVideoId = createString("originVideoId");
+
+    public final StringPath origUrl = createString("origUrl");
+
+    public final NumberPath<Integer> playTime = createNumber("playTime", Integer.class);
+
+    public final NumberPath<Integer> playTimes = createNumber("playTimes", Integer.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath secretKey = createString("secretKey");
+
+    public final NumberPath<Integer> size = createNumber("size", Integer.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath submitor = createString("submitor");
+
+    public final StringPath submitorId = createString("submitorId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public final StringPath validity = createString("validity");
+
+    public final StringPath videoCode = createString("videoCode");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final NumberPath<Integer> videoOrder = createNumber("videoOrder", Integer.class);
+
+    public final NumberPath<Integer> videoOrigHeight = createNumber("videoOrigHeight", Integer.class);
+
+    public final NumberPath<Integer> videoOrigWidth = createNumber("videoOrigWidth", Integer.class);
+
+    public final StringPath videoVender = createString("videoVender");
+
+    public QMediaVideo(String variable) {
+        super(MediaVideo.class, forVariable(variable));
+    }
+
+    public QMediaVideo(Path<? extends MediaVideo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideo(PathMetadata metadata) {
+        super(MediaVideo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoCache.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoCache.java
new file mode 100644
index 0000000..220d3b5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoCache.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoCache is a Querydsl query type for MediaVideoCache
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoCache extends EntityPathBase<MediaVideoCache> {
+
+    private static final long serialVersionUID = 918180974L;
+
+    public static final QMediaVideoCache mediaVideoCache = new QMediaVideoCache("mediaVideoCache");
+
+    public final StringPath appVersion = createString("appVersion");
+
+    public final BooleanPath cachedFlag = createBoolean("cachedFlag");
+
+    public final NumberPath<Integer> cachedTime = createNumber("cachedTime", Integer.class);
+
+    public final StringPath cachedUserId = createString("cachedUserId");
+
+    public final StringPath cacheId = createString("cacheId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath model = createString("model");
+
+    public final StringPath network = createString("network");
+
+    public final StringPath operator = createString("operator");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath platform = createString("platform");
+
+    public final DateTimePath<java.util.Date> submitTime = createDateTime("submitTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath version = createString("version");
+
+    public final StringPath videoId = createString("videoId");
+
+    public QMediaVideoCache(String variable) {
+        super(MediaVideoCache.class, forVariable(variable));
+    }
+
+    public QMediaVideoCache(Path<? extends MediaVideoCache> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoCache(PathMetadata metadata) {
+        super(MediaVideoCache.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoReCourse.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoReCourse.java
new file mode 100644
index 0000000..164aeba
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoReCourse.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoReCourse is a Querydsl query type for MediaVideoReCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoReCourse extends EntityPathBase<MediaVideoReCourse> {
+
+    private static final long serialVersionUID = 1895975874L;
+
+    public static final QMediaVideoReCourse mediaVideoReCourse = new QMediaVideoReCourse("mediaVideoReCourse");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final NumberPath<Integer> videoOrder = createNumber("videoOrder", Integer.class);
+
+    public final StringPath videoReCourseId = createString("videoReCourseId");
+
+    public QMediaVideoReCourse(String variable) {
+        super(MediaVideoReCourse.class, forVariable(variable));
+    }
+
+    public QMediaVideoReCourse(Path<? extends MediaVideoReCourse> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoReCourse(PathMetadata metadata) {
+        super(MediaVideoReCourse.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoRecord.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoRecord.java
new file mode 100644
index 0000000..4dd130f
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoRecord.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoRecord is a Querydsl query type for MediaVideoRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoRecord extends EntityPathBase<MediaVideoRecord> {
+
+    private static final long serialVersionUID = -1168022299L;
+
+    public static final QMediaVideoRecord mediaVideoRecord = new QMediaVideoRecord("mediaVideoRecord");
+
+    public final StringPath appVersion = createString("appVersion");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> leaveTime = createDateTime("leaveTime", java.util.Date.class);
+
+    public final StringPath model = createString("model");
+
+    public final StringPath network = createString("network");
+
+    public final StringPath operator = createString("operator");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath platform = createString("platform");
+
+    public final DateTimePath<java.util.Date> playTime = createDateTime("playTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath version = createString("version");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final StringPath videoRecordId = createString("videoRecordId");
+
+    public final NumberPath<Integer> videoTime = createNumber("videoTime", Integer.class);
+
+    public final NumberPath<Integer> watchTime = createNumber("watchTime", Integer.class);
+
+    public QMediaVideoRecord(String variable) {
+        super(MediaVideoRecord.class, forVariable(variable));
+    }
+
+    public QMediaVideoRecord(Path<? extends MediaVideoRecord> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoRecord(PathMetadata metadata) {
+        super(MediaVideoRecord.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoStatistic.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoStatistic.java
new file mode 100644
index 0000000..2fabf33
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoStatistic.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoStatistic is a Querydsl query type for MediaVideoStatistic
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoStatistic extends EntityPathBase<MediaVideoStatistic> {
+
+    private static final long serialVersionUID = -1801992132L;
+
+    public static final QMediaVideoStatistic mediaVideoStatistic = new QMediaVideoStatistic("mediaVideoStatistic");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<java.math.BigDecimal> compDegree = createNumber("compDegree", java.math.BigDecimal.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final NumberPath<Integer> videoLastTime = createNumber("videoLastTime", Integer.class);
+
+    public final StringPath videoName = createString("videoName");
+
+    public final StringPath videoStatisticId = createString("videoStatisticId");
+
+    public QMediaVideoStatistic(String variable) {
+        super(MediaVideoStatistic.class, forVariable(variable));
+    }
+
+    public QMediaVideoStatistic(Path<? extends MediaVideoStatistic> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoStatistic(PathMetadata metadata) {
+        super(MediaVideoStatistic.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoTrans.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoTrans.java
new file mode 100644
index 0000000..c6712ba
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QMediaVideoTrans.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoTrans is a Querydsl query type for MediaVideoTrans
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoTrans extends EntityPathBase<MediaVideoTrans> {
+
+    private static final long serialVersionUID = 934385556L;
+
+    public static final QMediaVideoTrans mediaVideoTrans = new QMediaVideoTrans("mediaVideoTrans");
+
+    public final DateTimePath<java.util.Date> androidSdTime = createDateTime("androidSdTime", java.util.Date.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> downloadTime = createDateTime("downloadTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> iosSdTime = createDateTime("iosSdTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> mediaInfoTime = createDateTime("mediaInfoTime", java.util.Date.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<Integer> process = createNumber("process", Integer.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final NumberPath<Short> result = createNumber("result", Short.class);
+
+    public final DateTimePath<java.util.Date> resultTime = createDateTime("resultTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> snapshotTime = createDateTime("snapshotTime", java.util.Date.class);
+
+    public final StringPath transServer = createString("transServer");
+
+    public final NumberPath<Short> transTimes = createNumber("transTimes", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath uploadServer = createString("uploadServer");
+
+    public final DateTimePath<java.util.Date> uploadTime = createDateTime("uploadTime", java.util.Date.class);
+
+    public final StringPath videoId = createString("videoId");
+
+    public final StringPath videoName = createString("videoName");
+
+    public final StringPath videoTranscodeId = createString("videoTranscodeId");
+
+    public QMediaVideoTrans(String variable) {
+        super(MediaVideoTrans.class, forVariable(variable));
+    }
+
+    public QMediaVideoTrans(Path<? extends MediaVideoTrans> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoTrans(PathMetadata metadata) {
+        super(MediaVideoTrans.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QSchLiveReVideo.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QSchLiveReVideo.java
new file mode 100644
index 0000000..7e06622
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QSchLiveReVideo.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchLiveReVideo is a Querydsl query type for SchLiveReVideo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchLiveReVideo extends EntityPathBase<SchLiveReVideo> {
+
+    private static final long serialVersionUID = -856221119L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchLiveReVideo schLiveReVideo = new QSchLiveReVideo("schLiveReVideo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath liveVideoId = createString("liveVideoId");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final StringPath objectType = createString("objectType");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final com.qxueyou.scc.teach.live.model.QMediaVideoLive videoLive;
+
+    public QSchLiveReVideo(String variable) {
+        this(SchLiveReVideo.class, forVariable(variable), INITS);
+    }
+
+    public QSchLiveReVideo(Path<? extends SchLiveReVideo> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchLiveReVideo(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchLiveReVideo(PathMetadata metadata, PathInits inits) {
+        this(SchLiveReVideo.class, metadata, inits);
+    }
+
+    public QSchLiveReVideo(Class<? extends SchLiveReVideo> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.videoLive = inits.isInitialized("videoLive") ? new com.qxueyou.scc.teach.live.model.QMediaVideoLive(forProperty("videoLive"), inits.get("videoLive")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoConverTask.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoConverTask.java
new file mode 100644
index 0000000..57b64dc
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoConverTask.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QVideoConverTask is a Querydsl query type for VideoConverTask
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QVideoConverTask extends EntityPathBase<VideoConverTask> {
+
+    private static final long serialVersionUID = -933218172L;
+
+    public static final QVideoConverTask videoConverTask = new QVideoConverTask("videoConverTask");
+
+    public final NumberPath<Integer> converLdLock = createNumber("converLdLock", Integer.class);
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> needSnapshot = createNumber("needSnapshot", Integer.class);
+
+    public final NumberPath<Integer> priority = createNumber("priority", Integer.class);
+
+    public final StringPath taskId = createString("taskId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final StringPath videoUrl = createString("videoUrl");
+
+    public QVideoConverTask(String variable) {
+        super(VideoConverTask.class, forVariable(variable));
+    }
+
+    public QVideoConverTask(Path<? extends VideoConverTask> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QVideoConverTask(PathMetadata metadata) {
+        super(VideoConverTask.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoLiveChatroom.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoLiveChatroom.java
new file mode 100644
index 0000000..96dfa54
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoLiveChatroom.java
@@ -0,0 +1,83 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QVideoLiveChatroom is a Querydsl query type for VideoLiveChatroom
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QVideoLiveChatroom extends EntityPathBase<VideoLiveChatroom> {
+
+    private static final long serialVersionUID = -47508931L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QVideoLiveChatroom videoLiveChatroom = new QVideoLiveChatroom("videoLiveChatroom");
+
+    public final NumberPath<Integer> affiliationsCount = createNumber("affiliationsCount", Integer.class);
+
+    public final StringPath chatroomId = createString("chatroomId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath description = createString("description");
+
+    public final NumberPath<Integer> maxusers = createNumber("maxusers", Integer.class);
+
+    public final com.qxueyou.scc.teach.live.model.QMediaVideoLive mediaVideoLive;
+
+    public final StringPath member = createString("member");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath owner = createString("owner");
+
+    public final StringPath ownerId = createString("ownerId");
+
+    public final StringPath roomId = createString("roomId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public QVideoLiveChatroom(String variable) {
+        this(VideoLiveChatroom.class, forVariable(variable), INITS);
+    }
+
+    public QVideoLiveChatroom(Path<? extends VideoLiveChatroom> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QVideoLiveChatroom(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QVideoLiveChatroom(PathMetadata metadata, PathInits inits) {
+        this(VideoLiveChatroom.class, metadata, inits);
+    }
+
+    public QVideoLiveChatroom(Class<? extends VideoLiveChatroom> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.mediaVideoLive = inits.isInitialized("mediaVideoLive") ? new com.qxueyou.scc.teach.live.model.QMediaVideoLive(forProperty("mediaVideoLive"), inits.get("mediaVideoLive")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoPlay.java b/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoPlay.java
new file mode 100644
index 0000000..50e7fb6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/media/model/QVideoPlay.java
@@ -0,0 +1,47 @@
+package com.qxueyou.scc.media.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QVideoPlay is a Querydsl query type for VideoPlay
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QVideoPlay extends EntityPathBase<VideoPlay> {
+
+    private static final long serialVersionUID = -636917198L;
+
+    public static final QVideoPlay videoPlay = new QVideoPlay("videoPlay");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final NumberPath<Integer> progress = createNumber("progress", Integer.class);
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final StringPath videoPlayId = createString("videoPlayId");
+
+    public QVideoPlay(String variable) {
+        super(VideoPlay.class, forVariable(variable));
+    }
+
+    public QVideoPlay(Path<? extends VideoPlay> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QVideoPlay(PathMetadata metadata) {
+        super(VideoPlay.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/msg/model/QMessage.java b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMessage.java
new file mode 100644
index 0000000..3220edb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMessage.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.msg.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMessage is a Querydsl query type for Message
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMessage extends EntityPathBase<Message> {
+
+    private static final long serialVersionUID = 1605789191L;
+
+    public static final QMessage message = new QMessage("message");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath attribute3 = createString("attribute3");
+
+    public final StringPath attribute4 = createString("attribute4");
+
+    public final StringPath attribute5 = createString("attribute5");
+
+    public final StringPath attribute6 = createString("attribute6");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath groupFlag = createBoolean("groupFlag");
+
+    public final StringPath messageId = createString("messageId");
+
+    public final StringPath msgType = createString("msgType");
+
+    public final StringPath receiver = createString("receiver");
+
+    public final StringPath receiverId = createString("receiverId");
+
+    public final StringPath sender = createString("sender");
+
+    public final StringPath senderId = createString("senderId");
+
+    public final BooleanPath status = createBoolean("status");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QMessage(String variable) {
+        super(Message.class, forVariable(variable));
+    }
+
+    public QMessage(Path<? extends Message> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMessage(PathMetadata metadata) {
+        super(Message.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgFriend.java b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgFriend.java
new file mode 100644
index 0000000..ef3f5c5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgFriend.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.msg.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMsgFriend is a Querydsl query type for MsgFriend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMsgFriend extends EntityPathBase<MsgFriend> {
+
+    private static final long serialVersionUID = 862003071L;
+
+    public static final QMsgFriend msgFriend = new QMsgFriend("msgFriend");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath friendId = createString("friendId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userIdFrom = createString("userIdFrom");
+
+    public final StringPath userIdTo = createString("userIdTo");
+
+    public QMsgFriend(String variable) {
+        super(MsgFriend.class, forVariable(variable));
+    }
+
+    public QMsgFriend(Path<? extends MsgFriend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMsgFriend(PathMetadata metadata) {
+        super(MsgFriend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroup.java b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroup.java
new file mode 100644
index 0000000..8be2929
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroup.java
@@ -0,0 +1,64 @@
+package com.qxueyou.scc.msg.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QMsgGroup is a Querydsl query type for MsgGroup
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMsgGroup extends EntityPathBase<MsgGroup> {
+
+    private static final long serialVersionUID = 1691304318L;
+
+    public static final QMsgGroup msgGroup = new QMsgGroup("msgGroup");
+
+    public final ListPath<MsgUser, QMsgUser> admins = this.<MsgUser, QMsgUser>createList("admins", MsgUser.class, QMsgUser.class, PathInits.DIRECT2);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath description = createString("description");
+
+    public final StringPath easmobGroupId = createString("easmobGroupId");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath portriait = createString("portriait");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final ListPath<MsgUser, QMsgUser> users = this.<MsgUser, QMsgUser>createList("users", MsgUser.class, QMsgUser.class, PathInits.DIRECT2);
+
+    public QMsgGroup(String variable) {
+        super(MsgGroup.class, forVariable(variable));
+    }
+
+    public QMsgGroup(Path<? extends MsgGroup> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMsgGroup(PathMetadata metadata) {
+        super(MsgGroup.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroupUserRe.java b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroupUserRe.java
new file mode 100644
index 0000000..0bd6cf2
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgGroupUserRe.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.msg.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMsgGroupUserRe is a Querydsl query type for MsgGroupUserRe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMsgGroupUserRe extends EntityPathBase<MsgGroupUserRe> {
+
+    private static final long serialVersionUID = 1669056124L;
+
+    public static final QMsgGroupUserRe msgGroupUserRe = new QMsgGroupUserRe("msgGroupUserRe");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QMsgGroupUserRe(String variable) {
+        super(MsgGroupUserRe.class, forVariable(variable));
+    }
+
+    public QMsgGroupUserRe(Path<? extends MsgGroupUserRe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMsgGroupUserRe(PathMetadata metadata) {
+        super(MsgGroupUserRe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgInfo.java b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgInfo.java
new file mode 100644
index 0000000..d1c9447
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgInfo.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.msg.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMsgInfo is a Querydsl query type for MsgInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMsgInfo extends EntityPathBase<MsgInfo> {
+
+    private static final long serialVersionUID = 1994276303L;
+
+    public static final QMsgInfo msgInfo = new QMsgInfo("msgInfo");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath msgId = createString("msgId");
+
+    public final StringPath readFlag = createString("readFlag");
+
+    public final StringPath receiverId = createString("receiverId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QMsgInfo(String variable) {
+        super(MsgInfo.class, forVariable(variable));
+    }
+
+    public QMsgInfo(Path<? extends MsgInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMsgInfo(PathMetadata metadata) {
+        super(MsgInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgUser.java b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgUser.java
new file mode 100644
index 0000000..32fad10
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/msg/model/QMsgUser.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.msg.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QMsgUser is a Querydsl query type for MsgUser
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMsgUser extends EntityPathBase<MsgUser> {
+
+    private static final long serialVersionUID = 1994638572L;
+
+    public static final QMsgUser msgUser = new QMsgUser("msgUser");
+
+    public final StringPath account = createString("account");
+
+    public final ListPath<MsgGroup, QMsgGroup> adminGroups = this.<MsgGroup, QMsgGroup>createList("adminGroups", MsgGroup.class, QMsgGroup.class, PathInits.DIRECT2);
+
+    public final NumberPath<Integer> age = createNumber("age", Integer.class);
+
+    public final StringPath alias = createString("alias");
+
+    public final DateTimePath<java.util.Date> birthday = createDateTime("birthday", java.util.Date.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final ListPath<MsgUser, QMsgUser> friends = this.<MsgUser, QMsgUser>createList("friends", MsgUser.class, QMsgUser.class, PathInits.DIRECT2);
+
+    public final ListPath<MsgUser, QMsgUser> friendsOf = this.<MsgUser, QMsgUser>createList("friendsOf", MsgUser.class, QMsgUser.class, PathInits.DIRECT2);
+
+    public final ListPath<MsgGroup, QMsgGroup> groups = this.<MsgGroup, QMsgGroup>createList("groups", MsgGroup.class, QMsgGroup.class, PathInits.DIRECT2);
+
+    public final StringPath password = createString("password");
+
+    public final StringPath portrait = createString("portrait");
+
+    public final StringPath realName = createString("realName");
+
+    public final BooleanPath sex = createBoolean("sex");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QMsgUser(String variable) {
+        super(MsgUser.class, forVariable(variable));
+    }
+
+    public QMsgUser(Path<? extends MsgUser> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMsgUser(PathMetadata metadata) {
+        super(MsgUser.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/notice/model/QNotice.java b/target/generated-sources/java/com/qxueyou/scc/notice/model/QNotice.java
new file mode 100644
index 0000000..94a6b82
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/notice/model/QNotice.java
@@ -0,0 +1,78 @@
+package com.qxueyou.scc.notice.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QNotice is a Querydsl query type for Notice
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QNotice extends EntityPathBase<Notice> {
+
+    private static final long serialVersionUID = 945595333L;
+
+    public static final QNotice notice = new QNotice("notice");
+
+    public final StringPath brief = createString("brief");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final DateTimePath<java.util.Date> issuedTime = createDateTime("issuedTime", java.util.Date.class);
+
+    public final ListPath<com.qxueyou.scc.sys.model.SysAttachment, com.qxueyou.scc.sys.model.QSysAttachment> lstSysAttachment = this.<com.qxueyou.scc.sys.model.SysAttachment, com.qxueyou.scc.sys.model.QSysAttachment>createList("lstSysAttachment", com.qxueyou.scc.sys.model.SysAttachment.class, com.qxueyou.scc.sys.model.QSysAttachment.class, PathInits.DIRECT2);
+
+    public final StringPath noticeId = createString("noticeId");
+
+    public final NumberPath<Integer> noticeScope = createNumber("noticeScope", Integer.class);
+
+    public final NumberPath<Integer> noticeType = createNumber("noticeType", Integer.class);
+
+    public final StringPath noticeTypeName = createString("noticeTypeName");
+
+    public final StringPath scopeId = createString("scopeId");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath title = createString("title");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<Integer> viewCount = createNumber("viewCount", Integer.class);
+
+    public final NumberPath<Integer> viwerCount = createNumber("viwerCount", Integer.class);
+
+    public QNotice(String variable) {
+        super(Notice.class, forVariable(variable));
+    }
+
+    public QNotice(Path<? extends Notice> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QNotice(PathMetadata metadata) {
+        super(Notice.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QComment.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QComment.java
new file mode 100644
index 0000000..ef309f7
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QComment.java
@@ -0,0 +1,83 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QComment is a Querydsl query type for Comment
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QComment extends EntityPathBase<Comment> {
+
+    private static final long serialVersionUID = -1437509640L;
+
+    public static final QComment comment = new QComment("comment");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath commentedId = createString("commentedId");
+
+    public final StringPath commentedName = createString("commentedName");
+
+    public final StringPath commentId = createString("commentId");
+
+    public final NumberPath<Integer> commentLevel = createNumber("commentLevel", Integer.class);
+
+    public final StringPath commentObjectId = createString("commentObjectId");
+
+    public final StringPath commentParentId = createString("commentParentId");
+
+    public final NumberPath<java.math.BigInteger> commentPraiseCount = createNumber("commentPraiseCount", java.math.BigInteger.class);
+
+    public final StringPath commentter = createString("commentter");
+
+    public final StringPath commentterHeadimg = createString("commentterHeadimg");
+
+    public final StringPath commentterId = createString("commentterId");
+
+    public final DateTimePath<java.util.Date> commentTime = createDateTime("commentTime", java.util.Date.class);
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath passReviewFlag = createBoolean("passReviewFlag");
+
+    public final BooleanPath reviewFlag = createBoolean("reviewFlag");
+
+    public final StringPath source = createString("source");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QComment(String variable) {
+        super(Comment.class, forVariable(variable));
+    }
+
+    public QComment(Path<? extends Comment> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QComment(PathMetadata metadata) {
+        super(Comment.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentImg.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentImg.java
new file mode 100644
index 0000000..475ebf2
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentImg.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QCommentImg is a Querydsl query type for CommentImg
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QCommentImg extends EntityPathBase<CommentImg> {
+
+    private static final long serialVersionUID = 269296811L;
+
+    public static final QCommentImg commentImg = new QCommentImg("commentImg");
+
+    public final StringPath commentId = createString("commentId");
+
+    public final StringPath commentImgId = createString("commentImgId");
+
+    public final DateTimePath<java.util.Date> commentTime = createDateTime("commentTime", java.util.Date.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QCommentImg(String variable) {
+        super(CommentImg.class, forVariable(variable));
+    }
+
+    public QCommentImg(Path<? extends CommentImg> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QCommentImg(PathMetadata metadata) {
+        super(CommentImg.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentObject.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentObject.java
new file mode 100644
index 0000000..f8fcd61
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentObject.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QCommentObject is a Querydsl query type for CommentObject
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QCommentObject extends EntityPathBase<CommentObject> {
+
+    private static final long serialVersionUID = -215806633L;
+
+    public static final QCommentObject commentObject = new QCommentObject("commentObject");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath commentObjectId = createString("commentObjectId");
+
+    public final StringPath commentObjectName = createString("commentObjectName");
+
+    public final NumberPath<Short> commentObjectType = createNumber("commentObjectType", Short.class);
+
+    public final StringPath commentObjectUid = createString("commentObjectUid");
+
+    public final NumberPath<java.math.BigInteger> commentPraiseCount = createNumber("commentPraiseCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<java.math.BigInteger> viewCount = createNumber("viewCount", java.math.BigInteger.class);
+
+    public QCommentObject(String variable) {
+        super(CommentObject.class, forVariable(variable));
+    }
+
+    public QCommentObject(Path<? extends CommentObject> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QCommentObject(PathMetadata metadata) {
+        super(CommentObject.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentPraise.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentPraise.java
new file mode 100644
index 0000000..cdc0890
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QCommentPraise.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QCommentPraise is a Querydsl query type for CommentPraise
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QCommentPraise extends EntityPathBase<CommentPraise> {
+
+    private static final long serialVersionUID = -172664940L;
+
+    public static final QCommentPraise commentPraise = new QCommentPraise("commentPraise");
+
+    public final StringPath commentId = createString("commentId");
+
+    public final StringPath commentObjectId = createString("commentObjectId");
+
+    public final StringPath commentPraiseId = createString("commentPraiseId");
+
+    public final StringPath commentter = createString("commentter");
+
+    public final StringPath commentterId = createString("commentterId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath praise = createBoolean("praise");
+
+    public final DateTimePath<java.util.Date> praiseTime = createDateTime("praiseTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QCommentPraise(String variable) {
+        super(CommentPraise.class, forVariable(variable));
+    }
+
+    public QCommentPraise(Path<? extends CommentPraise> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QCommentPraise(PathMetadata metadata) {
+        super(CommentPraise.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsCommentToMe.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsCommentToMe.java
new file mode 100644
index 0000000..e3473c9
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsCommentToMe.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSnsCommentToMe is a Querydsl query type for SnsCommentToMe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSnsCommentToMe extends EntityPathBase<SnsCommentToMe> {
+
+    private static final long serialVersionUID = 561453089L;
+
+    public static final QSnsCommentToMe snsCommentToMe = new QSnsCommentToMe("snsCommentToMe");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath commentId = createString("commentId");
+
+    public final StringPath commentParentContent = createString("commentParentContent");
+
+    public final StringPath commentParentId = createString("commentParentId");
+
+    public final NumberPath<java.math.BigInteger> commentPraiseCount = createNumber("commentPraiseCount", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> commentTime = createDateTime("commentTime", java.util.Date.class);
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath topicDesc = createString("topicDesc");
+
+    public final StringPath topicId = createString("topicId");
+
+    public final StringPath topicName = createString("topicName");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath userId = createString("userId");
+
+    public QSnsCommentToMe(String variable) {
+        super(SnsCommentToMe.class, forVariable(variable));
+    }
+
+    public QSnsCommentToMe(Path<? extends SnsCommentToMe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSnsCommentToMe(PathMetadata metadata) {
+        super(SnsCommentToMe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyComment.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyComment.java
new file mode 100644
index 0000000..dac210d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyComment.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSnsMyComment is a Querydsl query type for SnsMyComment
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSnsMyComment extends EntityPathBase<SnsMyComment> {
+
+    private static final long serialVersionUID = -1927956862L;
+
+    public static final QSnsMyComment snsMyComment = new QSnsMyComment("snsMyComment");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath commentId = createString("commentId");
+
+    public final StringPath commentParentContent = createString("commentParentContent");
+
+    public final StringPath commentParentId = createString("commentParentId");
+
+    public final NumberPath<java.math.BigInteger> commentPraiseCount = createNumber("commentPraiseCount", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> commentTime = createDateTime("commentTime", java.util.Date.class);
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath topicDesc = createString("topicDesc");
+
+    public final StringPath topicId = createString("topicId");
+
+    public final StringPath topicName = createString("topicName");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath userId = createString("userId");
+
+    public QSnsMyComment(String variable) {
+        super(SnsMyComment.class, forVariable(variable));
+    }
+
+    public QSnsMyComment(Path<? extends SnsMyComment> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSnsMyComment(PathMetadata metadata) {
+        super(SnsMyComment.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyPraise.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyPraise.java
new file mode 100644
index 0000000..aede326
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsMyPraise.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSnsMyPraise is a Querydsl query type for SnsMyPraise
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSnsMyPraise extends EntityPathBase<SnsMyPraise> {
+
+    private static final long serialVersionUID = -1211624199L;
+
+    public static final QSnsMyPraise snsMyPraise = new QSnsMyPraise("snsMyPraise");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath commentId = createString("commentId");
+
+    public final NumberPath<java.math.BigInteger> commentPraiseCount = createNumber("commentPraiseCount", java.math.BigInteger.class);
+
+    public final StringPath commentPraiseId = createString("commentPraiseId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath name = createString("name");
+
+    public final DateTimePath<java.util.Date> praiseTime = createDateTime("praiseTime", java.util.Date.class);
+
+    public final StringPath topicDesc = createString("topicDesc");
+
+    public final StringPath topicId = createString("topicId");
+
+    public final StringPath topicName = createString("topicName");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath userId = createString("userId");
+
+    public QSnsMyPraise(String variable) {
+        super(SnsMyPraise.class, forVariable(variable));
+    }
+
+    public QSnsMyPraise(Path<? extends SnsMyPraise> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSnsMyPraise(PathMetadata metadata) {
+        super(SnsMyPraise.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsPraiseToMe.java b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsPraiseToMe.java
new file mode 100644
index 0000000..0402317
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/comment/mode/QSnsPraiseToMe.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.operation.comment.mode;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSnsPraiseToMe is a Querydsl query type for SnsPraiseToMe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSnsPraiseToMe extends EntityPathBase<SnsPraiseToMe> {
+
+    private static final long serialVersionUID = -580853888L;
+
+    public static final QSnsPraiseToMe snsPraiseToMe = new QSnsPraiseToMe("snsPraiseToMe");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath commentId = createString("commentId");
+
+    public final NumberPath<java.math.BigInteger> commentPraiseCount = createNumber("commentPraiseCount", java.math.BigInteger.class);
+
+    public final StringPath commentPraiseId = createString("commentPraiseId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath name = createString("name");
+
+    public final DateTimePath<java.util.Date> praiseTime = createDateTime("praiseTime", java.util.Date.class);
+
+    public final StringPath topicDesc = createString("topicDesc");
+
+    public final StringPath topicId = createString("topicId");
+
+    public final StringPath topicName = createString("topicName");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath userId = createString("userId");
+
+    public QSnsPraiseToMe(String variable) {
+        super(SnsPraiseToMe.class, forVariable(variable));
+    }
+
+    public QSnsPraiseToMe(Path<? extends SnsPraiseToMe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSnsPraiseToMe(PathMetadata metadata) {
+        super(SnsPraiseToMe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicClassRe.java b/target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicClassRe.java
new file mode 100644
index 0000000..53548ae
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicClassRe.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.operation.topic.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QTopicClassRe is a Querydsl query type for TopicClassRe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QTopicClassRe extends EntityPathBase<TopicClassRe> {
+
+    private static final long serialVersionUID = -1788910379L;
+
+    public static final QTopicClassRe topicClassRe = new QTopicClassRe("topicClassRe");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath TopicClassReId = createString("TopicClassReId");
+
+    public final StringPath topicId = createString("topicId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QTopicClassRe(String variable) {
+        super(TopicClassRe.class, forVariable(variable));
+    }
+
+    public QTopicClassRe(Path<? extends TopicClassRe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QTopicClassRe(PathMetadata metadata) {
+        super(TopicClassRe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicInfo.java b/target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicInfo.java
new file mode 100644
index 0000000..78bee20
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/operation/topic/model/QTopicInfo.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.operation.topic.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QTopicInfo is a Querydsl query type for TopicInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QTopicInfo extends EntityPathBase<TopicInfo> {
+
+    private static final long serialVersionUID = 828809700L;
+
+    public static final QTopicInfo topicInfo = new QTopicInfo("topicInfo");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<Short> commentFlag = createNumber("commentFlag", Short.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath latestCommentName = createString("latestCommentName");
+
+    public final DateTimePath<java.util.Date> latestCommentTime = createDateTime("latestCommentTime", java.util.Date.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final DateTimePath<java.util.Date> publishTime = createDateTime("publishTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> teacherFlag = createNumber("teacherFlag", Short.class);
+
+    public final StringPath topicDesc = createString("topicDesc");
+
+    public final StringPath topicId = createString("topicId");
+
+    public final StringPath topicName = createString("topicName");
+
+    public final NumberPath<Short> topicStatus = createNumber("topicStatus", Short.class);
+
+    public final NumberPath<Short> topicType = createNumber("topicType", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QTopicInfo(String variable) {
+        super(TopicInfo.class, forVariable(variable));
+    }
+
+    public QTopicInfo(Path<? extends TopicInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QTopicInfo(PathMetadata metadata) {
+        super(TopicInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QDiscoverBanner.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QDiscoverBanner.java
new file mode 100644
index 0000000..cf48350
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QDiscoverBanner.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QDiscoverBanner is a Querydsl query type for DiscoverBanner
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QDiscoverBanner extends EntityPathBase<DiscoverBanner> {
+
+    private static final long serialVersionUID = 1880157938L;
+
+    public static final QDiscoverBanner discoverBanner = new QDiscoverBanner("discoverBanner");
+
+    public final StringPath bannerId = createString("bannerId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath persentation = createString("persentation");
+
+    public final StringPath photoName = createString("photoName");
+
+    public final NumberPath<Integer> photoOrder = createNumber("photoOrder", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QDiscoverBanner(String variable) {
+        super(DiscoverBanner.class, forVariable(variable));
+    }
+
+    public QDiscoverBanner(Path<? extends DiscoverBanner> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QDiscoverBanner(PathMetadata metadata) {
+        super(DiscoverBanner.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QExternelTeacherInfo.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QExternelTeacherInfo.java
new file mode 100644
index 0000000..e6fe313
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QExternelTeacherInfo.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QExternelTeacherInfo is a Querydsl query type for ExternelTeacherInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QExternelTeacherInfo extends EntityPathBase<ExternelTeacherInfo> {
+
+    private static final long serialVersionUID = -389567348L;
+
+    public static final QExternelTeacherInfo externelTeacherInfo = new QExternelTeacherInfo("externelTeacherInfo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath organizationId = createString("organizationId");
+
+    public final StringPath organizationName = createString("organizationName");
+
+    public final StringPath selfDesc = createString("selfDesc");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QExternelTeacherInfo(String variable) {
+        super(ExternelTeacherInfo.class, forVariable(variable));
+    }
+
+    public QExternelTeacherInfo(Path<? extends ExternelTeacherInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QExternelTeacherInfo(PathMetadata metadata) {
+        super(ExternelTeacherInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAdmin.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAdmin.java
new file mode 100644
index 0000000..bfe4211
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAdmin.java
@@ -0,0 +1,74 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgAdmin is a Querydsl query type for OrgAdmin
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgAdmin extends EntityPathBase<OrgAdmin> {
+
+    private static final long serialVersionUID = 936006408L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgAdmin orgAdmin = new QOrgAdmin("orgAdmin");
+
+    public final StringPath adminId = createString("adminId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgAdminId = createString("orgAdminId");
+
+    public final QOrganization organization;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public QOrgAdmin(String variable) {
+        this(OrgAdmin.class, forVariable(variable), INITS);
+    }
+
+    public QOrgAdmin(Path<? extends OrgAdmin> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgAdmin(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgAdmin(PathMetadata metadata, PathInits inits) {
+        this(OrgAdmin.class, metadata, inits);
+    }
+
+    public QOrgAdmin(Class<? extends OrgAdmin> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+        this.user = inits.isInitialized("user") ? new com.qxueyou.scc.user.model.QUser(forProperty("user")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppInfo.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppInfo.java
new file mode 100644
index 0000000..b00b98f
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppInfo.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgAppInfo is a Querydsl query type for OrgAppInfo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgAppInfo extends EntityPathBase<OrgAppInfo> {
+
+    private static final long serialVersionUID = -2095603736L;
+
+    public static final QOrgAppInfo orgAppInfo = new QOrgAppInfo("orgAppInfo");
+
+    public final StringPath appCode = createString("appCode");
+
+    public final StringPath appDownloadUrl = createString("appDownloadUrl");
+
+    public final StringPath appId = createString("appId");
+
+    public final StringPath appName = createString("appName");
+
+    public final StringPath appUpdateTips = createString("appUpdateTips");
+
+    public final StringPath appVersion = createString("appVersion");
+
+    public final StringPath badgeUrl = createString("badgeUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath logoUrl = createString("logoUrl");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath textLogoUrl = createString("textLogoUrl");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgAppInfo(String variable) {
+        super(OrgAppInfo.class, forVariable(variable));
+    }
+
+    public QOrgAppInfo(Path<? extends OrgAppInfo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgAppInfo(PathMetadata metadata) {
+        super(OrgAppInfo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppMenu.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppMenu.java
new file mode 100644
index 0000000..47384b6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgAppMenu.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgAppMenu is a Querydsl query type for OrgAppMenu
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgAppMenu extends EntityPathBase<OrgAppMenu> {
+
+    private static final long serialVersionUID = -2095492967L;
+
+    public static final QOrgAppMenu orgAppMenu = new QOrgAppMenu("orgAppMenu");
+
+    public final StringPath color = createString("color");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath hidden = createBoolean("hidden");
+
+    public final StringPath iconUrl = createString("iconUrl");
+
+    public final NumberPath<Integer> level = createNumber("level", Integer.class);
+
+    public final NumberPath<Integer> menuOrder = createNumber("menuOrder", Integer.class);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgMenuId = createString("orgMenuId");
+
+    public final StringPath parentOrgMenuId = createString("parentOrgMenuId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QOrgAppMenu(String variable) {
+        super(OrgAppMenu.class, forVariable(variable));
+    }
+
+    public QOrgAppMenu(Path<? extends OrgAppMenu> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgAppMenu(PathMetadata metadata) {
+        super(OrgAppMenu.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBank.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBank.java
new file mode 100644
index 0000000..4e2aa21
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBank.java
@@ -0,0 +1,45 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgBank is a Querydsl query type for OrgBank
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgBank extends EntityPathBase<OrgBank> {
+
+    private static final long serialVersionUID = -1632347293L;
+
+    public static final QOrgBank orgBank = new QOrgBank("orgBank");
+
+    public final StringPath bankCode = createString("bankCode");
+
+    public final StringPath bankId = createString("bankId");
+
+    public final StringPath bankName = createString("bankName");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath shortName = createString("shortName");
+
+    public QOrgBank(String variable) {
+        super(OrgBank.class, forVariable(variable));
+    }
+
+    public QOrgBank(Path<? extends OrgBank> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgBank(PathMetadata metadata) {
+        super(OrgBank.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccount.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccount.java
new file mode 100644
index 0000000..9835300
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccount.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgBankAccount is a Querydsl query type for OrgBankAccount
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgBankAccount extends EntityPathBase<OrgBankAccount> {
+
+    private static final long serialVersionUID = -2099265206L;
+
+    public static final QOrgBankAccount orgBankAccount = new QOrgBankAccount("orgBankAccount");
+
+    public final StringPath accountName = createString("accountName");
+
+    public final StringPath accountNo = createString("accountNo");
+
+    public final StringPath accountType = createString("accountType");
+
+    public final StringPath bankAccountId = createString("bankAccountId");
+
+    public final StringPath bankId = createString("bankId");
+
+    public final StringPath bankName = createString("bankName");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath defaultAccount = createBoolean("defaultAccount");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath depositBank = createString("depositBank");
+
+    public final StringPath idNumber = createString("idNumber");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgBankAccount(String variable) {
+        super(OrgBankAccount.class, forVariable(variable));
+    }
+
+    public QOrgBankAccount(Path<? extends OrgBankAccount> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgBankAccount(PathMetadata metadata) {
+        super(OrgBankAccount.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccountRe.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccountRe.java
new file mode 100644
index 0000000..b848481
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBankAccountRe.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgBankAccountRe is a Querydsl query type for OrgBankAccountRe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgBankAccountRe extends EntityPathBase<OrgBankAccountRe> {
+
+    private static final long serialVersionUID = 1240768797L;
+
+    public static final QOrgBankAccountRe orgBankAccountRe = new QOrgBankAccountRe("orgBankAccountRe");
+
+    public final StringPath bankAccountId = createString("bankAccountId");
+
+    public final StringPath organizationId = createString("organizationId");
+
+    public final StringPath relationId = createString("relationId");
+
+    public QOrgBankAccountRe(String variable) {
+        super(OrgBankAccountRe.class, forVariable(variable));
+    }
+
+    public QOrgBankAccountRe(Path<? extends OrgBankAccountRe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgBankAccountRe(PathMetadata metadata) {
+        super(OrgBankAccountRe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBanner.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBanner.java
new file mode 100644
index 0000000..dbc32b3
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgBanner.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgBanner is a Querydsl query type for OrgBanner
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgBanner extends EntityPathBase<OrgBanner> {
+
+    private static final long serialVersionUID = -1022679405L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgBanner orgBanner = new QOrgBanner("orgBanner");
+
+    public final StringPath bannerId = createString("bannerId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath linkUrl = createString("linkUrl");
+
+    public final StringPath model = createString("model");
+
+    public final QOrganization organization;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath persentation = createString("persentation");
+
+    public final StringPath photoName = createString("photoName");
+
+    public final NumberPath<Integer> photoOrder = createNumber("photoOrder", Integer.class);
+
+    public final StringPath title = createString("title");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgBanner(String variable) {
+        this(OrgBanner.class, forVariable(variable), INITS);
+    }
+
+    public QOrgBanner(Path<? extends OrgBanner> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgBanner(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgBanner(PathMetadata metadata, PathInits inits) {
+        this(OrgBanner.class, metadata, inits);
+    }
+
+    public QOrgBanner(Class<? extends OrgBanner> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCategoryLevel.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCategoryLevel.java
new file mode 100644
index 0000000..29df29f
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCategoryLevel.java
@@ -0,0 +1,78 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgCategoryLevel is a Querydsl query type for OrgCategoryLevel
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCategoryLevel extends EntityPathBase<OrgCategoryLevel> {
+
+    private static final long serialVersionUID = 85582815L;
+
+    public static final QOrgCategoryLevel orgCategoryLevel = new QOrgCategoryLevel("orgCategoryLevel");
+
+    public final StringPath categoryLevelId = createString("categoryLevelId");
+
+    public final StringPath categoryName = createString("categoryName");
+
+    public final NumberPath<Short> categoryType = createNumber("categoryType", Short.class);
+
+    public final StringPath code = createString("code");
+
+    public final ListPath<OrgCollegeCourse, QOrgCollegeCourse> courses = this.<OrgCollegeCourse, QOrgCollegeCourse>createList("courses", OrgCollegeCourse.class, QOrgCollegeCourse.class, PathInits.DIRECT2);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fullName = createString("fullName");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final NumberPath<Short> level = createNumber("level", Short.class);
+
+    public final StringPath levelCode = createString("levelCode");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath parentId = createString("parentId");
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgCategoryLevel(String variable) {
+        super(OrgCategoryLevel.class, forVariable(variable));
+    }
+
+    public QOrgCategoryLevel(Path<? extends OrgCategoryLevel> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgCategoryLevel(PathMetadata metadata) {
+        super(OrgCategoryLevel.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCharger.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCharger.java
new file mode 100644
index 0000000..836e91c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCharger.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgCharger is a Querydsl query type for OrgCharger
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCharger extends EntityPathBase<OrgCharger> {
+
+    private static final long serialVersionUID = -562267721L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgCharger orgCharger = new QOrgCharger("orgCharger");
+
+    public final StringPath chargerId = createString("chargerId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final QOrganization organization;
+
+    public final StringPath orgChargerId = createString("orgChargerId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public QOrgCharger(String variable) {
+        this(OrgCharger.class, forVariable(variable), INITS);
+    }
+
+    public QOrgCharger(Path<? extends OrgCharger> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgCharger(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgCharger(PathMetadata metadata, PathInits inits) {
+        this(OrgCharger.class, metadata, inits);
+    }
+
+    public QOrgCharger(Class<? extends OrgCharger> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+        this.user = inits.isInitialized("user") ? new com.qxueyou.scc.user.model.QUser(forProperty("user")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClass.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClass.java
new file mode 100644
index 0000000..b85fa9e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClass.java
@@ -0,0 +1,169 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgClass is a Querydsl query type for OrgClass
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClass extends EntityPathBase<OrgClass> {
+
+    private static final long serialVersionUID = 938080561L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgClass orgClass = new QOrgClass("orgClass");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath addressId = createString("addressId");
+
+    public final StringPath advantage = createString("advantage");
+
+    public final StringPath arrangement = createString("arrangement");
+
+    public final QOrgCharger charger;
+
+    public final StringPath city = createString("city");
+
+    public final StringPath classCharger = createString("classCharger");
+
+    public final StringPath classChargerId = createString("classChargerId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classNumber = createString("classNumber");
+
+    public final StringPath classTypes = createString("classTypes");
+
+    public final NumberPath<java.math.BigDecimal> clickNum = createNumber("clickNum", java.math.BigDecimal.class);
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath collegeCourseName = createString("collegeCourseName");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigDecimal> discount = createNumber("discount", java.math.BigDecimal.class);
+
+    public final BooleanPath displayAnswer = createBoolean("displayAnswer");
+
+    public final NumberPath<java.math.BigDecimal> disprice = createNumber("disprice", java.math.BigDecimal.class);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final BooleanPath extended = createBoolean("extended");
+
+    public final BooleanPath forum = createBoolean("forum");
+
+    public final StringPath fullText = createString("fullText");
+
+    public final StringPath goodId = createString("goodId");
+
+    public final NumberPath<Integer> haveAward = createNumber("haveAward", Integer.class);
+
+    public final NumberPath<Integer> haveHandout = createNumber("haveHandout", Integer.class);
+
+    public final NumberPath<Integer> haveLive = createNumber("haveLive", Integer.class);
+
+    public final NumberPath<Integer> haveVideo = createNumber("haveVideo", Integer.class);
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath latitudeY = createString("latitudeY");
+
+    public final StringPath logitudeX = createString("logitudeX");
+
+    public final StringPath mode = createString("mode");
+
+    public final StringPath name = createString("name");
+
+    public final QOrganization org;
+
+    public final QOrgCollegeCourse orgCollegeCourse;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final BooleanPath overTime = createBoolean("overTime");
+
+    public final NumberPath<java.math.BigInteger> paymentNum = createNumber("paymentNum", java.math.BigInteger.class);
+
+    public final StringPath pointer = createString("pointer");
+
+    public final NumberPath<java.math.BigDecimal> price = createNumber("price", java.math.BigDecimal.class);
+
+    public final StringPath productId = createString("productId");
+
+    public final StringPath progress = createString("progress");
+
+    public final StringPath province = createString("province");
+
+    public final BooleanPath quitClass = createBoolean("quitClass");
+
+    public final BooleanPath recommend = createBoolean("recommend");
+
+    public final StringPath region = createString("region");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigInteger> stuAllCount = createNumber("stuAllCount", java.math.BigInteger.class);
+
+    public final NumberPath<Integer> studentCount = createNumber("studentCount", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> studyTime = createNumber("studyTime", java.math.BigDecimal.class);
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final BooleanPath topFlag = createBoolean("topFlag");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClass(String variable) {
+        this(OrgClass.class, forVariable(variable), INITS);
+    }
+
+    public QOrgClass(Path<? extends OrgClass> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgClass(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgClass(PathMetadata metadata, PathInits inits) {
+        this(OrgClass.class, metadata, inits);
+    }
+
+    public QOrgClass(Class<? extends OrgClass> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.charger = inits.isInitialized("charger") ? new QOrgCharger(forProperty("charger"), inits.get("charger")) : null;
+        this.org = inits.isInitialized("org") ? new QOrganization(forProperty("org")) : null;
+        this.orgCollegeCourse = inits.isInitialized("orgCollegeCourse") ? new QOrgCollegeCourse(forProperty("orgCollegeCourse"), inits.get("orgCollegeCourse")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassBanner.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassBanner.java
new file mode 100644
index 0000000..ec31fd3
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassBanner.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgClassBanner is a Querydsl query type for OrgClassBanner
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassBanner extends EntityPathBase<OrgClassBanner> {
+
+    private static final long serialVersionUID = 1795619773L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgClassBanner orgClassBanner = new QOrgClassBanner("orgClassBanner");
+
+    public final StringPath classBannerId = createString("classBannerId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final QOrganization organization;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath persentation = createString("persentation");
+
+    public final StringPath photoName = createString("photoName");
+
+    public final NumberPath<Integer> photoOrder = createNumber("photoOrder", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassBanner(String variable) {
+        this(OrgClassBanner.class, forVariable(variable), INITS);
+    }
+
+    public QOrgClassBanner(Path<? extends OrgClassBanner> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgClassBanner(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgClassBanner(PathMetadata metadata, PathInits inits) {
+        this(OrgClassBanner.class, metadata, inits);
+    }
+
+    public QOrgClassBanner(Class<? extends OrgClassBanner> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassQueryCm.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassQueryCm.java
new file mode 100644
index 0000000..c48f05e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassQueryCm.java
@@ -0,0 +1,155 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgClassQueryCm is a Querydsl query type for OrgClassQueryCm
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassQueryCm extends EntityPathBase<OrgClassQueryCm> {
+
+    private static final long serialVersionUID = 821699809L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgClassQueryCm orgClassQueryCm = new QOrgClassQueryCm("orgClassQueryCm");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath advantage = createString("advantage");
+
+    public final StringPath arrangement = createString("arrangement");
+
+    public final QOrgCharger charger;
+
+    public final StringPath city = createString("city");
+
+    public final StringPath classCharger = createString("classCharger");
+
+    public final StringPath classChargerId = createString("classChargerId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classTypes = createString("classTypes");
+
+    public final NumberPath<java.math.BigDecimal> clickNum = createNumber("clickNum", java.math.BigDecimal.class);
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath collegeCourseName = createString("collegeCourseName");
+
+    public final NumberPath<java.math.BigInteger> commentCount = createNumber("commentCount", java.math.BigInteger.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigDecimal> discount = createNumber("discount", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> disprice = createNumber("disprice", java.math.BigDecimal.class);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final BooleanPath extended = createBoolean("extended");
+
+    public final StringPath goodId = createString("goodId");
+
+    public final NumberPath<Integer> haveAward = createNumber("haveAward", Integer.class);
+
+    public final NumberPath<Integer> haveHandout = createNumber("haveHandout", Integer.class);
+
+    public final NumberPath<Integer> haveLive = createNumber("haveLive", Integer.class);
+
+    public final NumberPath<Integer> haveVideo = createNumber("haveVideo", Integer.class);
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath latitudeY = createString("latitudeY");
+
+    public final StringPath logitudeX = createString("logitudeX");
+
+    public final StringPath mode = createString("mode");
+
+    public final StringPath name = createString("name");
+
+    public final QOrganization org;
+
+    public final QOrgCollegeCourse orgCollegeCourse;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<java.math.BigInteger> paymentNum = createNumber("paymentNum", java.math.BigInteger.class);
+
+    public final StringPath pointer = createString("pointer");
+
+    public final NumberPath<java.math.BigDecimal> price = createNumber("price", java.math.BigDecimal.class);
+
+    public final StringPath productId = createString("productId");
+
+    public final StringPath progress = createString("progress");
+
+    public final StringPath province = createString("province");
+
+    public final BooleanPath recommend = createBoolean("recommend");
+
+    public final StringPath region = createString("region");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final NumberPath<Integer> signUpCount = createNumber("signUpCount", Integer.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigInteger> stuAllCount = createNumber("stuAllCount", java.math.BigInteger.class);
+
+    public final NumberPath<Integer> studentCount = createNumber("studentCount", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> studyTime = createNumber("studyTime", java.math.BigDecimal.class);
+
+    public final BooleanPath topFlag = createBoolean("topFlag");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassQueryCm(String variable) {
+        this(OrgClassQueryCm.class, forVariable(variable), INITS);
+    }
+
+    public QOrgClassQueryCm(Path<? extends OrgClassQueryCm> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgClassQueryCm(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgClassQueryCm(PathMetadata metadata, PathInits inits) {
+        this(OrgClassQueryCm.class, metadata, inits);
+    }
+
+    public QOrgClassQueryCm(Class<? extends OrgClassQueryCm> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.charger = inits.isInitialized("charger") ? new QOrgCharger(forProperty("charger"), inits.get("charger")) : null;
+        this.org = inits.isInitialized("org") ? new QOrganization(forProperty("org")) : null;
+        this.orgCollegeCourse = inits.isInitialized("orgCollegeCourse") ? new QOrgCollegeCourse(forProperty("orgCollegeCourse"), inits.get("orgCollegeCourse")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReTeacher.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReTeacher.java
new file mode 100644
index 0000000..b2de4fd
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReTeacher.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgClassReTeacher is a Querydsl query type for OrgClassReTeacher
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassReTeacher extends EntityPathBase<OrgClassReTeacher> {
+
+    private static final long serialVersionUID = 1450800126L;
+
+    public static final QOrgClassReTeacher orgClassReTeacher = new QOrgClassReTeacher("orgClassReTeacher");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final NumberPath<Integer> teacherType = createNumber("teacherType", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassReTeacher(String variable) {
+        super(OrgClassReTeacher.class, forVariable(variable));
+    }
+
+    public QOrgClassReTeacher(Path<? extends OrgClassReTeacher> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgClassReTeacher(PathMetadata metadata) {
+        super(OrgClassReTeacher.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReUser.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReUser.java
new file mode 100644
index 0000000..b490cef
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReUser.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgClassReUser is a Querydsl query type for OrgClassReUser
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassReUser extends EntityPathBase<OrgClassReUser> {
+
+    private static final long serialVersionUID = -2038326993L;
+
+    public static final QOrgClassReUser orgClassReUser = new QOrgClassReUser("orgClassReUser");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classUserId = createString("classUserId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DatePath<java.util.Date> orderTime = createDate("orderTime", java.util.Date.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgName = createString("orgName");
+
+    public final NumberPath<Integer> status = createNumber("status", Integer.class);
+
+    public final NumberPath<Integer> sutdyStatus = createNumber("sutdyStatus", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QOrgClassReUser(String variable) {
+        super(OrgClassReUser.class, forVariable(variable));
+    }
+
+    public QOrgClassReUser(Path<? extends OrgClassReUser> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgClassReUser(PathMetadata metadata) {
+        super(OrgClassReUser.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReferFee.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReferFee.java
new file mode 100644
index 0000000..49c6623
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassReferFee.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgClassReferFee is a Querydsl query type for OrgClassReferFee
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassReferFee extends EntityPathBase<OrgClassReferFee> {
+
+    private static final long serialVersionUID = 146961207L;
+
+    public static final QOrgClassReferFee orgClassReferFee = new QOrgClassReferFee("orgClassReferFee");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classReferFeeId = createString("classReferFeeId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigDecimal> referFee = createNumber("referFee", java.math.BigDecimal.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassReferFee(String variable) {
+        super(OrgClassReferFee.class, forVariable(variable));
+    }
+
+    public QOrgClassReferFee(Path<? extends OrgClassReferFee> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgClassReferFee(PathMetadata metadata) {
+        super(OrgClassReferFee.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassUserCustom.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassUserCustom.java
new file mode 100644
index 0000000..12066e6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassUserCustom.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgClassUserCustom is a Querydsl query type for OrgClassUserCustom
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassUserCustom extends EntityPathBase<OrgClassUserCustom> {
+
+    private static final long serialVersionUID = -725226707L;
+
+    public static final QOrgClassUserCustom orgClassUserCustom = new QOrgClassUserCustom("orgClassUserCustom");
+
+    public final BooleanPath checkedFlag = createBoolean("checkedFlag");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath customId = createString("customId");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath objectName = createString("objectName");
+
+    public final StringPath objectOption = createString("objectOption");
+
+    public final StringPath objectType = createString("objectType");
+
+    public final StringPath objectValue = createString("objectValue");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final BooleanPath requiredFlag = createBoolean("requiredFlag");
+
+    public final BooleanPath signupFillin = createBoolean("signupFillin");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassUserCustom(String variable) {
+        super(OrgClassUserCustom.class, forVariable(variable));
+    }
+
+    public QOrgClassUserCustom(Path<? extends OrgClassUserCustom> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgClassUserCustom(PathMetadata metadata) {
+        super(OrgClassUserCustom.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVideoPrivilege.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVideoPrivilege.java
new file mode 100644
index 0000000..da0942c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVideoPrivilege.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgClassVideoPrivilege is a Querydsl query type for OrgClassVideoPrivilege
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassVideoPrivilege extends EntityPathBase<OrgClassVideoPrivilege> {
+
+    private static final long serialVersionUID = -1029359609L;
+
+    public static final QOrgClassVideoPrivilege orgClassVideoPrivilege = new QOrgClassVideoPrivilege("orgClassVideoPrivilege");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath privilegeId = createString("privilegeId");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassVideoPrivilege(String variable) {
+        super(OrgClassVideoPrivilege.class, forVariable(variable));
+    }
+
+    public QOrgClassVideoPrivilege(Path<? extends OrgClassVideoPrivilege> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgClassVideoPrivilege(PathMetadata metadata) {
+        super(OrgClassVideoPrivilege.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVisitor.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVisitor.java
new file mode 100644
index 0000000..c33137a
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgClassVisitor.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgClassVisitor is a Querydsl query type for OrgClassVisitor
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgClassVisitor extends EntityPathBase<OrgClassVisitor> {
+
+    private static final long serialVersionUID = 633358845L;
+
+    public static final QOrgClassVisitor orgClassVisitor = new QOrgClassVisitor("orgClassVisitor");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classVisitorId = createString("classVisitorId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgClassVisitor(String variable) {
+        super(OrgClassVisitor.class, forVariable(variable));
+    }
+
+    public QOrgClassVisitor(Path<? extends OrgClassVisitor> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgClassVisitor(PathMetadata metadata) {
+        super(OrgClassVisitor.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollege.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollege.java
new file mode 100644
index 0000000..55add5d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollege.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgCollege is a Querydsl query type for OrgCollege
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCollege extends EntityPathBase<OrgCollege> {
+
+    private static final long serialVersionUID = -351885552L;
+
+    public static final QOrgCollege orgCollege = new QOrgCollege("orgCollege");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegeId = createString("collegeId");
+
+    public final StringPath contactor = createString("contactor");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fullName = createString("fullName");
+
+    public final NumberPath<Short> levelType = createNumber("levelType", Short.class);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath parentCollegeId = createString("parentCollegeId");
+
+    public final StringPath tel = createString("tel");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath website = createString("website");
+
+    public QOrgCollege(String variable) {
+        super(OrgCollege.class, forVariable(variable));
+    }
+
+    public QOrgCollege(Path<? extends OrgCollege> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgCollege(PathMetadata metadata) {
+        super(OrgCollege.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegeCourse.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegeCourse.java
new file mode 100644
index 0000000..455f897
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegeCourse.java
@@ -0,0 +1,106 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgCollegeCourse is a Querydsl query type for OrgCollegeCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCollegeCourse extends EntityPathBase<OrgCollegeCourse> {
+
+    private static final long serialVersionUID = 104392523L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgCollegeCourse orgCollegeCourse = new QOrgCollegeCourse("orgCollegeCourse");
+
+    public final QOrgCategoryLevel category;
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath collegeId = createString("collegeId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath courseCategoryId = createString("courseCategoryId");
+
+    public final StringPath courseCategoryName = createString("courseCategoryName");
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final NumberPath<Short> level = createNumber("level", Short.class);
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final QOrganization org;
+
+    public final StringPath organizationId = createString("organizationId");
+
+    public final QOrgCourse orgCourse;
+
+    public final NumberPath<java.math.BigDecimal> price = createNumber("price", java.math.BigDecimal.class);
+
+    public final BooleanPath recommend = createBoolean("recommend");
+
+    public final StringPath teacher = createString("teacher");
+
+    public final QOrganization topOrg;
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgCollegeCourse(String variable) {
+        this(OrgCollegeCourse.class, forVariable(variable), INITS);
+    }
+
+    public QOrgCollegeCourse(Path<? extends OrgCollegeCourse> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgCollegeCourse(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgCollegeCourse(PathMetadata metadata, PathInits inits) {
+        this(OrgCollegeCourse.class, metadata, inits);
+    }
+
+    public QOrgCollegeCourse(Class<? extends OrgCollegeCourse> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.category = inits.isInitialized("category") ? new QOrgCategoryLevel(forProperty("category")) : null;
+        this.org = inits.isInitialized("org") ? new QOrganization(forProperty("org")) : null;
+        this.orgCourse = inits.isInitialized("orgCourse") ? new QOrgCourse(forProperty("orgCourse"), inits.get("orgCourse")) : null;
+        this.topOrg = inits.isInitialized("topOrg") ? new QOrganization(forProperty("topOrg")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegePublic.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegePublic.java
new file mode 100644
index 0000000..8318fdd
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCollegePublic.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgCollegePublic is a Querydsl query type for OrgCollegePublic
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCollegePublic extends EntityPathBase<OrgCollegePublic> {
+
+    private static final long serialVersionUID = 481540505L;
+
+    public static final QOrgCollegePublic orgCollegePublic = new QOrgCollegePublic("orgCollegePublic");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegePublicId = createString("collegePublicId");
+
+    public final StringPath contactor = createString("contactor");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath parentCollegeId = createString("parentCollegeId");
+
+    public final StringPath shortName = createString("shortName");
+
+    public final StringPath tel = createString("tel");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath website = createString("website");
+
+    public QOrgCollegePublic(String variable) {
+        super(OrgCollegePublic.class, forVariable(variable));
+    }
+
+    public QOrgCollegePublic(Path<? extends OrgCollegePublic> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgCollegePublic(PathMetadata metadata) {
+        super(OrgCollegePublic.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourse.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourse.java
new file mode 100644
index 0000000..c522c4e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourse.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgCourse is a Querydsl query type for OrgCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCourse extends EntityPathBase<OrgCourse> {
+
+    private static final long serialVersionUID = -980908158L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgCourse orgCourse = new QOrgCourse("orgCourse");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath courseCategoryId = createString("courseCategoryId");
+
+    public final StringPath courseCategoryName = createString("courseCategoryName");
+
+    public final StringPath courseId = createString("courseId");
+
+    public final NumberPath<Short> courseType = createNumber("courseType", Short.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath extended = createBoolean("extended");
+
+    public final StringPath name = createString("name");
+
+    public final ListPath<OrgCollegeCourse, QOrgCollegeCourse> orgCollegeCourses = this.<OrgCollegeCourse, QOrgCollegeCourse>createList("orgCollegeCourses", OrgCollegeCourse.class, QOrgCollegeCourse.class, PathInits.DIRECT2);
+
+    public final QOrgCourseCategory orgCourseCategory;
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgCourse(String variable) {
+        this(OrgCourse.class, forVariable(variable), INITS);
+    }
+
+    public QOrgCourse(Path<? extends OrgCourse> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgCourse(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgCourse(PathMetadata metadata, PathInits inits) {
+        this(OrgCourse.class, metadata, inits);
+    }
+
+    public QOrgCourse(Class<? extends OrgCourse> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.orgCourseCategory = inits.isInitialized("orgCourseCategory") ? new QOrgCourseCategory(forProperty("orgCourseCategory"), inits.get("orgCourseCategory")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourseCategory.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourseCategory.java
new file mode 100644
index 0000000..fbfaef6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgCourseCategory.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgCourseCategory is a Querydsl query type for OrgCourseCategory
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgCourseCategory extends EntityPathBase<OrgCourseCategory> {
+
+    private static final long serialVersionUID = 632227488L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgCourseCategory orgCourseCategory = new QOrgCourseCategory("orgCourseCategory");
+
+    public final StringPath categoryId = createString("categoryId");
+
+    public final NumberPath<Short> categoryLevel = createNumber("categoryLevel", Short.class);
+
+    public final StringPath categoryName = createString("categoryName");
+
+    public final NumberPath<Short> categoryType = createNumber("categoryType", Short.class);
+
+    public final ListPath<OrgCourseCategory, QOrgCourseCategory> children = this.<OrgCourseCategory, QOrgCourseCategory>createList("children", OrgCourseCategory.class, QOrgCourseCategory.class, PathInits.DIRECT2);
+
+    public final StringPath code = createString("code");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fullName = createString("fullName");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final ListPath<OrgCourse, QOrgCourse> orgCourses = this.<OrgCourse, QOrgCourse>createList("orgCourses", OrgCourse.class, QOrgCourse.class, PathInits.DIRECT2);
+
+    public final QOrgCourseCategory parent;
+
+    public final StringPath parentCategoryId = createString("parentCategoryId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgCourseCategory(String variable) {
+        this(OrgCourseCategory.class, forVariable(variable), INITS);
+    }
+
+    public QOrgCourseCategory(Path<? extends OrgCourseCategory> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgCourseCategory(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgCourseCategory(PathMetadata metadata, PathInits inits) {
+        this(OrgCourseCategory.class, metadata, inits);
+    }
+
+    public QOrgCourseCategory(Class<? extends OrgCourseCategory> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.parent = inits.isInitialized("parent") ? new QOrgCourseCategory(forProperty("parent"), inits.get("parent")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgMarketPrivilege.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgMarketPrivilege.java
new file mode 100644
index 0000000..0bfd911
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgMarketPrivilege.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgMarketPrivilege is a Querydsl query type for OrgMarketPrivilege
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgMarketPrivilege extends EntityPathBase<OrgMarketPrivilege> {
+
+    private static final long serialVersionUID = 665862734L;
+
+    public static final QOrgMarketPrivilege orgMarketPrivilege = new QOrgMarketPrivilege("orgMarketPrivilege");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath marketPrivilegeId = createString("marketPrivilegeId");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final StringPath objectType = createString("objectType");
+
+    public final StringPath objectValue = createString("objectValue");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgMarketPrivilege(String variable) {
+        super(OrgMarketPrivilege.class, forVariable(variable));
+    }
+
+    public QOrgMarketPrivilege(Path<? extends OrgMarketPrivilege> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgMarketPrivilege(PathMetadata metadata) {
+        super(OrgMarketPrivilege.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPhotoalbum.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPhotoalbum.java
new file mode 100644
index 0000000..a0f5999
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPhotoalbum.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgPhotoalbum is a Querydsl query type for OrgPhotoalbum
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgPhotoalbum extends EntityPathBase<OrgPhotoalbum> {
+
+    private static final long serialVersionUID = -2070090908L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgPhotoalbum orgPhotoalbum = new QOrgPhotoalbum("orgPhotoalbum");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final QOrganization organization;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath persentation = createString("persentation");
+
+    public final StringPath photoId = createString("photoId");
+
+    public final StringPath photoName = createString("photoName");
+
+    public final NumberPath<Integer> photoOrder = createNumber("photoOrder", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgPhotoalbum(String variable) {
+        this(OrgPhotoalbum.class, forVariable(variable), INITS);
+    }
+
+    public QOrgPhotoalbum(Path<? extends OrgPhotoalbum> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgPhotoalbum(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgPhotoalbum(PathMetadata metadata, PathInits inits) {
+        this(OrgPhotoalbum.class, metadata, inits);
+    }
+
+    public QOrgPhotoalbum(Class<? extends OrgPhotoalbum> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPrivilege.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPrivilege.java
new file mode 100644
index 0000000..2f7179a
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgPrivilege.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgPrivilege is a Querydsl query type for OrgPrivilege
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgPrivilege extends EntityPathBase<OrgPrivilege> {
+
+    private static final long serialVersionUID = 1974387178L;
+
+    public static final QOrgPrivilege orgPrivilege = new QOrgPrivilege("orgPrivilege");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> objectType = createNumber("objectType", Integer.class);
+
+    public final StringPath objectValue = createString("objectValue");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final BooleanPath privilegeFlag = createBoolean("privilegeFlag");
+
+    public final StringPath privilegeId = createString("privilegeId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgPrivilege(String variable) {
+        super(OrgPrivilege.class, forVariable(variable));
+    }
+
+    public QOrgPrivilege(Path<? extends OrgPrivilege> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgPrivilege(PathMetadata metadata) {
+        super(OrgPrivilege.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgReCollegePublic.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgReCollegePublic.java
new file mode 100644
index 0000000..58d3a9e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgReCollegePublic.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgReCollegePublic is a Querydsl query type for OrgReCollegePublic
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgReCollegePublic extends EntityPathBase<OrgReCollegePublic> {
+
+    private static final long serialVersionUID = -733873178L;
+
+    public static final QOrgReCollegePublic orgReCollegePublic = new QOrgReCollegePublic("orgReCollegePublic");
+
+    public final StringPath collegePublicId = createString("collegePublicId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgReCollegePublic(String variable) {
+        super(OrgReCollegePublic.class, forVariable(variable));
+    }
+
+    public QOrgReCollegePublic(Path<? extends OrgReCollegePublic> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgReCollegePublic(PathMetadata metadata) {
+        super(OrgReCollegePublic.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgSalesman.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgSalesman.java
new file mode 100644
index 0000000..655a795
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgSalesman.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgSalesman is a Querydsl query type for OrgSalesman
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgSalesman extends EntityPathBase<OrgSalesman> {
+
+    private static final long serialVersionUID = 250452597L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgSalesman orgSalesman = new QOrgSalesman("orgSalesman");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final QOrganization organization;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath salesCodeId = createString("salesCodeId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public QOrgSalesman(String variable) {
+        this(OrgSalesman.class, forVariable(variable), INITS);
+    }
+
+    public QOrgSalesman(Path<? extends OrgSalesman> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgSalesman(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgSalesman(PathMetadata metadata, PathInits inits) {
+        this(OrgSalesman.class, metadata, inits);
+    }
+
+    public QOrgSalesman(Class<? extends OrgSalesman> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+        this.user = inits.isInitialized("user") ? new com.qxueyou.scc.user.model.QUser(forProperty("user")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStringExtend.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStringExtend.java
new file mode 100644
index 0000000..4f0483b
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStringExtend.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgStringExtend is a Querydsl query type for OrgStringExtend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgStringExtend extends EntityPathBase<OrgStringExtend> {
+
+    private static final long serialVersionUID = -185255758L;
+
+    public static final QOrgStringExtend orgStringExtend = new QOrgStringExtend("orgStringExtend");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath extendsId = createString("extendsId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final StringPath objectType = createString("objectType");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath value = createString("value");
+
+    public QOrgStringExtend(String variable) {
+        super(OrgStringExtend.class, forVariable(variable));
+    }
+
+    public QOrgStringExtend(Path<? extends OrgStringExtend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgStringExtend(PathMetadata metadata) {
+        super(OrgStringExtend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStudent.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStudent.java
new file mode 100644
index 0000000..f692d9b
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgStudent.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgStudent is a Querydsl query type for OrgStudent
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgStudent extends EntityPathBase<OrgStudent> {
+
+    private static final long serialVersionUID = 1114490804L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgStudent orgStudent = new QOrgStudent("orgStudent");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgStudentId = createString("orgStudentId");
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public QOrgStudent(String variable) {
+        this(OrgStudent.class, forVariable(variable), INITS);
+    }
+
+    public QOrgStudent(Path<? extends OrgStudent> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgStudent(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgStudent(PathMetadata metadata, PathInits inits) {
+        this(OrgStudent.class, metadata, inits);
+    }
+
+    public QOrgStudent(Class<? extends OrgStudent> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.user = inits.isInitialized("user") ? new com.qxueyou.scc.user.model.QUser(forProperty("user")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgTeacher.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgTeacher.java
new file mode 100644
index 0000000..62ade55
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgTeacher.java
@@ -0,0 +1,86 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrgTeacher is a Querydsl query type for OrgTeacher
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgTeacher extends EntityPathBase<OrgTeacher> {
+
+    private static final long serialVersionUID = 1554059611L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QOrgTeacher orgTeacher = new QOrgTeacher("orgTeacher");
+
+    public final ListPath<com.qxueyou.scc.school.model.SchClassSchedule, com.qxueyou.scc.school.model.QSchClassSchedule> classSchedules = this.<com.qxueyou.scc.school.model.SchClassSchedule, com.qxueyou.scc.school.model.QSchClassSchedule>createList("classSchedules", com.qxueyou.scc.school.model.SchClassSchedule.class, com.qxueyou.scc.school.model.QSchClassSchedule.class, PathInits.DIRECT2);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath description = createString("description");
+
+    public final StringPath education = createString("education");
+
+    public final StringPath jobNumber = createString("jobNumber");
+
+    public final StringPath name = createString("name");
+
+    public final QOrganization organization;
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgTeacherId = createString("orgTeacherId");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath title = createString("title");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public QOrgTeacher(String variable) {
+        this(OrgTeacher.class, forVariable(variable), INITS);
+    }
+
+    public QOrgTeacher(Path<? extends OrgTeacher> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QOrgTeacher(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QOrgTeacher(PathMetadata metadata, PathInits inits) {
+        this(OrgTeacher.class, metadata, inits);
+    }
+
+    public QOrgTeacher(Class<? extends OrgTeacher> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.organization = inits.isInitialized("organization") ? new QOrganization(forProperty("organization")) : null;
+        this.user = inits.isInitialized("user") ? new com.qxueyou.scc.user.model.QUser(forProperty("user")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgText.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgText.java
new file mode 100644
index 0000000..e2b2eea
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrgText.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrgText is a Querydsl query type for OrgText
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrgText extends EntityPathBase<OrgText> {
+
+    private static final long serialVersionUID = -1631806892L;
+
+    public static final QOrgText orgText = new QOrgText("orgText");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath key = createString("key");
+
+    public final StringPath orgTextId = createString("orgTextId");
+
+    public final StringPath tableName = createString("tableName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrgText(String variable) {
+        super(OrgText.class, forVariable(variable));
+    }
+
+    public QOrgText(Path<? extends OrgText> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrgText(PathMetadata metadata) {
+        super(OrgText.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganization.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganization.java
new file mode 100644
index 0000000..34005de
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganization.java
@@ -0,0 +1,84 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QOrganization is a Querydsl query type for Organization
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrganization extends EntityPathBase<Organization> {
+
+    private static final long serialVersionUID = -1256470800L;
+
+    public static final QOrganization organization = new QOrganization("organization");
+
+    public final ListPath<OrgAdmin, QOrgAdmin> admins = this.<OrgAdmin, QOrgAdmin>createList("admins", OrgAdmin.class, QOrgAdmin.class, PathInits.DIRECT2);
+
+    public final ListPath<OrgCharger, QOrgCharger> chargers = this.<OrgCharger, QOrgCharger>createList("chargers", OrgCharger.class, QOrgCharger.class, PathInits.DIRECT2);
+
+    public final StringPath code = createString("code");
+
+    public final ListPath<OrgCollegeCourse, QOrgCollegeCourse> courses = this.<OrgCollegeCourse, QOrgCollegeCourse>createList("courses", OrgCollegeCourse.class, QOrgCollegeCourse.class, PathInits.DIRECT2);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath deleteFlag = createString("deleteFlag");
+
+    public final StringPath logoPath = createString("logoPath");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath organizationId = createString("organizationId");
+
+    public final StringPath orgCode = createString("orgCode");
+
+    public final StringPath parentOrganizationId = createString("parentOrganizationId");
+
+    public final ListPath<OrgPhotoalbum, QOrgPhotoalbum> photoalbum = this.<OrgPhotoalbum, QOrgPhotoalbum>createList("photoalbum", OrgPhotoalbum.class, QOrgPhotoalbum.class, PathInits.DIRECT2);
+
+    public final ListPath<OrgSalesman, QOrgSalesman> salesmans = this.<OrgSalesman, QOrgSalesman>createList("salesmans", OrgSalesman.class, QOrgSalesman.class, PathInits.DIRECT2);
+
+    public final StringPath serverUrl = createString("serverUrl");
+
+    public final StringPath shortName = createString("shortName");
+
+    public final ListPath<OrgTeacher, QOrgTeacher> teachers = this.<OrgTeacher, QOrgTeacher>createList("teachers", OrgTeacher.class, QOrgTeacher.class, PathInits.DIRECT2);
+
+    public final StringPath tel = createString("tel");
+
+    public final ListPath<OrgCollegeCourse, QOrgCollegeCourse> topCourses = this.<OrgCollegeCourse, QOrgCollegeCourse>createList("topCourses", OrgCollegeCourse.class, QOrgCollegeCourse.class, PathInits.DIRECT2);
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrganization(String variable) {
+        super(Organization.class, forVariable(variable));
+    }
+
+    public QOrganization(Path<? extends Organization> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrganization(PathMetadata metadata) {
+        super(Organization.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationExtend.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationExtend.java
new file mode 100644
index 0000000..5cc4eb8
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationExtend.java
@@ -0,0 +1,53 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrganizationExtend is a Querydsl query type for OrganizationExtend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrganizationExtend extends EntityPathBase<OrganizationExtend> {
+
+    private static final long serialVersionUID = 1528200746L;
+
+    public static final QOrganizationExtend organizationExtend = new QOrganizationExtend("organizationExtend");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath hintDownappFlag = createBoolean("hintDownappFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrganizationExtend(String variable) {
+        super(OrganizationExtend.class, forVariable(variable));
+    }
+
+    public QOrganizationExtend(Path<? extends OrganizationExtend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrganizationExtend(PathMetadata metadata) {
+        super(OrganizationExtend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationUnion.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationUnion.java
new file mode 100644
index 0000000..868376d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QOrganizationUnion.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOrganizationUnion is a Querydsl query type for OrganizationUnion
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOrganizationUnion extends EntityPathBase<OrganizationUnion> {
+
+    private static final long serialVersionUID = -1044613697L;
+
+    public static final QOrganizationUnion organizationUnion = new QOrganizationUnion("organizationUnion");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fromOrgId = createString("fromOrgId");
+
+    public final StringPath orgUnionId = createString("orgUnionId");
+
+    public final StringPath toOrgId = createString("toOrgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QOrganizationUnion(String variable) {
+        super(OrganizationUnion.class, forVariable(variable));
+    }
+
+    public QOrganizationUnion(Path<? extends OrganizationUnion> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOrganizationUnion(PathMetadata metadata) {
+        super(OrganizationUnion.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarket.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarket.java
new file mode 100644
index 0000000..0724f88
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarket.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QVOrgCourseMarket is a Querydsl query type for VOrgCourseMarket
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QVOrgCourseMarket extends EntityPathBase<VOrgCourseMarket> {
+
+    private static final long serialVersionUID = -1607000798L;
+
+    public static final QVOrgCourseMarket vOrgCourseMarket = new QVOrgCourseMarket("vOrgCourseMarket");
+
+    public final StringPath city = createString("city");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<Integer> clickNum = createNumber("clickNum", Integer.class);
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath courseName = createString("courseName");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final NumberPath<java.math.BigDecimal> disPrice = createNumber("disPrice", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> lecturePeroid = createNumber("lecturePeroid", java.math.BigDecimal.class);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgName = createString("orgName");
+
+    public final NumberPath<java.math.BigDecimal> price = createNumber("price", java.math.BigDecimal.class);
+
+    public final BooleanPath recommend = createBoolean("recommend");
+
+    public final StringPath rewardAmount = createString("rewardAmount");
+
+    public final NumberPath<Integer> studentCount = createNumber("studentCount", Integer.class);
+
+    public QVOrgCourseMarket(String variable) {
+        super(VOrgCourseMarket.class, forVariable(variable));
+    }
+
+    public QVOrgCourseMarket(Path<? extends VOrgCourseMarket> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QVOrgCourseMarket(PathMetadata metadata) {
+        super(VOrgCourseMarket.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarketQuery.java b/target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarketQuery.java
new file mode 100644
index 0000000..7027ed0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/org/model/QVOrgCourseMarketQuery.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.org.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QVOrgCourseMarketQuery is a Querydsl query type for VOrgCourseMarketQuery
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QVOrgCourseMarketQuery extends EntityPathBase<VOrgCourseMarketQuery> {
+
+    private static final long serialVersionUID = -1520176954L;
+
+    public static final QVOrgCourseMarketQuery vOrgCourseMarketQuery = new QVOrgCourseMarketQuery("vOrgCourseMarketQuery");
+
+    public final StringPath categoryOrCourseId = createString("categoryOrCourseId");
+
+    public final StringPath city = createString("city");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath courseName = createString("courseName");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final NumberPath<java.math.BigDecimal> disPrice = createNumber("disPrice", java.math.BigDecimal.class);
+
+    public final StringPath fullText = createString("fullText");
+
+    public final BooleanPath haveHandout = createBoolean("haveHandout");
+
+    public final BooleanPath haveLive = createBoolean("haveLive");
+
+    public final BooleanPath haveVideo = createBoolean("haveVideo");
+
+    public final StringPath lat = createString("lat");
+
+    public final NumberPath<java.math.BigDecimal> lecturePeroid = createNumber("lecturePeroid", java.math.BigDecimal.class);
+
+    public final StringPath lng = createString("lng");
+
+    public final StringPath name = createString("name");
+
+    public final BooleanPath online = createBoolean("online");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgName = createString("orgName");
+
+    public final NumberPath<java.math.BigDecimal> price = createNumber("price", java.math.BigDecimal.class);
+
+    public final BooleanPath recommend = createBoolean("recommend");
+
+    public final NumberPath<java.math.BigDecimal> rewardAmount = createNumber("rewardAmount", java.math.BigDecimal.class);
+
+    public final NumberPath<Integer> studentCount = createNumber("studentCount", Integer.class);
+
+    public QVOrgCourseMarketQuery(String variable) {
+        super(VOrgCourseMarketQuery.class, forVariable(variable));
+    }
+
+    public QVOrgCourseMarketQuery(Path<? extends VOrgCourseMarketQuery> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QVOrgCourseMarketQuery(PathMetadata metadata) {
+        super(VOrgCourseMarketQuery.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QClassCardTemplet.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QClassCardTemplet.java
new file mode 100644
index 0000000..f0c0939
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QClassCardTemplet.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QClassCardTemplet is a Querydsl query type for ClassCardTemplet
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QClassCardTemplet extends EntityPathBase<ClassCardTemplet> {
+
+    private static final long serialVersionUID = 1500487824L;
+
+    public static final QClassCardTemplet classCardTemplet = new QClassCardTemplet("classCardTemplet");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fieldName = createString("fieldName");
+
+    public final StringPath fieldType = createString("fieldType");
+
+    public final StringPath templetId = createString("templetId");
+
+    public final NumberPath<Integer> templetNo = createNumber("templetNo", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QClassCardTemplet(String variable) {
+        super(ClassCardTemplet.class, forVariable(variable));
+    }
+
+    public QClassCardTemplet(Path<? extends ClassCardTemplet> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QClassCardTemplet(PathMetadata metadata) {
+        super(ClassCardTemplet.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentV.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentV.java
new file mode 100644
index 0000000..0fda61b
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentV.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QEvaluateStuStudentV is a Querydsl query type for EvaluateStuStudentV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QEvaluateStuStudentV extends EntityPathBase<EvaluateStuStudentV> {
+
+    private static final long serialVersionUID = -1628906683L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QEvaluateStuStudentV evaluateStuStudentV = new QEvaluateStuStudentV("evaluateStuStudentV");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final NumberPath<java.math.BigInteger> evaluateCount = createNumber("evaluateCount", java.math.BigInteger.class);
+
+    public final StringPath evaluateName = createString("evaluateName");
+
+    public final QEvaluateStuStudentVId id;
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public QEvaluateStuStudentV(String variable) {
+        this(EvaluateStuStudentV.class, forVariable(variable), INITS);
+    }
+
+    public QEvaluateStuStudentV(Path<? extends EvaluateStuStudentV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QEvaluateStuStudentV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QEvaluateStuStudentV(PathMetadata metadata, PathInits inits) {
+        this(EvaluateStuStudentV.class, metadata, inits);
+    }
+
+    public QEvaluateStuStudentV(Class<? extends EvaluateStuStudentV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QEvaluateStuStudentVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentVId.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentVId.java
new file mode 100644
index 0000000..0f7f848
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QEvaluateStuStudentVId.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QEvaluateStuStudentVId is a Querydsl query type for EvaluateStuStudentVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QEvaluateStuStudentVId extends BeanPath<EvaluateStuStudentVId> {
+
+    private static final long serialVersionUID = -2011224256L;
+
+    public static final QEvaluateStuStudentVId evaluateStuStudentVId = new QEvaluateStuStudentVId("evaluateStuStudentVId");
+
+    public final StringPath evaluateId = createString("evaluateId");
+
+    public final StringPath userId = createString("userId");
+
+    public QEvaluateStuStudentVId(String variable) {
+        super(EvaluateStuStudentVId.class, forVariable(variable));
+    }
+
+    public QEvaluateStuStudentVId(Path<? extends EvaluateStuStudentVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QEvaluateStuStudentVId(PathMetadata metadata) {
+        super(EvaluateStuStudentVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QHandoutConverTask.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QHandoutConverTask.java
new file mode 100644
index 0000000..4ba2d67
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QHandoutConverTask.java
@@ -0,0 +1,49 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QHandoutConverTask is a Querydsl query type for HandoutConverTask
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QHandoutConverTask extends EntityPathBase<HandoutConverTask> {
+
+    private static final long serialVersionUID = 1717451636L;
+
+    public static final QHandoutConverTask handoutConverTask = new QHandoutConverTask("handoutConverTask");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final StringPath handoutUrl = createString("handoutUrl");
+
+    public final NumberPath<Integer> status = createNumber("status", Integer.class);
+
+    public final StringPath taskId = createString("taskId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public QHandoutConverTask(String variable) {
+        super(HandoutConverTask.class, forVariable(variable));
+    }
+
+    public QHandoutConverTask(Path<? extends HandoutConverTask> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QHandoutConverTask(PathMetadata metadata) {
+        super(HandoutConverTask.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QLessionSignStatistics.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QLessionSignStatistics.java
new file mode 100644
index 0000000..2e779b0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QLessionSignStatistics.java
@@ -0,0 +1,89 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QLessionSignStatistics is a Querydsl query type for LessionSignStatistics
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QLessionSignStatistics extends EntityPathBase<LessionSignStatistics> {
+
+    private static final long serialVersionUID = 649091710L;
+
+    public static final QLessionSignStatistics lessionSignStatistics = new QLessionSignStatistics("lessionSignStatistics");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath className = createString("className");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath classScheduleName = createString("classScheduleName");
+
+    public final StringPath classSubjectId = createString("classSubjectId");
+
+    public final StringPath classSubjectName = createString("classSubjectName");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath collegeCourseName = createString("collegeCourseName");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final NumberPath<Integer> firstSignUserCount = createNumber("firstSignUserCount", Integer.class);
+
+    public final NumberPath<Integer> lastSignUserCount = createNumber("lastSignUserCount", Integer.class);
+
+    public final StringPath lessionSignId = createString("lessionSignId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgName = createString("orgName");
+
+    public final NumberPath<Short> signType = createNumber("signType", Short.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> statisticsTime = createDateTime("statisticsTime", java.util.Date.class);
+
+    public final StringPath topOrganizationId = createString("topOrganizationId");
+
+    public final NumberPath<Integer> totalSignUserCount = createNumber("totalSignUserCount", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QLessionSignStatistics(String variable) {
+        super(LessionSignStatistics.class, forVariable(variable));
+    }
+
+    public QLessionSignStatistics(Path<? extends LessionSignStatistics> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QLessionSignStatistics(PathMetadata metadata) {
+        super(LessionSignStatistics.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticle.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticle.java
new file mode 100644
index 0000000..45baa81
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticle.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchArticle is a Querydsl query type for SchArticle
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchArticle extends EntityPathBase<SchArticle> {
+
+    private static final long serialVersionUID = 2009576207L;
+
+    public static final QSchArticle schArticle = new QSchArticle("schArticle");
+
+    public final StringPath articleId = createString("articleId");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final NumberPath<Integer> commentCount = createNumber("commentCount", Integer.class);
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath originArticleId = createString("originArticleId");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public final NumberPath<Integer> viewCount = createNumber("viewCount", Integer.class);
+
+    public QSchArticle(String variable) {
+        super(SchArticle.class, forVariable(variable));
+    }
+
+    public QSchArticle(Path<? extends SchArticle> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchArticle(PathMetadata metadata) {
+        super(SchArticle.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleReCourse.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleReCourse.java
new file mode 100644
index 0000000..7cde1c7
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleReCourse.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchArticleReCourse is a Querydsl query type for SchArticleReCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchArticleReCourse extends EntityPathBase<SchArticleReCourse> {
+
+    private static final long serialVersionUID = -402341795L;
+
+    public static final QSchArticleReCourse schArticleReCourse = new QSchArticleReCourse("schArticleReCourse");
+
+    public final StringPath articleCourseId = createString("articleCourseId");
+
+    public final StringPath articleId = createString("articleId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchArticleReCourse(String variable) {
+        super(SchArticleReCourse.class, forVariable(variable));
+    }
+
+    public QSchArticleReCourse(Path<? extends SchArticleReCourse> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchArticleReCourse(PathMetadata metadata) {
+        super(SchArticleReCourse.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleStatistic.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleStatistic.java
new file mode 100644
index 0000000..2a4ce2c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchArticleStatistic.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchArticleStatistic is a Querydsl query type for SchArticleStatistic
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchArticleStatistic extends EntityPathBase<SchArticleStatistic> {
+
+    private static final long serialVersionUID = -35395839L;
+
+    public static final QSchArticleStatistic schArticleStatistic = new QSchArticleStatistic("schArticleStatistic");
+
+    public final StringPath articleId = createString("articleId");
+
+    public final StringPath articleName = createString("articleName");
+
+    public final StringPath articleStatisticId = createString("articleStatisticId");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<Double> compDegree = createNumber("compDegree", Double.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchArticleStatistic(String variable) {
+        super(SchArticleStatistic.class, forVariable(variable));
+    }
+
+    public QSchArticleStatistic(Path<? extends SchArticleStatistic> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchArticleStatistic(PathMetadata metadata) {
+        super(SchArticleStatistic.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchChapter.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchChapter.java
new file mode 100644
index 0000000..8598bf5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchChapter.java
@@ -0,0 +1,95 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchChapter is a Querydsl query type for SchChapter
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchChapter extends EntityPathBase<SchChapter> {
+
+    private static final long serialVersionUID = -813997466L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchChapter schChapter = new QSchChapter("schChapter");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final ListPath<SchChapter, QSchChapter> childs = this.<SchChapter, QSchChapter>createList("childs", SchChapter.class, QSchChapter.class, PathInits.DIRECT2);
+
+    public final StringPath classId = createString("classId");
+
+    public final QSchClassSubject classSubject;
+
+    public final StringPath code = createString("code");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgChapterId = createString("orgChapterId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath origChapterId = createString("origChapterId");
+
+    public final QSchChapter parent;
+
+    public final StringPath parentChapterId = createString("parentChapterId");
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchChapter(String variable) {
+        this(SchChapter.class, forVariable(variable), INITS);
+    }
+
+    public QSchChapter(Path<? extends SchChapter> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchChapter(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchChapter(PathMetadata metadata, PathInits inits) {
+        this(SchChapter.class, metadata, inits);
+    }
+
+    public QSchChapter(Class<? extends SchChapter> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.classSubject = inits.isInitialized("classSubject") ? new QSchClassSubject(forProperty("classSubject")) : null;
+        this.parent = inits.isInitialized("parent") ? new QSchChapter(forProperty("parent"), inits.get("parent")) : null;
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCard.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCard.java
new file mode 100644
index 0000000..70e072d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCard.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchClassCard is a Querydsl query type for SchClassCard
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassCard extends EntityPathBase<SchClassCard> {
+
+    private static final long serialVersionUID = -2102271871L;
+
+    public static final QSchClassCard schClassCard = new QSchClassCard("schClassCard");
+
+    public final StringPath cardName = createString("cardName");
+
+    public final StringPath classCardId = createString("classCardId");
+
+    public final StringPath classId = createString("classId");
+
+    public final BooleanPath codeFlag = createBoolean("codeFlag");
+
+    public final StringPath codeUrl = createString("codeUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath doubleSidedFlag = createBoolean("doubleSidedFlag");
+
+    public final StringPath headImgField = createString("headImgField");
+
+    public final BooleanPath headImgFlag = createBoolean("headImgFlag");
+
+    public final BooleanPath signCodeFlag = createBoolean("signCodeFlag");
+
+    public final StringPath slogan = createString("slogan");
+
+    public final NumberPath<Integer> templetNo = createNumber("templetNo", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchClassCard(String variable) {
+        super(SchClassCard.class, forVariable(variable));
+    }
+
+    public QSchClassCard(Path<? extends SchClassCard> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchClassCard(PathMetadata metadata) {
+        super(SchClassCard.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCardTemplet.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCardTemplet.java
new file mode 100644
index 0000000..6d035e0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCardTemplet.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchClassCardTemplet is a Querydsl query type for SchClassCardTemplet
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassCardTemplet extends EntityPathBase<SchClassCardTemplet> {
+
+    private static final long serialVersionUID = -1308413434L;
+
+    public static final QSchClassCardTemplet schClassCardTemplet = new QSchClassCardTemplet("schClassCardTemplet");
+
+    public final StringPath cardTempletId = createString("cardTempletId");
+
+    public final StringPath classCardId = createString("classCardId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fieldValue = createString("fieldValue");
+
+    public final StringPath fieldValueExtend = createString("fieldValueExtend");
+
+    public final StringPath templetid = createString("templetid");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchClassCardTemplet(String variable) {
+        super(SchClassCardTemplet.class, forVariable(variable));
+    }
+
+    public QSchClassCardTemplet(Path<? extends SchClassCardTemplet> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchClassCardTemplet(PathMetadata metadata) {
+        super(SchClassCardTemplet.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircle.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircle.java
new file mode 100644
index 0000000..3a16bbb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircle.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchClassCircle is a Querydsl query type for SchClassCircle
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassCircle extends EntityPathBase<SchClassCircle> {
+
+    private static final long serialVersionUID = -1641248255L;
+
+    public static final QSchClassCircle schClassCircle = new QSchClassCircle("schClassCircle");
+
+    public final NumberPath<Integer> authorize = createNumber("authorize", Integer.class);
+
+    public final NumberPath<Integer> authorizeToOther = createNumber("authorizeToOther", Integer.class);
+
+    public final StringPath backgroundUrl = createString("backgroundUrl");
+
+    public final StringPath classCircleId = createString("classCircleId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DatePath<java.util.Date> createTime = createDate("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath enable = createBoolean("enable");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DatePath<java.util.Date> updateTime = createDate("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchClassCircle(String variable) {
+        super(SchClassCircle.class, forVariable(variable));
+    }
+
+    public QSchClassCircle(Path<? extends SchClassCircle> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchClassCircle(PathMetadata metadata) {
+        super(SchClassCircle.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircleMsg.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircleMsg.java
new file mode 100644
index 0000000..d682016
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCircleMsg.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchClassCircleMsg is a Querydsl query type for SchClassCircleMsg
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassCircleMsg extends EntityPathBase<SchClassCircleMsg> {
+
+    private static final long serialVersionUID = -518989376L;
+
+    public static final QSchClassCircleMsg schClassCircleMsg = new QSchClassCircleMsg("schClassCircleMsg");
+
+    public final StringPath classCircleId = createString("classCircleId");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<Integer> commentCount = createNumber("commentCount", Integer.class);
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> likeCount = createNumber("likeCount", Integer.class);
+
+    public final StringPath msgId = createString("msgId");
+
+    public final NumberPath<Integer> msgType = createNumber("msgType", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath title = createString("title");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QSchClassCircleMsg(String variable) {
+        super(SchClassCircleMsg.class, forVariable(variable));
+    }
+
+    public QSchClassCircleMsg(Path<? extends SchClassCircleMsg> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchClassCircleMsg(PathMetadata metadata) {
+        super(SchClassCircleMsg.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCourseware.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCourseware.java
new file mode 100644
index 0000000..3295f05
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassCourseware.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchClassCourseware is a Querydsl query type for SchClassCourseware
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassCourseware extends EntityPathBase<SchClassCourseware> {
+
+    private static final long serialVersionUID = 399161801L;
+
+    public static final QSchClassCourseware schClassCourseware = new QSchClassCourseware("schClassCourseware");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath id = createString("id");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath parentChapterId = createString("parentChapterId");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath type = createString("type");
+
+    public QSchClassCourseware(String variable) {
+        super(SchClassCourseware.class, forVariable(variable));
+    }
+
+    public QSchClassCourseware(Path<? extends SchClassCourseware> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchClassCourseware(PathMetadata metadata) {
+        super(SchClassCourseware.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSchedule.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSchedule.java
new file mode 100644
index 0000000..408841c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSchedule.java
@@ -0,0 +1,114 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchClassSchedule is a Querydsl query type for SchClassSchedule
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassSchedule extends EntityPathBase<SchClassSchedule> {
+
+    private static final long serialVersionUID = -186132600L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchClassSchedule schClassSchedule = new QSchClassSchedule("schClassSchedule");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath addressId = createString("addressId");
+
+    public final ListPath<com.qxueyou.scc.exercise.model.ExerciseChapter, com.qxueyou.scc.exercise.model.QExerciseChapter> chapters = this.<com.qxueyou.scc.exercise.model.ExerciseChapter, com.qxueyou.scc.exercise.model.QExerciseChapter>createList("chapters", com.qxueyou.scc.exercise.model.ExerciseChapter.class, com.qxueyou.scc.exercise.model.QExerciseChapter.class, PathInits.DIRECT2);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath classSubjectId = createString("classSubjectId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath dayEndId = createString("dayEndId");
+
+    public final NumberPath<Short> dayEndOrder = createNumber("dayEndOrder", Short.class);
+
+    public final StringPath dayStartId = createString("dayStartId");
+
+    public final NumberPath<Short> dayStartOrder = createNumber("dayStartOrder", Short.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath mode = createString("mode");
+
+    public final StringPath name = createString("name");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectExtendId = createString("subjectExtendId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath teacher = createString("teacher");
+
+    public final com.qxueyou.scc.org.model.QOrgTeacher teacherClassSchedule;
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath termId = createString("termId");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchClassSchedule(String variable) {
+        this(SchClassSchedule.class, forVariable(variable), INITS);
+    }
+
+    public QSchClassSchedule(Path<? extends SchClassSchedule> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchClassSchedule(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchClassSchedule(PathMetadata metadata, PathInits inits) {
+        this(SchClassSchedule.class, metadata, inits);
+    }
+
+    public QSchClassSchedule(Class<? extends SchClassSchedule> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+        this.teacherClassSchedule = inits.isInitialized("teacherClassSchedule") ? new com.qxueyou.scc.org.model.QOrgTeacher(forProperty("teacherClassSchedule"), inits.get("teacherClassSchedule")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSubject.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSubject.java
new file mode 100644
index 0000000..a8f52e9
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchClassSubject.java
@@ -0,0 +1,80 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchClassSubject is a Querydsl query type for SchClassSubject
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchClassSubject extends EntityPathBase<SchClassSubject> {
+
+    private static final long serialVersionUID = -1989923301L;
+
+    public static final QSchClassSubject schClassSubject = new QSchClassSubject("schClassSubject");
+
+    public final StringPath classId = createString("classId");
+
+    public final ListPath<SchClassSchedule, QSchClassSchedule> classSchedules = this.<SchClassSchedule, QSchClassSchedule>createList("classSchedules", SchClassSchedule.class, QSchClassSchedule.class, PathInits.DIRECT2);
+
+    public final StringPath classSubjectId = createString("classSubjectId");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final NumberPath<java.math.BigDecimal> credit = createNumber("credit", java.math.BigDecimal.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> examinationForm = createNumber("examinationForm", Short.class);
+
+    public final StringPath fullName = createString("fullName");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath origClassSubjectId = createString("origClassSubjectId");
+
+    public final StringPath origSubjectId = createString("origSubjectId");
+
+    public final ListPath<SchStudentSchedule, QSchStudentSchedule> studentSchedules = this.<SchStudentSchedule, QSchStudentSchedule>createList("studentSchedules", SchStudentSchedule.class, QSchStudentSchedule.class, PathInits.DIRECT2);
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchClassSubject(String variable) {
+        super(SchClassSubject.class, forVariable(variable));
+    }
+
+    public QSchClassSubject(Path<? extends SchClassSubject> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchClassSubject(PathMetadata metadata) {
+        super(SchClassSubject.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchCourseware.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchCourseware.java
new file mode 100644
index 0000000..44115c6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchCourseware.java
@@ -0,0 +1,87 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchCourseware is a Querydsl query type for SchCourseware
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchCourseware extends EntityPathBase<SchCourseware> {
+
+    private static final long serialVersionUID = 2062656607L;
+
+    public static final QSchCourseware schCourseware = new QSchCourseware("schCourseware");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final NumberPath<Integer> chapterOrder = createNumber("chapterOrder", Integer.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath coursewareId = createString("coursewareId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final NumberPath<Integer> cType = createNumber("cType", Integer.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath describe = createString("describe");
+
+    public final StringPath id = createString("id");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath parentChapterId = createString("parentChapterId");
+
+    public final NumberPath<Integer> partOrder = createNumber("partOrder", Integer.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final NumberPath<java.math.BigDecimal> scoreValue = createNumber("scoreValue", java.math.BigDecimal.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final NumberPath<Integer> subjectOrder = createNumber("subjectOrder", Integer.class);
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchCourseware(String variable) {
+        super(SchCourseware.class, forVariable(variable));
+    }
+
+    public QSchCourseware(Path<? extends SchCourseware> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchCourseware(PathMetadata metadata) {
+        super(SchCourseware.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaRecordRe.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaRecordRe.java
new file mode 100644
index 0000000..e75c916
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaRecordRe.java
@@ -0,0 +1,45 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchEvaRecordRe is a Querydsl query type for SchEvaRecordRe
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchEvaRecordRe extends EntityPathBase<SchEvaRecordRe> {
+
+    private static final long serialVersionUID = 1093006829L;
+
+    public static final QSchEvaRecordRe schEvaRecordRe = new QSchEvaRecordRe("schEvaRecordRe");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath evaluateId = createString("evaluateId");
+
+    public final StringPath exerciseRecordId = createString("exerciseRecordId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath relationId = createString("relationId");
+
+    public QSchEvaRecordRe(String variable) {
+        super(SchEvaRecordRe.class, forVariable(variable));
+    }
+
+    public QSchEvaRecordRe(Path<? extends SchEvaRecordRe> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchEvaRecordRe(PathMetadata metadata) {
+        super(SchEvaRecordRe.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluate.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluate.java
new file mode 100644
index 0000000..0ff13ca
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluate.java
@@ -0,0 +1,87 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchEvaluate is a Querydsl query type for SchEvaluate
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchEvaluate extends EntityPathBase<SchEvaluate> {
+
+    private static final long serialVersionUID = -736982624L;
+
+    public static final QSchEvaluate schEvaluate = new QSchEvaluate("schEvaluate");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath evalObjectId = createString("evalObjectId");
+
+    public final StringPath evalObjectName = createString("evalObjectName");
+
+    public final NumberPath<java.math.BigInteger> evalRangeCount = createNumber("evalRangeCount", java.math.BigInteger.class);
+
+    public final StringPath evalRangeId = createString("evalRangeId");
+
+    public final StringPath evalRangeName = createString("evalRangeName");
+
+    public final StringPath evalRangeType = createString("evalRangeType");
+
+    public final StringPath evalTemplateId = createString("evalTemplateId");
+
+    public final StringPath evalTemplateName = createString("evalTemplateName");
+
+    public final NumberPath<java.math.BigInteger> evaluateCount = createNumber("evaluateCount", java.math.BigInteger.class);
+
+    public final StringPath evaluateId = createString("evaluateId");
+
+    public final StringPath evaluateName = createString("evaluateName");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath remark = createString("remark");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchEvaluate(String variable) {
+        super(SchEvaluate.class, forVariable(variable));
+    }
+
+    public QSchEvaluate(Path<? extends SchEvaluate> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchEvaluate(PathMetadata metadata) {
+        super(SchEvaluate.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateCategory.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateCategory.java
new file mode 100644
index 0000000..7836023
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateCategory.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchEvaluateCategory is a Querydsl query type for SchEvaluateCategory
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchEvaluateCategory extends EntityPathBase<SchEvaluateCategory> {
+
+    private static final long serialVersionUID = -216266050L;
+
+    public static final QSchEvaluateCategory schEvaluateCategory = new QSchEvaluateCategory("schEvaluateCategory");
+
+    public final StringPath categoryId = createString("categoryId");
+
+    public final StringPath categoryKey = createString("categoryKey");
+
+    public final StringPath categoryName = createString("categoryName");
+
+    public final StringPath categoryValue = createString("categoryValue");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath evalTemplateId = createString("evalTemplateId");
+
+    public final StringPath parentCategoryId = createString("parentCategoryId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchEvaluateCategory(String variable) {
+        super(SchEvaluateCategory.class, forVariable(variable));
+    }
+
+    public QSchEvaluateCategory(Path<? extends SchEvaluateCategory> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchEvaluateCategory(PathMetadata metadata) {
+        super(SchEvaluateCategory.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateDetail.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateDetail.java
new file mode 100644
index 0000000..e2c660b
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateDetail.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchEvaluateDetail is a Querydsl query type for SchEvaluateDetail
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchEvaluateDetail extends EntityPathBase<SchEvaluateDetail> {
+
+    private static final long serialVersionUID = -1107569135L;
+
+    public static final QSchEvaluateDetail schEvaluateDetail = new QSchEvaluateDetail("schEvaluateDetail");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath evaluateDetailId = createString("evaluateDetailId");
+
+    public final StringPath evaluateId = createString("evaluateId");
+
+    public final StringPath evaluater = createString("evaluater");
+
+    public final StringPath evaluaterId = createString("evaluaterId");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchEvaluateDetail(String variable) {
+        super(SchEvaluateDetail.class, forVariable(variable));
+    }
+
+    public QSchEvaluateDetail(Path<? extends SchEvaluateDetail> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchEvaluateDetail(PathMetadata metadata) {
+        super(SchEvaluateDetail.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateQuota.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateQuota.java
new file mode 100644
index 0000000..d3bd1ca
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateQuota.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchEvaluateQuota is a Querydsl query type for SchEvaluateQuota
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchEvaluateQuota extends EntityPathBase<SchEvaluateQuota> {
+
+    private static final long serialVersionUID = -993081160L;
+
+    public static final QSchEvaluateQuota schEvaluateQuota = new QSchEvaluateQuota("schEvaluateQuota");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath evalCategoryId = createString("evalCategoryId");
+
+    public final StringPath evalCategoryKey = createString("evalCategoryKey");
+
+    public final StringPath evalCategoryName = createString("evalCategoryName");
+
+    public final StringPath evaluateId = createString("evaluateId");
+
+    public final StringPath evaluateQuotaId = createString("evaluateQuotaId");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchEvaluateQuota(String variable) {
+        super(SchEvaluateQuota.class, forVariable(variable));
+    }
+
+    public QSchEvaluateQuota(Path<? extends SchEvaluateQuota> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchEvaluateQuota(PathMetadata metadata) {
+        super(SchEvaluateQuota.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateTemplate.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateTemplate.java
new file mode 100644
index 0000000..1004535
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchEvaluateTemplate.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchEvaluateTemplate is a Querydsl query type for SchEvaluateTemplate
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchEvaluateTemplate extends EntityPathBase<SchEvaluateTemplate> {
+
+    private static final long serialVersionUID = -1588323782L;
+
+    public static final QSchEvaluateTemplate schEvaluateTemplate = new QSchEvaluateTemplate("schEvaluateTemplate");
+
+    public final StringPath attribute1 = createString("attribute1");
+
+    public final StringPath attribute2 = createString("attribute2");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath evaluateRangeType = createString("evaluateRangeType");
+
+    public final StringPath evaluateTemplateId = createString("evaluateTemplateId");
+
+    public final StringPath evaluateTemplateName = createString("evaluateTemplateName");
+
+    public final StringPath group_name = createString("group_name");
+
+    public final StringPath groupId = createString("groupId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath orgName = createString("orgName");
+
+    public final StringPath templateType = createString("templateType");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchEvaluateTemplate(String variable) {
+        super(SchEvaluateTemplate.class, forVariable(variable));
+    }
+
+    public QSchEvaluateTemplate(Path<? extends SchEvaluateTemplate> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchEvaluateTemplate(PathMetadata metadata) {
+        super(SchEvaluateTemplate.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchFile.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchFile.java
new file mode 100644
index 0000000..1757817
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchFile.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchFile is a Querydsl query type for SchFile
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchFile extends EntityPathBase<SchFile> {
+
+    private static final long serialVersionUID = 1571515907L;
+
+    public static final QSchFile schFile = new QSchFile("schFile");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath fileName = createString("fileName");
+
+    public final StringPath fileType = createString("fileType");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final StringPath objectType = createString("objectType");
+
+    public final NumberPath<Integer> orderNo = createNumber("orderNo", Integer.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath size = createString("size");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QSchFile(String variable) {
+        super(SchFile.class, forVariable(variable));
+    }
+
+    public QSchFile(Path<? extends SchFile> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchFile(PathMetadata metadata) {
+        super(SchFile.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandout.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandout.java
new file mode 100644
index 0000000..b424962
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandout.java
@@ -0,0 +1,92 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchHandout is a Querydsl query type for SchHandout
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandout extends EntityPathBase<SchHandout> {
+
+    private static final long serialVersionUID = -860206440L;
+
+    public static final QSchHandout schHandout = new QSchHandout("schHandout");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classSchedule = createString("classSchedule");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> fullLength = createNumber("fullLength", Integer.class);
+
+    public final StringPath fullPath = createString("fullPath");
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final ListPath<SchHandoutPage, QSchHandoutPage> handoutPages = this.<SchHandoutPage, QSchHandoutPage>createList("handoutPages", SchHandoutPage.class, QSchHandoutPage.class, PathInits.DIRECT2);
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath originHandoutId = createString("originHandoutId");
+
+    public final StringPath origPath = createString("origPath");
+
+    public final NumberPath<Integer> pageCount = createNumber("pageCount", Integer.class);
+
+    public final NumberPath<Integer> playCount = createNumber("playCount", Integer.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchHandout(String variable) {
+        super(SchHandout.class, forVariable(variable));
+    }
+
+    public QSchHandout(Path<? extends SchHandout> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchHandout(PathMetadata metadata) {
+        super(SchHandout.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPage.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPage.java
new file mode 100644
index 0000000..fec06e5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPage.java
@@ -0,0 +1,71 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchHandoutPage is a Querydsl query type for SchHandoutPage
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandoutPage extends EntityPathBase<SchHandoutPage> {
+
+    private static final long serialVersionUID = -83290809L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchHandoutPage schHandoutPage = new QSchHandoutPage("schHandoutPage");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final QSchHandout handout;
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final StringPath handoutPageId = createString("handoutPageId");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final NumberPath<Integer> pageOrder = createNumber("pageOrder", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchHandoutPage(String variable) {
+        this(SchHandoutPage.class, forVariable(variable), INITS);
+    }
+
+    public QSchHandoutPage(Path<? extends SchHandoutPage> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchHandoutPage(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchHandoutPage(PathMetadata metadata, PathInits inits) {
+        this(SchHandoutPage.class, metadata, inits);
+    }
+
+    public QSchHandoutPage(Class<? extends SchHandoutPage> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.handout = inits.isInitialized("handout") ? new QSchHandout(forProperty("handout")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPageFavor.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPageFavor.java
new file mode 100644
index 0000000..70a702c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutPageFavor.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchHandoutPageFavor is a Querydsl query type for SchHandoutPageFavor
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandoutPageFavor extends EntityPathBase<SchHandoutPageFavor> {
+
+    private static final long serialVersionUID = -712217289L;
+
+    public static final QSchHandoutPageFavor schHandoutPageFavor = new QSchHandoutPageFavor("schHandoutPageFavor");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath handoutFavoriteId = createString("handoutFavoriteId");
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final StringPath handoutPageId = createString("handoutPageId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QSchHandoutPageFavor(String variable) {
+        super(SchHandoutPageFavor.class, forVariable(variable));
+    }
+
+    public QSchHandoutPageFavor(Path<? extends SchHandoutPageFavor> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchHandoutPageFavor(PathMetadata metadata) {
+        super(SchHandoutPageFavor.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutReCourse.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutReCourse.java
new file mode 100644
index 0000000..bb8e3de
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutReCourse.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchHandoutReCourse is a Querydsl query type for SchHandoutReCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandoutReCourse extends EntityPathBase<SchHandoutReCourse> {
+
+    private static final long serialVersionUID = -519061786L;
+
+    public static final QSchHandoutReCourse schHandoutReCourse = new QSchHandoutReCourse("schHandoutReCourse");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath handoutCourseId = createString("handoutCourseId");
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchHandoutReCourse(String variable) {
+        super(SchHandoutReCourse.class, forVariable(variable));
+    }
+
+    public QSchHandoutReCourse(Path<? extends SchHandoutReCourse> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchHandoutReCourse(PathMetadata metadata) {
+        super(SchHandoutReCourse.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecord.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecord.java
new file mode 100644
index 0000000..0579637
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecord.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchHandoutRecord is a Querydsl query type for SchHandoutRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandoutRecord extends EntityPathBase<SchHandoutRecord> {
+
+    private static final long serialVersionUID = 1622757641L;
+
+    public static final QSchHandoutRecord schHandoutRecord = new QSchHandoutRecord("schHandoutRecord");
+
+    public final StringPath appVersion = createString("appVersion");
+
+    public final DateTimePath<java.util.Date> beginTime = createDateTime("beginTime", java.util.Date.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final StringPath handoutRecordId = createString("handoutRecordId");
+
+    public final StringPath model = createString("model");
+
+    public final StringPath network = createString("network");
+
+    public final StringPath operator = createString("operator");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final NumberPath<Integer> pageCount = createNumber("pageCount", Integer.class);
+
+    public final StringPath platform = createString("platform");
+
+    public final NumberPath<Integer> playCount = createNumber("playCount", Integer.class);
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath version = createString("version");
+
+    public QSchHandoutRecord(String variable) {
+        super(SchHandoutRecord.class, forVariable(variable));
+    }
+
+    public QSchHandoutRecord(Path<? extends SchHandoutRecord> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchHandoutRecord(PathMetadata metadata) {
+        super(SchHandoutRecord.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecordDetail.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecordDetail.java
new file mode 100644
index 0000000..5ef32fe
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutRecordDetail.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchHandoutRecordDetail is a Querydsl query type for SchHandoutRecordDetail
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandoutRecordDetail extends EntityPathBase<SchHandoutRecordDetail> {
+
+    private static final long serialVersionUID = 1621076666L;
+
+    public static final QSchHandoutRecordDetail schHandoutRecordDetail = new QSchHandoutRecordDetail("schHandoutRecordDetail");
+
+    public final NumberPath<Integer> collection = createNumber("collection", Integer.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath handoutRecordDetailId = createString("handoutRecordDetailId");
+
+    public final StringPath handoutRecordId = createString("handoutRecordId");
+
+    public final StringPath pageId = createString("pageId");
+
+    public final NumberPath<Integer> pageNum = createNumber("pageNum", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchHandoutRecordDetail(String variable) {
+        super(SchHandoutRecordDetail.class, forVariable(variable));
+    }
+
+    public QSchHandoutRecordDetail(Path<? extends SchHandoutRecordDetail> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchHandoutRecordDetail(PathMetadata metadata) {
+        super(SchHandoutRecordDetail.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutStatistic.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutStatistic.java
new file mode 100644
index 0000000..10ee1ec
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchHandoutStatistic.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchHandoutStatistic is a Querydsl query type for SchHandoutStatistic
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchHandoutStatistic extends EntityPathBase<SchHandoutStatistic> {
+
+    private static final long serialVersionUID = 641251736L;
+
+    public static final QSchHandoutStatistic schHandoutStatistic = new QSchHandoutStatistic("schHandoutStatistic");
+
+    public final StringPath classId = createString("classId");
+
+    public final NumberPath<java.math.BigDecimal> compDegree = createNumber("compDegree", java.math.BigDecimal.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final StringPath handoutName = createString("handoutName");
+
+    public final StringPath handoutStatisticId = createString("handoutStatisticId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchHandoutStatistic(String variable) {
+        super(SchHandoutStatistic.class, forVariable(variable));
+    }
+
+    public QSchHandoutStatistic(Path<? extends SchHandoutStatistic> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchHandoutStatistic(PathMetadata metadata) {
+        super(SchHandoutStatistic.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchImg.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchImg.java
new file mode 100644
index 0000000..f17af67
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchImg.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchImg is a Querydsl query type for SchImg
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchImg extends EntityPathBase<SchImg> {
+
+    private static final long serialVersionUID = -226397604L;
+
+    public static final QSchImg schImg = new QSchImg("schImg");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath imgId = createString("imgId");
+
+    public final StringPath imgType = createString("imgType");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final StringPath objectType = createString("objectType");
+
+    public final NumberPath<Integer> orderNo = createNumber("orderNo", Integer.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath size = createString("size");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QSchImg(String variable) {
+        super(SchImg.class, forVariable(variable));
+    }
+
+    public QSchImg(Path<? extends SchImg> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchImg(PathMetadata metadata) {
+        super(SchImg.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchInteract.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchInteract.java
new file mode 100644
index 0000000..571c7b1
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchInteract.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchInteract is a Querydsl query type for SchInteract
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchInteract extends EntityPathBase<SchInteract> {
+
+    private static final long serialVersionUID = -328371395L;
+
+    public static final QSchInteract schInteract = new QSchInteract("schInteract");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath interactId = createString("interactId");
+
+    public final StringPath name = createString("name");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final DateTimePath<java.util.Date> stopTime = createDateTime("stopTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchInteract(String variable) {
+        super(SchInteract.class, forVariable(variable));
+    }
+
+    public QSchInteract(Path<? extends SchInteract> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchInteract(PathMetadata metadata) {
+        super(SchInteract.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchLessonPeriod.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchLessonPeriod.java
new file mode 100644
index 0000000..e369838
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchLessonPeriod.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchLessonPeriod is a Querydsl query type for SchLessonPeriod
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchLessonPeriod extends EntityPathBase<SchLessonPeriod> {
+
+    private static final long serialVersionUID = -1621473632L;
+
+    public static final QSchLessonPeriod schLessonPeriod = new QSchLessonPeriod("schLessonPeriod");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath lessonPeriodId = createString("lessonPeriodId");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchLessonPeriod(String variable) {
+        super(SchLessonPeriod.class, forVariable(variable));
+    }
+
+    public QSchLessonPeriod(Path<? extends SchLessonPeriod> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchLessonPeriod(PathMetadata metadata) {
+        super(SchLessonPeriod.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchNote.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchNote.java
new file mode 100644
index 0000000..915c44e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchNote.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchNote is a Querydsl query type for SchNote
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchNote extends EntityPathBase<SchNote> {
+
+    private static final long serialVersionUID = 1571760249L;
+
+    public static final QSchNote schNote = new QSchNote("schNote");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath noteId = createString("noteId");
+
+    public final StringPath noteObjectId = createString("noteObjectId");
+
+    public final NumberPath<Integer> noteObjectType = createNumber("noteObjectType", Integer.class);
+
+    public final DateTimePath<java.util.Date> noteTime = createDateTime("noteTime", java.util.Date.class);
+
+    public final BooleanPath shareFlag = createBoolean("shareFlag");
+
+    public final NumberPath<Integer> shareScope = createNumber("shareScope", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QSchNote(String variable) {
+        super(SchNote.class, forVariable(variable));
+    }
+
+    public QSchNote(Path<? extends SchNote> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchNote(PathMetadata metadata) {
+        super(SchNote.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchQRUrl.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchQRUrl.java
new file mode 100644
index 0000000..07c7d0d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchQRUrl.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchQRUrl is a Querydsl query type for SchQRUrl
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchQRUrl extends EntityPathBase<SchQRUrl> {
+
+    private static final long serialVersionUID = 1481804807L;
+
+    public static final QSchQRUrl schQRUrl = new QSchQRUrl("schQRUrl");
+
+    public final StringPath businessId = createString("businessId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath qrTemplateId = createString("qrTemplateId");
+
+    public final StringPath qrUrlId = createString("qrUrlId");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QSchQRUrl(String variable) {
+        super(SchQRUrl.class, forVariable(variable));
+    }
+
+    public QSchQRUrl(Path<? extends SchQRUrl> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchQRUrl(PathMetadata metadata) {
+        super(SchQRUrl.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRank.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRank.java
new file mode 100644
index 0000000..49552db
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRank.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchRank is a Querydsl query type for SchRank
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchRank extends EntityPathBase<SchRank> {
+
+    private static final long serialVersionUID = 1571865779L;
+
+    public static final QSchRank schRank = new QSchRank("schRank");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath rankId = createString("rankId");
+
+    public final StringPath rankType = createString("rankType");
+
+    public final StringPath scopeId = createString("scopeId");
+
+    public final StringPath scopeType = createString("scopeType");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final NumberPath<java.math.BigDecimal> value = createNumber("value", java.math.BigDecimal.class);
+
+    public QSchRank(String variable) {
+        super(SchRank.class, forVariable(variable));
+    }
+
+    public QSchRank(Path<? extends SchRank> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchRank(PathMetadata metadata) {
+        super(SchRank.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankHis.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankHis.java
new file mode 100644
index 0000000..4913264
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankHis.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchRankHis is a Querydsl query type for SchRankHis
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchRankHis extends EntityPathBase<SchRankHis> {
+
+    private static final long serialVersionUID = -574933537L;
+
+    public static final QSchRankHis schRankHis = new QSchRankHis("schRankHis");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath hisRankId = createString("hisRankId");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> rank = createNumber("rank", Integer.class);
+
+    public final StringPath rankId = createString("rankId");
+
+    public final DateTimePath<java.util.Date> rankTime = createDateTime("rankTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final NumberPath<java.math.BigDecimal> value = createNumber("value", java.math.BigDecimal.class);
+
+    public final StringPath versionId = createString("versionId");
+
+    public QSchRankHis(String variable) {
+        super(SchRankHis.class, forVariable(variable));
+    }
+
+    public QSchRankHis(Path<? extends SchRankHis> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchRankHis(PathMetadata metadata) {
+        super(SchRankHis.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankVer.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankVer.java
new file mode 100644
index 0000000..94831a7
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchRankVer.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchRankVer is a Querydsl query type for SchRankVer
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchRankVer extends EntityPathBase<SchRankVer> {
+
+    private static final long serialVersionUID = -574920208L;
+
+    public static final QSchRankVer schRankVer = new QSchRankVer("schRankVer");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath latest = createBoolean("latest");
+
+    public final StringPath rankType = createString("rankType");
+
+    public final StringPath scopeId = createString("scopeId");
+
+    public final StringPath scopeType = createString("scopeType");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<Integer> version = createNumber("version", Integer.class);
+
+    public final StringPath versionId = createString("versionId");
+
+    public final DateTimePath<java.util.Date> versionTime = createDateTime("versionTime", java.util.Date.class);
+
+    public QSchRankVer(String variable) {
+        super(SchRankVer.class, forVariable(variable));
+    }
+
+    public QSchRankVer(Path<? extends SchRankVer> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchRankVer(PathMetadata metadata) {
+        super(SchRankVer.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReClassUser.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReClassUser.java
new file mode 100644
index 0000000..7f4fee3
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReClassUser.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchReClassUser is a Querydsl query type for SchReClassUser
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchReClassUser extends EntityPathBase<SchReClassUser> {
+
+    private static final long serialVersionUID = 211556873L;
+
+    public static final QSchReClassUser schReClassUser = new QSchReClassUser("schReClassUser");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath reId = createString("reId");
+
+    public final StringPath userId = createString("userId");
+
+    public QSchReClassUser(String variable) {
+        super(SchReClassUser.class, forVariable(variable));
+    }
+
+    public QSchReClassUser(Path<? extends SchReClassUser> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchReClassUser(PathMetadata metadata) {
+        super(SchReClassUser.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonLiveVideo.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonLiveVideo.java
new file mode 100644
index 0000000..dfb35c6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonLiveVideo.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchReLessonLiveVideo is a Querydsl query type for SchReLessonLiveVideo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchReLessonLiveVideo extends EntityPathBase<SchReLessonLiveVideo> {
+
+    private static final long serialVersionUID = 1009119421L;
+
+    public static final QSchReLessonLiveVideo schReLessonLiveVideo = new QSchReLessonLiveVideo("schReLessonLiveVideo");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath liveVideoId = createString("liveVideoId");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchReLessonLiveVideo(String variable) {
+        super(SchReLessonLiveVideo.class, forVariable(variable));
+    }
+
+    public QSchReLessonLiveVideo(Path<? extends SchReLessonLiveVideo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchReLessonLiveVideo(PathMetadata metadata) {
+        super(SchReLessonLiveVideo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonPeriod.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonPeriod.java
new file mode 100644
index 0000000..882b58e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonPeriod.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchReLessonPeriod is a Querydsl query type for SchReLessonPeriod
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchReLessonPeriod extends EntityPathBase<SchReLessonPeriod> {
+
+    private static final long serialVersionUID = 421572275L;
+
+    public static final QSchReLessonPeriod schReLessonPeriod = new QSchReLessonPeriod("schReLessonPeriod");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath lessonId = createString("lessonId");
+
+    public final StringPath lessonPeriodId = createString("lessonPeriodId");
+
+    public final StringPath reLessonPeriodId = createString("reLessonPeriodId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchReLessonPeriod(String variable) {
+        super(SchReLessonPeriod.class, forVariable(variable));
+    }
+
+    public QSchReLessonPeriod(Path<? extends SchReLessonPeriod> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchReLessonPeriod(PathMetadata metadata) {
+        super(SchReLessonPeriod.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonVideo.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonVideo.java
new file mode 100644
index 0000000..e58c82e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchReLessonVideo.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchReLessonVideo is a Querydsl query type for SchReLessonVideo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchReLessonVideo extends EntityPathBase<SchReLessonVideo> {
+
+    private static final long serialVersionUID = -1504774839L;
+
+    public static final QSchReLessonVideo schReLessonVideo = new QSchReLessonVideo("schReLessonVideo");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoId = createString("videoId");
+
+    public QSchReLessonVideo(String variable) {
+        super(SchReLessonVideo.class, forVariable(variable));
+    }
+
+    public QSchReLessonVideo(Path<? extends SchReLessonVideo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchReLessonVideo(PathMetadata metadata) {
+        super(SchReLessonVideo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchScheduleAddress.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchScheduleAddress.java
new file mode 100644
index 0000000..8bc4de8
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchScheduleAddress.java
@@ -0,0 +1,83 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchScheduleAddress is a Querydsl query type for SchScheduleAddress
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchScheduleAddress extends EntityPathBase<SchScheduleAddress> {
+
+    private static final long serialVersionUID = 1726649974L;
+
+    public static final QSchScheduleAddress schScheduleAddress = new QSchScheduleAddress("schScheduleAddress");
+
+    public final StringPath addressId = createString("addressId");
+
+    public final StringPath building = createString("building");
+
+    public final StringPath campus = createString("campus");
+
+    public final NumberPath<Short> capacity = createNumber("capacity", Short.class);
+
+    public final StringPath city = createString("city");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> floor = createNumber("floor", Short.class);
+
+    public final StringPath fullName = createString("fullName");
+
+    public final StringPath latitudeY = createString("latitudeY");
+
+    public final StringPath longitudeX = createString("longitudeX");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath number = createString("number");
+
+    public final StringPath orgAddressId = createString("orgAddressId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath province = createString("province");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<java.math.BigDecimal> usableArea = createNumber("usableArea", java.math.BigDecimal.class);
+
+    public QSchScheduleAddress(String variable) {
+        super(SchScheduleAddress.class, forVariable(variable));
+    }
+
+    public QSchScheduleAddress(Path<? extends SchScheduleAddress> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchScheduleAddress(PathMetadata metadata) {
+        super(SchScheduleAddress.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDay.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDay.java
new file mode 100644
index 0000000..8fb6440
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDay.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSchoolDay is a Querydsl query type for SchSchoolDay
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSchoolDay extends EntityPathBase<SchSchoolDay> {
+
+    private static final long serialVersionUID = -1956622495L;
+
+    public static final QSchSchoolDay schSchoolDay = new QSchSchoolDay("schSchoolDay");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath schoolDayId = createString("schoolDayId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchSchoolDay(String variable) {
+        super(SchSchoolDay.class, forVariable(variable));
+    }
+
+    public QSchSchoolDay(Path<? extends SchSchoolDay> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSchoolDay(PathMetadata metadata) {
+        super(SchSchoolDay.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDayItem.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDayItem.java
new file mode 100644
index 0000000..c8ce2ff
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolDayItem.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSchoolDayItem is a Querydsl query type for SchSchoolDayItem
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSchoolDayItem extends EntityPathBase<SchSchoolDayItem> {
+
+    private static final long serialVersionUID = 974824980L;
+
+    public static final QSchSchoolDayItem schSchoolDayItem = new QSchSchoolDayItem("schSchoolDayItem");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath dayItemId = createString("dayItemId");
+
+    public final NumberPath<Short> dayOrder = createNumber("dayOrder", Short.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath schoolDayId = createString("schoolDayId");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchSchoolDayItem(String variable) {
+        super(SchSchoolDayItem.class, forVariable(variable));
+    }
+
+    public QSchSchoolDayItem(Path<? extends SchSchoolDayItem> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSchoolDayItem(PathMetadata metadata) {
+        super(SchSchoolDayItem.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolYear.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolYear.java
new file mode 100644
index 0000000..ab27854
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSchoolYear.java
@@ -0,0 +1,62 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchSchoolYear is a Querydsl query type for SchSchoolYear
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSchoolYear extends EntityPathBase<SchSchoolYear> {
+
+    private static final long serialVersionUID = -525126376L;
+
+    public static final QSchSchoolYear schSchoolYear = new QSchSchoolYear("schSchoolYear");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath schoolYearId = createString("schoolYearId");
+
+    public final ListPath<SchTerm, QSchTerm> schTerms = this.<SchTerm, QSchTerm>createList("schTerms", SchTerm.class, QSchTerm.class, PathInits.DIRECT2);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchSchoolYear(String variable) {
+        super(SchSchoolYear.class, forVariable(variable));
+    }
+
+    public QSchSchoolYear(Path<? extends SchSchoolYear> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSchoolYear(PathMetadata metadata) {
+        super(SchSchoolYear.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSign.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSign.java
new file mode 100644
index 0000000..0e07f52
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSign.java
@@ -0,0 +1,102 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchSign is a Querydsl query type for SchSign
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSign extends EntityPathBase<SchSign> {
+
+    private static final long serialVersionUID = 1571903044L;
+
+    public static final QSchSign schSign = new QSchSign("schSign");
+
+    public final NumberPath<Integer> actAllow = createNumber("actAllow", Integer.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath course = createString("course");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath flowImgPath = createString("flowImgPath");
+
+    public final NumberPath<Integer> hisShow = createNumber("hisShow", Integer.class);
+
+    public final StringPath homeImgPath = createString("homeImgPath");
+
+    public final StringPath lesson = createString("lesson");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> nameShow = createNumber("nameShow", Integer.class);
+
+    public final StringPath noticePassword = createString("noticePassword");
+
+    public final StringPath noticeUserId = createString("noticeUserId");
+
+    public final NumberPath<Integer> orgShow = createNumber("orgShow", Integer.class);
+
+    public final NumberPath<Double> outRange = createNumber("outRange", Double.class);
+
+    public final NumberPath<Integer> outRangeAllow = createNumber("outRangeAllow", Integer.class);
+
+    public final NumberPath<Integer> payAllow = createNumber("payAllow", Integer.class);
+
+    public final NumberPath<Integer> phoneShow = createNumber("phoneShow", Integer.class);
+
+    public final NumberPath<Integer> registerAllow = createNumber("registerAllow", Integer.class);
+
+    public final StringPath signId = createString("signId");
+
+    public final ArrayPath<byte[], Byte> signImage = createArray("signImage", byte[].class);
+
+    public final ListPath<SchSignItem, QSchSignItem> signItems = this.<SchSignItem, QSchSignItem>createList("signItems", SchSignItem.class, QSchSignItem.class, PathInits.DIRECT2);
+
+    public final NumberPath<Short> signType = createNumber("signType", Short.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<Integer> validatePhone = createNumber("validatePhone", Integer.class);
+
+    public QSchSign(String variable) {
+        super(SchSign.class, forVariable(variable));
+    }
+
+    public QSchSign(Path<? extends SchSign> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSign(PathMetadata metadata) {
+        super(SchSign.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignCode.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignCode.java
new file mode 100644
index 0000000..1a0f595
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignCode.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSignCode is a Querydsl query type for SchSignCode
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSignCode extends EntityPathBase<SchSignCode> {
+
+    private static final long serialVersionUID = -587942319L;
+
+    public static final QSchSignCode schSignCode = new QSchSignCode("schSignCode");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath signCodeId = createString("signCodeId");
+
+    public QSchSignCode(String variable) {
+        super(SchSignCode.class, forVariable(variable));
+    }
+
+    public QSchSignCode(Path<? extends SchSignCode> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSignCode(PathMetadata metadata) {
+        super(SchSignCode.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignItem.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignItem.java
new file mode 100644
index 0000000..34e64d0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignItem.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchSignItem is a Querydsl query type for SchSignItem
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSignItem extends EntityPathBase<SchSignItem> {
+
+    private static final long serialVersionUID = -587758729L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchSignItem schSignItem = new QSchSignItem("schSignItem");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final QSchSign sign;
+
+    public final StringPath signAddress = createString("signAddress");
+
+    public final StringPath signId = createString("signId");
+
+    public final StringPath signItemId = createString("signItemId");
+
+    public final DateTimePath<java.util.Date> signTime = createDateTime("signTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchSignItem(String variable) {
+        this(SchSignItem.class, forVariable(variable), INITS);
+    }
+
+    public QSchSignItem(Path<? extends SchSignItem> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchSignItem(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchSignItem(PathMetadata metadata, PathInits inits) {
+        this(SchSignItem.class, metadata, inits);
+    }
+
+    public QSchSignItem(Class<? extends SchSignItem> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.sign = inits.isInitialized("sign") ? new QSchSign(forProperty("sign")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignOrder.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignOrder.java
new file mode 100644
index 0000000..85babcf
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignOrder.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSignOrder is a Querydsl query type for SchSignOrder
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSignOrder extends EntityPathBase<SchSignOrder> {
+
+    private static final long serialVersionUID = -1035170966L;
+
+    public static final QSchSignOrder schSignOrder = new QSchSignOrder("schSignOrder");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath signId = createString("signId");
+
+    public final NumberPath<Integer> signOrder = createNumber("signOrder", Integer.class);
+
+    public final StringPath signOrderId = createString("signOrderId");
+
+    public final DateTimePath<java.util.Date> signTime = createDateTime("signTime", java.util.Date.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchSignOrder(String variable) {
+        super(SchSignOrder.class, forVariable(variable));
+    }
+
+    public QSchSignOrder(Path<? extends SchSignOrder> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSignOrder(PathMetadata metadata) {
+        super(SchSignOrder.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignStatistics.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignStatistics.java
new file mode 100644
index 0000000..f241df8
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSignStatistics.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSignStatistics is a Querydsl query type for SchSignStatistics
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSignStatistics extends EntityPathBase<SchSignStatistics> {
+
+    private static final long serialVersionUID = -2039751033L;
+
+    public static final QSchSignStatistics schSignStatistics = new QSchSignStatistics("schSignStatistics");
+
+    public final StringPath classSubjectId = createString("classSubjectId");
+
+    public final StringPath classSubjectName = createString("classSubjectName");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> firstSignOrder = createNumber("firstSignOrder", Integer.class);
+
+    public final NumberPath<Short> firstSignStatus = createNumber("firstSignStatus", Short.class);
+
+    public final DateTimePath<java.util.Date> firstSignTime = createDateTime("firstSignTime", java.util.Date.class);
+
+    public final BooleanPath installFlag = createBoolean("installFlag");
+
+    public final NumberPath<Integer> lastSignOrder = createNumber("lastSignOrder", Integer.class);
+
+    public final NumberPath<Short> lastSignStatus = createNumber("lastSignStatus", Short.class);
+
+    public final DateTimePath<java.util.Date> lastSignTime = createDateTime("lastSignTime", java.util.Date.class);
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final NumberPath<Double> outOfRange = createNumber("outOfRange", Double.class);
+
+    public final StringPath position = createString("position");
+
+    public final BooleanPath registeFlag = createBoolean("registeFlag");
+
+    public final StringPath signAddress = createString("signAddress");
+
+    public final DateTimePath<java.util.Date> signDate = createDateTime("signDate", java.util.Date.class);
+
+    public final StringPath signId = createString("signId");
+
+    public final StringPath signStatisticsId = createString("signStatisticsId");
+
+    public final NumberPath<Integer> statisticsFlag = createNumber("statisticsFlag", Integer.class);
+
+    public final NumberPath<Short> terminalType = createNumber("terminalType", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchSignStatistics(String variable) {
+        super(SchSignStatistics.class, forVariable(variable));
+    }
+
+    public QSchSignStatistics(Path<? extends SchSignStatistics> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSignStatistics(PathMetadata metadata) {
+        super(SchSignStatistics.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSpreadFootprint.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSpreadFootprint.java
new file mode 100644
index 0000000..2ceb6fe
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSpreadFootprint.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSpreadFootprint is a Querydsl query type for SchSpreadFootprint
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSpreadFootprint extends EntityPathBase<SchSpreadFootprint> {
+
+    private static final long serialVersionUID = -491382811L;
+
+    public static final QSchSpreadFootprint schSpreadFootprint = new QSchSpreadFootprint("schSpreadFootprint");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath ip = createString("ip");
+
+    public final StringPath model = createString("model");
+
+    public final StringPath objectId = createString("objectId");
+
+    public final NumberPath<Short> objectType = createNumber("objectType", Short.class);
+
+    public final StringPath openId = createString("openId");
+
+    public final DateTimePath<java.util.Date> operationTime = createDateTime("operationTime", java.util.Date.class);
+
+    public final StringPath spreadId = createString("spreadId");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userAgent = createString("userAgent");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSchSpreadFootprint(String variable) {
+        super(SchSpreadFootprint.class, forVariable(variable));
+    }
+
+    public QSchSpreadFootprint(Path<? extends SchSpreadFootprint> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSpreadFootprint(PathMetadata metadata) {
+        super(SchSpreadFootprint.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentAchievement.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentAchievement.java
new file mode 100644
index 0000000..5fd2e0e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentAchievement.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchStudentAchievement is a Querydsl query type for SchStudentAchievement
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchStudentAchievement extends EntityPathBase<SchStudentAchievement> {
+
+    private static final long serialVersionUID = -746581445L;
+
+    public static final QSchStudentAchievement schStudentAchievement = new QSchStudentAchievement("schStudentAchievement");
+
+    public final NumberPath<Short> achievementLevel = createNumber("achievementLevel", Short.class);
+
+    public final NumberPath<java.math.BigDecimal> achievementScore = createNumber("achievementScore", java.math.BigDecimal.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<java.math.BigDecimal> finalAchievement = createNumber("finalAchievement", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> performance = createNumber("performance", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> periodAchievement = createNumber("periodAchievement", java.math.BigDecimal.class);
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath studentAchienementId = createString("studentAchienementId");
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath termId = createString("termId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchStudentAchievement(String variable) {
+        super(SchStudentAchievement.class, forVariable(variable));
+    }
+
+    public QSchStudentAchievement(Path<? extends SchStudentAchievement> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchStudentAchievement(PathMetadata metadata) {
+        super(SchStudentAchievement.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentSchedule.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentSchedule.java
new file mode 100644
index 0000000..5bcbb40
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentSchedule.java
@@ -0,0 +1,108 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchStudentSchedule is a Querydsl query type for SchStudentSchedule
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchStudentSchedule extends EntityPathBase<SchStudentSchedule> {
+
+    private static final long serialVersionUID = -1002779893L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchStudentSchedule schStudentSchedule = new QSchStudentSchedule("schStudentSchedule");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath addressId = createString("addressId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classScheduleId = createString("classScheduleId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath dayEndId = createString("dayEndId");
+
+    public final NumberPath<Short> dayEndOrder = createNumber("dayEndOrder", Short.class);
+
+    public final StringPath dayStartId = createString("dayStartId");
+
+    public final NumberPath<Short> dayStartOrder = createNumber("dayStartOrder", Short.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath name = createString("name");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath studentScheduleId = createString("studentScheduleId");
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath teacher = createString("teacher");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath termId = createString("termId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUserStudent userStudent;
+
+    public QSchStudentSchedule(String variable) {
+        this(SchStudentSchedule.class, forVariable(variable), INITS);
+    }
+
+    public QSchStudentSchedule(Path<? extends SchStudentSchedule> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchStudentSchedule(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchStudentSchedule(PathMetadata metadata, PathInits inits) {
+        this(SchStudentSchedule.class, metadata, inits);
+    }
+
+    public QSchStudentSchedule(Class<? extends SchStudentSchedule> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+        this.userStudent = inits.isInitialized("userStudent") ? new com.qxueyou.scc.user.model.QUserStudent(forProperty("userStudent")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentScore.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentScore.java
new file mode 100644
index 0000000..365d3bf
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudentScore.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchStudentScore is a Querydsl query type for SchStudentScore
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchStudentScore extends EntityPathBase<SchStudentScore> {
+
+    private static final long serialVersionUID = -188024162L;
+
+    public static final QSchStudentScore schStudentScore = new QSchStudentScore("schStudentScore");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DatePath<java.util.Date> createTime = createDate("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath scoreId = createString("scoreId");
+
+    public final NumberPath<java.math.BigDecimal> scoreValue = createNumber("scoreValue", java.math.BigDecimal.class);
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DatePath<java.util.Date> updateTime = createDate("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoId = createString("videoId");
+
+    public QSchStudentScore(String variable) {
+        super(SchStudentScore.class, forVariable(variable));
+    }
+
+    public QSchStudentScore(Path<? extends SchStudentScore> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchStudentScore(PathMetadata metadata) {
+        super(SchStudentScore.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudyReport.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudyReport.java
new file mode 100644
index 0000000..ba220c2
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchStudyReport.java
@@ -0,0 +1,95 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchStudyReport is a Querydsl query type for SchStudyReport
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchStudyReport extends EntityPathBase<SchStudyReport> {
+
+    private static final long serialVersionUID = 1689208310L;
+
+    public static final QSchStudyReport schStudyReport = new QSchStudyReport("schStudyReport");
+
+    public final NumberPath<java.math.BigDecimal> accuracyOrder = createNumber("accuracyOrder", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> atsOrder = createNumber("atsOrder", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> awardAmountOfShare = createNumber("awardAmountOfShare", java.math.BigDecimal.class);
+
+    public final NumberPath<Integer> courseCount = createNumber("courseCount", Integer.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> doExerciseCount = createNumber("doExerciseCount", Integer.class);
+
+    public final NumberPath<java.math.BigDecimal> exerciseAccuracy = createNumber("exerciseAccuracy", java.math.BigDecimal.class);
+
+    public final StringPath firstClass = createString("firstClass");
+
+    public final StringPath firstCourse = createString("firstCourse");
+
+    public final StringPath firstShareCourse = createString("firstShareCourse");
+
+    public final StringPath moreRecUrl = createString("moreRecUrl");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath orgs = createString("orgs");
+
+    public final StringPath recCourses = createString("recCourses");
+
+    public final NumberPath<Integer> studentOrder = createNumber("studentOrder", Integer.class);
+
+    public final NumberPath<Integer> studyHandoutCount = createNumber("studyHandoutCount", Integer.class);
+
+    public final StringPath studyId = createString("studyId");
+
+    public final NumberPath<Integer> studyPeriod = createNumber("studyPeriod", Integer.class);
+
+    public final StringPath studyTime = createString("studyTime");
+
+    public final StringPath studyTimeImg = createString("studyTimeImg");
+
+    public final NumberPath<Integer> studyVideoCount = createNumber("studyVideoCount", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final NumberPath<Integer> viewCountOfShare = createNumber("viewCountOfShare", Integer.class);
+
+    public final NumberPath<Integer> viewLiveCount = createNumber("viewLiveCount", Integer.class);
+
+    public QSchStudyReport(String variable) {
+        super(SchStudyReport.class, forVariable(variable));
+    }
+
+    public QSchStudyReport(Path<? extends SchStudyReport> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchStudyReport(PathMetadata metadata) {
+        super(SchStudyReport.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectExtend.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectExtend.java
new file mode 100644
index 0000000..eeb06c6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectExtend.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSubjectExtend is a Querydsl query type for SchSubjectExtend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSubjectExtend extends EntityPathBase<SchSubjectExtend> {
+
+    private static final long serialVersionUID = -878797121L;
+
+    public static final QSchSubjectExtend schSubjectExtend = new QSchSubjectExtend("schSubjectExtend");
+
+    public final StringPath address = createString("address");
+
+    public final StringPath addressId = createString("addressId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath classSubjectId = createString("classSubjectId");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath mode = createString("mode");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath repeatDate = createString("repeatDate");
+
+    public final NumberPath<Integer> repeatFlag = createNumber("repeatFlag", Integer.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> subjectEndDate = createDateTime("subjectEndDate", java.util.Date.class);
+
+    public final StringPath subjectExtendId = createString("subjectExtendId");
+
+    public final DateTimePath<java.util.Date> subjectStartDate = createDateTime("subjectStartDate", java.util.Date.class);
+
+    public final StringPath teacher = createString("teacher");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchSubjectExtend(String variable) {
+        super(SchSubjectExtend.class, forVariable(variable));
+    }
+
+    public QSchSubjectExtend(Path<? extends SchSubjectExtend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSubjectExtend(PathMetadata metadata) {
+        super(SchSubjectExtend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectReCourse.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectReCourse.java
new file mode 100644
index 0000000..2de4fcd
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchSubjectReCourse.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchSubjectReCourse is a Querydsl query type for SchSubjectReCourse
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchSubjectReCourse extends EntityPathBase<SchSubjectReCourse> {
+
+    private static final long serialVersionUID = 1690153619L;
+
+    public static final QSchSubjectReCourse schSubjectReCourse = new QSchSubjectReCourse("schSubjectReCourse");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath reId = createString("reId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchSubjectReCourse(String variable) {
+        super(SchSubjectReCourse.class, forVariable(variable));
+    }
+
+    public QSchSubjectReCourse(Path<? extends SchSubjectReCourse> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchSubjectReCourse(PathMetadata metadata) {
+        super(SchSubjectReCourse.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchTerm.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchTerm.java
new file mode 100644
index 0000000..f6653ef
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchTerm.java
@@ -0,0 +1,77 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSchTerm is a Querydsl query type for SchTerm
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchTerm extends EntityPathBase<SchTerm> {
+
+    private static final long serialVersionUID = 1571929331L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSchTerm schTerm = new QSchTerm("schTerm");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath name = createString("name");
+
+    public final StringPath REMARK = createString("REMARK");
+
+    public final StringPath schoolYearId = createString("schoolYearId");
+
+    public final QSchSchoolYear schYear;
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath termId = createString("termId");
+
+    public final NumberPath<Short> termOrder = createNumber("termOrder", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchTerm(String variable) {
+        this(SchTerm.class, forVariable(variable), INITS);
+    }
+
+    public QSchTerm(Path<? extends SchTerm> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSchTerm(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSchTerm(PathMetadata metadata, PathInits inits) {
+        this(SchTerm.class, metadata, inits);
+    }
+
+    public QSchTerm(Class<? extends SchTerm> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.schYear = inits.isInitialized("schYear") ? new QSchSchoolYear(forProperty("schYear")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchTermReDay.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchTermReDay.java
new file mode 100644
index 0000000..59e20ed
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchTermReDay.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchTermReDay is a Querydsl query type for SchTermReDay
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchTermReDay extends EntityPathBase<SchTermReDay> {
+
+    private static final long serialVersionUID = -77603018L;
+
+    public static final QSchTermReDay schTermReDay = new QSchTermReDay("schTermReDay");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath schoolDayId = createString("schoolDayId");
+
+    public final StringPath termId = createString("termId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchTermReDay(String variable) {
+        super(SchTermReDay.class, forVariable(variable));
+    }
+
+    public QSchTermReDay(Path<? extends SchTermReDay> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchTermReDay(PathMetadata metadata) {
+        super(SchTermReDay.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchVideoFile.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchVideoFile.java
new file mode 100644
index 0000000..838f4f0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchVideoFile.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchVideoFile is a Querydsl query type for SchVideoFile
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchVideoFile extends EntityPathBase<SchVideoFile> {
+
+    private static final long serialVersionUID = -759526288L;
+
+    public static final QSchVideoFile schVideoFile = new QSchVideoFile("schVideoFile");
+
+    public final StringPath businessId = createString("businessId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath qrUrlId = createString("qrUrlId");
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchVideoFile(String variable) {
+        super(SchVideoFile.class, forVariable(variable));
+    }
+
+    public QSchVideoFile(Path<? extends SchVideoFile> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchVideoFile(PathMetadata metadata) {
+        super(SchVideoFile.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReClass.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReClass.java
new file mode 100644
index 0000000..f4d6aa3
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReClass.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchYearReClass is a Querydsl query type for SchYearReClass
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchYearReClass extends EntityPathBase<SchYearReClass> {
+
+    private static final long serialVersionUID = -1171421791L;
+
+    public static final QSchYearReClass schYearReClass = new QSchYearReClass("schYearReClass");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath schoolYearId = createString("schoolYearId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchYearReClass(String variable) {
+        super(SchYearReClass.class, forVariable(variable));
+    }
+
+    public QSchYearReClass(Path<? extends SchYearReClass> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchYearReClass(PathMetadata metadata) {
+        super(SchYearReClass.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReOrg.java b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReOrg.java
new file mode 100644
index 0000000..85ca474
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/school/model/QSchYearReOrg.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.school.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchYearReOrg is a Querydsl query type for SchYearReOrg
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchYearReOrg extends EntityPathBase<SchYearReOrg> {
+
+    private static final long serialVersionUID = 1710522701L;
+
+    public static final QSchYearReOrg schYearReOrg = new QSchYearReOrg("schYearReOrg");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath relationId = createString("relationId");
+
+    public final StringPath schoolYearId = createString("schoolYearId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSchYearReOrg(String variable) {
+        super(SchYearReOrg.class, forVariable(variable));
+    }
+
+    public QSchYearReOrg(Path<? extends SchYearReOrg> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchYearReOrg(PathMetadata metadata) {
+        super(SchYearReOrg.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sms/model/QSms.java b/target/generated-sources/java/com/qxueyou/scc/sms/model/QSms.java
new file mode 100644
index 0000000..99145c8
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sms/model/QSms.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.sms.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSms is a Querydsl query type for Sms
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSms extends EntityPathBase<Sms> {
+
+    private static final long serialVersionUID = -737096911L;
+
+    public static final QSms sms = new QSms("sms");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> expiredTime = createDateTime("expiredTime", java.util.Date.class);
+
+    public final StringPath inputCode = createString("inputCode");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath module = createString("module");
+
+    public final StringPath platform = createString("platform");
+
+    public final StringPath response = createString("response");
+
+    public final StringPath smsId = createString("smsId");
+
+    public final StringPath state = createString("state");
+
+    public final StringPath templateId = createString("templateId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath verifyCode = createString("verifyCode");
+
+    public final NumberPath<Integer> verifyTimes = createNumber("verifyTimes", Integer.class);
+
+    public QSms(String variable) {
+        super(Sms.class, forVariable(variable));
+    }
+
+    public QSms(Path<? extends Sms> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSms(PathMetadata metadata) {
+        super(Sms.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sms/model/QSmsConfig.java b/target/generated-sources/java/com/qxueyou/scc/sms/model/QSmsConfig.java
new file mode 100644
index 0000000..33bd6ad
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sms/model/QSmsConfig.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.sms.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSmsConfig is a Querydsl query type for SmsConfig
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSmsConfig extends EntityPathBase<SmsConfig> {
+
+    private static final long serialVersionUID = -1312665133L;
+
+    public static final QSmsConfig smsConfig = new QSmsConfig("smsConfig");
+
+    public final StringPath configId = createString("configId");
+
+    public final StringPath module = createString("module");
+
+    public final BooleanPath switchFlag = createBoolean("switchFlag");
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public QSmsConfig(String variable) {
+        super(SmsConfig.class, forVariable(variable));
+    }
+
+    public QSmsConfig(Path<? extends SmsConfig> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSmsConfig(PathMetadata metadata) {
+        super(SmsConfig.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/statistic/model/QSchFlowStatisticDetail.java b/target/generated-sources/java/com/qxueyou/scc/statistic/model/QSchFlowStatisticDetail.java
new file mode 100644
index 0000000..aa3b4bb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/statistic/model/QSchFlowStatisticDetail.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.statistic.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSchFlowStatisticDetail is a Querydsl query type for SchFlowStatisticDetail
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSchFlowStatisticDetail extends EntityPathBase<SchFlowStatisticDetail> {
+
+    private static final long serialVersionUID = -374149236L;
+
+    public static final QSchFlowStatisticDetail schFlowStatisticDetail = new QSchFlowStatisticDetail("schFlowStatisticDetail");
+
+    public final NumberPath<Short> businessType = createNumber("businessType", Short.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath definition = createString("definition");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath detailId = createString("detailId");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final StringPath liveVideoId = createString("liveVideoId");
+
+    public final StringPath orgCode = createString("orgCode");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath platform = createString("platform");
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final NumberPath<Integer> videoEndTime = createNumber("videoEndTime", Integer.class);
+
+    public final StringPath videoId = createString("videoId");
+
+    public final NumberPath<Integer> videoStartTime = createNumber("videoStartTime", Integer.class);
+
+    public QSchFlowStatisticDetail(String variable) {
+        super(SchFlowStatisticDetail.class, forVariable(variable));
+    }
+
+    public QSchFlowStatisticDetail(Path<? extends SchFlowStatisticDetail> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSchFlowStatisticDetail(PathMetadata metadata) {
+        super(SchFlowStatisticDetail.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysAttachment.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysAttachment.java
new file mode 100644
index 0000000..f47ba97
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysAttachment.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysAttachment is a Querydsl query type for SysAttachment
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysAttachment extends EntityPathBase<SysAttachment> {
+
+    private static final long serialVersionUID = -2047412452L;
+
+    public static final QSysAttachment sysAttachment = new QSysAttachment("sysAttachment");
+
+    public final StringPath attachmentId = createString("attachmentId");
+
+    public final StringPath attachmentName = createString("attachmentName");
+
+    public final StringPath attachmentPath = createString("attachmentPath");
+
+    public final NumberPath<Integer> attachmentType = createNumber("attachmentType", Integer.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Long> fileSize = createNumber("fileSize", Long.class);
+
+    public final StringPath fileSuffix = createString("fileSuffix");
+
+    public final StringPath realatedObjectId = createString("realatedObjectId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DatePath<java.util.Date> updateTime = createDate("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSysAttachment(String variable) {
+        super(SysAttachment.class, forVariable(variable));
+    }
+
+    public QSysAttachment(Path<? extends SysAttachment> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysAttachment(PathMetadata metadata) {
+        super(SysAttachment.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysButton.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysButton.java
new file mode 100644
index 0000000..c97467b
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysButton.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysButton is a Querydsl query type for SysButton
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysButton extends EntityPathBase<SysButton> {
+
+    private static final long serialVersionUID = -976639573L;
+
+    public static final QSysButton sysButton = new QSysButton("sysButton");
+
+    public final StringPath buttonId = createString("buttonId");
+
+    public final NumberPath<Integer> buttonOrder = createNumber("buttonOrder", Integer.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fullPath = createString("fullPath");
+
+    public final StringPath iconUrl = createString("iconUrl");
+
+    public final StringPath menuId = createString("menuId");
+
+    public final StringPath module = createString("module");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath qxyButtonId = createString("qxyButtonId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QSysButton(String variable) {
+        super(SysButton.class, forVariable(variable));
+    }
+
+    public QSysButton(Path<? extends SysButton> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysButton(PathMetadata metadata) {
+        super(SysButton.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysCondition.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysCondition.java
new file mode 100644
index 0000000..64cfb85
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysCondition.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysCondition is a Querydsl query type for SysCondition
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysCondition extends EntityPathBase<SysCondition> {
+
+    private static final long serialVersionUID = -1833849854L;
+
+    public static final QSysCondition sysCondition = new QSysCondition("sysCondition");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath conditionId = createString("conditionId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath module = createString("module");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> order = createNumber("order", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSysCondition(String variable) {
+        super(SysCondition.class, forVariable(variable));
+    }
+
+    public QSysCondition(Path<? extends SysCondition> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysCondition(PathMetadata metadata) {
+        super(SysCondition.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfig.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfig.java
new file mode 100644
index 0000000..0df858d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfig.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysConfig is a Querydsl query type for SysConfig
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysConfig extends EntityPathBase<SysConfig> {
+
+    private static final long serialVersionUID = -953743941L;
+
+    public static final QSysConfig sysConfig = new QSysConfig("sysConfig");
+
+    public final StringPath configId = createString("configId");
+
+    public final StringPath configKey = createString("configKey");
+
+    public final StringPath value = createString("value");
+
+    public QSysConfig(String variable) {
+        super(SysConfig.class, forVariable(variable));
+    }
+
+    public QSysConfig(Path<? extends SysConfig> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysConfig(PathMetadata metadata) {
+        super(SysConfig.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfigFile.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfigFile.java
new file mode 100644
index 0000000..6d48b8c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysConfigFile.java
@@ -0,0 +1,47 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysConfigFile is a Querydsl query type for SysConfigFile
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysConfigFile extends EntityPathBase<SysConfigFile> {
+
+    private static final long serialVersionUID = 747182551L;
+
+    public static final QSysConfigFile sysConfigFile = new QSysConfigFile("sysConfigFile");
+
+    public final StringPath configFileDirection = createString("configFileDirection");
+
+    public final StringPath configFileModule = createString("configFileModule");
+
+    public final StringPath configId = createString("configId");
+
+    public final StringPath moduletype = createString("moduletype");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath tableName = createString("tableName");
+
+    public QSysConfigFile(String variable) {
+        super(SysConfigFile.class, forVariable(variable));
+    }
+
+    public QSysConfigFile(Path<? extends SysConfigFile> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysConfigFile(PathMetadata metadata) {
+        super(SysConfigFile.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysDictionary.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysDictionary.java
new file mode 100644
index 0000000..f4f1b87
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysDictionary.java
@@ -0,0 +1,45 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysDictionary is a Querydsl query type for SysDictionary
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysDictionary extends EntityPathBase<SysDictionary> {
+
+    private static final long serialVersionUID = 363138703L;
+
+    public static final QSysDictionary sysDictionary = new QSysDictionary("sysDictionary");
+
+    public final StringPath dicKey = createString("dicKey");
+
+    public final StringPath dictionaryId = createString("dictionaryId");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath typeId = createString("typeId");
+
+    public final StringPath value = createString("value");
+
+    public QSysDictionary(String variable) {
+        super(SysDictionary.class, forVariable(variable));
+    }
+
+    public QSysDictionary(Path<? extends SysDictionary> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysDictionary(PathMetadata metadata) {
+        super(SysDictionary.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysFileUploadTrace.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysFileUploadTrace.java
new file mode 100644
index 0000000..2a01a3e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysFileUploadTrace.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysFileUploadTrace is a Querydsl query type for SysFileUploadTrace
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysFileUploadTrace extends EntityPathBase<SysFileUploadTrace> {
+
+    private static final long serialVersionUID = 1512730191L;
+
+    public static final QSysFileUploadTrace sysFileUploadTrace = new QSysFileUploadTrace("sysFileUploadTrace");
+
+    public final StringPath bussinessId = createString("bussinessId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fullPath = createString("fullPath");
+
+    public final StringPath module = createString("module");
+
+    public final StringPath moduleType = createString("moduleType");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath tableName = createString("tableName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath uploadFileId = createString("uploadFileId");
+
+    public final NumberPath<Integer> useFlag = createNumber("useFlag", Integer.class);
+
+    public QSysFileUploadTrace(String variable) {
+        super(SysFileUploadTrace.class, forVariable(variable));
+    }
+
+    public QSysFileUploadTrace(Path<? extends SysFileUploadTrace> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysFileUploadTrace(PathMetadata metadata) {
+        super(SysFileUploadTrace.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysLog.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysLog.java
new file mode 100644
index 0000000..83277ae
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysLog.java
@@ -0,0 +1,69 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSysLog is a Querydsl query type for SysLog
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysLog extends EntityPathBase<SysLog> {
+
+    private static final long serialVersionUID = -2059347093L;
+
+    public static final QSysLog sysLog = new QSysLog("sysLog");
+
+    public final StringPath content = createString("content");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath desp = createString("desp");
+
+    public final StringPath gps = createString("gps");
+
+    public final StringPath ip = createString("ip");
+
+    public final StringPath logId = createString("logId");
+
+    public final StringPath module = createString("module");
+
+    public final NumberPath<Short> type = createNumber("type", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userAgent = createString("userAgent");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QSysLog(String variable) {
+        super(SysLog.class, forVariable(variable));
+    }
+
+    public QSysLog(Path<? extends SysLog> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSysLog(PathMetadata metadata) {
+        super(SysLog.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysMenu.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysMenu.java
new file mode 100644
index 0000000..1539599
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysMenu.java
@@ -0,0 +1,91 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSysMenu is a Querydsl query type for SysMenu
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysMenu extends EntityPathBase<SysMenu> {
+
+    private static final long serialVersionUID = 584770072L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSysMenu sysMenu = new QSysMenu("sysMenu");
+
+    public final ListPath<SysMenu, QSysMenu> children = this.<SysMenu, QSysMenu>createList("children", SysMenu.class, QSysMenu.class, PathInits.DIRECT2);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath dir = createBoolean("dir");
+
+    public final StringPath fullPath = createString("fullPath");
+
+    public final StringPath hover = createString("hover");
+
+    public final StringPath icon = createString("icon");
+
+    public final StringPath iconUrl = createString("iconUrl");
+
+    public final NumberPath<Integer> level = createNumber("level", Integer.class);
+
+    public final StringPath menuId = createString("menuId");
+
+    public final NumberPath<Integer> menuOrder = createNumber("menuOrder", Integer.class);
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> openType = createNumber("openType", Integer.class);
+
+    public final QSysMenu parent;
+
+    public final StringPath parentMenuId = createString("parentMenuId");
+
+    public final ListPath<com.qxueyou.scc.user.model.UserRole, com.qxueyou.scc.user.model.QUserRole> roles = this.<com.qxueyou.scc.user.model.UserRole, com.qxueyou.scc.user.model.QUserRole>createList("roles", com.qxueyou.scc.user.model.UserRole.class, com.qxueyou.scc.user.model.QUserRole.class, PathInits.DIRECT2);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public QSysMenu(String variable) {
+        this(SysMenu.class, forVariable(variable), INITS);
+    }
+
+    public QSysMenu(Path<? extends SysMenu> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSysMenu(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSysMenu(PathMetadata metadata, PathInits inits) {
+        this(SysMenu.class, metadata, inits);
+    }
+
+    public QSysMenu(Class<? extends SysMenu> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.parent = inits.isInitialized("parent") ? new QSysMenu(forProperty("parent"), inits.get("parent")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysPrivilege.java b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysPrivilege.java
new file mode 100644
index 0000000..d9584f7
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/sys/model/QSysPrivilege.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.sys.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSysPrivilege is a Querydsl query type for SysPrivilege
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSysPrivilege extends EntityPathBase<SysPrivilege> {
+
+    private static final long serialVersionUID = 1745040792L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QSysPrivilege sysPrivilege = new QSysPrivilege("sysPrivilege");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath menuId = createString("menuId");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath privilegeId = createString("privilegeId");
+
+    public final StringPath roleId = createString("roleId");
+
+    public final NumberPath<Byte> subMenu = createNumber("subMenu", Byte.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final com.qxueyou.scc.user.model.QUserRole userRole;
+
+    public QSysPrivilege(String variable) {
+        this(SysPrivilege.class, forVariable(variable), INITS);
+    }
+
+    public QSysPrivilege(Path<? extends SysPrivilege> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QSysPrivilege(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QSysPrivilege(PathMetadata metadata, PathInits inits) {
+        this(SysPrivilege.class, metadata, inits);
+    }
+
+    public QSysPrivilege(Class<? extends SysPrivilege> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.userRole = inits.isInitialized("userRole") ? new com.qxueyou.scc.user.model.QUserRole(forProperty("userRole")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLive.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLive.java
new file mode 100644
index 0000000..271fe6e
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLive.java
@@ -0,0 +1,143 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QMediaVideoLive is a Querydsl query type for MediaVideoLive
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLive extends EntityPathBase<MediaVideoLive> {
+
+    private static final long serialVersionUID = 156116387L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QMediaVideoLive mediaVideoLive = new QMediaVideoLive("mediaVideoLive");
+
+    public final StringPath anchor = createString("anchor");
+
+    public final StringPath anchorId = createString("anchorId");
+
+    public final StringPath attribute = createString("attribute");
+
+    public final ListPath<com.qxueyou.scc.admin.classes.model.ClsClass, com.qxueyou.scc.admin.classes.model.QClsClass> classes = this.<com.qxueyou.scc.admin.classes.model.ClsClass, com.qxueyou.scc.admin.classes.model.QClsClass>createList("classes", com.qxueyou.scc.admin.classes.model.ClsClass.class, com.qxueyou.scc.admin.classes.model.QClsClass.class, PathInits.DIRECT2);
+
+    public final BooleanPath completeFlag = createBoolean("completeFlag");
+
+    public final StringPath consultImgUrl = createString("consultImgUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath definition = createString("definition");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final BooleanPath editReplayFlag = createBoolean("editReplayFlag");
+
+    public final DateTimePath<java.util.Date> endTime = createDateTime("endTime", java.util.Date.class);
+
+    public final NumberPath<Integer> expectedTimes = createNumber("expectedTimes", Integer.class);
+
+    public final StringPath hlsPullUrl = createString("hlsPullUrl");
+
+    public final StringPath httpPullUrl = createString("httpPullUrl");
+
+    public final NumberPath<Long> lastRecordTime = createNumber("lastRecordTime", Long.class);
+
+    public final ListPath<com.qxueyou.scc.media.model.SchLiveReVideo, com.qxueyou.scc.media.model.QSchLiveReVideo> liveReVideos = this.<com.qxueyou.scc.media.model.SchLiveReVideo, com.qxueyou.scc.media.model.QSchLiveReVideo>createList("liveReVideos", com.qxueyou.scc.media.model.SchLiveReVideo.class, com.qxueyou.scc.media.model.QSchLiveReVideo.class, PathInits.DIRECT2);
+
+    public final StringPath meetingId = createString("meetingId");
+
+    public final StringPath meetingPwd = createString("meetingPwd");
+
+    public final StringPath name = createString("name");
+
+    public final BooleanPath onTimeFlag = createBoolean("onTimeFlag");
+
+    public final NumberPath<Integer> orderTimes = createNumber("orderTimes", Integer.class);
+
+    public final StringPath permission = createString("permission");
+
+    public final NumberPath<java.math.BigInteger> playTimes = createNumber("playTimes", java.math.BigInteger.class);
+
+    public final NumberPath<Integer> praiseTimes = createNumber("praiseTimes", Integer.class);
+
+    public final StringPath previewImgUrl = createString("previewImgUrl");
+
+    public final StringPath previewVideoUrl = createString("previewVideoUrl");
+
+    public final StringPath pushUrl = createString("pushUrl");
+
+    public final StringPath remark = createString("remark");
+
+    public final NumberPath<Integer> reviewTimes = createNumber("reviewTimes", Integer.class);
+
+    public final StringPath rtmpPullUrl = createString("rtmpPullUrl");
+
+    public final NumberPath<java.math.BigInteger> shareTimes = createNumber("shareTimes", java.math.BigInteger.class);
+
+    public final DateTimePath<java.util.Date> startTime = createDateTime("startTime", java.util.Date.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final com.qxueyou.scc.teach.subject.model.QSubject subject;
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath tecentLiveNumber = createString("tecentLiveNumber");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final ListPath<com.qxueyou.scc.media.model.VideoLiveChatroom, com.qxueyou.scc.media.model.QVideoLiveChatroom> videoLiveChatrooms = this.<com.qxueyou.scc.media.model.VideoLiveChatroom, com.qxueyou.scc.media.model.QVideoLiveChatroom>createList("videoLiveChatrooms", com.qxueyou.scc.media.model.VideoLiveChatroom.class, com.qxueyou.scc.media.model.QVideoLiveChatroom.class, PathInits.DIRECT2);
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public final NumberPath<Integer> watcherLimit = createNumber("watcherLimit", Integer.class);
+
+    public final NumberPath<Integer> watchMaxTimes = createNumber("watchMaxTimes", Integer.class);
+
+    public final NumberPath<Integer> watchTimes = createNumber("watchTimes", Integer.class);
+
+    public final StringPath wyLiveNumber = createString("wyLiveNumber");
+
+    public QMediaVideoLive(String variable) {
+        this(MediaVideoLive.class, forVariable(variable), INITS);
+    }
+
+    public QMediaVideoLive(Path<? extends MediaVideoLive> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QMediaVideoLive(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QMediaVideoLive(PathMetadata metadata, PathInits inits) {
+        this(MediaVideoLive.class, metadata, inits);
+    }
+
+    public QMediaVideoLive(Class<? extends MediaVideoLive> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.subject = inits.isInitialized("subject") ? new com.qxueyou.scc.teach.subject.model.QSubject(forProperty("subject")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClip.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClip.java
new file mode 100644
index 0000000..6a18303
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClip.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveClip is a Querydsl query type for MediaVideoLiveClip
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveClip extends EntityPathBase<MediaVideoLiveClip> {
+
+    private static final long serialVersionUID = -993217645L;
+
+    public static final QMediaVideoLiveClip mediaVideoLiveClip = new QMediaVideoLiveClip("mediaVideoLiveClip");
+
+    public final NumberPath<Integer> beginTime = createNumber("beginTime", Integer.class);
+
+    public final StringPath clipId = createString("clipId");
+
+    public final NumberPath<Integer> clipNum = createNumber("clipNum", Integer.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> duration = createNumber("duration", Integer.class);
+
+    public final NumberPath<Integer> endTime = createNumber("endTime", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath versionId = createString("versionId");
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public QMediaVideoLiveClip(String variable) {
+        super(MediaVideoLiveClip.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveClip(Path<? extends MediaVideoLiveClip> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveClip(PathMetadata metadata) {
+        super(MediaVideoLiveClip.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClipVer.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClipVer.java
new file mode 100644
index 0000000..a6c40c0
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveClipVer.java
@@ -0,0 +1,57 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveClipVer is a Querydsl query type for MediaVideoLiveClipVer
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveClipVer extends EntityPathBase<MediaVideoLiveClipVer> {
+
+    private static final long serialVersionUID = -917074160L;
+
+    public static final QMediaVideoLiveClipVer mediaVideoLiveClipVer = new QMediaVideoLiveClipVer("mediaVideoLiveClipVer");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> isNew = createNumber("isNew", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath versionId = createString("versionId");
+
+    public final StringPath versionNo = createString("versionNo");
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public QMediaVideoLiveClipVer(String variable) {
+        super(MediaVideoLiveClipVer.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveClipVer(Path<? extends MediaVideoLiveClipVer> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveClipVer(PathMetadata metadata) {
+        super(MediaVideoLiveClipVer.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveExtend.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveExtend.java
new file mode 100644
index 0000000..cee2e91
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveExtend.java
@@ -0,0 +1,75 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveExtend is a Querydsl query type for MediaVideoLiveExtend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveExtend extends EntityPathBase<MediaVideoLiveExtend> {
+
+    private static final long serialVersionUID = -930755939L;
+
+    public static final QMediaVideoLiveExtend mediaVideoLiveExtend = new QMediaVideoLiveExtend("mediaVideoLiveExtend");
+
+    public final StringPath activeXUrl = createString("activeXUrl");
+
+    public final DateTimePath<java.util.Date> alertTime = createDateTime("alertTime", java.util.Date.class);
+
+    public final DateTimePath<java.util.Date> allowStartTime = createDateTime("allowStartTime", java.util.Date.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> forceEndTime = createDateTime("forceEndTime", java.util.Date.class);
+
+    public final StringPath hostPwd = createString("hostPwd");
+
+    public final NumberPath<Integer> meetingControl = createNumber("meetingControl", Integer.class);
+
+    public final NumberPath<Integer> meetingLock = createNumber("meetingLock", Integer.class);
+
+    public final NumberPath<Integer> meetingType = createNumber("meetingType", Integer.class);
+
+    public final StringPath streamName = createString("streamName");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userDisplayName = createString("userDisplayName");
+
+    public final StringPath userIp = createString("userIp");
+
+    public final StringPath videoLiveExtendId = createString("videoLiveExtendId");
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public QMediaVideoLiveExtend(String variable) {
+        super(MediaVideoLiveExtend.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveExtend(Path<? extends MediaVideoLiveExtend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveExtend(PathMetadata metadata) {
+        super(MediaVideoLiveExtend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveOrder.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveOrder.java
new file mode 100644
index 0000000..0f61b84
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveOrder.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveOrder is a Querydsl query type for MediaVideoLiveOrder
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveOrder extends EntityPathBase<MediaVideoLiveOrder> {
+
+    private static final long serialVersionUID = -713719957L;
+
+    public static final QMediaVideoLiveOrder mediaVideoLiveOrder = new QMediaVideoLiveOrder("mediaVideoLiveOrder");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath liveVideoId = createString("liveVideoId");
+
+    public final BooleanPath orderFlag = createBoolean("orderFlag");
+
+    public final DateTimePath<java.util.Date> orderTime = createDateTime("orderTime", java.util.Date.class);
+
+    public final StringPath orderUserId = createString("orderUserId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoOrderId = createString("videoOrderId");
+
+    public QMediaVideoLiveOrder(String variable) {
+        super(MediaVideoLiveOrder.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveOrder(Path<? extends MediaVideoLiveOrder> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveOrder(PathMetadata metadata) {
+        super(MediaVideoLiveOrder.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReClass.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReClass.java
new file mode 100644
index 0000000..6963563
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReClass.java
@@ -0,0 +1,55 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveReClass is a Querydsl query type for MediaVideoLiveReClass
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveReClass extends EntityPathBase<MediaVideoLiveReClass> {
+
+    private static final long serialVersionUID = -725026846L;
+
+    public static final QMediaVideoLiveReClass mediaVideoLiveReClass = new QMediaVideoLiveReClass("mediaVideoLiveReClass");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath liveId = createString("liveId");
+
+    public final StringPath liveReClassId = createString("liveReClassId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QMediaVideoLiveReClass(String variable) {
+        super(MediaVideoLiveReClass.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveReClass(Path<? extends MediaVideoLiveReClass> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveReClass(PathMetadata metadata) {
+        super(MediaVideoLiveReClass.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveRecord.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveRecord.java
new file mode 100644
index 0000000..04330bb
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveRecord.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveRecord is a Querydsl query type for MediaVideoLiveRecord
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveRecord extends EntityPathBase<MediaVideoLiveRecord> {
+
+    private static final long serialVersionUID = -576620588L;
+
+    public static final QMediaVideoLiveRecord mediaVideoLiveRecord = new QMediaVideoLiveRecord("mediaVideoLiveRecord");
+
+    public final StringPath appVersion = createString("appVersion");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final DateTimePath<java.util.Date> leaveTime = createDateTime("leaveTime", java.util.Date.class);
+
+    public final StringPath liveId = createString("liveId");
+
+    public final StringPath model = createString("model");
+
+    public final StringPath network = createString("network");
+
+    public final StringPath operator = createString("operator");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath platform = createString("platform");
+
+    public final DateTimePath<java.util.Date> playTime = createDateTime("playTime", java.util.Date.class);
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath version = createString("version");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final StringPath videoRecordId = createString("videoRecordId");
+
+    public final NumberPath<Integer> watchTime = createNumber("watchTime", Integer.class);
+
+    public QMediaVideoLiveRecord(String variable) {
+        super(MediaVideoLiveRecord.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveRecord(Path<? extends MediaVideoLiveRecord> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveRecord(PathMetadata metadata) {
+        super(MediaVideoLiveRecord.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplay.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplay.java
new file mode 100644
index 0000000..d71b188
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplay.java
@@ -0,0 +1,81 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveReplay is a Querydsl query type for MediaVideoLiveReplay
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveReplay extends EntityPathBase<MediaVideoLiveReplay> {
+
+    private static final long serialVersionUID = -576236694L;
+
+    public static final QMediaVideoLiveReplay mediaVideoLiveReplay = new QMediaVideoLiveReplay("mediaVideoLiveReplay");
+
+    public final NumberPath<Long> beginTime = createNumber("beginTime", Long.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final NumberPath<Integer> dataSource = createNumber("dataSource", Integer.class);
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Short> downLoadFlag = createNumber("downLoadFlag", Short.class);
+
+    public final NumberPath<Long> duration = createNumber("duration", Long.class);
+
+    public final NumberPath<Long> endTime = createNumber("endTime", Long.class);
+
+    public final NumberPath<Long> initialSize = createNumber("initialSize", Long.class);
+
+    public final StringPath liveReplayId = createString("liveReplayId");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNo = createNumber("orderNo", Integer.class);
+
+    public final StringPath shortName = createString("shortName");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath url = createString("url");
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public final StringPath wyLiveNumber = createString("wyLiveNumber");
+
+    public final StringPath wyUid = createString("wyUid");
+
+    public final StringPath wyVid = createString("wyVid");
+
+    public QMediaVideoLiveReplay(String variable) {
+        super(MediaVideoLiveReplay.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveReplay(Path<? extends MediaVideoLiveReplay> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveReplay(PathMetadata metadata) {
+        super(MediaVideoLiveReplay.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplayReClip.java b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplayReClip.java
new file mode 100644
index 0000000..3b30746
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/live/model/QMediaVideoLiveReplayReClip.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.teach.live.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMediaVideoLiveReplayReClip is a Querydsl query type for MediaVideoLiveReplayReClip
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMediaVideoLiveReplayReClip extends EntityPathBase<MediaVideoLiveReplayReClip> {
+
+    private static final long serialVersionUID = -493986771L;
+
+    public static final QMediaVideoLiveReplayReClip mediaVideoLiveReplayReClip = new QMediaVideoLiveReplayReClip("mediaVideoLiveReplayReClip");
+
+    public final NumberPath<Integer> beginTime = createNumber("beginTime", Integer.class);
+
+    public final StringPath clipId = createString("clipId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final NumberPath<Integer> duration = createNumber("duration", Integer.class);
+
+    public final NumberPath<Integer> endTime = createNumber("endTime", Integer.class);
+
+    public final NumberPath<Integer> orderNo = createNumber("orderNo", Integer.class);
+
+    public final StringPath reId = createString("reId");
+
+    public final StringPath replayId = createString("replayId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoLiveId = createString("videoLiveId");
+
+    public QMediaVideoLiveReplayReClip(String variable) {
+        super(MediaVideoLiveReplayReClip.class, forVariable(variable));
+    }
+
+    public QMediaVideoLiveReplayReClip(Path<? extends MediaVideoLiveReplayReClip> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMediaVideoLiveReplayReClip(PathMetadata metadata) {
+        super(MediaVideoLiveReplayReClip.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QRes.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QRes.java
new file mode 100644
index 0000000..f95ff30
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QRes.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QRes is a Querydsl query type for Res
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QRes extends EntityPathBase<Res> {
+
+    private static final long serialVersionUID = 1676030406L;
+
+    public static final QRes res = new QRes("res");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath itemDestId = createString("itemDestId");
+
+    public final StringPath libId = createString("libId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath resDirId = createString("resDirId");
+
+    public final StringPath resId = createString("resId");
+
+    public final NumberPath<Integer> resOrder = createNumber("resOrder", Integer.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final NumberPath<Integer> useCount = createNumber("useCount", Integer.class);
+
+    public QRes(String variable) {
+        super(Res.class, forVariable(variable));
+    }
+
+    public QRes(Path<? extends Res> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QRes(PathMetadata metadata) {
+        super(Res.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResDir.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResDir.java
new file mode 100644
index 0000000..b7439b6
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResDir.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResDir is a Querydsl query type for ResDir
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResDir extends EntityPathBase<ResDir> {
+
+    private static final long serialVersionUID = 1627077863L;
+
+    public static final QResDir resDir = new QResDir("resDir");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath dirId = createString("dirId");
+
+    public final StringPath libId = createString("libId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath parentDirId = createString("parentDirId");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResDir(String variable) {
+        super(ResDir.class, forVariable(variable));
+    }
+
+    public QResDir(Path<? extends ResDir> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResDir(PathMetadata metadata) {
+        super(ResDir.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResFile.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResFile.java
new file mode 100644
index 0000000..dd121c9
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResFile.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResFile is a Querydsl query type for ResFile
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResFile extends EntityPathBase<ResFile> {
+
+    private static final long serialVersionUID = -1100134302L;
+
+    public static final QResFile resFile = new QResFile("resFile");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fileFormat = createString("fileFormat");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath fileName = createString("fileName");
+
+    public final StringPath fileType = createString("fileType");
+
+    public final StringPath md5Hash = createString("md5Hash");
+
+    public final StringPath path = createString("path");
+
+    public final NumberPath<Long> size = createNumber("size", Long.class);
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResFile(String variable) {
+        super(ResFile.class, forVariable(variable));
+    }
+
+    public QResFile(Path<? extends ResFile> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResFile(PathMetadata metadata) {
+        super(ResFile.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemArticle.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemArticle.java
new file mode 100644
index 0000000..1883713
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemArticle.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResItemArticle is a Querydsl query type for ResItemArticle
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResItemArticle extends EntityPathBase<ResItemArticle> {
+
+    private static final long serialVersionUID = 1549180093L;
+
+    public static final QResItemArticle resItemArticle = new QResItemArticle("resItemArticle");
+
+    public final StringPath articleId = createString("articleId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResItemArticle(String variable) {
+        super(ResItemArticle.class, forVariable(variable));
+    }
+
+    public QResItemArticle(Path<? extends ResItemArticle> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResItemArticle(PathMetadata metadata) {
+        super(ResItemArticle.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemAudio.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemAudio.java
new file mode 100644
index 0000000..a44f893
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemAudio.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResItemAudio is a Querydsl query type for ResItemAudio
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResItemAudio extends EntityPathBase<ResItemAudio> {
+
+    private static final long serialVersionUID = -1803898531L;
+
+    public static final QResItemAudio resItemAudio = new QResItemAudio("resItemAudio");
+
+    public final StringPath audioId = createString("audioId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final StringPath format = createString("format");
+
+    public final StringPath mark = createString("mark");
+
+    public final StringPath mediaVideoId = createString("mediaVideoId");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> playTime = createNumber("playTime", Integer.class);
+
+    public final NumberPath<Integer> seconds = createNumber("seconds", Integer.class);
+
+    public final NumberPath<Integer> size = createNumber("size", Integer.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath transcodeStatus = createString("transcodeStatus");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResItemAudio(String variable) {
+        super(ResItemAudio.class, forVariable(variable));
+    }
+
+    public QResItemAudio(Path<? extends ResItemAudio> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResItemAudio(PathMetadata metadata) {
+        super(ResItemAudio.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemDoc.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemDoc.java
new file mode 100644
index 0000000..f8210a5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemDoc.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResItemDoc is a Querydsl query type for ResItemDoc
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResItemDoc extends EntityPathBase<ResItemDoc> {
+
+    private static final long serialVersionUID = -529248129L;
+
+    public static final QResItemDoc resItemDoc = new QResItemDoc("resItemDoc");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath docId = createString("docId");
+
+    public final StringPath finalFileId = createString("finalFileId");
+
+    public final StringPath handoutId = createString("handoutId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath origFileId = createString("origFileId");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResItemDoc(String variable) {
+        super(ResItemDoc.class, forVariable(variable));
+    }
+
+    public QResItemDoc(Path<? extends ResItemDoc> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResItemDoc(PathMetadata metadata) {
+        super(ResItemDoc.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemExercise.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemExercise.java
new file mode 100644
index 0000000..106b148
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemExercise.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResItemExercise is a Querydsl query type for ResItemExercise
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResItemExercise extends EntityPathBase<ResItemExercise> {
+
+    private static final long serialVersionUID = -229823759L;
+
+    public static final QResItemExercise resItemExercise = new QResItemExercise("resItemExercise");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath exerciseGroupId = createString("exerciseGroupId");
+
+    public final StringPath exerciseId = createString("exerciseId");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResItemExercise(String variable) {
+        super(ResItemExercise.class, forVariable(variable));
+    }
+
+    public QResItemExercise(Path<? extends ResItemExercise> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResItemExercise(PathMetadata metadata) {
+        super(ResItemExercise.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemVideo.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemVideo.java
new file mode 100644
index 0000000..eb4b5ee
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResItemVideo.java
@@ -0,0 +1,79 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResItemVideo is a Querydsl query type for ResItemVideo
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResItemVideo extends EntityPathBase<ResItemVideo> {
+
+    private static final long serialVersionUID = -1784862206L;
+
+    public static final QResItemVideo resItemVideo = new QResItemVideo("resItemVideo");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fileId = createString("fileId");
+
+    public final NumberPath<Integer> finalFileCount = createNumber("finalFileCount", Integer.class);
+
+    public final StringPath format = createString("format");
+
+    public final StringPath mark = createString("mark");
+
+    public final StringPath mediaVideoId = createString("mediaVideoId");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> playTime = createNumber("playTime", Integer.class);
+
+    public final NumberPath<Integer> size = createNumber("size", Integer.class);
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath transcodeStatus = createString("transcodeStatus");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath videoId = createString("videoId");
+
+    public final NumberPath<Integer> videoOrigHeight = createNumber("videoOrigHeight", Integer.class);
+
+    public final NumberPath<Integer> videoOrigWidth = createNumber("videoOrigWidth", Integer.class);
+
+    public final NumberPath<Integer> videoSeconds = createNumber("videoSeconds", Integer.class);
+
+    public QResItemVideo(String variable) {
+        super(ResItemVideo.class, forVariable(variable));
+    }
+
+    public QResItemVideo(Path<? extends ResItemVideo> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResItemVideo(PathMetadata metadata) {
+        super(ResItemVideo.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResLib.java b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResLib.java
new file mode 100644
index 0000000..7f38559
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/res/model/QResLib.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.res.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QResLib is a Querydsl query type for ResLib
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QResLib extends EntityPathBase<ResLib> {
+
+    private static final long serialVersionUID = 1627085535L;
+
+    public static final QResLib resLib = new QResLib("resLib");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath libId = createString("libId");
+
+    public final StringPath ownerId = createString("ownerId");
+
+    public final StringPath ownerType = createString("ownerType");
+
+    public final StringPath rootDirId = createString("rootDirId");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QResLib(String variable) {
+        super(ResLib.class, forVariable(variable));
+    }
+
+    public QResLib(Path<? extends ResLib> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QResLib(PathMetadata metadata) {
+        super(ResLib.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java b/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java
new file mode 100644
index 0000000..1c3e0e2
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.teach.student.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QStuStudent is a Querydsl query type for StuStudent
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QStuStudent extends EntityPathBase<StuStudent> {
+
+    private static final long serialVersionUID = 664104390L;
+
+    public static final QStuStudent stuStudent = new QStuStudent("stuStudent");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<java.math.BigDecimal> score = createNumber("score", java.math.BigDecimal.class);
+
+    public final BooleanPath sex = createBoolean("sex");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath studentNo = createString("studentNo");
+
+    public final NumberPath<java.math.BigDecimal> studyDuration = createNumber("studyDuration", java.math.BigDecimal.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QStuStudent(String variable) {
+        super(StuStudent.class, forVariable(variable));
+    }
+
+    public QStuStudent(Path<? extends StuStudent> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QStuStudent(PathMetadata metadata) {
+        super(StuStudent.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubject.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubject.java
new file mode 100644
index 0000000..1fecb9c
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubject.java
@@ -0,0 +1,90 @@
+package com.qxueyou.scc.teach.subject.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QSubject is a Querydsl query type for Subject
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSubject extends EntityPathBase<Subject> {
+
+    private static final long serialVersionUID = -1094619554L;
+
+    public static final QSubject subject = new QSubject("subject");
+
+    public final ListPath<com.qxueyou.scc.admin.classes.model.ClsClass, com.qxueyou.scc.admin.classes.model.QClsClass> classes = this.<com.qxueyou.scc.admin.classes.model.ClsClass, com.qxueyou.scc.admin.classes.model.QClsClass>createList("classes", com.qxueyou.scc.admin.classes.model.ClsClass.class, com.qxueyou.scc.admin.classes.model.QClsClass.class, PathInits.DIRECT2);
+
+    public final StringPath code = createString("code");
+
+    public final StringPath contentFileId = createString("contentFileId");
+
+    public final StringPath courseId = createString("courseId");
+
+    public final StringPath coverPageFileId = createString("coverPageFileId");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath fullName = createString("fullName");
+
+    public final NumberPath<Integer> lectureCount = createNumber("lectureCount", Integer.class);
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath origCopySubjectId = createString("origCopySubjectId");
+
+    public final StringPath origSubjectId = createString("origSubjectId");
+
+    public final NumberPath<Integer> schoolYear = createNumber("schoolYear", Integer.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherName = createString("teacherName");
+
+    public final NumberPath<Integer> term = createNumber("term", Integer.class);
+
+    public final NumberPath<Integer> type = createNumber("type", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSubject(String variable) {
+        super(Subject.class, forVariable(variable));
+    }
+
+    public QSubject(Path<? extends Subject> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSubject(PathMetadata metadata) {
+        super(Subject.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectChapter.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectChapter.java
new file mode 100644
index 0000000..b9eb606
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectChapter.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.teach.subject.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSubjectChapter is a Querydsl query type for SubjectChapter
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSubjectChapter extends EntityPathBase<SubjectChapter> {
+
+    private static final long serialVersionUID = -883269617L;
+
+    public static final QSubjectChapter subjectChapter = new QSubjectChapter("subjectChapter");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath code = createString("code");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> orderNum = createNumber("orderNum", Integer.class);
+
+    public final StringPath parentChapterId = createString("parentChapterId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSubjectChapter(String variable) {
+        super(SubjectChapter.class, forVariable(variable));
+    }
+
+    public QSubjectChapter(Path<? extends SubjectChapter> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSubjectChapter(PathMetadata metadata) {
+        super(SubjectChapter.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectLecture.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectLecture.java
new file mode 100644
index 0000000..5d82eb4
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/QSubjectLecture.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.teach.subject.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QSubjectLecture is a Querydsl query type for SubjectLecture
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QSubjectLecture extends EntityPathBase<SubjectLecture> {
+
+    private static final long serialVersionUID = -1569590976L;
+
+    public static final QSubjectLecture subjectLecture = new QSubjectLecture("subjectLecture");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath lectureId = createString("lectureId");
+
+    public final StringPath lectureType = createString("lectureType");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath resItemId = createString("resItemId");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath tenantId = createString("tenantId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QSubjectLecture(String variable) {
+        super(SubjectLecture.class, forVariable(variable));
+    }
+
+    public QSubjectLecture(Path<? extends SubjectLecture> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QSubjectLecture(PathMetadata metadata) {
+        super(SubjectLecture.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureAudioV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureAudioV.java
new file mode 100644
index 0000000..94f8e91
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureAudioV.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QLectureAudioV is a Querydsl query type for LectureAudioV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QLectureAudioV extends EntityPathBase<LectureAudioV> {
+
+    private static final long serialVersionUID = -611403229L;
+
+    public static final QLectureAudioV lectureAudioV = new QLectureAudioV("lectureAudioV");
+
+    public final StringPath audioId = createString("audioId");
+
+    public final StringPath lectureId = createString("lectureId");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> seconds = createNumber("seconds", Integer.class);
+
+    public QLectureAudioV(String variable) {
+        super(LectureAudioV.class, forVariable(variable));
+    }
+
+    public QLectureAudioV(Path<? extends LectureAudioV> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QLectureAudioV(PathMetadata metadata) {
+        super(LectureAudioV.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureDocV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureDocV.java
new file mode 100644
index 0000000..86d65d5
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureDocV.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QLectureDocV is a Querydsl query type for LectureDocV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QLectureDocV extends EntityPathBase<LectureDocV> {
+
+    private static final long serialVersionUID = -188261951L;
+
+    public static final QLectureDocV lectureDocV = new QLectureDocV("lectureDocV");
+
+    public final StringPath docId = createString("docId");
+
+    public final NumberPath<Integer> docPages = createNumber("docPages", Integer.class);
+
+    public final StringPath lectureId = createString("lectureId");
+
+    public final StringPath name = createString("name");
+
+    public QLectureDocV(String variable) {
+        super(LectureDocV.class, forVariable(variable));
+    }
+
+    public QLectureDocV(Path<? extends LectureDocV> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QLectureDocV(PathMetadata metadata) {
+        super(LectureDocV.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureVideoV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureVideoV.java
new file mode 100644
index 0000000..5d00695
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QLectureVideoV.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QLectureVideoV is a Querydsl query type for LectureVideoV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QLectureVideoV extends EntityPathBase<LectureVideoV> {
+
+    private static final long serialVersionUID = -21277154L;
+
+    public static final QLectureVideoV lectureVideoV = new QLectureVideoV("lectureVideoV");
+
+    public final StringPath lectureId = createString("lectureId");
+
+    public final StringPath name = createString("name");
+
+    public final NumberPath<Integer> seconds = createNumber("seconds", Integer.class);
+
+    public QLectureVideoV(String variable) {
+        super(LectureVideoV.class, forVariable(variable));
+    }
+
+    public QLectureVideoV(Path<? extends LectureVideoV> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QLectureVideoV(PathMetadata metadata) {
+        super(LectureVideoV.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressV.java
new file mode 100644
index 0000000..4c1c750
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressV.java
@@ -0,0 +1,59 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QMyChapterProgressV is a Querydsl query type for MyChapterProgressV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMyChapterProgressV extends EntityPathBase<MyChapterProgressV> {
+
+    private static final long serialVersionUID = -1324891357L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QMyChapterProgressV myChapterProgressV = new QMyChapterProgressV("myChapterProgressV");
+
+    public final StringPath chapterName = createString("chapterName");
+
+    public final QMyChapterProgressVId id;
+
+    public final NumberPath<java.math.BigDecimal> percent = createNumber("percent", java.math.BigDecimal.class);
+
+    public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath userName = createString("userName");
+
+    public QMyChapterProgressV(String variable) {
+        this(MyChapterProgressV.class, forVariable(variable), INITS);
+    }
+
+    public QMyChapterProgressV(Path<? extends MyChapterProgressV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QMyChapterProgressV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QMyChapterProgressV(PathMetadata metadata, PathInits inits) {
+        this(MyChapterProgressV.class, metadata, inits);
+    }
+
+    public QMyChapterProgressV(Class<? extends MyChapterProgressV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QMyChapterProgressVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressVId.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressVId.java
new file mode 100644
index 0000000..effad65
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyChapterProgressVId.java
@@ -0,0 +1,43 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMyChapterProgressVId is a Querydsl query type for MyChapterProgressVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QMyChapterProgressVId extends BeanPath<MyChapterProgressVId> {
+
+    private static final long serialVersionUID = -1910272098L;
+
+    public static final QMyChapterProgressVId myChapterProgressVId = new QMyChapterProgressVId("myChapterProgressVId");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath userId = createString("userId");
+
+    public QMyChapterProgressVId(String variable) {
+        super(MyChapterProgressVId.class, forVariable(variable));
+    }
+
+    public QMyChapterProgressVId(Path<? extends MyChapterProgressVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMyChapterProgressVId(PathMetadata metadata) {
+        super(MyChapterProgressVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java
new file mode 100644
index 0000000..1c087ed
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QMyLectureV is a Querydsl query type for MyLectureV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMyLectureV extends EntityPathBase<MyLectureV> {
+
+    private static final long serialVersionUID = 2010697407L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QMyLectureV myLectureV = new QMyLectureV("myLectureV");
+
+    public final StringPath chapterId = createString("chapterId");
+
+    public final StringPath classId = createString("classId");
+
+    public final QMyLectureVId id;
+
+    public final DateTimePath<java.util.Date> lectureCreateTime = createDateTime("lectureCreateTime", java.util.Date.class);
+
+    public final StringPath lectureName = createString("lectureName");
+
+    public final StringPath lectureType = createString("lectureType");
+
+    public final DateTimePath<java.util.Date> lectureUpdateTime = createDateTime("lectureUpdateTime", java.util.Date.class);
+
+    public final NumberPath<Double> percent = createNumber("percent", Double.class);
+
+    public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
+
+    public final StringPath status = createString("status");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath userName = createString("userName");
+
+    public QMyLectureV(String variable) {
+        this(MyLectureV.class, forVariable(variable), INITS);
+    }
+
+    public QMyLectureV(Path<? extends MyLectureV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QMyLectureV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QMyLectureV(PathMetadata metadata, PathInits inits) {
+        this(MyLectureV.class, metadata, inits);
+    }
+
+    public QMyLectureV(Class<? extends MyLectureV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QMyLectureVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureVId.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureVId.java
new file mode 100644
index 0000000..649e329
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureVId.java
@@ -0,0 +1,39 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMyLectureVId is a Querydsl query type for MyLectureVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QMyLectureVId extends BeanPath<MyLectureVId> {
+
+    private static final long serialVersionUID = -455072710L;
+
+    public static final QMyLectureVId myLectureVId = new QMyLectureVId("myLectureVId");
+
+    public final StringPath lectureId = createString("lectureId");
+
+    public final StringPath userId = createString("userId");
+
+    public QMyLectureVId(String variable) {
+        super(MyLectureVId.class, forVariable(variable));
+    }
+
+    public QMyLectureVId(Path<? extends MyLectureVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMyLectureVId(PathMetadata metadata) {
+        super(MyLectureVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectV.java
new file mode 100644
index 0000000..b88fb40
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectV.java
@@ -0,0 +1,73 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QMySubjectV is a Querydsl query type for MySubjectV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QMySubjectV extends EntityPathBase<MySubjectV> {
+
+    private static final long serialVersionUID = -1692697391L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QMySubjectV mySubjectV = new QMySubjectV("mySubjectV");
+
+    public final StringPath className = createString("className");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final QMySubjectVId id;
+
+    public final NumberPath<Integer> lectureCount = createNumber("lectureCount", Integer.class);
+
+    public final StringPath origSubjectId = createString("origSubjectId");
+
+    public final NumberPath<Double> percent = createNumber("percent", Double.class);
+
+    public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
+
+    public final NumberPath<Integer> schoolYear = createNumber("schoolYear", Integer.class);
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final StringPath subjectStatus = createString("subjectStatus");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final NumberPath<Integer> term = createNumber("term", Integer.class);
+
+    public final StringPath userName = createString("userName");
+
+    public QMySubjectV(String variable) {
+        this(MySubjectV.class, forVariable(variable), INITS);
+    }
+
+    public QMySubjectV(Path<? extends MySubjectV> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QMySubjectV(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QMySubjectV(PathMetadata metadata, PathInits inits) {
+        this(MySubjectV.class, metadata, inits);
+    }
+
+    public QMySubjectV(Class<? extends MySubjectV> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.id = inits.isInitialized("id") ? new QMySubjectVId(forProperty("id")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectVId.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectVId.java
new file mode 100644
index 0000000..26dd231
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMySubjectVId.java
@@ -0,0 +1,41 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QMySubjectVId is a Querydsl query type for MySubjectVId
+ */
+@Generated("com.querydsl.codegen.EmbeddableSerializer")
+public class QMySubjectVId extends BeanPath<MySubjectVId> {
+
+    private static final long serialVersionUID = 1110414796L;
+
+    public static final QMySubjectVId mySubjectVId = new QMySubjectVId("mySubjectVId");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath userId = createString("userId");
+
+    public QMySubjectVId(String variable) {
+        super(MySubjectVId.class, forVariable(variable));
+    }
+
+    public QMySubjectVId(Path<? extends MySubjectVId> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QMySubjectVId(PathMetadata metadata) {
+        super(MySubjectVId.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QOpenSubjectV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QOpenSubjectV.java
new file mode 100644
index 0000000..620d77f
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QOpenSubjectV.java
@@ -0,0 +1,51 @@
+package com.qxueyou.scc.teach.subject.model.view;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QOpenSubjectV is a Querydsl query type for OpenSubjectV
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QOpenSubjectV extends EntityPathBase<OpenSubjectV> {
+
+    private static final long serialVersionUID = 1606675631L;
+
+    public static final QOpenSubjectV openSubjectV = new QOpenSubjectV("openSubjectV");
+
+    public final StringPath coverPageUrl = createString("coverPageUrl");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final NumberPath<Integer> learnerCount = createNumber("learnerCount", Integer.class);
+
+    public final NumberPath<Integer> mediaVideoCount = createNumber("mediaVideoCount", Integer.class);
+
+    public final NumberPath<Integer> schoolYear = createNumber("schoolYear", Integer.class);
+
+    public final StringPath subjectId = createString("subjectId");
+
+    public final StringPath subjectName = createString("subjectName");
+
+    public final NumberPath<Integer> term = createNumber("term", Integer.class);
+
+    public QOpenSubjectV(String variable) {
+        super(OpenSubjectV.class, forVariable(variable));
+    }
+
+    public QOpenSubjectV(Path<? extends OpenSubjectV> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QOpenSubjectV(PathMetadata metadata) {
+        super(OpenSubjectV.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUser.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUser.java
new file mode 100644
index 0000000..9700e22
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUser.java
@@ -0,0 +1,78 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QUser is a Querydsl query type for User
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUser extends EntityPathBase<User> {
+
+    private static final long serialVersionUID = 1905996197L;
+
+    public static final QUser user = new QUser("user");
+
+    public final StringPath account = createString("account");
+
+    public final NumberPath<Integer> age = createNumber("age", Integer.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath email = createString("email");
+
+    public final StringPath imei = createString("imei");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath organizationId = createString("organizationId");
+
+    public final StringPath password = createString("password");
+
+    public final ListPath<UserRole, QUserRole> roles = this.<UserRole, QUserRole>createList("roles", UserRole.class, QUserRole.class, PathInits.DIRECT2);
+
+    public final BooleanPath sex = createBoolean("sex");
+
+    public final StringPath source = createString("source");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final ListPath<UserReRoleUser, QUserReRoleUser> userRoleRes = this.<UserReRoleUser, QUserReRoleUser>createList("userRoleRes", UserReRoleUser.class, QUserReRoleUser.class, PathInits.DIRECT2);
+
+    public QUser(String variable) {
+        super(User.class, forVariable(variable));
+    }
+
+    public QUser(Path<? extends User> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUser(PathMetadata metadata) {
+        super(User.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserAuthorizeTrace.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserAuthorizeTrace.java
new file mode 100644
index 0000000..4a9d4de
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserAuthorizeTrace.java
@@ -0,0 +1,65 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserAuthorizeTrace is a Querydsl query type for UserAuthorizeTrace
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserAuthorizeTrace extends EntityPathBase<UserAuthorizeTrace> {
+
+    private static final long serialVersionUID = -1186317343L;
+
+    public static final QUserAuthorizeTrace userAuthorizeTrace = new QUserAuthorizeTrace("userAuthorizeTrace");
+
+    public final StringPath accountId = createString("accountId");
+
+    public final StringPath authorityId = createString("authorityId");
+
+    public final StringPath authorityName = createString("authorityName");
+
+    public final NumberPath<Short> authorityType = createNumber("authorityType", Short.class);
+
+    public final StringPath authorizationTraceId = createString("authorizationTraceId");
+
+    public final StringPath authorizedId = createString("authorizedId");
+
+    public final StringPath authorizedName = createString("authorizedName");
+
+    public final NumberPath<Short> authorizedType = createNumber("authorizedType", Short.class);
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public QUserAuthorizeTrace(String variable) {
+        super(UserAuthorizeTrace.class, forVariable(variable));
+    }
+
+    public QUserAuthorizeTrace(Path<? extends UserAuthorizeTrace> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserAuthorizeTrace(PathMetadata metadata) {
+        super(UserAuthorizeTrace.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserExtend.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserExtend.java
new file mode 100644
index 0000000..c973f07
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserExtend.java
@@ -0,0 +1,85 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserExtend is a Querydsl query type for UserExtend
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserExtend extends EntityPathBase<UserExtend> {
+
+    private static final long serialVersionUID = 933645599L;
+
+    public static final QUserExtend userExtend = new QUserExtend("userExtend");
+
+    public final StringPath birthday = createString("birthday");
+
+    public final StringPath city = createString("city");
+
+    public final StringPath company = createString("company");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath idNumber = createString("idNumber");
+
+    public final StringPath mailAddress = createString("mailAddress");
+
+    public final BooleanPath mailFlag = createBoolean("mailFlag");
+
+    public final StringPath major = createString("major");
+
+    public final StringPath nickName = createString("nickName");
+
+    public final StringPath province = createString("province");
+
+    public final StringPath qq = createString("qq");
+
+    public final StringPath realName = createString("realName");
+
+    public final StringPath region = createString("region");
+
+    public final StringPath signature = createString("signature");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userExtendId = createString("userExtendId");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userPhoto = createString("userPhoto");
+
+    public final StringPath weiboSina = createString("weiboSina");
+
+    public final StringPath weixin = createString("weixin");
+
+    public QUserExtend(String variable) {
+        super(UserExtend.class, forVariable(variable));
+    }
+
+    public QUserExtend(Path<? extends UserExtend> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserExtend(PathMetadata metadata) {
+        super(UserExtend.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserOperate.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserOperate.java
new file mode 100644
index 0000000..db0e298
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserOperate.java
@@ -0,0 +1,89 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserOperate is a Querydsl query type for UserOperate
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserOperate extends EntityPathBase<UserOperate> {
+
+    private static final long serialVersionUID = -1079165921L;
+
+    public static final QUserOperate userOperate = new QUserOperate("userOperate");
+
+    public final StringPath account = createString("account");
+
+    public final NumberPath<Integer> androidLoginTimes = createNumber("androidLoginTimes", Integer.class);
+
+    public final StringPath appVersion = createString("appVersion");
+
+    public final StringPath channelId = createString("channelId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath firstLoginIp = createString("firstLoginIp");
+
+    public final DateTimePath<java.util.Date> firstLoginTime = createDateTime("firstLoginTime", java.util.Date.class);
+
+    public final NumberPath<Integer> iosLoginTimes = createNumber("iosLoginTimes", Integer.class);
+
+    public final StringPath lastLatitudeX = createString("lastLatitudeX");
+
+    public final StringPath lastLatitudeY = createString("lastLatitudeY");
+
+    public final DateTimePath<java.util.Date> lastLoginTime = createDateTime("lastLoginTime", java.util.Date.class);
+
+    public final StringPath lastLoginTIp = createString("lastLoginTIp");
+
+    public final StringPath lbs = createString("lbs");
+
+    public final NumberPath<Integer> loginDays = createNumber("loginDays", Integer.class);
+
+    public final NumberPath<Integer> loginTimes = createNumber("loginTimes", Integer.class);
+
+    public final StringPath operateId = createString("operateId");
+
+    public final StringPath platform = createString("platform");
+
+    public final NumberPath<Integer> sumLoginDays = createNumber("sumLoginDays", Integer.class);
+
+    public final NumberPath<Integer> sumLoginTimes = createNumber("sumLoginTimes", Integer.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QUserOperate(String variable) {
+        super(UserOperate.class, forVariable(variable));
+    }
+
+    public QUserOperate(Path<? extends UserOperate> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserOperate(PathMetadata metadata) {
+        super(UserOperate.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserReRoleUser.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserReRoleUser.java
new file mode 100644
index 0000000..ee0748d
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserReRoleUser.java
@@ -0,0 +1,64 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QUserReRoleUser is a Querydsl query type for UserReRoleUser
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserReRoleUser extends EntityPathBase<UserReRoleUser> {
+
+    private static final long serialVersionUID = -604616647L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QUserReRoleUser userReRoleUser = new QUserReRoleUser("userReRoleUser");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath reId = createString("reId");
+
+    public final StringPath remark = createString("remark");
+
+    public final StringPath roleId = createString("roleId");
+
+    public final QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public final QUserRole userRole;
+
+    public QUserReRoleUser(String variable) {
+        this(UserReRoleUser.class, forVariable(variable), INITS);
+    }
+
+    public QUserReRoleUser(Path<? extends UserReRoleUser> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QUserReRoleUser(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QUserReRoleUser(PathMetadata metadata, PathInits inits) {
+        this(UserReRoleUser.class, metadata, inits);
+    }
+
+    public QUserReRoleUser(Class<? extends UserReRoleUser> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.user = inits.isInitialized("user") ? new QUser(forProperty("user")) : null;
+        this.userRole = inits.isInitialized("userRole") ? new QUserRole(forProperty("userRole")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistration.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistration.java
new file mode 100644
index 0000000..f261778
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistration.java
@@ -0,0 +1,88 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QUserRegistration is a Querydsl query type for UserRegistration
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserRegistration extends EntityPathBase<UserRegistration> {
+
+    private static final long serialVersionUID = 1763450622L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QUserRegistration userRegistration = new QUserRegistration("userRegistration");
+
+    public final DateTimePath<java.util.Date> activationTime = createDateTime("activationTime", java.util.Date.class);
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath collegeCourseId = createString("collegeCourseId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final com.qxueyou.scc.admin.classes.model.QClsClass orgClass;
+
+    public final StringPath otherContactMethod = createString("otherContactMethod");
+
+    public final StringPath registrationId = createString("registrationId");
+
+    public final DateTimePath<java.util.Date> registrationTime = createDateTime("registrationTime", java.util.Date.class);
+
+    public final StringPath salesCode = createString("salesCode");
+
+    public final NumberPath<Short> status = createNumber("status", Short.class);
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final QUser user;
+
+    public final StringPath userId = createString("userId");
+
+    public final StringPath userName = createString("userName");
+
+    public QUserRegistration(String variable) {
+        this(UserRegistration.class, forVariable(variable), INITS);
+    }
+
+    public QUserRegistration(Path<? extends UserRegistration> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QUserRegistration(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QUserRegistration(PathMetadata metadata, PathInits inits) {
+        this(UserRegistration.class, metadata, inits);
+    }
+
+    public QUserRegistration(Class<? extends UserRegistration> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.orgClass = inits.isInitialized("orgClass") ? new com.qxueyou.scc.admin.classes.model.QClsClass(forProperty("orgClass")) : null;
+        this.user = inits.isInitialized("user") ? new QUser(forProperty("user")) : null;
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistrationCustom.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistrationCustom.java
new file mode 100644
index 0000000..76d59f9
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRegistrationCustom.java
@@ -0,0 +1,63 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserRegistrationCustom is a Querydsl query type for UserRegistrationCustom
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserRegistrationCustom extends EntityPathBase<UserRegistrationCustom> {
+
+    private static final long serialVersionUID = 343400463L;
+
+    public static final QUserRegistrationCustom userRegistrationCustom = new QUserRegistrationCustom("userRegistrationCustom");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final StringPath customId = createString("customId");
+
+    public final StringPath customName = createString("customName");
+
+    public final StringPath customValue = createString("customValue");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath regCustomId = createString("regCustomId");
+
+    public final StringPath registrationId = createString("registrationId");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QUserRegistrationCustom(String variable) {
+        super(UserRegistrationCustom.class, forVariable(variable));
+    }
+
+    public QUserRegistrationCustom(Path<? extends UserRegistrationCustom> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserRegistrationCustom(PathMetadata metadata) {
+        super(UserRegistrationCustom.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRole.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRole.java
new file mode 100644
index 0000000..f710750
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserRole.java
@@ -0,0 +1,66 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QUserRole is a Querydsl query type for UserRole
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserRole extends EntityPathBase<UserRole> {
+
+    private static final long serialVersionUID = -405353541L;
+
+    public static final QUserRole userRole = new QUserRole("userRole");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final ListPath<com.qxueyou.scc.sys.model.SysMenu, com.qxueyou.scc.sys.model.QSysMenu> menus = this.<com.qxueyou.scc.sys.model.SysMenu, com.qxueyou.scc.sys.model.QSysMenu>createList("menus", com.qxueyou.scc.sys.model.SysMenu.class, com.qxueyou.scc.sys.model.QSysMenu.class, PathInits.DIRECT2);
+
+    public final StringPath name = createString("name");
+
+    public final ListPath<UserReRoleUser, QUserReRoleUser> res = this.<UserReRoleUser, QUserReRoleUser>createList("res", UserReRoleUser.class, QUserReRoleUser.class, PathInits.DIRECT2);
+
+    public final StringPath roleId = createString("roleId");
+
+    public final ListPath<com.qxueyou.scc.sys.model.SysPrivilege, com.qxueyou.scc.sys.model.QSysPrivilege> sysPrivileges = this.<com.qxueyou.scc.sys.model.SysPrivilege, com.qxueyou.scc.sys.model.QSysPrivilege>createList("sysPrivileges", com.qxueyou.scc.sys.model.SysPrivilege.class, com.qxueyou.scc.sys.model.QSysPrivilege.class, PathInits.DIRECT2);
+
+    public final StringPath topOrgId = createString("topOrgId");
+
+    public final StringPath type = createString("type");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final ListPath<User, QUser> users = this.<User, QUser>createList("users", User.class, QUser.class, PathInits.DIRECT2);
+
+    public QUserRole(String variable) {
+        super(UserRole.class, forVariable(variable));
+    }
+
+    public QUserRole(Path<? extends UserRole> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserRole(PathMetadata metadata) {
+        super(UserRole.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserSign.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserSign.java
new file mode 100644
index 0000000..88a0564
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserSign.java
@@ -0,0 +1,87 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserSign is a Querydsl query type for UserSign
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserSign extends EntityPathBase<UserSign> {
+
+    private static final long serialVersionUID = -405329662L;
+
+    public static final QUserSign userSign = new QUserSign("userSign");
+
+    public final StringPath accreditationName = createString("accreditationName");
+
+    public final NumberPath<Integer> age = createNumber("age", Integer.class);
+
+    public final StringPath certPath = createString("certPath");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath education = createString("education");
+
+    public final StringPath examId = createString("examId");
+
+    public final StringPath idno = createString("idno");
+
+    public final StringPath idnoPath = createString("idnoPath");
+
+    public final StringPath imgPath = createString("imgPath");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath nation = createString("nation");
+
+    public final StringPath promisePath = createString("promisePath");
+
+    public final StringPath recommendName = createString("recommendName");
+
+    public final StringPath recommendPerson = createString("recommendPerson");
+
+    public final BooleanPath sex = createBoolean("sex");
+
+    public final StringPath signtPath = createString("signtPath");
+
+    public final StringPath skillLevel = createString("skillLevel");
+
+    public final StringPath status = createString("status");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userSignId = createString("userSignId");
+
+    public QUserSign(String variable) {
+        super(UserSign.class, forVariable(variable));
+    }
+
+    public QUserSign(Path<? extends UserSign> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserSign(PathMetadata metadata) {
+        super(UserSign.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserStudent.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserStudent.java
new file mode 100644
index 0000000..8fb7b2a
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserStudent.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserStudent is a Querydsl query type for UserStudent
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserStudent extends EntityPathBase<UserStudent> {
+
+    private static final long serialVersionUID = -1695238954L;
+
+    public static final QUserStudent userStudent = new QUserStudent("userStudent");
+
+    public final StringPath classId = createString("classId");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath orgId = createString("orgId");
+
+    public final StringPath school = createString("school");
+
+    public final StringPath studentId = createString("studentId");
+
+    public final StringPath subject = createString("subject");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QUserStudent(String variable) {
+        super(UserStudent.class, forVariable(variable));
+    }
+
+    public QUserStudent(Path<? extends UserStudent> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserStudent(PathMetadata metadata) {
+        super(UserStudent.class, metadata);
+    }
+
+}
+
diff --git a/target/generated-sources/java/com/qxueyou/scc/user/model/QUserTeacher.java b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserTeacher.java
new file mode 100644
index 0000000..b94e00a
--- /dev/null
+++ b/target/generated-sources/java/com/qxueyou/scc/user/model/QUserTeacher.java
@@ -0,0 +1,61 @@
+package com.qxueyou.scc.user.model;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.Generated;
+import com.querydsl.core.types.Path;
+
+
+/**
+ * QUserTeacher is a Querydsl query type for UserTeacher
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QUserTeacher extends EntityPathBase<UserTeacher> {
+
+    private static final long serialVersionUID = -1255670147L;
+
+    public static final QUserTeacher userTeacher = new QUserTeacher("userTeacher");
+
+    public final StringPath createId = createString("createId");
+
+    public final DateTimePath<java.util.Date> createTime = createDateTime("createTime", java.util.Date.class);
+
+    public final StringPath creator = createString("creator");
+
+    public final BooleanPath deleteFlag = createBoolean("deleteFlag");
+
+    public final StringPath mobilePhone = createString("mobilePhone");
+
+    public final StringPath name = createString("name");
+
+    public final StringPath organizationId = createString("organizationId");
+
+    public final StringPath teacherId = createString("teacherId");
+
+    public final StringPath teacherNo = createString("teacherNo");
+
+    public final StringPath updateId = createString("updateId");
+
+    public final DateTimePath<java.util.Date> updateTime = createDateTime("updateTime", java.util.Date.class);
+
+    public final StringPath updator = createString("updator");
+
+    public final StringPath userId = createString("userId");
+
+    public QUserTeacher(String variable) {
+        super(UserTeacher.class, forVariable(variable));
+    }
+
+    public QUserTeacher(Path<? extends UserTeacher> path) {
+        super(path.getType(), path.getMetadata());
+    }
+
+    public QUserTeacher(PathMetadata metadata) {
+        super(UserTeacher.class, metadata);
+    }
+
+}
+
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..9e54a82
--- /dev/null
+++ b/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Apache Maven
+#Mon Jul 11 15:09:58 CST 2022
+version=0.0.1-SNAPSHOT
+groupId=com.qxueyou
+artifactId=scc
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..ae282df
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,989 @@
+com\qxueyou\scc\stucontroller\StuLiveController.class
+com\qxueyou\scc\teach\subject\model\view\QMyLectureVId.class
+com\qxueyou\scc\courseware\service\ICourseService.class
+com\qxueyou\scc\teach\subject\model\view\QMyChapterProgressVId.class
+com\qxueyou\scc\base\model\Param.class
+com\qxueyou\scc\org\model\QOrgReCollegePublic.class
+com\qxueyou\scc\operation\comment\mode\SnsMyPraise.class
+com\qxueyou\scc\controller\CourseScheduleController.class
+com\qxueyou\scc\base\dao\CommonRedisTemplate.class
+com\qxueyou\scc\exercise\service\impl\Parser.class
+com\qxueyou\scc\school\model\QSchFile.class
+com\qxueyou\scc\user\model\QUserRegistrationCustom.class
+com\qxueyou\scc\org\model\OrgCollegeCourse.class
+com\qxueyou\scc\base\model\WeixinContants.class
+com\qxueyou\scc\exercise\service\impl\ExerciseCompleteService.class
+com\qxueyou\scc\media\model\QMediaVideoTrans.class
+com\qxueyou\scc\school\helper\IJudgeLimitStrategy.class
+com\qxueyou\scc\org\model\QOrgAppMenu.class
+com\qxueyou\scc\org\model\QOrgCollegePublic.class
+com\qxueyou\scc\teach\live\service\impl\MediaVideoLivePlayBackService$1.class
+com\qxueyou\scc\admin\score\model\view\HomeworkScoreV.class
+com\qxueyou\scc\exercise\model\ExerciseDeepAnalysis.class
+com\qxueyou\scc\exercise\model\ExciseExtendReqListData.class
+com\qxueyou\scc\exercise\model\ExerciseRecentRecord.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveExtend.class
+com\qxueyou\scc\teach\subject\model\SubjectLecture.class
+com\qxueyou\scc\teach\subject\model\view\MyChapterProgressV.class
+com\qxueyou\scc\exam\service\impl\ExamPaperSectionService.class
+com\qxueyou\scc\exercise\model\QExerciseFaultRecord.class
+com\qxueyou\scc\admin\score\service\impl\ScoreService.class
+com\qxueyou\scc\school\model\QSchSchoolYear.class
+com\qxueyou\scc\sys\model\QSysConfigFile.class
+com\qxueyou\scc\teach\live\service\IMediaVideoLivePlayBackService.class
+com\qxueyou\scc\school\model\InteractResultData.class
+com\qxueyou\scc\school\model\QSchTermReDay.class
+com\qxueyou\scc\org\model\OrgClassVisitor.class
+com\qxueyou\scc\base\model\Constants.class
+com\qxueyou\scc\media\model\VideoPlay.class
+com\qxueyou\scc\school\model\QSchSignItem.class
+com\qxueyou\scc\exam\action\ExamPaperController.class
+com\qxueyou\scc\admin\notice\dao\NoticeDAO.class
+com\qxueyou\scc\controller\ClassRoomController.class
+com\qxueyou\scc\exercise\action\ExerciseController.class
+com\qxueyou\scc\school\model\QSchHandoutRecordDetail.class
+com\qxueyou\scc\sys\service\impl\PriviledgeService$1.class
+com\qxueyou\scc\exam\model\QExamResultV.class
+com\qxueyou\scc\org\model\OrgClassQueryCm.class
+com\qxueyou\scc\media\model\QVideoPlay.class
+com\qxueyou\scc\org\model\QOrganizationExtend.class
+com\qxueyou\scc\admin\score\model\view\QExamScoreV.class
+com\qxueyou\scc\controller\NoticeController.class
+com\qxueyou\scc\admin\score\model\Score.class
+com\qxueyou\scc\base\service\impl\BaseRepository.class
+com\qxueyou\scc\school\model\QSchClassSubject.class
+com\qxueyou\scc\controller\TeacherController.class
+com\qxueyou\scc\teach\res\service\impl\resitem\ResItemVideoService.class
+com\qxueyou\scc\school\model\QSchSchoolDayItem.class
+com\qxueyou\scc\controller\ClsLectureController.class
+com\qxueyou\scc\school\model\QSchSignOrder.class
+com\qxueyou\scc\org\model\OrgAdmin.class
+com\qxueyou\scc\base\handler\QLog$LogType.class
+com\qxueyou\scc\exercise\model\ExerciseDataSubmitLog.class
+com\qxueyou\scc\operation\comment\mode\SnsCommentToMe.class
+com\qxueyou\scc\user\model\QUserExtend.class
+com\qxueyou\scc\base\handler\JgwOracleDialect.class
+com\qxueyou\scc\exercise\timer\ExerciseTimer.class
+com\qxueyou\scc\teach\student\dao\StudentDAO.class
+com\qxueyou\scc\base\handler\QCacheReader$ClearStrategy.class
+com\qxueyou\scc\school\model\SchLessonPeriod.class
+com\qxueyou\scc\exercise\service\IExerciseVerService.class
+com\qxueyou\scc\admin\classes\dao\ClassDAO.class
+com\qxueyou\scc\teach\res\model\ResItemVideo.class
+com\qxueyou\scc\msg\model\MsgInfo.class
+com\qxueyou\scc\operation\comment\mode\SnsPraiseToMe.class
+com\qxueyou\scc\exam\model\QExamResultVId.class
+com\qxueyou\scc\school\model\SchSchoolDayItem.class
+com\qxueyou\scc\org\model\OrgCategoryLevel.class
+com\qxueyou\scc\teach\subject\model\view\MyLectureV.class
+com\qxueyou\scc\school\service\impl\LessonService.class
+com\qxueyou\scc\base\util\HttpClient$1.class
+com\qxueyou\scc\org\model\QOrgPhotoalbum.class
+com\qxueyou\scc\base\service\impl\LicenseService.class
+com\qxueyou\scc\school\service\IArticleService.class
+com\qxueyou\scc\exercise\model\ExciseExtendResult.class
+com\qxueyou\scc\org\model\OrgAppInfo.class
+com\qxueyou\scc\exam\model\ExamBatchClassRe.class
+com\qxueyou\scc\org\model\QOrgCourseCategory.class
+com\qxueyou\scc\base\util\XmlUtils.class
+com\qxueyou\scc\user\model\ExportUserScore.class
+com\qxueyou\scc\user\service\impl\UserService.class
+com\qxueyou\scc\exercise\model\ExerciseFavorite.class
+com\qxueyou\scc\school\service\impl\SignService.class
+com\qxueyou\scc\school\model\SchTerm.class
+com\qxueyou\scc\exercise\service\impl\parser\ItemParser.class
+com\qxueyou\scc\school\model\QSchStudyReport.class
+com\qxueyou\scc\admin\classes\service\IClassService.class
+com\qxueyou\scc\exam\model\ExamItemVId.class
+com\qxueyou\scc\school\model\SchStudyReport.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveOrder.class
+com\qxueyou\scc\base\handler\MatchAgainstFunction.class
+com\qxueyou\scc\school\model\SchHandoutReCourse.class
+com\qxueyou\scc\base\dao\BaseDAO$10.class
+com\qxueyou\scc\admin\teacher\service\ITeacherService.class
+com\qxueyou\scc\org\model\QOrgCollege.class
+com\qxueyou\scc\exercise\service\impl\node\Doc.class
+com\qxueyou\scc\teach\res\model\Res.class
+com\qxueyou\scc\school\service\IStudyReportService.class
+com\qxueyou\scc\base\dao\BaseDAO$11.class
+com\qxueyou\scc\evaluate\service\impl\EvaluateTemplateService.class
+com\qxueyou\scc\exercise\model\ExerGroupResponseData.class
+com\qxueyou\scc\admin\course\model\QCourseSchedule.class
+com\qxueyou\scc\exercise\model\QExerciseReCourse.class
+com\qxueyou\scc\operation\comment\mode\Comment.class
+com\qxueyou\scc\operation\topic\model\TopicInfo.class
+com\qxueyou\scc\sys\service\impl\OssService.class
+com\qxueyou\scc\statistic\model\QSchFlowStatisticDetail.class
+com\qxueyou\scc\user\model\UserRegistration.class
+com\qxueyou\scc\admin\classroom\service\IClassRoomService.class
+com\qxueyou\scc\school\model\QSchHandoutStatistic.class
+com\qxueyou\scc\admin\classes\service\impl\ClsClassService.class
+com\qxueyou\scc\base\handler\QxueyouMysqlDialect.class
+com\qxueyou\scc\teach\subject\service\impl\SubjectLectureService.class
+com\qxueyou\scc\base\service\impl\ONSExceptionLogService.class
+com\qxueyou\scc\exercise\model\ExerciseImportResult.class
+com\qxueyou\scc\admin\progress\model\view\QSubjectProgressTreeVId.class
+com\qxueyou\scc\exercise\service\impl\ExerciseItemStatisticsDealService.class
+com\qxueyou\scc\school\service\IClassCircleService.class
+com\qxueyou\scc\teach\res\service\impl\FileService.class
+com\qxueyou\scc\teach\subject\model\SubjectChapter.class
+com\qxueyou\scc\sys\service\impl\AuthorizeService.class
+com\qxueyou\scc\base\util\CollectionUtils.class
+com\qxueyou\scc\school\service\impl\ClassCardService.class
+com\qxueyou\scc\admin\course\model\CourseSchedule.class
+com\qxueyou\scc\admin\progress\model\view\SubjectProgressTreeV.class
+com\qxueyou\scc\operation\topic\service\ITopicService.class
+com\qxueyou\scc\user\model\QUserSign.class
+com\qxueyou\scc\teach\student\service\IStudentService.class
+com\qxueyou\scc\base\model\WxTemplateMsg.class
+com\qxueyou\scc\exercise\model\ExerciseParse.class
+com\qxueyou\scc\exercise\model\ExerciseChapter.class
+com\qxueyou\scc\school\service\ISchoolDayService.class
+com\qxueyou\scc\teach\live\utils\FfmpegFileVO.class
+com\qxueyou\scc\msg\model\MsgGroupUserRe.class
+com\qxueyou\scc\base\dao\BaseDAO$16.class
+com\qxueyou\scc\teach\live\dao\MediaLiveDAO.class
+com\qxueyou\scc\org\model\OrgBankAccount.class
+com\qxueyou\scc\school\model\QSchSign.class
+com\qxueyou\scc\school\model\QSchYearReOrg.class
+com\qxueyou\scc\school\model\QEvaluateStuStudentV.class
+com\qxueyou\scc\teach\subject\model\view\MyLectureVId.class
+com\qxueyou\scc\org\model\QOrgBankAccountRe.class
+com\qxueyou\scc\school\model\QSchNote.class
+com\qxueyou\scc\courseware\action\CourceCategoryController.class
+com\qxueyou\scc\admin\progress\service\impl\lecture\LectureVideoProgressService.class
+com\qxueyou\scc\operation\comment\mode\QCommentPraise.class
+com\qxueyou\scc\exercise\action\ExerciseCompleteController.class
+com\qxueyou\scc\exercise\model\QExerciseGroupShareInfo.class
+com\qxueyou\scc\org\service\impl\OrganizationService.class
+com\qxueyou\scc\base\model\CacheConstants.class
+com\qxueyou\scc\exercise\model\ExerItemResponseData.class
+com\qxueyou\scc\admin\progress\model\SubjectLectureProgressDetail.class
+com\qxueyou\scc\org\model\OrgAppMenu.class
+com\qxueyou\scc\controller\ResController.class
+com\qxueyou\scc\sys\model\SysDictionary.class
+com\qxueyou\scc\school\service\IRankService.class
+com\qxueyou\scc\sys\service\impl\SysConfigService.class
+com\qxueyou\scc\admin\score\model\view\QHomeworkScoreVId.class
+com\qxueyou\scc\org\model\QOrgClass.class
+com\qxueyou\scc\sys\service\ISysAttachmentService.class
+com\qxueyou\scc\exam\dao\ExamDao.class
+com\qxueyou\scc\sys\model\QSysConfig.class
+com\qxueyou\scc\school\model\QSchStudentSchedule.class
+com\qxueyou\scc\org\model\OrgStringExtend.class
+com\qxueyou\scc\org\model\OrgMarketPrivilege.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveReplay.class
+com\qxueyou\scc\base\service\IONSExceptionLogService.class
+com\qxueyou\scc\web\OpenEntityManagerFilter.class
+com\qxueyou\scc\school\model\QSchEvaRecordRe.class
+com\qxueyou\scc\exercise\model\ExerciseFaultRecord.class
+com\qxueyou\scc\exercise\model\QExerciseExamItemType.class
+com\qxueyou\scc\base\util\FreeMarkerMd5MethodDefine.class
+com\qxueyou\scc\teach\res\model\ResLib.class
+com\qxueyou\scc\user\dao\RegistrationDAO.class
+com\qxueyou\scc\base\dao\BaseDAO$15.class
+com\qxueyou\scc\exercise\service\impl\parser\OptionParser.class
+com\qxueyou\scc\operation\topic\action\StuTopicController.class
+com\qxueyou\scc\school\service\impl\SchSignMsgDealService.class
+com\qxueyou\scc\org\model\QOrgClassVideoPrivilege.class
+com\qxueyou\scc\teach\res\model\ResFile.class
+com\qxueyou\scc\school\model\SchHandoutPage.class
+com\qxueyou\scc\org\model\QVOrgCourseMarketQuery.class
+com\qxueyou\scc\exercise\model\ExerciseCorrectionResult.class
+com\qxueyou\scc\school\model\SchSubjectExtend.class
+com\qxueyou\scc\base\util\DESUtils.class
+com\qxueyou\scc\exam\model\QExamPaperInfo.class
+com\qxueyou\scc\admin\course\model\CourseScheduleReCls.class
+com\qxueyou\scc\org\model\QOrgAppInfo.class
+com\qxueyou\scc\exam\service\IExamPaperSectionService.class
+com\qxueyou\scc\exercise\model\QExerciseRecentRecord.class
+com\qxueyou\scc\org\model\QOrgClassBanner.class
+com\qxueyou\scc\org\model\QOrgClassVisitor.class
+com\qxueyou\scc\base\service\impl\DictionaryService.class
+com\qxueyou\scc\school\model\QSchStudentScore.class
+com\qxueyou\scc\exam\action\ExamController.class
+com\qxueyou\scc\base\service\IFileUploadService.class
+com\qxueyou\scc\exercise\model\QExerciseItemSet.class
+com\qxueyou\scc\org\model\OrgNewUserModel.class
+com\qxueyou\scc\school\model\TeachEvaScoreData.class
+com\qxueyou\scc\exercise\service\impl\parser\ItemAnswerParser.class
+com\qxueyou\scc\school\model\QSchTerm.class
+com\qxueyou\scc\school\model\SchHandout.class
+com\qxueyou\scc\exercise\model\QExerciseFault.class
+com\qxueyou\scc\teach\res\model\ResDir.class
+com\qxueyou\scc\school\model\QClassCardTemplet.class
+com\qxueyou\scc\exercise\model\QExerciseCorrection.class
+com\qxueyou\scc\operation\topic\model\QTopicInfo.class
+com\qxueyou\scc\school\model\QSchEvaluateDetail.class
+com\qxueyou\scc\school\model\QSchRankVer.class
+com\qxueyou\scc\school\model\QSchClassCircleMsg.class
+com\qxueyou\scc\org\model\QOrgClassQueryCm.class
+com\qxueyou\scc\media\model\QMediaVideoStatistic.class
+com\qxueyou\scc\school\model\QSchHandoutReCourse.class
+com\qxueyou\scc\user\model\QUserReRoleUser.class
+com\qxueyou\scc\sys\service\impl\VideoOssService.class
+com\qxueyou\scc\exercise\service\impl\ExerciseService.class
+com\qxueyou\scc\base\util\QueryDslOptionBuilder.class
+com\qxueyou\scc\school\model\SchReLessonPeriod.class
+com\qxueyou\scc\admin\progress\service\impl\item\LectureProgressService.class
+com\qxueyou\scc\exercise\service\impl\Node.class
+com\qxueyou\scc\admin\classes\service\impl\ClassLectureService.class
+com\qxueyou\scc\exercise\model\ExerciseParseResult.class
+com\qxueyou\scc\base\util\NumRandomUtils.class
+com\qxueyou\scc\school\model\SchClassCircle.class
+com\qxueyou\scc\msg\model\QMsgGroupUserRe.class
+com\qxueyou\scc\school\model\ClassCardTemplet.class
+com\qxueyou\scc\base\util\ExcelExportUtils.class
+com\qxueyou\scc\org\util\CourseMarketUtils.class
+com\qxueyou\scc\exercise\service\impl\Handler.class
+com\qxueyou\scc\sys\model\QSysMenu.class
+com\qxueyou\scc\base\util\RSAUtils$RSAClient.class
+com\qxueyou\scc\media\model\VideoInf.class
+com\qxueyou\scc\msg\model\MsgChatroomMsg.class
+com\qxueyou\scc\teach\live\utils\PrintStreamThread.class
+com\qxueyou\scc\exercise\model\QExerciseResultVId.class
+com\qxueyou\scc\org\dao\OrgDAO.class
+com\qxueyou\scc\school\model\QSchClassCardTemplet.class
+com\qxueyou\scc\admin\score\model\view\ExamScoreVId.class
+com\qxueyou\scc\school\service\impl\HandoutConvertPDFDealService.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveRecord.class
+com\qxueyou\scc\sys\model\SysCondition.class
+com\qxueyou\scc\base\model\QUserCipher.class
+com\qxueyou\scc\sys\service\impl\TestService.class
+com\qxueyou\scc\base\util\RSAUtils.class
+com\qxueyou\scc\school\model\SchReLessonVideo.class
+com\qxueyou\scc\sys\model\QSysFileUploadTrace.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveReplayReClip.class
+com\qxueyou\scc\exam\dao\ExamDaoImpl.class
+com\qxueyou\scc\org\model\QOrgAdmin.class
+com\qxueyou\scc\base\model\PaginationData.class
+com\qxueyou\scc\school\service\IHandoutService.class
+com\qxueyou\scc\teach\subject\model\view\QLectureDocV.class
+com\qxueyou\scc\courseware\action\CourceController.class
+com\qxueyou\scc\school\util\StudyReportUtils.class
+com\qxueyou\scc\base\StsCtrl.class
+com\qxueyou\scc\school\model\QSchEvaluateCategory.class
+com\qxueyou\scc\evaluate\service\IEvaluateTemplateService.class
+com\qxueyou\scc\school\dao\LessonDAO.class
+com\qxueyou\scc\org\service\IOrgClassService.class
+com\qxueyou\scc\school\model\QSchReLessonPeriod.class
+com\qxueyou\scc\stucontroller\StuSubjectController.class
+com\qxueyou\scc\user\model\UserOperate.class
+com\qxueyou\scc\teach\live\service\impl\MediaVideoLivePlayBackService.class
+com\qxueyou\scc\operation\comment\mode\CommentObject.class
+com\qxueyou\scc\admin\notice\service\INoticeService.class
+com\qxueyou\scc\user\model\QUserOperate.class
+com\qxueyou\scc\base\util\AESUtil.class
+com\qxueyou\scc\sms\model\QSmsConfig.class
+com\qxueyou\scc\teach\res\service\IResItemService.class
+com\qxueyou\scc\exercise\model\ExerciseExamReGroup.class
+com\qxueyou\scc\stucontroller\HomePageController.class
+com\qxueyou\scc\teach\res\model\ResDatas.class
+com\qxueyou\scc\org\model\QExternelTeacherInfo.class
+com\qxueyou\scc\school\model\InterateAnswer.class
+com\qxueyou\scc\exercise\model\ExciseExtendReqData.class
+com\qxueyou\scc\admin\classes\dao\ClassRepository.class
+com\qxueyou\scc\school\model\SchFile.class
+com\qxueyou\scc\base\util\DateUtils.class
+com\qxueyou\scc\evaluate\service\impl\EvaluateService.class
+com\qxueyou\scc\msg\model\MsgGroup.class
+com\qxueyou\scc\sys\service\impl\SysLogService.class
+com\qxueyou\scc\school\model\QSchReLessonLiveVideo.class
+com\qxueyou\scc\school\service\ILessonService.class
+com\qxueyou\scc\exercise\service\impl\ExerciseStatisticsDealService.class
+com\qxueyou\scc\teach\res\model\QResItemExercise.class
+com\qxueyou\scc\exercise\model\QExerciseFavorite.class
+com\qxueyou\scc\user\model\UserTeacher.class
+com\qxueyou\scc\school\model\QSchStudentAchievement.class
+com\qxueyou\scc\base\dao\BaseDAO$14.class
+com\qxueyou\scc\school\model\QSchSignStatistics.class
+com\qxueyou\scc\school\helper\IJudgeUpdateStrategy.class
+com\qxueyou\scc\exercise\model\QExerciseInfo.class
+com\qxueyou\scc\org\model\OrgCollegePublic.class
+com\qxueyou\scc\exercise\model\ExerciseReCourse.class
+com\qxueyou\scc\exercise\model\ExerciseItemScore.class
+com\qxueyou\scc\web\WebListenerTest.class
+com\qxueyou\scc\org\model\OrgStudent.class
+com\qxueyou\scc\controller\CoursewareController.class
+com\qxueyou\scc\org\model\QDiscoverBanner.class
+com\qxueyou\scc\base\service\ILicenseService.class
+com\qxueyou\scc\sys\model\SysMenu.class
+com\qxueyou\scc\teach\res\service\impl\resitem\ResItemDocService.class
+com\qxueyou\scc\admin\classes\model\ClsSubjectLecture.class
+com\qxueyou\scc\operation\topic\model\TopicClassRe.class
+com\qxueyou\scc\base\model\ApiResult$ResultCode.class
+com\qxueyou\scc\org\model\QOrgClassReTeacher.class
+com\qxueyou\scc\base\dao\BaseDAO$2.class
+com\qxueyou\scc\teach\subject\dao\SubjectDAO.class
+com\qxueyou\scc\exercise\action\ExerciseDeepAnaController.class
+com\qxueyou\scc\exercise\service\impl\ExerciseGroupService$1.class
+com\qxueyou\scc\admin\score\dao\HomeworkScoreVDAO.class
+com\qxueyou\scc\operation\comment\mode\QSnsMyPraise.class
+com\qxueyou\scc\web\DruidWebFilter.class
+com\qxueyou\scc\base\dao\BaseDAO$12.class
+com\qxueyou\scc\teach\res\model\QResItemAudio.class
+com\qxueyou\scc\exercise\model\ExerciseInfo.class
+com\qxueyou\scc\teach\subject\model\view\QMySubjectVId.class
+com\qxueyou\scc\org\model\OrgClassReTeacher.class
+com\qxueyou\scc\admin\classroom\model\QClassRoom.class
+com\qxueyou\scc\exam\model\ExamInfo.class
+com\qxueyou\scc\teach\subject\model\view\MyChapterProgressVId.class
+com\qxueyou\scc\school\model\SchHandoutPageFavor.class
+com\qxueyou\scc\teach\subject\model\QSubjectLecture.class
+com\qxueyou\scc\school\model\SchYearReOrg.class
+com\qxueyou\scc\school\model\TeachEvaScoreResult.class
+com\qxueyou\scc\operation\comment\mode\CommentPraise.class
+com\qxueyou\scc\base\handler\QCacheReader$TimeUnit.class
+com\qxueyou\scc\exam\model\ExamResultV.class
+com\qxueyou\scc\org\model\OrgCollege.class
+com\qxueyou\scc\notice\model\QNotice.class
+com\qxueyou\scc\base\util\ReisUtils.class
+com\qxueyou\scc\teach\subject\service\ILectureService.class
+com\qxueyou\scc\web\AuthorizeFilter.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveExtend.class
+com\qxueyou\scc\admin\teacher\dao\TeacherDAO.class
+com\qxueyou\scc\base\service\ICacheService.class
+com\qxueyou\scc\exercise\model\ExerciseItemAnalisiU.class
+com\qxueyou\scc\org\model\OrgClassUserCustom.class
+com\qxueyou\scc\org\model\OrgTeacher.class
+com\qxueyou\scc\admin\classes\service\IClassLectureService.class
+com\qxueyou\scc\school\model\SchQRUrl.class
+com\qxueyou\scc\admin\classes\model\ClsClassReSubject.class
+com\qxueyou\scc\courseware\service\impl\OrgCourseService.class
+com\qxueyou\scc\school\service\impl\WBONSProducer.class
+com\qxueyou\scc\exercise\model\ExerciseAddItemParams.class
+com\qxueyou\scc\school\model\QSchLessonPeriod.class
+com\qxueyou\scc\sys\msg\CustomMsgConsumerService.class
+com\qxueyou\scc\base\model\WxTemplateMsg$Pair.class
+com\qxueyou\scc\school\model\viewvo\SchSemesterViewVO.class
+com\qxueyou\scc\user\service\IUserRoleService.class
+com\qxueyou\scc\exercise\model\QExerciseItemStatistics.class
+com\qxueyou\scc\base\util\StatelessFilter.class
+com\qxueyou\scc\sms\model\SmsConfig.class
+com\qxueyou\scc\exercise\model\QExerciseFavoriteBook.class
+com\qxueyou\scc\org\model\OrganizationUnion.class
+com\qxueyou\scc\user\model\UserExtend.class
+com\qxueyou\scc\sys\model\ResponseResult.class
+com\qxueyou\scc\org\model\OrgClassReUser.class
+com\qxueyou\scc\exercise\service\IExerciseDeepAnaService.class
+com\qxueyou\scc\exercise\model\QExerciseGroupItemRe.class
+com\qxueyou\scc\media\model\QMediaVideoRecord.class
+com\qxueyou\scc\base\dao\BaseDAO$9.class
+com\qxueyou\scc\config\SccConfig.class
+com\qxueyou\scc\admin\classes\model\QClsSubjectLecture.class
+com\qxueyou\scc\exam\action\ExamBatchController.class
+com\qxueyou\scc\school\service\impl\SchoolSubjectService.class
+com\qxueyou\scc\base\handler\QCacheMonitor.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveClip.class
+com\qxueyou\scc\exercise\model\ExerciseItemStatis.class
+com\qxueyou\scc\media\model\MediaVideoCache.class
+com\qxueyou\scc\user\model\UserStudent.class
+com\qxueyou\scc\exercise\model\ExerciseFaultBook.class
+com\qxueyou\scc\user\service\IUserService.class
+com\qxueyou\scc\sys\service\IPrivilegeService.class
+com\qxueyou\scc\school\model\SchClassCard.class
+com\qxueyou\scc\base\dao\ReidsSharedPoolWrapper.class
+com\qxueyou\scc\user\model\User.class
+com\qxueyou\scc\org\service\IOrganizationService.class
+com\qxueyou\scc\school\model\QSchSchoolDay.class
+com\qxueyou\scc\teach\res\service\impl\resitem\ResItemExerciseService.class
+com\qxueyou\scc\exercise\model\ExerciseItemAnswerU.class
+com\qxueyou\scc\base\util\SHA1.class
+com\qxueyou\scc\sms\model\QSms.class
+com\qxueyou\scc\admin\progress\model\QProgress.class
+com\qxueyou\scc\msg\model\QMessage.class
+com\qxueyou\scc\admin\course\model\QCourseScheduleDetail.class
+com\qxueyou\scc\exercise\service\impl\ExercisePyService.class
+com\qxueyou\scc\org\model\QOrgStringExtend.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveReplay.class
+com\qxueyou\scc\controller\ExamRoomController.class
+com\qxueyou\scc\admin\score\model\view\QExamScoreVId.class
+com\qxueyou\scc\controller\FileController.class
+com\qxueyou\scc\exercise\model\QExerciseItemAnalisiU.class
+com\qxueyou\scc\school\service\IStudentScoreService.class
+com\qxueyou\scc\exercise\model\QExerciseDataSubmitLog.class
+com\qxueyou\scc\admin\notice\service\impl\NoticeService.class
+com\qxueyou\scc\school\model\SchSign.class
+com\qxueyou\scc\org\model\QOrgPrivilege.class
+com\qxueyou\scc\base\dao\BaseDAO$3.class
+com\qxueyou\scc\org\model\QOrgCategoryLevel.class
+com\qxueyou\scc\courseware\service\ICourceCategoryService.class
+com\qxueyou\scc\exercise\dao\ExerciseDAO.class
+com\qxueyou\scc\school\model\SchStudentAchievement.class
+com\qxueyou\scc\user\model\UserRole.class
+com\qxueyou\scc\school\model\QSchVideoFile.class
+com\qxueyou\scc\exercise\model\ExerciseItem.class
+com\qxueyou\scc\base\dao\BaseDAO$4.class
+com\qxueyou\scc\exam\model\QExamReExamPaper.class
+com\qxueyou\scc\teach\live\service\IMediaLiveService.class
+com\qxueyou\scc\sys\utils\DrawingUtil.class
+com\qxueyou\scc\admin\progress\service\IDetailProgressService.class
+com\qxueyou\scc\exercise\service\impl\ExerciseVerService.class
+com\qxueyou\scc\media\model\QMediaVideo.class
+com\qxueyou\scc\teach\subject\model\view\MySubjectVId.class
+com\qxueyou\scc\user\model\UserReRoleUser.class
+com\qxueyou\scc\admin\progress\service\impl\StudyProgressUtils.class
+com\qxueyou\scc\teach\subject\model\view\OpenSubjectV.class
+com\qxueyou\scc\school\service\impl\VideoIssueStopDealService.class
+com\qxueyou\scc\exercise\model\ExerciseItemAnalisi.class
+com\qxueyou\scc\org\model\QOrgClassUserCustom.class
+com\qxueyou\scc\admin\classes\model\ClsSubjectChapter.class
+com\qxueyou\scc\base\util\WordProcessUtils.class
+com\qxueyou\scc\base\dao\BaseDAO$5.class
+com\qxueyou\scc\media\service\IMediaVideoService.class
+com\qxueyou\scc\school\model\SchRankVer.class
+com\qxueyou\scc\exam\model\QExamInfo.class
+com\qxueyou\scc\org\model\OrgCourse.class
+com\qxueyou\scc\sys\service\impl\Listener.class
+com\qxueyou\scc\exercise\model\ExerciseItemAnswer.class
+com\qxueyou\scc\base\model\Result.class
+com\qxueyou\scc\base\dao\BaseDAO$8.class
+com\qxueyou\scc\school\model\SchStudentSchedule.class
+com\qxueyou\scc\school\service\impl\CoursewareService.class
+com\qxueyou\scc\teach\student\model\QStuStudent.class
+com\qxueyou\scc\school\model\QSchSubjectReCourse.class
+com\qxueyou\scc\SccApplication.class
+com\qxueyou\scc\teach\subject\service\ISubjectService.class
+com\qxueyou\scc\exercise\action\ExerciseGroupController.class
+com\qxueyou\scc\school\model\SchEvaRecordRe.class
+com\qxueyou\scc\exercise\model\ExerciseItemSet.class
+com\qxueyou\scc\org\service\IOrgTextService.class
+com\qxueyou\scc\exam\model\ExamBatchInfo.class
+com\qxueyou\scc\base\model\UserCipher.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveReplayReClip.class
+com\qxueyou\scc\admin\classes\model\ClsClass.class
+com\qxueyou\scc\msg\service\impl\MsgInfoService.class
+com\qxueyou\scc\base\handler\QLog.class
+com\qxueyou\scc\exercise\model\ExerciseCorrectionImg.class
+com\qxueyou\scc\exercise\model\ExerciseRecord.class
+com\qxueyou\scc\base\dao\CommonRedisCache.class
+com\qxueyou\scc\base\util\SerializeUtils.class
+com\qxueyou\scc\exercise\model\ExerciseItemAnswerData.class
+com\qxueyou\scc\msg\service\impl\ChatroomMessageBean.class
+com\qxueyou\scc\teach\res\model\QResItemArticle.class
+com\qxueyou\scc\school\util\StudentEvaUtils.class
+com\qxueyou\scc\teach\res\model\QRes.class
+com\qxueyou\scc\school\model\SchHandoutRecordDetail.class
+com\qxueyou\scc\school\model\SchStudentScore.class
+com\qxueyou\scc\admin\teacher\service\impl\TeacherService.class
+com\qxueyou\scc\base\util\WordProcessUtils$WordProcessClient.class
+com\qxueyou\scc\org\model\OrgPhotoalbum.class
+com\qxueyou\scc\sys\service\impl\TestKafkaService.class
+com\qxueyou\scc\school\model\QSchClassCourseware.class
+com\qxueyou\scc\user\dao\UserRoleDAO.class
+com\qxueyou\scc\base\service\impl\RedisCacheBean.class
+com\qxueyou\scc\school\model\SchClassSchedule.class
+com\qxueyou\scc\shorturl\util\ShortUrlUtils.class
+com\qxueyou\scc\sys\model\SysButton.class
+com\qxueyou\scc\sys\service\ISysConfigService.class
+com\qxueyou\scc\exercise\model\QExerciseItemAnswer.class
+com\qxueyou\scc\teach\subject\model\Subject.class
+com\qxueyou\scc\admin\examroom\service\impl\ExamRoomService.class
+com\qxueyou\scc\school\model\QSchYearReClass.class
+com\qxueyou\scc\school\model\SchScheduleAddress.class
+com\qxueyou\scc\base\util\JacobUtil.class
+com\qxueyou\scc\org\service\impl\OrgTextService.class
+com\qxueyou\scc\base\dao\BaseDAO$7.class
+com\qxueyou\scc\school\model\viewvo\SchWeekScheduleViewVO.class
+com\qxueyou\scc\exam\model\ExamResultVId.class
+com\qxueyou\scc\exercise\service\impl\node\ItemType.class
+com\qxueyou\scc\base\model\QWbCacheKey.class
+com\qxueyou\scc\org\model\QOrgBanner.class
+com\qxueyou\scc\config\AliOssConfig.class
+com\qxueyou\scc\sms\utils\SmsUtils.class
+com\qxueyou\scc\school\model\QSchHandoutPageFavor.class
+com\qxueyou\scc\exercise\util\ExerciseUtils.class
+com\qxueyou\scc\base\dao\BaseDAO$6.class
+com\qxueyou\scc\base\util\DateTimeUtils.class
+com\qxueyou\scc\school\model\SchReClassUser.class
+com\qxueyou\scc\school\model\QSchReClassUser.class
+com\qxueyou\scc\admin\classes\model\QClsSubjectChapter.class
+com\qxueyou\scc\admin\examroom\model\QExamRoom.class
+com\qxueyou\scc\school\model\SchEvaluateDetail.class
+com\qxueyou\scc\exam\model\ExamReExamPaper.class
+com\qxueyou\scc\exercise\model\QExerciseObjectImg.class
+com\qxueyou\scc\school\model\QSchChapter.class
+com\qxueyou\scc\user\model\UserRegistrationCustom.class
+com\qxueyou\scc\teach\subject\model\view\QMyChapterProgressV.class
+com\qxueyou\scc\base\model\ApiResult.class
+com\qxueyou\scc\teach\res\service\IResAudioService.class
+com\qxueyou\scc\exercise\service\impl\node\Option.class
+com\qxueyou\scc\base\dao\BaseDAO$13.class
+com\qxueyou\scc\media\model\MediaVideoTrans.class
+com\qxueyou\scc\school\model\QSchSpreadFootprint.class
+com\qxueyou\scc\school\model\QSchHandoutRecord.class
+com\qxueyou\scc\org\model\QOrgTeacher.class
+com\qxueyou\scc\exercise\model\ExerciseGroupShareInfo.class
+com\qxueyou\scc\school\model\QSchRank.class
+com\qxueyou\scc\sys\model\QSysPrivilege.class
+com\qxueyou\scc\base\service\impl\LicenseChecker.class
+com\qxueyou\scc\exercise\model\ExerciseSubmitAnswerData.class
+com\qxueyou\scc\exercise\service\IExerciseCorrectionService.class
+com\qxueyou\scc\admin\score\model\view\QHomeworkScoreV.class
+com\qxueyou\scc\org\model\QOrgSalesman.class
+com\qxueyou\scc\base\util\DateTimeFormatUtils.class
+com\qxueyou\scc\school\dao\InteractDAO.class
+com\qxueyou\scc\school\model\EvaluateStuStudentV.class
+com\qxueyou\scc\base\util\ParamsUtils.class
+com\qxueyou\scc\org\model\OrgCharger.class
+com\qxueyou\scc\admin\progress\service\impl\lecture\LectureCommonProgressService.class
+com\qxueyou\scc\school\service\impl\StudyReportService.class
+com\qxueyou\scc\exercise\service\impl\ExerciseInfoService.class
+com\qxueyou\scc\exercise\model\ExerciseResultVId.class
+com\qxueyou\scc\admin\progress\service\impl\lecture\LectureDocProgressService.class
+com\qxueyou\scc\media\dao\MediaVideoDAO.class
+com\qxueyou\scc\school\model\StudentEvaCategory.class
+com\qxueyou\scc\stucontroller\StuExamController.class
+com\qxueyou\scc\operation\topic\service\impl\TopicService.class
+com\qxueyou\scc\sys\service\ITestService.class
+com\qxueyou\scc\org\model\OrgCourseData.class
+com\qxueyou\scc\teach\subject\model\view\QMyLectureV.class
+com\qxueyou\scc\school\service\impl\RankMsgDealService.class
+com\qxueyou\scc\base\model\FilePathConstants.class
+com\qxueyou\scc\school\model\SchEvaluateQuota.class
+com\qxueyou\scc\exam\model\ExamItemV.class
+com\qxueyou\scc\school\service\impl\DocdealMsgDealService.class
+com\qxueyou\scc\teach\res\model\ResItemDoc.class
+com\qxueyou\scc\sms\model\SmsContants.class
+com\qxueyou\scc\base\model\BaseVO.class
+com\qxueyou\scc\exercise\model\QExerciseItemOption.class
+com\qxueyou\scc\org\model\QVOrgCourseMarket.class
+com\qxueyou\scc\exercise\service\IExerciseGroupService.class
+com\qxueyou\scc\exam\model\ExamPaperSectionInfo.class
+com\qxueyou\scc\exam\model\QExamPaperSectionInfo.class
+com\qxueyou\scc\base\util\docConverterUtil.class
+com\qxueyou\scc\admin\examroom\service\IExamRoomService.class
+com\qxueyou\scc\org\model\QOrganization.class
+com\qxueyou\scc\user\service\impl\UserRoleService.class
+com\qxueyou\scc\teach\subject\model\view\QOpenSubjectV.class
+com\qxueyou\scc\admin\score\service\IScoreService.class
+com\qxueyou\scc\school\model\QSchEvaluateTemplate.class
+com\qxueyou\scc\school\model\ExportSchSignItem.class
+com\qxueyou\scc\exercise\model\QExerciseFaultHis.class
+com\qxueyou\scc\school\model\QHandoutConverTask.class
+com\qxueyou\scc\courseware\service\IOrgCourseService.class
+com\qxueyou\scc\base\util\WordExportUtils.class
+com\qxueyou\scc\school\service\impl\SchoolDayService.class
+com\qxueyou\scc\user\model\QUserRole.class
+com\qxueyou\scc\school\service\IScoreChangeService.class
+com\qxueyou\scc\controller\EvaluateController.class
+com\qxueyou\scc\base\util\Base64Utils.class
+com\qxueyou\scc\base\util\TraceUtils.class
+com\qxueyou\scc\school\model\HandoutAnswerResult.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveReClass.class
+com\qxueyou\scc\org\model\Organization.class
+com\qxueyou\scc\base\util\SpringUtil.class
+com\qxueyou\scc\school\service\impl\HandoutService.class
+com\qxueyou\scc\admin\progress\service\IProgressService.class
+com\qxueyou\scc\sys\action\LoginController.class
+com\qxueyou\scc\user\model\UserSign.class
+com\qxueyou\scc\operation\comment\mode\QCommentObject.class
+com\qxueyou\scc\org\model\QOrgCourse.class
+com\qxueyou\scc\exercise\dao\ExerciseDAO$2.class
+com\qxueyou\scc\school\model\SchSignItem.class
+com\qxueyou\scc\org\service\impl\OrgClassTeacherService.class
+com\qxueyou\scc\user\service\impl\UserRegistrationService.class
+com\qxueyou\scc\school\service\INoteService.class
+com\qxueyou\scc\exercise\model\ExerciseFavoriteBook.class
+com\qxueyou\scc\base\model\ExcelExportParam.class
+com\qxueyou\scc\exercise\service\impl\node\Item.class
+com\qxueyou\scc\org\model\QOrgCharger.class
+com\qxueyou\scc\school\model\SchEvaluateCategory.class
+com\qxueyou\scc\exam\service\IExamBatchService.class
+com\qxueyou\scc\sys\service\IOssService.class
+com\qxueyou\scc\base\model\FlowPrice.class
+com\qxueyou\scc\sys\model\SysConfigFile.class
+com\qxueyou\scc\teach\subject\model\view\LectureDocV.class
+com\qxueyou\scc\sys\model\QSysButton.class
+com\qxueyou\scc\media\model\VideoLiveChatroom.class
+com\qxueyou\scc\school\model\SchClassCircleMsg.class
+com\qxueyou\scc\admin\score\model\QScore.class
+com\qxueyou\scc\exercise\model\QExerciseOptionStatistics.class
+com\qxueyou\scc\exercise\service\IExercisePyService.class
+com\qxueyou\scc\base\dao\BaseDAO$1.class
+com\qxueyou\scc\msg\model\MsgFriend.class
+com\qxueyou\scc\exercise\model\ExerciseFavoriteHis.class
+com\qxueyou\scc\msg\model\QMsgInfo.class
+com\qxueyou\scc\school\model\SchRankHis.class
+com\qxueyou\scc\exercise\model\QExerciseExamReClass.class
+com\qxueyou\scc\sys\model\SysLog.class
+com\qxueyou\scc\base\util\MyJsCssVersionUtils.class
+com\qxueyou\scc\exercise\model\ExerciseCompleteInfo.class
+com\qxueyou\scc\school\model\SchEvaluate.class
+com\qxueyou\scc\exercise\model\ExerciseFaultStatistics.class
+com\qxueyou\scc\school\model\SchHandoutRecord.class
+com\qxueyou\scc\school\service\impl\RankService.class
+com\qxueyou\scc\media\model\QMediaVideoReCourse.class
+com\qxueyou\scc\admin\progress\service\impl\item\SubjectProgressService.class
+com\qxueyou\scc\school\model\QSchEvaluateQuota.class
+com\qxueyou\scc\operation\comment\mode\CommentImg.class
+com\qxueyou\scc\base\handler\QXueyouExceptionHandler.class
+com\qxueyou\scc\base\util\QFileUtils.class
+com\qxueyou\scc\controller\ClassController.class
+com\qxueyou\scc\org\model\OrgBank.class
+com\qxueyou\scc\exercise\model\QExerciseCompleteInfo.class
+com\qxueyou\scc\school\model\QSchArticleReCourse.class
+com\qxueyou\scc\courseware\service\impl\CourceCategoryAppService.class
+com\qxueyou\scc\exam\model\QExamItemVId.class
+com\qxueyou\scc\admin\course\model\QCourseScheduleReCls.class
+com\qxueyou\scc\base\util\PageUtils.class
+com\qxueyou\scc\school\model\QSchScheduleAddress.class
+com\qxueyou\scc\exercise\model\ExerciseFault.class
+com\qxueyou\scc\msg\service\IChatroomMsgService.class
+com\qxueyou\scc\teach\subject\model\QSubject.class
+com\qxueyou\scc\base\service\IBaseJpaRepository.class
+com\qxueyou\scc\exercise\model\QExerciseItem.class
+com\qxueyou\scc\user\util\ExcelReader.class
+com\qxueyou\scc\org\model\QOrgStudent.class
+com\qxueyou\scc\org\model\OrgClassVideoPrivilege.class
+com\qxueyou\scc\school\service\IDocdealMsgSenderService.class
+com\qxueyou\scc\teach\subject\model\view\QLectureAudioV.class
+com\qxueyou\scc\exam\service\impl\ExamBatchService.class
+com\qxueyou\scc\school\model\SignResult.class
+com\qxueyou\scc\base\util\UUIDUtils.class
+com\qxueyou\scc\exercise\model\QExerciseItemAnalisi.class
+com\qxueyou\scc\school\service\impl\SchoolTermService.class
+com\qxueyou\scc\teach\student\service\impl\StudentService.class
+com\qxueyou\scc\exercise\model\ExerciseSubmitAnswerDataList.class
+com\qxueyou\scc\school\model\LessionSignStatistics.class
+com\qxueyou\scc\base\model\ResultJson.class
+com\qxueyou\scc\school\service\impl\DocdealMsgSenderService.class
+com\qxueyou\scc\school\model\SchYearReClass.class
+com\qxueyou\scc\org\model\OrgBankAccountRe.class
+com\qxueyou\scc\teach\res\model\ResItemExercise.class
+com\qxueyou\scc\stucontroller\StuResController.class
+com\qxueyou\scc\user\model\QUserStudent.class
+com\qxueyou\scc\msg\model\MsgUser.class
+com\qxueyou\scc\school\model\SchNote.class
+com\qxueyou\scc\operation\comment\mode\QSnsPraiseToMe.class
+com\qxueyou\scc\org\service\ITeacherService.class
+com\qxueyou\scc\media\model\QSchLiveReVideo.class
+com\qxueyou\scc\school\model\SchSubjectReCourse.class
+com\qxueyou\scc\sys\service\ISysLogService.class
+com\qxueyou\scc\exercise\service\impl\ExerciseGroupAccuracyDealService.class
+com\qxueyou\scc\admin\classroom\model\ClassRoom.class
+com\qxueyou\scc\school\model\viewvo\SchStudentScheduleViewVO.class
+com\qxueyou\scc\base\model\WbCacheKey.class
+com\qxueyou\scc\exercise\model\QExerciseFaultStatistics.class
+com\qxueyou\scc\school\model\EvaluateStuStudentVId.class
+com\qxueyou\scc\media\service\impl\MediaVideoService.class
+com\qxueyou\scc\sys\service\impl\SysAttachmentService.class
+com\qxueyou\scc\school\action\ArticleController.class
+com\qxueyou\scc\teach\res\service\IResService.class
+com\qxueyou\scc\teach\res\service\impl\ResService.class
+com\qxueyou\scc\school\model\SchArticleReCourse.class
+com\qxueyou\scc\school\service\ISignService.class
+com\qxueyou\scc\sys\model\SysAttachment.class
+com\qxueyou\scc\school\model\SchRank.class
+com\qxueyou\scc\operation\comment\mode\QSnsCommentToMe.class
+com\qxueyou\scc\msg\service\IMsgInfoService.class
+com\qxueyou\scc\school\model\SchClassSubject.class
+com\qxueyou\scc\exercise\action\ExerciseCorrectionController.class
+com\qxueyou\scc\school\service\impl\InteactService.class
+com\qxueyou\scc\admin\progress\service\impl\lecture\LectureAudioProgressService.class
+com\qxueyou\scc\school\model\QSchSubjectExtend.class
+com\qxueyou\scc\school\service\ISchoolYearService.class
+com\qxueyou\scc\school\model\QSchArticleStatistic.class
+com\qxueyou\scc\exercise\model\ExerciseAnswerData.class
+com\qxueyou\scc\msg\model\QMsgGroup.class
+com\qxueyou\scc\user\model\QUserAuthorizeTrace.class
+com\qxueyou\scc\exercise\service\impl\ExerciseDeepAnaService.class
+com\qxueyou\scc\user\model\UserAuthorizeTrace.class
+com\qxueyou\scc\org\model\OrganizationExtend.class
+com\qxueyou\scc\school\model\SchChapter.class
+com\qxueyou\scc\operation\comment\mode\QSnsMyComment.class
+com\qxueyou\scc\school\service\ICourseWareService.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLive.class
+com\qxueyou\scc\exercise\model\ExerciseCorrection.class
+com\qxueyou\scc\base\util\RequestClientUtils.class
+com\qxueyou\scc\exercise\model\ExerciseItemData.class
+com\qxueyou\scc\web\OpenSessionFilter.class
+com\qxueyou\scc\base\model\FileMeta.class
+com\qxueyou\scc\exercise\model\ExerciseFaultHis.class
+com\qxueyou\scc\school\helper\judge\CommonJudgeStrategy.class
+com\qxueyou\scc\sys\model\QSysCondition.class
+com\qxueyou\scc\school\model\SchSignOrder.class
+com\qxueyou\scc\teach\subject\service\impl\SubjectService.class
+com\qxueyou\scc\exercise\model\QExerciseResultV.class
+com\qxueyou\scc\sys\model\QSysDictionary.class
+com\qxueyou\scc\exercise\service\IExerciseExtendService.class
+com\qxueyou\scc\org\model\OrgClassBanner.class
+com\qxueyou\scc\media\model\SchLiveReVideo.class
+com\qxueyou\scc\base\dao\BaseDAO$17.class
+com\qxueyou\scc\web\WebServletTest.class
+com\qxueyou\scc\user\service\IUserRegistrationService.class
+com\qxueyou\scc\msg\model\Message.class
+com\qxueyou\scc\org\model\OrgCourseCateData.class
+com\qxueyou\scc\user\service\impl\UserSignService.class
+com\qxueyou\scc\controller\MsgInfoController.class
+com\qxueyou\scc\sys\msg\ICustomerMsgProducerService.class
+com\qxueyou\scc\org\model\OrgSalesman.class
+com\qxueyou\scc\admin\course\service\ICourseScheduleService.class
+com\qxueyou\scc\base\util\QrCodeUtils.class
+com\qxueyou\scc\admin\classes\model\QClsClassReSubject.class
+com\qxueyou\scc\notice\model\Notice.class
+com\qxueyou\scc\sys\service\impl\PriviledgeService.class
+com\qxueyou\scc\exercise\service\impl\ParseResult.class
+com\qxueyou\scc\admin\classroom\service\impl\ClassRoomService.class
+com\qxueyou\scc\school\model\SchImg.class
+com\qxueyou\scc\media\model\VideoRecordDTO.class
+com\qxueyou\scc\teach\res\model\QResItemVideo.class
+com\qxueyou\scc\school\model\QSchInteract.class
+com\qxueyou\scc\org\model\DiscoverBanner.class
+com\qxueyou\scc\base\dao\BaseDAO$18.class
+com\qxueyou\scc\org\model\OrgClassReferFee.class
+com\qxueyou\scc\exam\action\ExamPaperSectionController.class
+com\qxueyou\scc\exam\model\QExamBatchClassRe.class
+com\qxueyou\scc\exercise\service\impl\ExerciseSysMsgDealService.class
+com\qxueyou\scc\config\RedisCacheConfig.class
+com\qxueyou\scc\exam\model\QExamItemV.class
+com\qxueyou\scc\exercise\model\ExerciseGroupExtend.class
+com\qxueyou\scc\exercise\model\ExerciseAnalisisResult.class
+com\qxueyou\scc\media\model\QVideoConverTask.class
+com\qxueyou\scc\controller\VideoLiveController.class
+com\qxueyou\scc\school\model\viewvo\SchNoteViewVO.class
+com\qxueyou\scc\school\dao\HandoutDAO.class
+com\qxueyou\scc\school\service\impl\SchoolYearService.class
+com\qxueyou\scc\sys\msg\ICustomerMsgConsumerService.class
+com\qxueyou\scc\media\dao\MediaVideoDAO$1.class
+com\qxueyou\scc\org\model\OrgText.class
+com\qxueyou\scc\teach\subject\model\view\MySubjectV.class
+com\qxueyou\scc\admin\progress\service\impl\item\ChapterProgressService.class
+com\qxueyou\scc\media\model\MediaVideoReCourse.class
+com\qxueyou\scc\org\model\QOrgBankAccount.class
+com\qxueyou\scc\teach\res\service\impl\resitem\ResItemArticleService.class
+com\qxueyou\scc\user\service\IUserOperateService.class
+com\qxueyou\scc\sys\model\SysPrivilege.class
+com\qxueyou\scc\exercise\model\ExerciseGroupItemRe.class
+com\qxueyou\scc\school\model\viewvo\SchYearViewVO.class
+com\qxueyou\scc\sys\model\SysFileUploadTrace.class
+com\qxueyou\scc\exercise\model\ExerciseGroup.class
+com\qxueyou\scc\admin\examroom\model\ExamRoom.class
+com\qxueyou\scc\exam\model\QExamBatchInfo.class
+com\qxueyou\scc\school\model\QSchEvaluate.class
+com\qxueyou\scc\exercise\model\ExciseAnswerResult.class
+com\qxueyou\scc\operation\comment\mode\SnsMyComment.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveOrder.class
+com\qxueyou\scc\admin\score\model\view\HomeworkScoreVId.class
+com\qxueyou\scc\exercise\model\ExerciseFavoriteRecord.class
+com\qxueyou\scc\org\model\QOrgCollegeCourse.class
+com\qxueyou\scc\school\model\SchSchoolYear.class
+com\qxueyou\scc\org\model\ExternelTeacherInfo.class
+com\qxueyou\scc\school\model\SchArticleStatistic.class
+com\qxueyou\scc\school\action\StudentScoreController.class
+com\qxueyou\scc\school\model\SchReLessonLiveVideo.class
+com\qxueyou\scc\operation\comment\mode\QCommentImg.class
+com\qxueyou\scc\school\service\impl\ArticleService.class
+com\qxueyou\scc\exam\service\impl\ExamPaperService.class
+com\qxueyou\scc\exercise\service\IExerciseCompleteService.class
+com\qxueyou\scc\media\model\VideoConverTask.class
+com\qxueyou\scc\school\service\ISchoolTermService.class
+com\qxueyou\scc\school\model\SchEvaluateTemplate.class
+com\qxueyou\scc\exercise\model\ExerciseExtendRecordData.class
+com\qxueyou\scc\school\service\impl\NoteService.class
+com\qxueyou\scc\exercise\model\QExerciseFaultBook.class
+com\qxueyou\scc\base\handler\QCacheRedis.class
+com\qxueyou\scc\school\model\QSchRankHis.class
+com\qxueyou\scc\school\dao\RankDAO.class
+com\qxueyou\scc\school\model\SchSignCode.class
+com\qxueyou\scc\base\model\Pager.class
+com\qxueyou\scc\base\util\PhoneNOUtils.class
+com\qxueyou\scc\controller\UserController.class
+com\qxueyou\scc\sys\model\SysConfig.class
+com\qxueyou\scc\teach\student\model\StuStudent.class
+com\qxueyou\scc\media\model\MediaVideoStatistic.class
+com\qxueyou\scc\exercise\model\QExerciseRecord.class
+com\qxueyou\scc\school\model\HandoutConverTask.class
+com\qxueyou\scc\teach\res\service\IFileService.class
+com\qxueyou\scc\school\model\QSchClassCircle.class
+com\qxueyou\scc\org\model\QOrgText.class
+com\qxueyou\scc\school\model\QEvaluateStuStudentVId.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveClipVer.class
+com\qxueyou\scc\school\model\SchSpreadFootprint.class
+com\qxueyou\scc\exercise\action\ExerciseExtendController.class
+com\qxueyou\scc\org\model\VOrgCourseMarket.class
+com\qxueyou\scc\school\model\SignScreenResult.class
+com\qxueyou\scc\base\util\ImageUtils.class
+com\qxueyou\scc\base\service\impl\CommonAppService.class
+com\qxueyou\scc\org\model\QOrgClassReUser.class
+com\qxueyou\scc\exercise\service\impl\ExerciseExtendService.class
+com\qxueyou\scc\base\service\ICommonService.class
+com\qxueyou\scc\web\DruidViewServlet.class
+com\qxueyou\scc\operation\topic\model\QTopicClassRe.class
+com\qxueyou\scc\sys\msg\CustomerMsgProducerService.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveClip.class
+com\qxueyou\scc\teach\res\service\impl\resitem\ResItemAudioService.class
+com\qxueyou\scc\exercise\model\QExerciseDeepAnalysis.class
+com\qxueyou\scc\controller\SubjectController.class
+com\qxueyou\scc\admin\course\service\impl\CourseScheduleService.class
+com\qxueyou\scc\exercise\model\QExerciseGroupExtend.class
+com\qxueyou\scc\sys\model\QSysAttachment.class
+com\qxueyou\scc\exercise\model\QExerciseCorrectionImg.class
+com\qxueyou\scc\school\model\SchArticle.class
+com\qxueyou\scc\base\handler\QCacheMonitor$1.class
+com\qxueyou\scc\exercise\model\QExerciseFavoriteRecord.class
+com\qxueyou\scc\exercise\service\IExerciseInfoService.class
+com\qxueyou\scc\operation\comment\mode\QComment.class
+com\qxueyou\scc\stucontroller\StuExerciseController.class
+com\qxueyou\scc\admin\progress\service\impl\item\ClassProgressService.class
+com\qxueyou\scc\base\util\QBeanUtils.class
+com\qxueyou\scc\teach\subject\model\QSubjectChapter.class
+com\qxueyou\scc\exam\service\IExamService.class
+com\qxueyou\scc\admin\progress\model\Progress.class
+com\qxueyou\scc\exercise\service\impl\parser\ItemAnalysisParser.class
+com\qxueyou\scc\org\model\OrgBanner.class
+com\qxueyou\scc\school\model\SchClassCourseware.class
+com\qxueyou\scc\base\model\MsgTypeConstants.class
+com\qxueyou\scc\exercise\model\ExerciseExtendData.class
+com\qxueyou\scc\teach\subject\model\view\LectureVideoV.class
+com\qxueyou\scc\base\service\impl\LicenseChecker$1.class
+com\qxueyou\scc\admin\progress\dao\ProgressDAO.class
+com\qxueyou\scc\exercise\service\impl\ExerciseGroupService.class
+com\qxueyou\scc\base\handler\PerformanceMonitor.class
+com\qxueyou\scc\evaluate\service\IEvaluateService.class
+com\qxueyou\scc\config\AliOnsConfig.class
+com\qxueyou\scc\sys\model\QSysLog.class
+com\qxueyou\scc\exercise\model\ExerciseOptionStatistics.class
+com\qxueyou\scc\stucontroller\StuNoticeController.class
+com\qxueyou\scc\teach\live\service\impl\MediaVideoLivePlayBackService$2.class
+com\qxueyou\scc\org\model\QOrgMarketPrivilege.class
+com\qxueyou\scc\exercise\model\QExerciseExamReGroup.class
+com\qxueyou\scc\exercise\service\impl\parser\ItemTypeParser.class
+com\qxueyou\scc\school\model\SchHandoutStatistic.class
+com\qxueyou\scc\org\model\QOrgClassReferFee.class
+com\qxueyou\scc\school\service\impl\SpreadFootprintService.class
+com\qxueyou\scc\config\DruidDataSourceConfig.class
+com\qxueyou\scc\media\model\MediaVideoViewVO.class
+com\qxueyou\scc\statistic\model\SchFlowStatisticDetail.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveClipVer.class
+com\qxueyou\scc\base\util\CommonUtils.class
+com\qxueyou\scc\admin\course\model\CourseScheduleDetail.class
+com\qxueyou\scc\school\dao\HandoutDAO$1.class
+com\qxueyou\scc\exercise\dao\ExerciseDAO$1.class
+com\qxueyou\scc\exercise\model\QExerciseItemAnswerU.class
+com\qxueyou\scc\user\model\QUserTeacher.class
+com\qxueyou\scc\org\model\OrgClass.class
+com\qxueyou\scc\org\model\QOrganizationUnion.class
+com\qxueyou\scc\admin\progress\model\view\QSubjectProgressTreeV.class
+com\qxueyou\scc\base\dao\CommonDAO.class
+com\qxueyou\scc\base\handler\QCacheCleaner.class
+com\qxueyou\scc\exam\model\ExamPaperInfo.class
+com\qxueyou\scc\school\model\QSchCourseware.class
+com\qxueyou\scc\exam\dao\ExamPaperSectionDAO.class
+com\qxueyou\scc\org\model\VOrgCourseMarketQuery.class
+com\qxueyou\scc\teach\subject\model\view\QLectureVideoV.class
+com\qxueyou\scc\teach\live\utils\FfmpegVideoInfo.class
+com\qxueyou\scc\base\util\StringMapUtils.class
+com\qxueyou\scc\base\model\ITrace.class
+com\qxueyou\scc\exercise\model\QExerciseItemScore.class
+com\qxueyou\scc\sys\model\CacheParamters.class
+com\qxueyou\scc\media\model\QVideoLiveChatroom.class
+com\qxueyou\scc\exercise\model\ExerciseItemStatistics.class
+com\qxueyou\scc\school\model\SignStatisResult.class
+com\qxueyou\scc\admin\classes\model\QClsClass.class
+com\qxueyou\scc\media\model\MediaVideoRecord.class
+com\qxueyou\scc\exercise\service\impl\ExerciseCorrectionService.class
+com\qxueyou\scc\base\util\UserCodeUtils.class
+com\qxueyou\scc\exercise\model\QExerciseChapter.class
+com\qxueyou\scc\base\model\UserInfoWrapper.class
+com\qxueyou\scc\user\service\IUserSignService.class
+com\qxueyou\scc\school\dao\EvaluateDAO.class
+com\qxueyou\scc\base\handler\QLogMonitor.class
+com\qxueyou\scc\base\util\MD5Utils.class
+com\qxueyou\scc\school\model\QSchSignCode.class
+com\qxueyou\scc\media\model\QMediaVideoCache.class
+com\qxueyou\scc\org\model\QOrgBank.class
+com\qxueyou\scc\org\model\OrgCourseCategory.class
+com\qxueyou\scc\base\dao\AbstractRedisTemplate.class
+com\qxueyou\scc\school\service\ISpreadFootprintService.class
+com\qxueyou\scc\controller\IndexController.class
+com\qxueyou\scc\exercise\model\ExerciseExamItemType.class
+com\qxueyou\scc\exercise\model\ExerciseItemOption.class
+com\qxueyou\scc\courseware\service\impl\CourseService.class
+com\qxueyou\scc\teach\live\model\MediaVideoLive.class
+com\qxueyou\scc\base\dao\BaseDAO.class
+com\qxueyou\scc\sys\service\IOssVideoService.class
+com\qxueyou\scc\org\service\IOrgClassTeacherService.class
+com\qxueyou\scc\base\handler\QLogMonitor$1.class
+com\qxueyou\scc\exam\action\ExamController$1.class
+com\qxueyou\scc\admin\score\model\view\ExamScoreV.class
+com\qxueyou\scc\config\Swagger2.class
+com\qxueyou\scc\config\MySqlDataSourceConfig.class
+com\qxueyou\scc\school\model\QSchReLessonVideo.class
+com\qxueyou\scc\teach\res\model\QResItemDoc.class
+com\qxueyou\scc\base\util\ClientUtils.class
+com\qxueyou\scc\user\model\QUser.class
+com\qxueyou\scc\school\model\SchSchoolDay.class
+com\qxueyou\scc\exam\service\impl\ExamService.class
+com\qxueyou\scc\admin\progress\model\view\SubjectProgressTreeVId.class
+com\qxueyou\scc\exercise\service\IExerciseService.class
+com\qxueyou\scc\school\model\SchInteract.class
+com\qxueyou\scc\sys\action\ImgController.class
+com\qxueyou\scc\teach\live\utils\FfmpegMediaHelper.class
+com\qxueyou\scc\school\model\QSchQRUrl.class
+com\qxueyou\scc\school\model\SchSignStatistics.class
+com\qxueyou\scc\teach\res\model\QResLib.class
+com\qxueyou\scc\sys\service\IAuthorizeService.class
+com\qxueyou\scc\admin\score\dao\ExamScoreVDAO.class
+com\qxueyou\scc\org\model\OrgPrivilege.class
+com\qxueyou\scc\sys\model\MsgTypeConstants.class
+com\qxueyou\scc\school\service\IClassCardService.class
+com\qxueyou\scc\org\model\OrgReCollegePublic.class
+com\qxueyou\scc\exercise\model\ExerciseObjectImg.class
+com\qxueyou\scc\exercise\action\ExerciseInfoController.class
+com\qxueyou\scc\school\service\impl\StudentsScoreService.class
+com\qxueyou\scc\school\model\QSchHandoutPage.class
+com\qxueyou\scc\teach\res\model\ResItemArticle.class
+com\qxueyou\scc\base\handler\QCacheReader.class
+com\qxueyou\scc\base\service\IDictionaryService.class
+com\qxueyou\scc\teach\live\model\MediaVideoLiveRecord.class
+com\qxueyou\scc\teach\res\model\QResFile.class
+com\qxueyou\scc\teach\live\model\QMediaVideoLiveReClass.class
+com\qxueyou\scc\exercise\model\ExerciseResultV.class
+com\qxueyou\scc\school\model\SchInteractResult.class
+com\qxueyou\scc\evaluate\dao\EvaluateRepository.class
+com\qxueyou\scc\user\model\QUserRegistration.class
+com\qxueyou\scc\base\model\TransactException.class
+com\qxueyou\scc\school\service\impl\RankMsgDealService$1.class
+com\qxueyou\scc\teach\subject\model\view\LectureAudioV.class
+com\qxueyou\scc\school\model\QSchImg.class
+com\qxueyou\scc\teach\res\model\QResDir.class
+com\qxueyou\scc\exercise\model\QExerciseGroup.class
+com\qxueyou\scc\media\model\VideoLiveViewVO.class
+com\qxueyou\scc\controller\MsgChatroomMsgCtrl.class
+com\qxueyou\scc\teach\subject\model\view\QMySubjectV.class
+com\qxueyou\scc\teach\live\service\impl\MediaLiveService.class
+com\qxueyou\scc\school\model\QSchHandout.class
+com\qxueyou\scc\school\model\HandoutAnswerData.class
+com\qxueyou\scc\school\model\SchClassCardTemplet.class
+com\qxueyou\scc\msg\model\QMsgFriend.class
+com\qxueyou\scc\school\model\QLessionSignStatistics.class
+com\qxueyou\scc\school\service\ISchoolSubjectService.class
+com\qxueyou\scc\school\model\QSchClassCard.class
+com\qxueyou\scc\school\model\SchVideoFile.class
+com\qxueyou\scc\user\service\impl\UserOperateService.class
+com\qxueyou\scc\org\model\OrgCourseJsonData.class
+com\qxueyou\scc\teach\res\model\ResItemAudio.class
+com\qxueyou\scc\exercise\model\QExerciseFavoriteHis.class
+com\qxueyou\scc\school\service\IInteractService.class
+com\qxueyou\scc\school\service\impl\ClassCircleService.class
+com\qxueyou\scc\media\model\MediaVideo.class
+com\qxueyou\scc\exercise\model\ExerciseOptionData.class
+com\qxueyou\scc\school\dao\SignDAO.class
+com\qxueyou\scc\exam\service\IExamPaperService.class
+com\qxueyou\scc\school\model\QSchArticle.class
+com\qxueyou\scc\school\model\QSchClassSchedule.class
+com\qxueyou\scc\exercise\model\ExerciseExamReClass.class
+com\qxueyou\scc\admin\progress\model\QSubjectLectureProgressDetail.class
+com\qxueyou\scc\sms\model\Sms.class
+com\qxueyou\scc\exercise\service\impl\parser\DocParser.class
+com\qxueyou\scc\admin\progress\service\impl\ProgressService.class
+com\qxueyou\scc\school\model\SchTermReDay.class
+com\qxueyou\scc\base\util\HttpClient.class
+com\qxueyou\scc\org\dao\OrgCourseDAO.class
+com\qxueyou\scc\user\model\ExportUserRegistration.class
+com\qxueyou\scc\evaluate\action\EvaluateTemplateController.class
+com\qxueyou\scc\base\service\impl\FileUploadService.class
+com\qxueyou\scc\exercise\action\ExerciseItemController.class
+com\qxueyou\scc\msg\model\QMsgUser.class
+com\qxueyou\scc\school\model\SchCourseware.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..647087f
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,951 @@
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\Res.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemAnalisiU.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\SubjectChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\util\StudyReportUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\dao\ClassDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassVisitor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemScore.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchReClassUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\student\model\StuStudent.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\HandoutConverTask.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchTerm.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLive.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResLib.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseCompleteInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCollegeCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseCorrection.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFavoriteHis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\ResController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchEvaluateCategory.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\resitem\ResItemDocService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassCircleMsg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchArticleReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysLog.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserOperate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\score\model\view\QExamScoreV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QVOrgCourseMarketQuery.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\notice\service\impl\NoticeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\CommentPraise.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSignStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\service\IScoreService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysConfigFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseDeepAnalysis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseExamItemType.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCourseJsonData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IStudyReportService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\impl\UserRegistrationService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\VideoInf.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\ClassCircleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\SccApplication.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\statistic\model\SchFlowStatisticDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QLectureAudioV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseExtendRecordData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgMarketPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseItemController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\topic\model\TopicInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IInteractService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassReTeacher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\action\StudentScoreController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\ISysConfigService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\Listener.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\model\view\ExamScoreVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\Constants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgAdmin.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\ParamsUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sms\model\QSmsConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\IResAudioService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QMyLectureV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\service\impl\CourceCategoryAppService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\StudyReportService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFaultRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QSnsMyPraise.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSubjectReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserReRoleUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassBanner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\service\impl\SubjectLectureService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExercisePyService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QSnsMyComment.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\notice\dao\NoticeDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseDeepAnaService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\action\ImgController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSignOrder.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\action\ExamPaperController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\MySubjectVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\course\model\QCourseScheduleDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchStudentScore.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchStudentAchievement.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\SysConfigService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgStringExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\WBONSProducer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResItemVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemSet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideoTrans.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrganizationExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgAppInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysCondition.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\parser\ItemAnalysisParser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysDictionary.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\RankMsgDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\dao\RankDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\IPrivilegeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IArticleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QDiscoverBanner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\OpenEntityManagerFilter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\dao\HandoutDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\Pager.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\IExamBatchService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\Node.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\IOrgClassService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseAnalisisResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\item\SubjectProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchReLessonVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchTermReDay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\IBaseJpaRepository.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\Subject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExciseExtendResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\service\IOrgCourseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\dao\MediaVideoDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\action\HandoutController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamPaperSectionInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\evaluate\dao\EvaluateRepository.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseCorrectionController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseCompleteController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserAuthorizeTrace.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseDataSubmitLog.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\service\impl\SubjectService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandoutRecordDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysAttachment.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\dao\HomeworkScoreVDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamBatchClassRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\impl\ExamService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgPhotoalbum.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgAppMenu.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseGroupExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResItemArticle.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\ClsLectureController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchYearReClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QMediaVideoStatistic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSchoolYear.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCategoryLevel.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\NoteService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\ExportUserScore.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\TeacherController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseExamReClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\course\model\QCourseSchedule.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandoutReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\helper\judge\CommonJudgeStrategy.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\MsgGroupUserRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassCircle.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\helper\IJudgeUpdateStrategy.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysFileUploadTrace.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseGroupExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\course\service\impl\CourseScheduleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\ONSExceptionLogService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\CoursewareController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\resitem\ResItemVideoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\StuExamController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchQRUrl.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\TeachEvaScoreData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchYearReOrg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchArticleStatistic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserTeacher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\OpenSessionFilter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\msg\model\QMsgFriend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QExternelTeacherInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\service\impl\OrgCourseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\dao\SubjectDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\model\view\SubjectProgressTreeVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFavoriteBook.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IStudentScoreService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserSign.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\student\service\impl\StudentService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamPaperInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassCourseware.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\User.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\viewvo\SchStudentScheduleViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\examroom\model\ExamRoom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\score\model\QScore.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SchoolYearService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\StuExerciseController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\PerformanceMonitor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\item\ChapterProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\lecture\LectureVideoProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\PriviledgeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveReplayReClip.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\MySqlDataSourceConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\service\impl\ChatroomMessageBean.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseCorrectionResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\impl\OrganizationService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\topic\action\StuTopicController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\SnsMyComment.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysButton.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QCacheRedis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QCacheCleaner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemScore.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\resitem\ResItemExerciseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFaultRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchRank.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\InterateAnswer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\topic\model\QTopicClassRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCategoryLevel.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFavoriteHis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\evaluate\action\EvaluateTemplateController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\IOssService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\NoticeController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSignStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseSubmitAnswerData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamResultV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\IExamPaperService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\StuSubjectController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysConfigFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideoRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchArticle.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchEvaluateCategory.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseGroupShareInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCollegeCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgStudent.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrganizationUnion.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\dao\ExamDaoImpl.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\ISysAttachmentService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamReExamPaper.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ILessonService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchArticle.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\Message.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserRegistration.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\dao\RegistrationDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\DruidViewServlet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\CoursewareService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassVideoPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseExtendService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\msg\ICustomerMsgConsumerService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysFileUploadTrace.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgText.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\service\IMediaVideoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassSubject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\LicenseChecker.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\SnsMyPraise.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgReCollegePublic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandout.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSchoolDay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\viewvo\SchWeekScheduleViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\WordProcessUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\course\model\CourseScheduleReCls.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseOptionData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\ITestService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseRecentRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchReClassUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseVerService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgBank.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\Organization.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\IUserRegistrationService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\ExportSchSignItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\service\impl\MediaLiveService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\model\ClsSubjectChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sms\model\SmsConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\Swagger2.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\CommentImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SchoolTermService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResLib.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgPhotoalbum.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\model\ClsClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\msg\CustomMsgConsumerService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCourseCategory.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassReUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QMyChapterProgressV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QMySubjectV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\ProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\FlowPrice.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\service\impl\ClassLectureService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\ExcelExportParam.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseResultV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\dao\SignDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgStudent.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassSchedule.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\UUIDUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchStudentSchedule.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\dao\CommonRedisTemplate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\impl\UserOperateService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserRole.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\topic\service\impl\TopicService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFavorite.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassCard.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\topic\model\TopicClassRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\VideoConverTask.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseExamReGroup.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\PaginationData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResItemAudio.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\SHA1.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\dao\ExamPaperSectionDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IScoreChangeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ISchoolSubjectService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\topic\model\QTopicInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseSysMsgDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QEvaluateStuStudentVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\WxTemplateMsg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\utils\FfmpegVideoInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\action\ExamController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\EvaluateStuStudentVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QVideoPlay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchLessonPeriod.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseGroupShareInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SchSignMsgDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchStudyReport.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandoutPageFavor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\service\ISubjectService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseDataSubmitLog.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\PageUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\QFileUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QVideoConverTask.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QLectureDocV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemOption.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SignScreenResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\evaluate\service\IEvaluateService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\IONSExceptionLogService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassUserCustom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\Parser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSignItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\impl\UserRoleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QMediaVideoRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamReExamPaper.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserRegistrationCustom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFavoriteRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\MatchAgainstFunction.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\action\ExamBatchController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseCompleteInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassVisitor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseExtendData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\score\model\view\QHomeworkScoreV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\FileController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemAnalisiU.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassReUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SignService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResDir.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\QueryDslOptionBuilder.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\MsgUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\BaseVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\LessonService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\msg\model\QMsgUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\service\impl\MediaVideoLivePlayBackService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\dao\EvaluateDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\model\ClsClassReSubject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QLog.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QVideoLiveChatroom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResItemArticle.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ParseResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchVideoFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\dao\ExamDao.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamItemV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemOption.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchScheduleAddress.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchCourseware.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExciseAnswerResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\dao\ReidsSharedPoolWrapper.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchStudentScore.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgAdmin.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemAnswer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ISchoolTermService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassQueryCm.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\SubjectController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\MyChapterProgressVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sms\model\SmsContants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgSalesman.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\impl\ExamBatchService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\RSAUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\lecture\LectureAudioProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandoutRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\action\ExamPaperSectionController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassBanner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\SubjectLecture.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\HandoutService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\CommonAppService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\model\ClsSubjectLecture.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\EvaluateController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgAppMenu.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemAnalisi.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassQueryCm.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\progress\model\view\QSubjectProgressTreeV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSubjectExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFaultHis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QOpenSubjectV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\DateTimeFormatUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QSnsPraiseToMe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\ILicenseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResDir.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\score\model\view\QExamScoreVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\LectureVideoV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSchoolDayItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrganizationExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSubjectReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerGroupResponseData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\model\view\SubjectProgressTreeV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\service\impl\ScoreService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\dao\ProgressDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\action\LoginController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\JgwOracleDialect.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveOrder.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\msg\model\QMsgGroup.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchArticleStatistic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamBatchInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\util\ExcelReader.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCourseCateData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysButton.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\HomePageController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\impl\UserService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\model\Score.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandout.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\VideoOssService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgTeacher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemAnswer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseExamReGroup.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\OssService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QRes.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\node\Option.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\VideoPlay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\Comment.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserRole.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassCourseware.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCharger.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\TraceUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\impl\UserSignService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\dao\OrgCourseDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\dao\MediaLiveDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchReLessonVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseCorrectionImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\ArticleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFaultHis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\ICommonService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\IUserSignService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFault.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFaultBook.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QEvaluateStuStudentV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\CommentObject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\dao\AbstractRedisTemplate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSignCode.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgAppInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\RankService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QLectureVideoV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\progress\model\QSubjectLectureProgressDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\student\service\IStudentService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseCorrectionService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QLogMonitor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\WebListenerTest.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchEvaluateQuota.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchEvaluate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandoutPageFavor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchReLessonLiveVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\SchLiveReVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\base\model\QWbCacheKey.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QCommentObject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandoutReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResItemVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\dao\InteractDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchStudentSchedule.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\MsgInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\StudentEvaCategory.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\StsCtrl.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseOptionStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\progress\model\view\QSubjectProgressTreeVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\impl\ExamPaperSectionService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\QSubject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchEvaluateDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\DocdealMsgSenderService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchScheduleAddress.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\EvaluateStuStudentV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideoViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\parser\ItemParser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseResultVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\StudentsScoreService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\ImageUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamResultV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveClipVer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\service\ILectureService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgBank.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveClip.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideoReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemSet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSignOrder.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QxueyouMysqlDialect.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QMyLectureVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\service\impl\ClsClassService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamItemVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseResultVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\SerializeUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveClip.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\viewvo\SchNoteViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\UserCodeUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\student\model\QStuStudent.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\AESUtil.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseCorrection.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\IExamPaperSectionService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classroom\model\ClassRoom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseAnswerData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\VOrgCourseMarketQuery.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysMenu.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\IResService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\MsgChatroomMsgCtrl.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamResultVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseItemStatisticsDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveReplay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResItemDoc.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysLog.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamResultVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\IDetailProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\examroom\service\IExamRoomService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\SnsPraiseToMe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\dao\UserRoleDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QCommentImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classroom\service\impl\ClassRoomService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\action\CourceController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgMarketPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFavorite.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\AliOnsConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\utils\DrawingUtil.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandoutRecordDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrganization.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserStudent.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgSalesman.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseParse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\resitem\ResItemArticleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\MyLectureV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\MsgTypeConstants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCollege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchTermReDay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFaultBook.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\ClassCardTemplet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseGroupItemRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\lecture\LectureCommonProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserRegistration.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\msg\ICustomerMsgProducerService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\VideoRecordDTO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\MsgFriend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\msg\model\QMsgInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideoCache.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\dao\BaseDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseRecentRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchEvaluateTemplate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\impl\ExamPaperService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\HandoutConvertPDFDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\LectureAudioV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\Result.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ISignService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\DruidDataSourceConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchQRUrl.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\msg\CustomerMsgProducerService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseGroupController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\action\ArticleController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\dao\ClassRepository.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\helper\IJudgeLimitStrategy.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\MsgTypeConstants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFaultStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemStatis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseVerService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\base\model\QUserCipher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseObjectImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseExtendController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\StatelessFilter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserTeacher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\AliOssConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSign.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\viewvo\SchYearViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\evaluate\service\IEvaluateTemplateService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseImportResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\MsgGroup.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\student\dao\StudentDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchEvaluateTemplate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseInfoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\ClassCardService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\node\Item.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassReferFee.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\LectureDocV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\CacheParamters.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgReCollegePublic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QXueyouExceptionHandler.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchCourseware.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamBatchInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classroom\service\IClassRoomService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\DictionaryService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sms\model\Sms.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\service\impl\MediaVideoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\SpringUtil.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IClassCardService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamBatchClassRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\comment\mode\SnsCommentToMe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\IResItemService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseCompleteService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\IDictionaryService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\teacher\dao\TeacherDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUserRegistrationCustom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\examroom\model\QExamRoom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveReClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\AuthorizeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemAnswerU.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\evaluate\service\impl\EvaluateTemplateService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\VOrgCourseMarket.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\QSubjectChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QMyChapterProgressVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\item\LectureProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassReTeacher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\DESUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassCardTemplet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseGroup.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemAnalisi.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysCondition.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SignStatisResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\FileUploadService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\FileMeta.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\MD5Utils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\StuNoticeController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItemAnswerData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\dao\CommonDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchReLessonPeriod.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamPaperSectionInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\FreeMarkerMd5MethodDefine.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\HandoutAnswerData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\lecture\LectureDocProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\LicenseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\CourseScheduleController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExercisePyService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamItemV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QMediaVideoCache.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\StuResController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\examroom\service\impl\ExamRoomService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\TestService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\ReisUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\HandoutAnswerResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\impl\OrgClassService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\utils\FfmpegMediaHelper.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchInteract.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandoutStatistic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseExamItemType.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\notice\model\Notice.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\course\model\CourseScheduleDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseObjectImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ISchoolYearService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseStatisticsDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\DateUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassReferFee.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFavoriteBook.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\ITeacherService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseAddItemParams.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseExtendService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\util\StudentEvaUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\ICacheService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\view\QMySubjectVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchRankHis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchReLessonLiveVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgBankAccount.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\course\model\CourseSchedule.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\dao\CommonRedisCache.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\IFileUploadService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseDeepAnaService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\util\ExerciseUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\DocdealMsgDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseCorrectionService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sms\utils\SmsUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\service\IChatroomMsgService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\service\IClassLectureService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseGroupItemRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseSubmitAnswerDataList.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\Param.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\RequestClientUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerItemResponseData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCourseData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\PhoneNOUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\WbCacheKey.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseInfoController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\ResponseResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseInfoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\FileService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QSchLiveReVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchRankHis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\MediaVideoStatistic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QMediaVideoReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\dao\ExamScoreVDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\service\IExamService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\service\ICourceCategoryService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSignCode.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\parser\ItemTypeParser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QVOrgCourseMarket.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\util\CourseMarketUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\IOrgClassTeacherService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ISpreadFootprintService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchEvaRecordRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgNewUserModel.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\IUserOperateService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\CommonUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSchoolDayItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\service\impl\CourseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\MyJsCssVersionUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\parser\DocParser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IHandoutService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseGroupService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\notice\service\INoticeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseDeepAnalysis.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\ITrace.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\dao\LessonDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchNote.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\IProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchEvaluate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\service\IMediaVideoLivePlayBackService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFavoriteRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassSchedule.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\msg\model\QMessage.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchRank.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\progress\model\QProgress.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\ClientUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\IAuthorizeService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\classes\model\QClsClassReSubject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\UserCipher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\RedisCacheBean.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResItemExercise.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveReClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExciseExtendReqListData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\IUserRoleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\WeixinContants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QHandoutConverTask.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchEvaluateDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\classes\model\QClsClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\statistic\model\QSchFlowStatisticDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\ExternelTeacherInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ISchoolDayService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sms\model\QSms.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\model\SubjectLectureProgressDetail.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\classes\service\IClassService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\course\model\QCourseScheduleReCls.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\msg\model\QMsgGroupUserRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SchoolSubjectService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\model\view\HomeworkScoreVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\IOrganizationService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassCircleMsg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\ICourseWareService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserStudent.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\DruidWebFilter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\MyLectureVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\impl\OrgTextService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\IOssVideoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\action\CourceCategoryController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\courseware\service\ICourseService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClassVideoPrivilege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\utils\FfmpegFileVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\service\IUserService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\notice\model\QNotice.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QComment.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResItemDoc.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\SccConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseFaultStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\AuthorizeFilter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\subject\model\QSubjectLecture.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\TestKafkaService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseGroup.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgText.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysDictionary.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\item\ClassProgressService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\classes\model\QClsSubjectLecture.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\ISysLogService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgClassUserCustom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\model\MsgChatroomMsg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveReplay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseFault.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysMenu.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SignResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassSubject.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSchoolDay.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseParseResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchEvaRecordRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\service\impl\MsgInfoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\ApiResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLive.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserAuthorizeTrace.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserReRoleUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\NumRandomUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\model\ResDatas.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassCircle.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\StringMapUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveReplayReClip.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\sys\model\QSysAttachment.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchTerm.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QCacheMonitor.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgBankAccountRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResItemAudio.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchYearReOrg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\model\MediaVideoLiveOrder.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\HttpClient.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\ClassController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\msg\service\IMsgInfoService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserOperate.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\model\Progress.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\shorturl\util\ShortUrlUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\ResService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\score\model\view\QHomeworkScoreVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\progress\service\impl\StudyProgressUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\user\model\QUser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandoutStatistic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSpreadFootprint.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\QrCodeUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QSnsCommentToMe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\InteactService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\UserInfoWrapper.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrganizationUnion.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\model\view\HomeworkScoreV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\ClassRoomController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\classroom\model\QClassRoom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgBankAccountRe.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\CacheConstants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCharger.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchArticleReCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\VideoIssueStopDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSign.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchYearReClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchClassCard.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseOptionStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSignItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgBankAccount.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\VideoLiveChatroom.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\FilePathConstants.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\XmlUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\ExerciseGroupAccuracyDealService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\IOrgTextService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveClipVer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IClassCircleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseExamReClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchSchoolYear.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchHandoutPage.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchClassCardTemplet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\DateTimeUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchInteract.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\MyChapterProgressV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\CollectionUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchLessonPeriod.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\score\model\view\ExamScoreV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchInteractResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResItemExercise.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\docConverterUtil.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\service\impl\OrgClassTeacherService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exam\model\QExamItemVId.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\ExamRoomController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\WordExportUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\timer\ExerciseTimer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchReLessonPeriod.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\SysAttachmentService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\operation\comment\mode\QCommentPraise.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\VideoLiveController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCourseCategory.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSubjectExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\UserSign.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\action\ExerciseDeepAnaController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\DiscoverBanner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QMediaVideo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchRankVer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\parser\ItemAnswerParser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\MsgInfoController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SpreadFootprintService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\ResultJson.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\IndexController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\OpenSubjectV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCollegePublic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchEvaluateQuota.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseCompleteService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchStudyReport.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\IExerciseGroupService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\IFileService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandoutRecord.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\teacher\service\impl\TeacherService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\dao\ExerciseDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QLessionSignStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgTeacher.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\INoteService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\stucontroller\StuLiveController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exam\model\ExamPaperInfo.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\evaluate\service\impl\EvaluateService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchVideoFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\JacobUtil.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\admin\classes\model\QClsSubjectChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\Base64Utils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\course\service\ICourseScheduleService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\service\impl\SysLogService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgStringExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchSpreadFootprint.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\InteractResultData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\Handler.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\dao\OrgDAO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\handler\QCacheReader.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\media\model\VideoLiveViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\service\impl\BaseRepository.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\sys\model\SysConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\controller\UserController.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\admin\teacher\service\ITeacherService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\subject\model\view\MySubjectV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchChapter.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchRankVer.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\SchStudentAchievement.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\viewvo\SchSemesterViewVO.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\live\model\QMediaVideoLiveExtend.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgBanner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\live\service\IMediaLiveService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgClass.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\config\RedisCacheConfig.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\operation\topic\service\ITopicService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgBanner.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\model\TransactException.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\teach\res\model\QResFile.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseResultV.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItemAnswerU.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchNote.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCollege.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\teach\res\service\impl\resitem\ResItemAudioService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\web\WebServletTest.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\ExcelExportUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\base\util\QBeanUtils.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\TeachEvaScoreResult.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\org\model\QOrgCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\parser\OptionParser.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IDocdealMsgSenderService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\exercise\model\QExerciseItem.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCourse.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QClassCardTemplet.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\node\Doc.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\service\impl\node\ItemType.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\org\model\OrgCollegePublic.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\IRankService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\media\model\QMediaVideoTrans.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\target\generated-sources\java\com\qxueyou\scc\school\model\QSchHandoutPage.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExciseExtendReqData.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\exercise\model\ExerciseCorrectionImg.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\service\impl\SchoolDayService.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\school\model\LessionSignStatistics.java
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\main\java\com\qxueyou\scc\user\model\ExportUserRegistration.java
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..d5229b5
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1 @@
+D:\交接\Q学友高校版\保安考试系统\gonga\gonga\scc\scc\src\test\java\com\qxueyou\scc\SccApplicationTests.java
diff --git a/target/scc-0.0.1-SNAPSHOT.jar.original b/target/scc-0.0.1-SNAPSHOT.jar.original
new file mode 100644
index 0000000..0aeb8d7
--- /dev/null
+++ b/target/scc-0.0.1-SNAPSHOT.jar.original
Binary files differ

--
Gitblit v1.8.0